cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/taxon/TaxonTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/taxon/TaxonomicTreeTest.java -text
+cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/PersonDefaultCacheStrategyTest.java -text
+cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/TeamDefaultCacheStrategyTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/BotanicNameCacheStrategyTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/NonViralNameDefaultCacheStrategyTest.java -text
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/ZoologicalNameCacheStrategyTest.java -text
import org.hibernate.search.annotations.Indexed;
import org.springframework.beans.factory.annotation.Configurable;
+import eu.etaxonomy.cdm.common.CdmUtils;
import eu.etaxonomy.cdm.strategy.cache.agent.TeamDefaultCacheStrategy;
import eu.etaxonomy.cdm.strategy.match.IMatchable;
import eu.etaxonomy.cdm.strategy.match.MatchMode;
}
if (nomenclaturalTitle == null){
this.nomenclaturalTitle = cacheStrategy.getNomenclaturalTitle(this);
+ }else{
+ //as long as team members to not inform the team about changes the cache must be created new each time
+ nomenclaturalTitle = cacheStrategy.getNomenclaturalTitle(this);
}
return nomenclaturalTitle;
}
this.nomenclaturalTitle = nomenclaturalTitle;
this.protectedNomenclaturalTitleCache = protectedNomenclaturalTitleCache;
}
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.model.agent.TeamOrPersonBase#getTitleCache()
+ */
+ @Override
+ public String getTitleCache() {
+ isGeneratingTitleCache = true;
+ String result = "";
+ if (isProtectedTitleCache()){
+ result = this.titleCache;
+ }else{
+ result = generateTitle();
+ result = replaceEmptyTitleByNomTitle(result);
+ result = getTruncatedCache(result);
+ }
+ isGeneratingTitleCache = false;
+ return result;
+ }
}
\ No newline at end of file
import org.hibernate.search.annotations.Index;\r
import org.hibernate.search.annotations.Indexed;\r
\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
import eu.etaxonomy.cdm.strategy.cache.agent.INomenclaturalAuthorCacheStrategy;\r
import eu.etaxonomy.cdm.strategy.match.IMatchable;\r
\r
@Field(index=Index.TOKENIZED)\r
protected String nomenclaturalTitle;\r
\r
+ @Transient\r
+ @XmlTransient\r
+ protected boolean isGeneratingTitleCache = false;\r
+ \r
/**\r
* Returns the identification string (nomenclatural abbreviation) used in\r
* nomenclature for this {@link Person person} or this {@link Team team}.\r
* @see INomenclaturalAuthor#getNomenclaturalTitle()\r
*/\r
public String getNomenclaturalTitle() {\r
- return nomenclaturalTitle;\r
+ String result = nomenclaturalTitle;\r
+ if (CdmUtils.isEmpty(nomenclaturalTitle) && (isGeneratingTitleCache == false)){\r
+ result = getTitleCache();\r
+ }\r
+ return result;\r
}\r
\r
/** \r
public void setNomenclaturalTitle(String nomenclaturalTitle) {\r
this.nomenclaturalTitle = nomenclaturalTitle;\r
}\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.model.common.IdentifiableEntity#getTitleCache()\r
+ */\r
+ @Override\r
+ public String getTitleCache() {\r
+ isGeneratingTitleCache = true;\r
+ String result = super.getTitleCache();\r
+ result = replaceEmptyTitleByNomTitle(result);\r
+ isGeneratingTitleCache = false;\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * @param result\r
+ * @return\r
+ */\r
+ protected String replaceEmptyTitleByNomTitle(String result) {\r
+ if (CdmUtils.isEmpty(result)){\r
+ result = nomenclaturalTitle;\r
+ }\r
+ if (CdmUtils.isEmpty(result)){\r
+ result = super.getTitleCache();\r
+ }\r
+ return result;\r
+ }\r
+ \r
+ \r
}\r
}
// is title dirty, i.e. equal NULL?
if (titleCache == null){
- this.titleCache = getTruncatedCache(generateTitle()) ;
+ this.titleCache = generateTitle();
+ this.titleCache = getTruncatedCache(this.titleCache) ;
}
return titleCache;
}
import java.util.UUID;\r
import org.apache.log4j.Logger;\r
\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
import eu.etaxonomy.cdm.model.agent.Person;\r
import eu.etaxonomy.cdm.strategy.StrategyBase;\r
\r
*/\r
public class PersonDefaultCacheStrategy extends StrategyBase implements\r
INomenclaturalAuthorCacheStrategy<Person> {\r
+ @SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(PersonDefaultCacheStrategy.class);\r
\r
final static UUID uuid = UUID.fromString("9abda0e1-d5cc-480f-be38-40a510a3f253");\r
* @see eu.etaxonomy.cdm.strategy.INomenclaturalAuthorCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.name.TaxonNameBase)\r
*/\r
public String getTitleCache(Person person) {\r
- if (! (person.getLastname() == null) && ! (person.getLastname().trim().equals("")) ){\r
- String result = "";\r
- if (person.getFirstname() != null){\r
- result += person.getFirstname() + " ";\r
- }\r
- result += person.getLastname();\r
+ String result = "";\r
+ if (CdmUtils.isNotEmpty(person.getLastname() ) ){\r
+ result = person.getLastname();\r
+ result = addFirstNamePrefixSuffix(result, person);\r
return result;\r
}else{\r
- return person.getNomenclaturalTitle();\r
+ result = person.getNomenclaturalTitle();\r
+ if (CdmUtils.isNotEmpty(result)){\r
+ return result;\r
+ }\r
+ addFirstNamePrefixSuffix("", person);\r
+ if (CdmUtils.isNotEmpty(result)){\r
+ return result;\r
+ }\r
}\r
+ return person.toString();\r
+ }\r
+\r
+ /**\r
+ * \r
+ */\r
+ private String addFirstNamePrefixSuffix(String oldString, Person person) {\r
+ String result = oldString;\r
+ result = CdmUtils.concat(" ", person.getFirstname(),result); \r
+ result = CdmUtils.concat(" ", person.getPrefix(),result); \r
+ result = CdmUtils.concat(" ", result, person.getSuffix()); \r
+ return result;\r
}\r
\r
}\r
*\r
*/\r
public class TeamDefaultCacheStrategy extends StrategyBase implements INomenclaturalAuthorCacheStrategy<Team> {\r
+ private static final long serialVersionUID = 8375295443642690479L;\r
+ @SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(TeamDefaultCacheStrategy.class);\r
\r
final static UUID uuid = UUID.fromString("1cbda0d1-d5cc-480f-bf38-40a510a3f223");\r
\r
+ public static final String EMPTY_TEAM = "-empty team-";\r
+ \r
static public TeamDefaultCacheStrategy NewInstance(){\r
return new TeamDefaultCacheStrategy();\r
}\r
for (Person teamMember : teamMembers){\r
result += teamMember.getNomenclaturalTitle() + " & ";\r
}\r
- if (teamMembers.size() > 1){\r
+ if (teamMembers.size() > 0){\r
result = result.substring(0, result.length() - 3);\r
+ }else{\r
+ result = getTitleCache(team);\r
}\r
return result;\r
}\r
for (Person teamMember : teamMembers){\r
result += teamMember.getTitleCache() + " & ";\r
}\r
- if (teamMembers.size() > 1){\r
+ if (teamMembers.size() > 0){\r
result = result.substring(0, result.length() - 3);\r
+ }else{\r
+ result = EMPTY_TEAM;\r
}\r
return result;\r
}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.strategy.cache.agent;\r
+\r
+\r
+import static org.junit.Assert.assertNotNull;\r
+import junit.framework.Assert;\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
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 29.09.2009\r
+ * @version 1.0\r
+ */\r
+public class PersonDefaultCacheStrategyTest {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(PersonDefaultCacheStrategyTest.class);\r
+\r
+ private static Person person1;\r
+ private static Person person2;\r
+ private static Person person3;\r
+ \r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @BeforeClass\r
+ public static void setUpBeforeClass() throws Exception {\r
+ }\r
+\r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @AfterClass\r
+ public static void tearDownAfterClass() throws Exception {\r
+ \r
+ \r
+ }\r
+\r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ person1 = Person.NewInstance();\r
+ \r
+ person1.setFirstname("P1FN");\r
+ person1.setLastname("P1LN");\r
+ person1.setPrefix("Dr1.");\r
+ person1.setSuffix("Suff1");\r
+ \r
+ person2 = Person.NewInstance();\r
+ person2.setNomenclaturalTitle("P2NomT");\r
+ person2.setLastname("P2LN");\r
+ person2.setFirstname("P2FN");\r
+ person2.setSuffix("P2Suff");\r
+ \r
+ person3 = Person.NewInstance(); //empty person\r
+ \r
+ }\r
+\r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @After\r
+ public void tearDown() throws Exception {\r
+ }\r
+ \r
+//**************************************** TESTS **************************************\r
+ \r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.strategy.cache.agent.PersonDefaultCacheStrategy#NewInstance()}.\r
+ */\r
+ @Test\r
+ public final void testNewInstance() {\r
+ PersonDefaultCacheStrategy cacheStrategy = PersonDefaultCacheStrategy.NewInstance();\r
+ assertNotNull(cacheStrategy);\r
+ }\r
+\r
+ @Test\r
+ public final void testGetNomenclaturalTitleCache(){\r
+ Assert.assertNotNull("person1 nomenclatural title must not to be null", person1.getNomenclaturalTitle());\r
+ Assert.assertEquals("Person1 nomenclatural title should be created by elements", "Dr1. P1FN P1LN Suff1", person1.getNomenclaturalTitle());\r
+ person1.setSuffix(null);\r
+ Assert.assertEquals("Person1 title should be Dr1. P1FN P1LN", "Dr1. P1FN P1LN", person1.getNomenclaturalTitle());\r
+ //peson2\r
+ Assert.assertEquals("Person2 title should be P2NomT", "P2NomT", person2.getNomenclaturalTitle());\r
+ //person3\r
+ Assert.assertNotNull("person3 nomenclatural title must not to be null", person3.getNomenclaturalTitle());\r
+ Assert.assertTrue("Person3 nomenclatural title must not be empty", CdmUtils.isNotEmpty(person3.getNomenclaturalTitle()));\r
+ //don't take to serious, may be also something different, but not empty\r
+ Assert.assertEquals("Person3 title should start with Person#0", "Person#0", person3.getNomenclaturalTitle().substring(0, 8));\r
+ }\r
+ \r
+\r
+ @Test\r
+ public final void testGetTitleCache(){\r
+ Assert.assertNotNull("person1 title cache must not to be null", person1.getTitleCache());\r
+ Assert.assertEquals("Person1 title cache should be created by elements", "Dr1. P1FN P1LN Suff1", person1.getTitleCache());\r
+ person1.setSuffix(null);\r
+ Assert.assertEquals("Person1 title cache should be Dr1. P1FN P1LN", "Dr1. P1FN P1LN", person1.getTitleCache());\r
+ //peson2\r
+ Assert.assertEquals("Person2 title cache should be P2NomT", "P2FN P2LN P2Suff", person2.getTitleCache());\r
+ //person3\r
+ Assert.assertNotNull("person3 title cache must not to be null", person3.getTitleCache());\r
+ Assert.assertTrue("Person3 title cache must not be empty", CdmUtils.isNotEmpty(person3.getTitleCache()));\r
+ //don't take to serious, may be also something different, but not empty\r
+ Assert.assertEquals("Person3 title cache should start with Person#0", "Person#0", person3.getTitleCache().substring(0, 8));\r
+ }\r
+ \r
+ \r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.strategy.cache.agent;\r
+\r
+\r
+import static org.junit.Assert.assertNotNull;\r
+import junit.framework.Assert;\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
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 29.09.2009\r
+ * @version 1.0\r
+ */\r
+public class TeamDefaultCacheStrategyTest {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(TeamDefaultCacheStrategyTest.class);\r
+\r
+ private static Team team1;\r
+ private static Team team2;\r
+ private static Team team3;\r
+ \r
+ private static Person person1;\r
+ private static Person person2;\r
+ private static Person person3;\r
+ private static Person person4;\r
+ \r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @BeforeClass\r
+ public static void setUpBeforeClass() throws Exception {\r
+ }\r
+\r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @AfterClass\r
+ public static void tearDownAfterClass() throws Exception {\r
+ \r
+ \r
+ }\r
+\r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ team1 = Team.NewInstance();\r
+ team2 = Team.NewInstance();\r
+ team3 = Team.NewInstance(); //empty team\r
+ \r
+ person1 = Person.NewInstance();\r
+ \r
+ person1.setFirstname("P1FN");\r
+ person1.setLastname("P1LN");\r
+ person1.setPrefix("Dr1.");\r
+ person1.setSuffix("Suff1");\r
+ \r
+ person2 = Person.NewInstance();\r
+ person2.setNomenclaturalTitle("P2NomT");\r
+ person2.setLastname("P2LN");\r
+ person2.setFirstname("P2FN");\r
+ person2.setSuffix("P2Suff");\r
+ \r
+ person3 = Person.NewInstance();\r
+ person3.setNomenclaturalTitle("P3NomT");\r
+ \r
+ \r
+ person4 = Person.NewInstance(); //empty person\r
+ \r
+ team1.addTeamMember(person1);\r
+ team2.addTeamMember(person2);\r
+ team2.addTeamMember(person1);\r
+ team2.addTeamMember(person3);\r
+ \r
+ \r
+ \r
+ }\r
+\r
+ /**\r
+ * @throws java.lang.Exception\r
+ */\r
+ @After\r
+ public void tearDown() throws Exception {\r
+ }\r
+ \r
+//**************************************** TESTS **************************************\r
+ \r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.strategy.cache.agent.PersonDefaultCacheStrategy#NewInstance()}.\r
+ */\r
+ @Test\r
+ public final void testNewInstance() {\r
+ TeamDefaultCacheStrategy cacheStrategy = TeamDefaultCacheStrategy.NewInstance();\r
+ assertNotNull(cacheStrategy);\r
+ }\r
+\r
+ @Test\r
+ public final void testGetNomenclaturalTitleCache(){\r
+ Assert.assertNotNull("team1 nomenclatural title must not to be null", team1.getNomenclaturalTitle());\r
+ Assert.assertEquals("team1 nomenclatural title should be created by elements", "Dr1. P1FN P1LN Suff1", team1.getNomenclaturalTitle());\r
+ person1.setSuffix(null);\r
+ Assert.assertEquals("team1 nomenclatural title should be Dr1. P1FN P1LN", "Dr1. P1FN P1LN", team1.getNomenclaturalTitle());\r
+ //peson2\r
+ Assert.assertEquals("team2 nomenclatural title should be 'P2NomT & Dr1. P1FN P1LN & P3NomT'", "P2NomT & Dr1. P1FN P1LN & P3NomT", team2.getNomenclaturalTitle());\r
+ //person3\r
+ Assert.assertNotNull("team3 nomenclatural title must not to be null", team3.getNomenclaturalTitle());\r
+ Assert.assertTrue("team3 nomenclatural title must not be empty", CdmUtils.isNotEmpty(team3.getNomenclaturalTitle()));\r
+ //don't take to serious, may be also something different, but not empty\r
+ Assert.assertEquals("team3 nomenclatural title should be empty team replacement string", TeamDefaultCacheStrategy.EMPTY_TEAM, team3.getNomenclaturalTitle());\r
+ }\r
+ \r
+\r
+ @Test\r
+ public final void testGetTitleCache(){\r
+ Assert.assertNotNull("team1 title cache must not to be null", team1.getTitleCache());\r
+ Assert.assertEquals("team1 title cache should be created by elements", "Dr1. P1FN P1LN Suff1", team1.getTitleCache());\r
+ person1.setSuffix(null);\r
+ Assert.assertEquals("team1 title cache should be Dr1. P1FN P1LN", "Dr1. P1FN P1LN", team1.getTitleCache());\r
+ //peson2\r
+ Assert.assertEquals("team2 title cache should be 'P2FN P2LN P2Suff & Dr1. P1FN P1LN & P3NomT'", "P2FN P2LN P2Suff & Dr1. P1FN P1LN & P3NomT", team2.getTitleCache());\r
+ //person3\r
+ Assert.assertNotNull("team3 title cache must not to be null", team3.getTitleCache());\r
+ Assert.assertTrue("team3 title cache must not be empty", CdmUtils.isNotEmpty(team3.getTitleCache()));\r
+ //don't take to serious, may be also something different, but not empty\r
+ Assert.assertEquals("team3 title cache should should be empty team replacement string", TeamDefaultCacheStrategy.EMPTY_TEAM, team3.getTitleCache());\r
+ \r
+ }\r
+ \r
+ \r
+}\r