update factory methods for original sources #1549
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / model / occurrence / SpecimenTest.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.model.occurrence;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertNotNull;
15 import static org.junit.Assert.assertNotSame;
16 import static org.junit.Assert.assertNull;
17 import static org.junit.Assert.assertSame;
18 import static org.junit.Assert.assertTrue;
19
20 import java.util.Calendar;
21 import java.util.UUID;
22
23 import org.apache.log4j.Logger;
24 import org.joda.time.DateTime;
25 import org.junit.Assert;
26 import org.junit.Before;
27 import org.junit.Test;
28
29 import com.ibm.lsid.MalformedLSIDException;
30
31 import eu.etaxonomy.cdm.model.agent.Person;
32 import eu.etaxonomy.cdm.model.common.Annotation;
33 import eu.etaxonomy.cdm.model.common.Extension;
34 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
35 import eu.etaxonomy.cdm.model.common.LSID;
36 import eu.etaxonomy.cdm.model.common.Language;
37 import eu.etaxonomy.cdm.model.common.LanguageStringBase;
38 import eu.etaxonomy.cdm.model.common.Marker;
39 import eu.etaxonomy.cdm.model.common.MarkerType;
40 import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
41 import eu.etaxonomy.cdm.model.description.Sex;
42 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
43 import eu.etaxonomy.cdm.model.description.Stage;
44 import eu.etaxonomy.cdm.model.media.Media;
45 import eu.etaxonomy.cdm.model.media.Rights;
46 import eu.etaxonomy.cdm.model.name.BotanicalName;
47 import eu.etaxonomy.cdm.model.name.Rank;
48 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
49 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
50
51 /**
52 * @author a.mueller
53 * @created 28.10.2008
54 * @version 1.0
55 */
56 public class SpecimenTest {
57 private static final Logger logger = Logger.getLogger(SpecimenTest.class);
58
59 private Specimen specimen;
60
61 @Before
62 public void setUp() throws Exception {
63 specimen = Specimen.NewInstance();
64 }
65
66 /**
67 * Test method for {@link eu.etaxonomy.cdm.model.occurrence.Specimen#NewInstance()}.
68 */
69 @Test
70 public void testNewInstance() {
71 Specimen specimen = Specimen.NewInstance();
72 assertNotNull(specimen);
73 assertTrue(specimen instanceof Specimen);
74 }
75
76 /**
77 * Test method for {@link eu.etaxonomy.cdm.model.occurrence.Specimen#Specimen()}.
78 */
79 @Test
80 public void testSpecimen() {
81 Specimen specimen = new Specimen();
82 assertNotNull(specimen);
83 }
84
85 /**
86 * Test method for {@link eu.etaxonomy.cdm.model.occurrence.Specimen#getPreservation()} and
87 * {@link eu.etaxonomy.cdm.model.occurrence.Specimen#setPreservation(eu.etaxonomy.cdm.model.occurrence.PreservationMethod)}.
88 */
89 @Test
90 public void testGetSetPreservation() {
91 PreservationMethod preservation = PreservationMethod.NewInstance();
92 specimen.setPreservation(preservation);
93 assertSame(preservation, specimen.getPreservation());
94 specimen.setPreservation(null);
95 }
96
97 @Test
98 public void testBidirectionalTypeDesignation(){
99 SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
100 SpecimenTypeDesignation desig2 = SpecimenTypeDesignation.NewInstance();
101 Specimen specimen2 = Specimen.NewInstance();
102
103 specimen.addSpecimenTypeDesignation(desig1);
104 Assert.assertEquals("Specimen1 should be the designations specimen", specimen, desig1.getTypeSpecimen());
105 Assert.assertEquals("specimen1 should have exactly 1 designation", 1, specimen.getSpecimenTypeDesignations().size());
106 Assert.assertEquals("specimen1's designation should be desig1", desig1, specimen.getSpecimenTypeDesignations().iterator().next());
107
108 specimen.addSpecimenTypeDesignation(desig2);
109 Assert.assertEquals("Specimen1 should be the desig2's specimen", specimen, desig2.getTypeSpecimen());
110 Assert.assertEquals("specimen1 should have exactly 2 designation", 2, specimen.getSpecimenTypeDesignations().size());
111
112 specimen2.addSpecimenTypeDesignation(desig2);
113 Assert.assertEquals("Specimen2 should have replaced specimen1 as desig2's specimen", specimen2, desig2.getTypeSpecimen());
114 Assert.assertEquals("Specimen2 should have exactly 1 designation", 1, specimen2.getSpecimenTypeDesignations().size());
115 Assert.assertEquals("Specimen1's designation should be desig2", desig2, specimen2.getSpecimenTypeDesignations().iterator().next());
116 Assert.assertEquals("specimen1 should have exactly 1 designation", 1, specimen.getSpecimenTypeDesignations().size());
117
118 specimen2.removeSpecimenTypeDesignation(desig2);
119 Assert.assertEquals("Desig2 should not have a specimen anymore", null, desig2.getTypeSpecimen());
120 Assert.assertEquals("Specimen2 should have no designation", 0, specimen2.getSpecimenTypeDesignations().size());
121 Assert.assertEquals("specimen1 should have exactly 1 designation", 1, specimen.getSpecimenTypeDesignations().size());
122
123 specimen.addSpecimenTypeDesignation(desig2);
124 Assert.assertEquals("Specimen1 should be the desig2's specimen", specimen, desig2.getTypeSpecimen());
125 Assert.assertEquals("specimen1 should have exactly 2 designation", 2, specimen.getSpecimenTypeDesignations().size());
126
127 desig1.setTypeSpecimen(null);
128 Assert.assertEquals("Desig1 should not have a specimen anymore", null, desig1.getTypeSpecimen());
129 Assert.assertEquals("Specimen1 should have 1 designation", 1, specimen.getSpecimenTypeDesignations().size());
130 Assert.assertEquals("Specimen1's designation should be desig2", desig2, specimen.getSpecimenTypeDesignations().iterator().next());
131
132 desig1.setTypeSpecimen(specimen);
133 Assert.assertEquals("Desig1 should have specimen1 as specimen again", specimen, desig1.getTypeSpecimen());
134 Assert.assertEquals("Specimen1 should have 2 designation", 2, specimen.getSpecimenTypeDesignations().size());
135
136 }
137
138
139 /**
140 * Test method for {@link eu.etaxonomy.cdm.model.occurrence.Specimen#clone()}.
141 */
142 @Test
143 public void testClone() {
144 logger.debug("Start testClone");
145
146 //Null test is not full implemented, but an error is thrown if null throws
147 //null pointer exception somewhere
148 Specimen specimenNullClone = (Specimen)specimen.clone();
149
150 String accessionNumber = "accNumber";
151 String catalogNumber = "catNumber";
152 Collection collection = Collection.NewInstance();
153 collection.setCode("code");
154 DateTime created = new DateTime();
155 Person createdBy = Person.NewTitledInstance("creator");
156 DerivationEvent derivedFrom = DerivationEvent.NewInstance(null);
157 int id = 22;
158 int individualCount = 25;
159 Stage lifeStage = Stage.NewInstance();
160 LSID lsid = null;
161 try {
162 lsid = new LSID("urn:lsid:example.com:foo:1");
163 } catch (MalformedLSIDException e) {
164 // TODO Auto-generated catch block
165 e.printStackTrace();
166 }
167 Specimen nextVersion = Specimen.NewInstance();
168 Specimen previousVersion = Specimen.NewInstance();
169 PreservationMethod preservation = PreservationMethod.NewInstance();
170 boolean protectedTitleCache = true;
171 Sex sex = Sex.FEMALE();
172 TaxonNameBase<?, ?> storedUnder = BotanicalName.NewInstance(Rank.GENUS());
173 String titleCache = "title";
174 Calendar updated = Calendar.getInstance();
175 Person updatedBy = Person.NewTitledInstance("updatedPerson");
176 UUID uuid = UUID.randomUUID();
177
178 Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
179 String definition = "definition";
180 //TODO
181 DerivationEvent derivationEvent = DerivationEvent.NewInstance(null);
182 SpecimenDescription description = SpecimenDescription.NewInstance();
183 DeterminationEvent determination = DeterminationEvent.NewInstance();
184 Extension extension = Extension.NewInstance();
185 extension.setValue("extension");
186 Marker marker = Marker.NewInstance(MarkerType.COMPLETE(), false);
187 Rights right = Rights.NewInstance("right", Language.DEFAULT());
188 Media media = Media.NewInstance();
189 IdentifiableSource source = IdentifiableSource.NewDataImportInstance("12", "idNamespace");
190
191 specimen.setAccessionNumber(accessionNumber);
192 specimen.setCatalogNumber(catalogNumber);
193 specimen.setCollection(collection);
194 specimen.setCreated(created);
195 // specimen.setCreatedBy(createdBy);
196 specimen.setDerivedFrom(derivedFrom);
197 specimen.setId(id);
198 specimen.setIndividualCount(individualCount);
199 specimen.setLifeStage(lifeStage);
200 specimen.setLsid(lsid);
201 specimen.setPreservation(preservation);
202 specimen.setProtectedTitleCache(protectedTitleCache);
203 specimen.setSex(sex);
204 specimen.setStoredUnder(storedUnder);
205 specimen.setTitleCache(titleCache, protectedTitleCache);
206 // specimen.setUpdated(updated);
207 // specimen.setUpdatedBy(updatedBy);
208 specimen.setUuid(uuid);
209
210 specimen.addAnnotation(annotation);
211 specimen.putDefinition(Language.DEFAULT(), definition);
212 specimen.addDerivationEvent(derivationEvent);
213 specimen.addDescription(description);
214 specimen.addDetermination(determination);
215 specimen.addExtension(extension);
216 specimen.addMarker(marker);
217 specimen.addMedia(media);
218 specimen.addRights(right);
219 specimen.addSource(source);
220
221 try {
222 Thread.sleep(200);
223 } catch (InterruptedException e) {
224 //ignore
225 }
226 Specimen specimenClone = (Specimen)specimen.clone();
227
228 assertFalse(id == specimenClone.getId());
229 assertFalse(created.equals(specimenClone.getCreated()));
230 assertFalse(createdBy.equals(specimenClone.getCreatedBy()));
231 assertFalse(updated.equals(specimenClone.getUpdated()));
232 assertFalse(updatedBy.equals(specimenClone.getUpdatedBy()));
233 assertNull(specimenClone.getUpdatedBy());
234 assertNull(specimenClone.getCreatedBy());
235 assertFalse(uuid.equals(specimenClone.getUuid()));
236
237
238 assertEquals(accessionNumber, specimenClone.getAccessionNumber());
239 assertEquals(catalogNumber, specimenClone.getCatalogNumber());
240 assertEquals(collection, specimenClone.getCollection());
241 assertEquals(derivedFrom, specimenClone.getDerivedFrom());
242 assertEquals(lifeStage, specimenClone.getLifeStage());
243 assertEquals(lsid, specimenClone.getLsid());
244 assertEquals(preservation, specimenClone.getPreservation());
245 assertEquals(protectedTitleCache, specimenClone.isProtectedTitleCache());
246 assertEquals(storedUnder, specimenClone.getStoredUnder());
247 assertEquals(sex, specimenClone.getSex());
248 assertEquals(titleCache, specimenClone.getTitleCache());
249
250 Annotation clonedAnnotation = specimenClone.getAnnotations().iterator().next();
251 assertFalse(annotation.equals(clonedAnnotation));
252 assertEquals(annotation.getText(), ((LanguageStringBase)specimenClone.getAnnotations().iterator().next()).getText() );
253 assertNotSame(annotation, specimenClone.getAnnotations().iterator().next() );
254
255 assertEquals(definition, specimenClone.getDefinition().get(Language.DEFAULT()).getText());
256 //TODO
257 // assertNotSame(definition, specimenClone.getDefinition().getText(Language.DEFAULT()));
258
259 assertEquals(derivationEvent, specimenClone.getDerivationEvents().iterator().next());
260 assertSame(derivationEvent, specimenClone.getDerivationEvents().iterator().next());
261
262 assertEquals(description, specimenClone.getDescriptions().iterator().next());
263 // TODO ?
264 assertSame(description, specimenClone.getDescriptions().iterator().next());
265
266 assertEquals(determination, specimenClone.getDeterminations().iterator().next());
267 // TODO ?
268 assertSame(determination, specimenClone.getDeterminations().iterator().next());
269
270 assertFalse(extension.equals(specimenClone.getExtensions().iterator().next()));
271 assertEquals(extension.getValue(), ((Extension)specimenClone.getExtensions().iterator().next()).getValue());
272 assertNotSame(extension, specimenClone.getExtensions().iterator().next());
273 assertEquals(1, specimen.getExtensions().size());
274
275 assertFalse(marker.equals(specimenClone.getMarkers().iterator().next()));
276 assertEquals(marker.getFlag(), ((Marker)specimenClone.getMarkers().iterator().next()).getFlag());
277 assertNotSame(marker, specimenClone.getMarkers().iterator().next());
278 assertEquals(1, specimenClone.getMarkers().size());
279
280 assertEquals(media, specimenClone.getMedia().iterator().next());
281 assertEquals(right, specimenClone.getRights().iterator().next());
282
283 assertFalse(source.equals(specimenClone.getSources().iterator().next()));
284 assertEquals(source.getId(), ((OriginalSourceBase)specimenClone.getSources().iterator().next()).getId());
285 assertNotSame(source, specimenClone.getSources().iterator().next());
286 assertEquals(1, specimenClone.getSources().size());
287 }
288 }