merging /branches/cdmlib/SPRINT-Chichorieae1/ to trunk
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / strategy / cache / name / BotanicNameCacheStrategyTest.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.strategy.cache.name;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertNull;
15
16 import java.lang.reflect.InvocationTargetException;
17 import java.lang.reflect.Method;
18 import java.util.GregorianCalendar;
19
20 import org.apache.log4j.Logger;
21 import org.junit.Before;
22 import org.junit.BeforeClass;
23 import org.junit.Test;
24
25 import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;
26 import eu.etaxonomy.cdm.model.agent.Person;
27 import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
28 import eu.etaxonomy.cdm.model.common.TimePeriod;
29 import eu.etaxonomy.cdm.model.name.BotanicalName;
30 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
31 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
32 import eu.etaxonomy.cdm.model.name.NonViralName;
33 import eu.etaxonomy.cdm.model.name.Rank;
34 import eu.etaxonomy.cdm.model.reference.IBook;
35 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
36 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
37
38 /**
39 * @author a.mueller
40 *
41 */
42 public class BotanicNameCacheStrategyTest {
43 private static final Logger logger = Logger.getLogger(BotanicNameCacheStrategyTest.class);
44
45 private static final String familyNameString = "Familia";
46 private static final String genusNameString = "Genus";
47 private static final String speciesNameString = "Abies alba";
48 private static final String subSpeciesNameString = "Abies alba subsp. beta";
49 private static final String appendedPhraseString = "app phrase";
50
51 private static final String authorString = "L.";
52 private static final String exAuthorString = "Exaut.";
53 private static final String basAuthorString = "Basio, A.";
54 private static final String exBasAuthorString = "ExBas. N.";
55
56 private BotanicNameDefaultCacheStrategy strategy;
57 private BotanicalName familyName;
58 private BotanicalName genusName;
59 private BotanicalName subGenusName;
60 private BotanicalName speciesName;
61 private BotanicalName subSpeciesName;
62 private INomenclaturalAuthor author;
63 private INomenclaturalAuthor exAuthor;
64 private INomenclaturalAuthor basAuthor;
65 private INomenclaturalAuthor exBasAuthor;
66 private ReferenceBase citationRef;
67 ReferenceFactory refFactory;
68
69 /**
70 * @throws java.lang.Exception
71 */
72 @BeforeClass
73 public static void setUpBeforeClass() {
74 DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
75 vocabularyStore.initialize();
76 }
77
78 /**
79 * @throws java.lang.Exception
80 */
81 @Before
82 public void setUp() throws Exception {
83 refFactory = ReferenceFactory.newInstance();
84 strategy = BotanicNameDefaultCacheStrategy.NewInstance();
85 familyName = BotanicalName.PARSED_NAME(familyNameString, Rank.FAMILY());
86 genusName = BotanicalName.PARSED_NAME(genusNameString, Rank.GENUS());
87
88 subGenusName = BotanicalName.NewInstance(Rank.SUBGENUS());
89 subGenusName.setGenusOrUninomial("Genus");
90 subGenusName.setInfraGenericEpithet("InfraGenericPart");
91
92 speciesName = BotanicalName.PARSED_NAME(speciesNameString);
93 subSpeciesName = BotanicalName.PARSED_NAME(subSpeciesNameString);
94
95 author = Person.NewInstance();
96 author.setNomenclaturalTitle(authorString);
97 exAuthor = Person.NewInstance();
98 exAuthor.setNomenclaturalTitle(exAuthorString);
99 basAuthor = Person.NewInstance();
100 basAuthor.setNomenclaturalTitle(basAuthorString);
101 exBasAuthor = Person.NewInstance();
102 exBasAuthor.setNomenclaturalTitle(exBasAuthorString);
103
104 citationRef = refFactory.newBook();
105 // Gard. Dict. ed. 8, no. 1. 1768.
106 citationRef.setTitle("Gard. Dict.");
107 //citationRef.setPlacePublished("");
108 citationRef.setVolume("1");
109 citationRef.setEdition("ed. 8");
110 GregorianCalendar testDate = new GregorianCalendar();
111 testDate.set(1768, 1, 1);
112
113 TimePeriod period = TimePeriod.NewInstance(testDate);
114
115 citationRef.setDatePublished(period);
116
117 //speciesName.setNomenclaturalMicroReference("89");
118 NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ILLEGITIMATE());
119 speciesName.addStatus(nomStatus);
120
121 speciesName.setNomenclaturalReference(citationRef);
122 speciesName.setAppendedPhrase("app phrase");
123
124 // subSpeciesName.setNomenclaturalReference(citationRef);
125 // subSpeciesName.setAppendedPhrase("app phrase");
126 }
127
128
129
130 /********* TEST *******************************************/
131
132 /**
133 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#NewInstance()}.
134 */
135 @Test
136 public final void testNewInstance() {
137 BotanicNameDefaultCacheStrategy cacheStrategy = BotanicNameDefaultCacheStrategy.NewInstance();
138 assertNotNull(cacheStrategy);
139 }
140
141 /**
142 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getNameCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
143 */
144 @Test
145 public final void testGetNameCache() {
146 assertEquals(subSpeciesNameString, subSpeciesName.getNameCache());
147 assertNull(subSpeciesNameString, strategy.getNameCache(null));
148 }
149
150 /**
151 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
152 */
153 @Test
154 public final void testGetTitleCache() {
155 assertNull(subSpeciesNameString, strategy.getTitleCache(null));
156 subSpeciesName.setCombinationAuthorTeam(author);
157 subSpeciesName.setExCombinationAuthorTeam(exAuthor);
158 subSpeciesName.setBasionymAuthorTeam(basAuthor);
159 subSpeciesName.setExBasionymAuthorTeam(exBasAuthor);
160 assertEquals(subSpeciesNameString, strategy.getNameCache(subSpeciesName));
161 assertEquals(subSpeciesNameString + " (" + basAuthorString + " ex " + exBasAuthorString + ")" + " " + authorString + " ex " + exAuthorString , strategy.getTitleCache(subSpeciesName));
162
163 subSpeciesName.setExCombinationAuthorTeam(null);
164 assertEquals(subSpeciesNameString + " (" + basAuthorString + " ex " + exBasAuthorString + ")" + " " + authorString , strategy.getTitleCache(subSpeciesName));
165
166 subSpeciesName.setExBasionymAuthorTeam(null);
167 assertEquals(subSpeciesNameString + " (" + basAuthorString + ")" + " " + authorString , strategy.getTitleCache(subSpeciesName));
168
169
170 //Autonym
171 subSpeciesName.setInfraSpecificEpithet("alba");
172 subSpeciesName.setCombinationAuthorTeam(author);
173 subSpeciesName.setBasionymAuthorTeam(null);
174 subSpeciesName.setExCombinationAuthorTeam(null);
175 subSpeciesName.setExBasionymAuthorTeam(null);
176 //changed 2009-09-04
177 assertEquals("Abies alba subsp. alba", strategy.getNameCache(subSpeciesName));
178 assertEquals("Abies alba L. subsp. alba", strategy.getTitleCache(subSpeciesName));
179
180
181
182 }
183
184 /**
185 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getFullTitleCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
186 */
187 @Test
188 public final void testGetFullTitleCache() {
189 assertNull(speciesNameString, strategy.getFullTitleCache(null));
190 assertEquals("Abies alba app phrase, Gard. Dict. ed. 8, 1. 1768, nom. illeg.", strategy.getFullTitleCache(speciesName));
191
192 // assertNull(subSpeciesNameString, strategy.getFullTitleCache(null));
193 // assertEquals("Abies alba app phrase L. Gard. Dict. ed. 8, 1. 1768, nom. illeg.", strategy.getFullTitleCache(speciesName));
194 }
195
196 /**
197 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getAuthorCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
198 */
199 @Test
200 public final void testGetAuthorshipCache() {
201 subSpeciesName.setCombinationAuthorTeam(author);
202 assertEquals(authorString, strategy.getAuthorshipCache(subSpeciesName));
203
204 subSpeciesName.setExCombinationAuthorTeam(exAuthor);
205 assertEquals(authorString + " ex " + exAuthorString , strategy.getAuthorshipCache(subSpeciesName));
206
207 subSpeciesName.setBasionymAuthorTeam(basAuthor);
208 assertEquals("(" + basAuthorString + ")" + " " + authorString + " ex " + exAuthorString , strategy.getAuthorshipCache(subSpeciesName));
209
210 subSpeciesName.setExBasionymAuthorTeam(exBasAuthor);
211 assertEquals("(" + basAuthorString + " ex " + exBasAuthorString + ")" + " " + authorString + " ex " + exAuthorString , strategy.getAuthorshipCache(subSpeciesName));
212
213 assertNull(subSpeciesNameString, strategy.getAuthorshipCache(null));
214 }
215
216 /**
217 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getUninomialNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
218 */
219 @Test
220 public final void testGetGenusOrUninomialNameCache() {
221 assertEquals(familyNameString, strategy.getNameCache(familyName));
222 }
223
224 /**
225 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraGenusNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
226 */
227 @Test
228 public final void testGetInfraGenusNameCache() {
229 String methodName = "getInfraGenusNameCache";
230 Method method = getMethod(NonViralNameDefaultCacheStrategy.class, methodName, NonViralName.class);
231 this.getValue(method, strategy, subGenusName);
232 assertEquals("Genus subg. InfraGenericPart", strategy.getNameCache(subGenusName));
233 }
234
235 /**
236 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
237 */
238 @Test
239 public final void testGetSpeciesNameCache() {
240 String nameString = speciesNameString + " " + appendedPhraseString;
241 assertEquals(nameString, strategy.getNameCache(speciesName));
242 }
243
244 /**
245 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
246 */
247 @Test
248 public final void testGetInfraSpeciesNameCache() {
249 assertEquals(subSpeciesNameString, strategy.getNameCache(subSpeciesName));
250 }
251
252
253 /**
254 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
255 */
256 @Test
257 public final void testAutonyms() {
258 subSpeciesName.setInfraSpecificEpithet("alba");
259 subSpeciesName.setCombinationAuthorTeam(author);
260 //changed 2009-09-04
261 assertEquals("Abies alba subsp. alba", strategy.getNameCache(subSpeciesName));
262 assertEquals("Abies alba L. subsp. alba", strategy.getTitleCache(subSpeciesName));
263 }
264
265 protected Method getMethod(Class clazz, String methodName, Class paramClazzes){
266 Method method;
267 try {
268 method = clazz.getDeclaredMethod("getInfraGenusNameCache", paramClazzes);
269 } catch (SecurityException e) {
270 logger.error("SecurityException " + e.getMessage());
271 return null;
272 } catch (NoSuchMethodException e) {
273 logger.error("NoSuchMethodException " + e.getMessage());
274 return null;
275 }
276 return method;
277 }
278
279 protected String getValue(Method method, Object object,Object parameter){
280 try {
281 return (String)method.invoke(object, parameter);
282 } catch (IllegalArgumentException e) {
283 logger.error("IllegalArgumentException " + e.getMessage());
284 return null;
285 } catch (IllegalAccessException e) {
286 logger.error("IllegalAccessException " + e.getMessage());
287 return null;
288 } catch (InvocationTargetException e) {
289 logger.error("InvocationTargetException " + e.getMessage());
290 return null;
291 }
292 }
293
294
295 }