Devide preferred and other determinations in derived unit facade (#2375)
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 10 May 2011 14:27:04 +0000 (14:27 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 10 May 2011 14:27:04 +0000 (14:27 +0000)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java

index d3124a755089fe29e864a3d5c30796f5acf26866..151768404b69a0d89c376e8e358db24baa5401cf 100644 (file)
@@ -1715,6 +1715,58 @@ public class DerivedUnitFacade {
                derivedUnit.addDetermination(determination);\r
        }\r
 \r
+       @Transient\r
+       public DeterminationEvent getPreferredDetermination() {\r
+               Set<DeterminationEvent> events = derivedUnit.getDeterminations();\r
+               for (DeterminationEvent event : events){\r
+                       if (event.getPreferredFlag() == true){\r
+                               return event;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+       \r
+       /**\r
+        * This method returns the preferred determination.\r
+        * @see #getOtherDeterminations()\r
+        * @see #getDeterminations()\r
+        * @return\r
+        */\r
+       @Transient\r
+       public void setPreferredDetermination(DeterminationEvent newEvent) {\r
+               Set<DeterminationEvent> events = derivedUnit.getDeterminations();\r
+               for (DeterminationEvent event : events){\r
+                       if (event.getPreferredFlag() == true){\r
+                               event.setPreferredFlag(false);\r
+                       }\r
+               }\r
+               newEvent.setPreferredFlag(true);\r
+               events.add(newEvent);\r
+       }\r
+       \r
+       /**\r
+        * This method returns all determinations except for the preferred one.\r
+        * @see #getPreferredDetermination()\r
+        * @see #getDeterminations()\r
+        * @return\r
+        */\r
+       @Transient\r
+       public Set<DeterminationEvent> getOtherDeterminations() {\r
+               Set<DeterminationEvent> events = derivedUnit.getDeterminations();\r
+               Set<DeterminationEvent> result = new HashSet<DeterminationEvent>();\r
+               for (DeterminationEvent event : events){\r
+                       if (event.getPreferredFlag() != true){\r
+                               result.add(event);\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       /**\r
+        * This method returns all determination events. The preferred one {@link #getPreferredDetermination()} \r
+        * and all others {@link #getOtherDeterminations()}.\r
+        * @return\r
+        */\r
        @Transient\r
        public Set<DeterminationEvent> getDeterminations() {\r
                return derivedUnit.getDeterminations();\r
index b57eded3fef28da4137ecf0c8c8992f734de1b39..587c4857459e6f26c4fb116f44eef51998158469 100644 (file)
@@ -166,7 +166,6 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
                specimen.setAccessionNumber(accessionNumber);\r
                specimen.setCatalogNumber(catalogNumber);\r
                specimen.setStoredUnder(taxonName);\r
-               specimen.setCollectorsNumber(collectorsNumber);\r
                specimen.setCollection(collection);\r
                specimen.setPreservation(preservationMethod);\r
 \r
@@ -1183,6 +1182,58 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
                                specimenFacade.getDerivedUnitDefinitions().size());\r
 \r
        }\r
+       \r
+\r
+       /**\r
+        * Test method for\r
+        * {@link eu.etaxonomy.cdm.api.facade.DerivedUnitFacade#addDetermination(eu.etaxonomy.cdm.model.occurrence.DeterminationEvent)}\r
+        * .\r
+        */\r
+       @Test\r
+       public void testPreferredOtherDeterminations() {\r
+               Assert.assertEquals("There should be no determination yet", 0,\r
+                               specimenFacade.getDeterminations().size());\r
+               DeterminationEvent determinationEvent1 = DeterminationEvent.NewInstance();\r
+               specimenFacade.setPreferredDetermination(determinationEvent1);\r
+               \r
+               Assert.assertEquals("There should be exactly one determination", 1,\r
+                               specimenFacade.getDeterminations().size());\r
+               Assert.assertEquals("The only determination should be determination 1",\r
+                               determinationEvent1, specimenFacade.getDeterminations()\r
+                                               .iterator().next());\r
+               Assert.assertEquals("determination 1 should be the preferred determination",\r
+                               determinationEvent1, specimenFacade.getPreferredDetermination());\r
+               Assert.assertEquals("There should be no 'non preferred' determination", 0,\r
+                               specimenFacade.getOtherDeterminations().size());\r
+\r
+               \r
+\r
+               DeterminationEvent determinationEvent2 = DeterminationEvent.NewInstance();\r
+               specimenFacade.addDetermination(determinationEvent2);\r
+               Assert.assertEquals("There should be exactly 2 determinations", 2,\r
+                               specimenFacade.getDeterminations().size());\r
+               Assert.assertEquals("determination 1 should be the preferred determination",\r
+                               determinationEvent1, specimenFacade.getPreferredDetermination());\r
+               Assert.assertEquals("There should be one 'non preferred' determination", 1,\r
+                               specimenFacade.getOtherDeterminations().size());\r
+               Assert.assertEquals("The only 'non preferred' determination should be determination 2",\r
+                               determinationEvent2, specimenFacade.getOtherDeterminations().iterator().next());\r
+               \r
+       \r
+               DeterminationEvent determinationEvent3 = DeterminationEvent.NewInstance();\r
+               specimenFacade.setPreferredDetermination(determinationEvent3);\r
+               Assert.assertEquals("There should be exactly 3 determinations", 3,\r
+                               specimenFacade.getDeterminations().size());\r
+               Assert.assertEquals("determination 3 should be the preferred determination",\r
+                               determinationEvent3, specimenFacade.getPreferredDetermination());\r
+               Assert.assertEquals("There should be 2 'non preferred' determination", 2,\r
+                               specimenFacade.getOtherDeterminations().size());\r
+               Assert.assertTrue("determination 1 should be contained in the set of 'non preferred' determinations",\r
+                               specimenFacade.getOtherDeterminations().contains(determinationEvent1));\r
+               Assert.assertTrue("determination 2 should be contained in the set of 'non preferred' determinations",\r
+                               specimenFacade.getOtherDeterminations().contains(determinationEvent2));\r
+\r
+       }\r
 \r
        /**\r
         * Test method for\r