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
\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
\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
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;
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;
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;
"protectedTitleCache",
"rights",
"extensions",
+ "credits",
"sources"
})
@MappedSuperclass
@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")
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()
*/
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;
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
* @see #getEditor()
*/
public List<Publisher> getPublishers(){
- List<Publisher> result = new ArrayList<Publisher>();
- result.addAll(publishers);
- return result;
+ return publishers;
}
* @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;
}
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
*/\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
\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
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
* @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
\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
* @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
* @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
@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