001 /* 002 * Copyright 2002-2006 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 017 package org.springframework.binding.support; 018 019 import java.util.Map; 020 021 import org.springframework.binding.PropertyMetadataAccessStrategy; 022 import org.springframework.binding.form.FormModel; 023 import org.springframework.binding.form.FieldMetadata; 024 import org.springframework.binding.form.support.DefaultFormModel; 025 import org.springframework.richclient.test.SpringRichTestCase; 026 027 /** 028 * @author andy 029 * @since May 8, 2006 5:20:39 PM 030 */ 031 public class AnnotationAwareBeanPropertyAccessStrategyTests extends SpringRichTestCase { 032 public void testBeanWithNoAnnotations() { 033 final AnnotationAwareBeanPropertyAccessStrategy pas = new AnnotationAwareBeanPropertyAccessStrategy(new NoAnnotationTestBean()); 034 final PropertyMetadataAccessStrategy mas = pas.getMetadataAccessStrategy(); 035 036 Map<String,Object> um = mas.getAllUserMetadata("name"); 037 assertTrue(um == null || um.size() == 0); 038 um = mas.getAllUserMetadata("age"); 039 assertTrue(um == null || um.size() == 0); 040 um = mas.getAllUserMetadata("rank"); 041 assertTrue(um == null || um.size() == 0); 042 } 043 044 public void testBeanWithAnnotations() throws Exception { 045 final AnnotationAwareBeanPropertyAccessStrategy pas = new AnnotationAwareBeanPropertyAccessStrategy(new TestBean()); 046 final PropertyMetadataAccessStrategy mas = pas.getMetadataAccessStrategy(); 047 048 Map<String,Object> um = mas.getAllUserMetadata("name"); 049 assertNotNull(um); 050 assertEquals(2, um.size()); 051 assertEquals(Boolean.TRUE, um.get("org.springframework.binding.support.NoValueAnnotation")); 052 NoValueAnnotation nva = (NoValueAnnotation)um.get("@" + NoValueAnnotation.class.getName()); 053 assertNotNull(nva); 054 055 um = mas.getAllUserMetadata("age"); 056 assertNotNull(um); 057 assertEquals(4, um.size()); 058 assertEquals(Boolean.TRUE, um.get("org.springframework.binding.support.NoValueAnnotation")); 059 assertEquals("The Age Method", um.get("org.springframework.binding.support.SingleValueAnnotation")); 060 nva = (NoValueAnnotation)um.get("@" + NoValueAnnotation.class.getName()); 061 assertNotNull(nva); 062 SingleValueAnnotation sva = (SingleValueAnnotation)um.get("@" + SingleValueAnnotation.class.getName()); 063 assertNotNull(sva); 064 assertEquals("The Age Method", sva.value()); 065 066 um = mas.getAllUserMetadata("rank"); 067 assertNotNull(um); 068 assertEquals(9, um.size()); 069 assertEquals(Boolean.TRUE, um.get("org.springframework.binding.support.NoValueAnnotation")); 070 assertEquals("The Rank Method", um.get("org.springframework.binding.support.SingleValueAnnotation")); 071 assertEquals(Boolean.TRUE, um.get("org.springframework.binding.support.MultiValueAnnotation")); 072 assertEquals("First Test Name", um.get("org.springframework.binding.support.MultiValueAnnotation.name")); 073 assertEquals(24.5, um.get("org.springframework.binding.support.MultiValueAnnotation.age")); 074 assertEquals(10, um.get("org.springframework.binding.support.MultiValueAnnotation.rank")); 075 nva = (NoValueAnnotation)um.get("@" + NoValueAnnotation.class.getName()); 076 assertNotNull(nva); 077 sva = (SingleValueAnnotation)um.get("@" + SingleValueAnnotation.class.getName()); 078 assertNotNull(sva); 079 assertEquals("The Rank Method", sva.value()); 080 MultiValueAnnotation mva = (MultiValueAnnotation)um.get("@" + MultiValueAnnotation.class.getName()); 081 assertNotNull(mva); 082 assertEquals("First Test Name", mva.name()); 083 assertEquals(24.5, mva.age()); 084 assertEquals(10, mva.rank()); 085 086 um = mas.getAllUserMetadata("description"); 087 assertTrue(um == null || um.size() == 0); 088 } 089 090 public void testInFormModel() { 091 final AnnotationAwareBeanPropertyAccessStrategy pas = new AnnotationAwareBeanPropertyAccessStrategy(new TestBean()); 092 final FormModel fm = new DefaultFormModel(pas); 093 094 FieldMetadata pm = fm.getFieldMetadata("name"); 095 assertNotNull(pm); 096 assertEquals(Boolean.TRUE, pm.getUserMetadata("org.springframework.binding.support.NoValueAnnotation")); 097 NoValueAnnotation nva = (NoValueAnnotation)pm.getUserMetadata("@" + NoValueAnnotation.class.getName()); 098 assertNotNull(nva); 099 assertEquals(2, pm.getAllUserMetadata().size()); 100 101 pm = fm.getFieldMetadata("age"); 102 assertNotNull(pm); 103 assertEquals(Boolean.TRUE, pm.getUserMetadata("org.springframework.binding.support.NoValueAnnotation")); 104 assertEquals("The Age Method", pm.getUserMetadata("org.springframework.binding.support.SingleValueAnnotation")); 105 nva = (NoValueAnnotation)pm.getUserMetadata("@" + NoValueAnnotation.class.getName()); 106 assertNotNull(nva); 107 SingleValueAnnotation sva = (SingleValueAnnotation)pm.getUserMetadata("@" + SingleValueAnnotation.class.getName()); 108 assertNotNull(sva); 109 assertEquals("The Age Method", sva.value()); 110 assertEquals(4, pm.getAllUserMetadata().size()); 111 112 pm = fm.getFieldMetadata("rank"); 113 assertNotNull(pm); 114 assertEquals(Boolean.TRUE, pm.getUserMetadata("org.springframework.binding.support.NoValueAnnotation")); 115 assertEquals("The Rank Method", pm.getUserMetadata("org.springframework.binding.support.SingleValueAnnotation")); 116 assertEquals(Boolean.TRUE, pm.getUserMetadata("org.springframework.binding.support.MultiValueAnnotation")); 117 assertEquals("First Test Name", pm.getUserMetadata("org.springframework.binding.support.MultiValueAnnotation.name")); 118 assertEquals(24.5, pm.getUserMetadata("org.springframework.binding.support.MultiValueAnnotation.age")); 119 assertEquals(10, pm.getUserMetadata("org.springframework.binding.support.MultiValueAnnotation.rank")); 120 nva = (NoValueAnnotation)pm.getUserMetadata("@" + NoValueAnnotation.class.getName()); 121 assertNotNull(nva); 122 sva = (SingleValueAnnotation)pm.getUserMetadata("@" + SingleValueAnnotation.class.getName()); 123 assertNotNull(sva); 124 assertEquals("The Rank Method", sva.value()); 125 MultiValueAnnotation mva = (MultiValueAnnotation)pm.getUserMetadata("@" + MultiValueAnnotation.class.getName()); 126 assertNotNull(mva); 127 assertEquals("First Test Name", mva.name()); 128 assertEquals(24.5, mva.age()); 129 assertEquals(10, mva.rank()); 130 assertEquals(9, pm.getAllUserMetadata().size()); 131 132 pm = fm.getFieldMetadata("description"); 133 assertNotNull(pm); 134 assertTrue(pm.getAllUserMetadata() == null || pm.getAllUserMetadata().size() == 0); 135 } 136 137 138 139 140 141 142 143 public static class NoAnnotationTestBean { 144 private String name; 145 private double age; 146 private int rank; 147 148 public String getName() { 149 return name; 150 } 151 152 public void setName(final String name) { 153 this.name = name; 154 } 155 156 public double getAge() { 157 return age; 158 } 159 160 public void setAge(final double age) { 161 this.age = age; 162 } 163 164 public int getRank() { 165 return rank; 166 } 167 168 public void setRank(final int rank) { 169 this.rank = rank; 170 } 171 } 172 173 174 175 176 177 178 public static class TestBean { 179 private String name; 180 private double age; 181 private int rank; 182 private String description; 183 184 @NoValueAnnotation 185 public String getName() { 186 return name; 187 } 188 189 public void setName(final String name) { 190 this.name = name; 191 } 192 193 @SingleValueAnnotation("The Age Method") 194 public double getAge() { 195 return age; 196 } 197 198 @NoValueAnnotation 199 public void setAge(final double age) { 200 this.age = age; 201 } 202 203 @MultiValueAnnotation(name="Second Test Name", age=30, rank=5) 204 @SingleValueAnnotation("The Rank Method") 205 public void setRank(final int rank) { 206 this.rank = rank; 207 } 208 209 @MultiValueAnnotation(name="First Test Name", age=24.5, rank=10) 210 @NoValueAnnotation 211 public int getRank() { 212 return rank; 213 } 214 215 public String getDescription() { 216 return description; 217 } 218 219 public void setDescription(final String description) { 220 this.description = description; 221 } 222 } 223 }