Credits in model
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 25 Mar 2009 21:07:43 +0000 (21:07 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 25 Mar 2009 21:07:43 +0000 (21:07 +0000)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Credit.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IIdentifiableEntity.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/reference/PublicationBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/reference/Publisher.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/IdentifiableEntityTest.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/MarkerTest.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/MarkerTypeTest.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/reference/PublicationBaseTest.java

index 6a2e172657fb93418d51c2274c393b87aa73de4c..b90ce1d1d086a79b369d720c910668b707f6245c 100644 (file)
 package eu.etaxonomy.cdm.model.common;\r
 \r
 import javax.persistence.Entity;\r
+import javax.persistence.FetchType;\r
+import javax.persistence.ManyToOne;\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlElement;\r
+import javax.xml.bind.annotation.XmlIDREF;\r
+import javax.xml.bind.annotation.XmlSchemaType;\r
+import javax.xml.bind.annotation.XmlType;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.hibernate.annotations.Cascade;\r
+import org.hibernate.annotations.CascadeType;\r
+import org.hibernate.envers.Audited;\r
+\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
 \r
 /**\r
  * @author a.mueller\r
  * @created 23.03.2009\r
  * @version 1.0\r
  */\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+@XmlType(name = "Credit")\r
 @Entity\r
-public class Credit extends CdmBase {\r
+@Audited\r
+public class Credit extends LanguageStringBase {\r
+       private static final long serialVersionUID = 5763391127298427701L;\r
+       @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(Credit.class);\r
+       \r
+       // owner etc as defined by the rightstype\r
+       @XmlElement(name = "Agent")\r
+       @XmlIDREF\r
+       @XmlSchemaType(name = "IDREF")\r
+       @ManyToOne(fetch = FetchType.LAZY)\r
+       @Cascade(CascadeType.SAVE_UPDATE)\r
+       private AgentBase agent;\r
+       \r
+       @XmlElement(name = "AbbreviatedText")\r
+       private String abbreviatedText;\r
+       \r
+       public static Credit NewInstance(AgentBase agent, String text){\r
+               return NewInstance(agent, text, null, Language.DEFAULT());\r
+       }\r
+\r
+       public static Credit NewInstance(AgentBase agent, String text, String abbreviatedText, Language language){\r
+               Credit result = new Credit(text, language);\r
+               result.setAgent(agent);\r
+               result.setAbbreviatedText(abbreviatedText);\r
+               return result;\r
+       }\r
+\r
+       \r
+       protected Credit(){\r
+               super();\r
+       }\r
+       \r
+       protected Credit(String text, Language language){\r
+               super(text, language);\r
+       }\r
+\r
+\r
+\r
+       /**\r
+        * @return the agent\r
+        */\r
+       public AgentBase getAgent() {\r
+               return agent;\r
+       }\r
+\r
+\r
+\r
+       /**\r
+        * @param agent the agent to set\r
+        */\r
+       public void setAgent(AgentBase agent) {\r
+               this.agent = agent;\r
+       }\r
+\r
+\r
+\r
+       /**\r
+        * @return the abbreviatedText\r
+        */\r
+       public String getAbbreviatedText() {\r
+               return abbreviatedText;\r
+       }\r
+\r
+\r
+\r
+       /**\r
+        * @param abbreviatedText the abbreviatedText to set\r
+        */\r
+       public void setAbbreviatedText(String abbreviatedText) {\r
+               this.abbreviatedText = abbreviatedText;\r
+       }\r
+       \r
+       \r
 }\r
index 19220aaec2cc9e58750eafe746cb95f95d9003bc..be34175c533b17f5b0cb18c36bd6d56535cef499 100644 (file)
@@ -9,6 +9,7 @@
 \r
 package eu.etaxonomy.cdm.model.common;\r
 \r
+import java.util.List;\r
 import java.util.Set;\r
 \r
 import eu.etaxonomy.cdm.model.media.Rights;\r
@@ -33,6 +34,18 @@ public interface IIdentifiableEntity {
 \r
        public void removeRights(Rights right);\r
 \r
+       public List<Credit> getCredits();\r
+\r
+       public Credit getCredits(int index);\r
+       \r
+       public void addCredit(Credit credig);\r
+       \r
+       public void addCredit(Credit credit, int index);\r
+\r
+       public void removeCredit(Credit credit);\r
+\r
+       public void removeCredit(int index);\r
+\r
        public Set<Extension> getExtensions();\r
 \r
        public void addExtension(Extension extension);\r
index f136502c83f6eef41b5e8718b5c2d3ec5e7ca2a4..b4b69e8895acfda218e9e337d67f1adcc1f88dfd 100644 (file)
@@ -10,7 +10,9 @@
 package eu.etaxonomy.cdm.model.common;
 
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.persistence.Column;
@@ -18,9 +20,6 @@ import javax.persistence.Embedded;
 import javax.persistence.FetchType;
 import javax.persistence.MappedSuperclass;
 import javax.persistence.OneToMany;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
-import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -32,6 +31,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.apache.log4j.Logger;
 import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.IndexColumn;
 import org.hibernate.search.annotations.Field;
 import org.hibernate.search.annotations.FieldBridge;
 import org.hibernate.search.annotations.Fields;
@@ -62,6 +62,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
     "protectedTitleCache",
     "rights",
     "extensions",
+    "credits",
     "sources"
 })
 @MappedSuperclass
@@ -98,6 +99,13 @@ implements ISourceable, IIdentifiableEntity, Comparable<IdentifiableEntity> {
     @OneToMany(fetch = FetchType.LAZY)
        @Cascade({CascadeType.SAVE_UPDATE})
        private Set<Rights> rights = new HashSet<Rights>();
+    
+    @XmlElementWrapper(name = "Credits")
+    @XmlElement(name = "Credit")
+    @IndexColumn(name="sortIndex", base = 0)
+       @OneToMany(fetch = FetchType.LAZY)
+       @Cascade({CascadeType.SAVE_UPDATE})
+    private List<Credit> credits = new ArrayList<Credit>();
        
     @XmlElementWrapper(name = "Extensions")
     @XmlElement(name = "Extension")
@@ -194,6 +202,51 @@ implements ISourceable, IIdentifiableEntity, Comparable<IdentifiableEntity> {
                this.rights.remove(right);
        }
 
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#getCredits()
+        */
+       public List<Credit> getCredits() {
+               return this.credits;            
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#getCredits(int)
+        */
+       public Credit getCredits(int index){
+               return this.credits.get(index);
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.Credit)
+        */
+       public void addCredit(Credit credit){
+               this.credits.add(credit);
+       }
+       
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.Credit, int)
+        */
+       public void addCredit(Credit credit, int index){
+               this.credits.add(index, credit);
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#removeCredit(eu.etaxonomy.cdm.model.common.Credit)
+        */
+       public void removeCredit(Credit credit){
+               this.credits.remove(credit);
+       }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#removeCredit(int)
+        */
+       public void removeCredit(int index){
+               this.credits.remove(index);
+       }
+       
+       
        /* (non-Javadoc)
         * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#getExtensions()
         */
index fb3f47a2e1f5cb36c798d69d0bfe7cc239aecd07..f1a5dee5ce15c4b0a52e2403674cd7d2d2dc9628 100644 (file)
@@ -12,13 +12,11 @@ package eu.etaxonomy.cdm.model.reference;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
-import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -30,8 +28,11 @@ import org.apache.log4j.Logger;
 import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
 import org.hibernate.annotations.IndexColumn;
+import org.hibernate.collection.PersistentSet;
 import org.hibernate.envers.Audited;
 
+import eu.etaxonomy.cdm.model.common.Annotation;
+
 /**
  * This (abstract) class represents all different kind of published {@link StrictReferenceBase references}
  * which constitute a physical or virtual unit. A reference is a published
@@ -75,9 +76,7 @@ public abstract class PublicationBase extends StrictReferenceBase {
         * @see         #getEditor()
         */
        public List<Publisher> getPublishers(){
-               List<Publisher> result = new ArrayList<Publisher>();
-               result.addAll(publishers);
-               return result;
+               return publishers;
        }
        
 
@@ -124,9 +123,21 @@ public abstract class PublicationBase extends StrictReferenceBase {
         * @see java.lang.Object#clone()
         */
        @Override
-       public Object clone(){
+       public Object clone() {
                PublicationBase result = (PublicationBase)super.clone();
-               //no changes to: placePublished, publisher
+               //Publisher
+               result.publishers = new ArrayList<Publisher>();
+               for (Publisher publisher : this.publishers ){
+                       Publisher newPublisher;
+                       try {
+                               newPublisher = (Publisher)publisher.clone();
+                       } catch (CloneNotSupportedException e) {
+                               //Publisher implements Cloneable therefore this should not be reached
+                               throw new RuntimeException("Publisher does not implement Cloneable");
+                       }
+                       result.addPublisher(newPublisher.getPublisherName(), newPublisher.getPlace());
+               }
+               //No changes: -
                return result;
        }
 
index 225c653e0e0ef27a6bd697ef37efe5976713711d..270ccc5ec8ce5085d129ab1f356e70a25692c9e3 100644 (file)
@@ -17,8 +17,9 @@ import org.hibernate.envers.Audited;
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 \r
 /**\r
- * A publisher is part of any reference inheriting from PublicationBase. The UML association type is composition,\r
- * which means that a publisher exists only as part of a publication base, not on its own. Therefore\r
+ * A publisher is part of any reference inheriting from PublicationBase.\r
+ * A publication can have several publishers each of them having it's own publication place. \r
+ * The UML association type is composition, which means that a publisher exists only as part of a publication base, not on its own. Therefore\r
  * all the methods of publisher are not visible but handled by publication base.\r
  * \r
  * @author a.mueller\r
@@ -27,7 +28,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
  */\r
 @Entity\r
 @Audited\r
-public class Publisher extends CdmBase {\r
+public class Publisher extends CdmBase implements Cloneable{\r
        @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(Publisher.class);\r
        \r
index a27579954c936c408e69a86009688600134d143d..51aa4077c234e036dcfcfc418e44ca3feedbc59a 100644 (file)
@@ -11,12 +11,17 @@ package eu.etaxonomy.cdm.model.common;
 \r
 import static org.junit.Assert.assertEquals;\r
 import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.assertFalse;\r
+import static org.junit.Assert.assertNotNull;\r
+import junit.framework.Assert;\r
+\r
 import org.junit.After;\r
 import org.junit.AfterClass;\r
 import org.junit.Before;\r
 import org.junit.BeforeClass;\r
 import org.junit.Test;\r
 \r
+import eu.etaxonomy.cdm.model.agent.Person;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 \r
@@ -132,4 +137,47 @@ public class IdentifiableEntityTest {
                assertEquals(compareResult, equalsResult);\r
        }\r
        \r
+       /**\r
+        * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.\r
+        */\r
+       @Test\r
+       public void testAddCredit() {\r
+               assertNotNull("A list should always be returned",abies.getCredits());\r
+               assertTrue("No credits should exist",abies.getCredits().isEmpty());\r
+               String text1 = "Credit1";\r
+               String text2 = "Credit2";\r
+               String text3 = "Credit0"; //for sorting order\r
+               Person person = Person.NewTitledInstance("Me");\r
+               abies.addCredit(Credit.NewInstance(person, text1));\r
+               assertEquals("Number of credits should be 1",1,abies.getCredits().size());\r
+               abies.addCredit(Credit.NewInstance(person, text2));\r
+               assertEquals("Number of credits should be 2",2,abies.getCredits().size());\r
+               abies.addCredit(Credit.NewInstance(person, text3));\r
+               assertEquals("Number of credits should be 3",3,abies.getCredits().size());\r
+               assertEquals("Credit0 should be last in list", text3, abies.getCredits(2).getText());\r
+       }\r
+       \r
+       /**\r
+        * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.\r
+        */\r
+       @Test\r
+       public void testRemoveCredit() {\r
+               assertNotNull("A list should always be returned",abies.getCredits());\r
+               String text1 = "Credit1";\r
+               String text2 = "Credit2";\r
+               Person person = Person.NewTitledInstance("Me");\r
+               Credit credit1 = Credit.NewInstance(person, text1);\r
+               Credit credit2 = Credit.NewInstance(person, text2);\r
+               abies.addCredit(credit1);\r
+               abies.addCredit(credit2);\r
+               assertEquals("Number of credits should be 2",2,abies.getCredits().size());\r
+               abies.removeCredit(credit1);\r
+               assertNotNull("A list should always be returned",abies.getCredits());\r
+               assertFalse("The list should not be empty",abies.getCredits().isEmpty());\r
+               assertEquals("Number of credits should be 1",1,abies.getCredits().size());\r
+               assertEquals("Remaining credit should be credit2",credit2,abies.getCredits().get(0));\r
+               abies.removeCredit(credit2);\r
+               assertNotNull("A list should always be returned",abies.getCredits());\r
+               assertTrue("No credits should exist",abies.getCredits().isEmpty());\r
+       }\r
 }\r
index 070d3f3a86e5a93a25a3afb6081e36684017a38f..c59848133005057f21294987ef72a61673b3d04a 100644 (file)
@@ -28,6 +28,7 @@ import eu.etaxonomy.cdm.test.unit.EntityTestBase;
  * @version 1.0\r
  */\r
 public class MarkerTest extends EntityTestBase {\r
+       @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(MarkerTest.class);\r
 \r
        private static boolean flag1;\r
index dac12234aef114c96b600a6f8a89703cbc25bde3..1f5a32d90408e8b7cdc0a4ab1290dc44122f8e91 100644 (file)
@@ -9,14 +9,12 @@
 \r
 package eu.etaxonomy.cdm.model.common;\r
 \r
-import static org.junit.Assert.*;\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
 \r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
 import org.junit.BeforeClass;\r
 import org.junit.Test;\r
 \r
@@ -26,6 +24,7 @@ import org.junit.Test;
  * @version 1.0\r
  */\r
 public class MarkerTypeTest {\r
+       @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(MarkerTypeTest.class);\r
        \r
        private static final UUID uuidImported = UUID.fromString("96878790-4ceb-42a2-9738-a2242079b679");\r
index dae77e2558f4538661ed14621da5751248adaabe..8016752eeedf8907d4640f33dc839d220c94870c 100644 (file)
@@ -26,6 +26,7 @@ import org.junit.Test;
  * @version 1.0\r
  */\r
 public class PublicationBaseTest {\r
+       @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(PublicationBaseTest.class);\r
 \r
        private PublicationBase publicationBase;\r
@@ -136,8 +137,10 @@ public class PublicationBaseTest {
        @Test\r
        public void testClone() {\r
                publicationBase.addPublisher(publisher1, place1);\r
-               assertEquals("Publishers list must contains exactly 1 entry", 1, publicationBase.getPublishers().size());\r
-               CdDvd cd = (CdDvd)publicationBase.clone();\r
-               assertEquals(place1, cd.getPublisher(0).getPlace());\r
+               publicationBase.addPublisher(publisher2, place2);\r
+               assertEquals("Publishers list must contains exactly 2 entry", 2, publicationBase.getPublishers().size());\r
+               CdDvd clone = (CdDvd)publicationBase.clone();\r
+               assertEquals("Publisher place must be equal in original publication and cloned publication", place1, clone.getPublisher(0).getPlace());\r
+               assertNotSame(place1, publicationBase.getPublisher(0), clone.getPublisher(0));  \r
        }\r
 }\r