c467ad753a02d5256b0e37c953277b70d3bbdc53
[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 import java.util.List;
20
21 import org.apache.log4j.Logger;
22 import org.junit.Before;
23 import org.junit.BeforeClass;
24 import org.junit.Test;
25
26 import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;
27 import eu.etaxonomy.cdm.model.agent.Person;
28 import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
29 import eu.etaxonomy.cdm.model.common.TimePeriod;
30 import eu.etaxonomy.cdm.model.name.BotanicalName;
31 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
32 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
33 import eu.etaxonomy.cdm.model.name.NonViralName;
34 import eu.etaxonomy.cdm.model.name.Rank;
35 import eu.etaxonomy.cdm.model.reference.Reference;
36 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
37 import eu.etaxonomy.cdm.strategy.cache.TaggedText;
38
39 /**
40 * @author a.mueller
41 *
42 */
43 public class BotanicNameCacheStrategyTest extends NameCacheStrategyTestBase{
44 private static final Logger logger = Logger.getLogger(BotanicNameCacheStrategyTest.class);
45
46 private static final String familyNameString = "Familia";
47 private static final String genusNameString = "Genus";
48 private static final String speciesNameString = "Abies alba";
49 private static final String subSpeciesNameString = "Abies alba subsp. beta";
50 private static final String appendedPhraseString = "app phrase";
51
52 private static final String authorString = "L.";
53 private static final String exAuthorString = "Exaut.";
54 private static final String basAuthorString = "Basio, A.";
55 private static final String exBasAuthorString = "ExBas. N.";
56
57 private BotanicNameDefaultCacheStrategy strategy;
58 private BotanicalName familyName;
59 private BotanicalName genusName;
60 private BotanicalName subGenusName;
61 private BotanicalName speciesName;
62 private BotanicalName subSpeciesName;
63 private INomenclaturalAuthor author;
64 private INomenclaturalAuthor exAuthor;
65 private INomenclaturalAuthor basAuthor;
66 private INomenclaturalAuthor exBasAuthor;
67 private Reference citationRef;
68 ReferenceFactory refFactory;
69
70 /**
71 * @throws java.lang.Exception
72 */
73 @BeforeClass
74 public static void setUpBeforeClass() {
75 DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
76 vocabularyStore.initialize();
77 }
78
79 /**
80 * @throws java.lang.Exception
81 */
82 @Before
83 public void setUp() throws Exception {
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(1968, 3, 2);
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 + " (" + exBasAuthorString + " ex " + basAuthorString + ")" + " " + exAuthorString + " ex " + authorString , strategy.getTitleCache(subSpeciesName));
162
163 subSpeciesName.setExCombinationAuthorTeam(null);
164 assertEquals(subSpeciesNameString + " (" + exBasAuthorString + " ex " + basAuthorString + ")" + " " + 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("Full title cache of null object should return null", strategy.getFullTitleCache(null));
190 //NOTE: Unclear if the date part should contain the full date or only the year. Undefined Behaviour.
191 assertEquals("Abies alba app phrase, Gard. Dict., ed. 8, 1. 2.4.1968, nom. illeg.", strategy.getFullTitleCache(speciesName));
192
193 // assertNull(subSpeciesNameString, strategy.getFullTitleCache(null));
194 // assertEquals("Abies alba app phrase L. Gard. Dict. ed. 8, 1. 1768, nom. illeg.", strategy.getFullTitleCache(speciesName));
195 }
196
197 /**
198 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getAuthorCache(eu.etaxonomy.cdm.model.common.CdmBase)}.
199 */
200 @Test
201 public final void testGetAuthorshipCache() {
202 subSpeciesName.setCombinationAuthorTeam(author);
203 assertEquals(authorString, strategy.getAuthorshipCache(subSpeciesName));
204
205 subSpeciesName.setExCombinationAuthorTeam(exAuthor);
206 assertEquals(exAuthorString + " ex " + authorString , strategy.getAuthorshipCache(subSpeciesName));
207
208 subSpeciesName.setBasionymAuthorTeam(basAuthor);
209 assertEquals("(" + basAuthorString + ")" + " " + exAuthorString + " ex " + authorString , strategy.getAuthorshipCache(subSpeciesName));
210
211 subSpeciesName.setExBasionymAuthorTeam(exBasAuthor);
212 assertEquals("(" + exBasAuthorString + " ex " + basAuthorString + ")" + " " + exAuthorString + " ex " + authorString , strategy.getAuthorshipCache(subSpeciesName));
213
214 assertNull(subSpeciesNameString, strategy.getAuthorshipCache(null));
215 }
216
217 /**
218 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getUninomialNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
219 */
220 @Test
221 public final void testGetGenusOrUninomialNameCache() {
222 assertEquals(familyNameString, strategy.getNameCache(familyName));
223 }
224
225 /**
226 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraGenusNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
227 */
228 @Test
229 public final void testGetInfraGenusTaggedNameCache() {
230 String methodName = "getInfraGenusTaggedNameCache";
231 Method method = getMethod(NonViralNameDefaultCacheStrategy.class, methodName, NonViralName.class);
232 this.getStringValue(method, strategy, subGenusName);
233 assertEquals("Genus subg. InfraGenericPart", strategy.getNameCache(subGenusName));
234 }
235
236 /**
237 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
238 */
239 @Test
240 public final void testGetSpeciesNameCache() {
241 String nameString = speciesNameString + " " + appendedPhraseString;
242 assertEquals(nameString, strategy.getNameCache(speciesName));
243 }
244
245 /**
246 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
247 */
248 @Test
249 public final void testGetInfraSpeciesNameCache() {
250 assertEquals(subSpeciesNameString, strategy.getNameCache(subSpeciesName));
251 }
252
253
254 /**
255 * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy#getInfraSpeciesNameCache(eu.etaxonomy.cdm.model.name.BotanicalName)}.
256 */
257 @Test
258 public final void testAutonyms() {
259 subSpeciesName.setInfraSpecificEpithet("alba");
260 subSpeciesName.setCombinationAuthorTeam(author);
261 //changed 2009-09-04
262 assertEquals("Abies alba subsp. alba", strategy.getNameCache(subSpeciesName));
263 assertEquals("Abies alba L. subsp. alba", strategy.getTitleCache(subSpeciesName));
264 }
265
266 protected Method getMethod(Class clazz, String methodName, Class paramClazzes){
267 Method method;
268 try {
269 method = clazz.getDeclaredMethod(methodName, paramClazzes);
270 } catch (SecurityException e) {
271 logger.error("SecurityException " + e.getMessage());
272 return null;
273 } catch (NoSuchMethodException e) {
274 logger.error("NoSuchMethodException " + e.getMessage());
275 return null;
276 }
277 return method;
278 }
279
280
281
282 }