Agent cache strategies
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 29 Sep 2009 14:16:58 +0000 (14:16 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 29 Sep 2009 14:16:58 +0000 (14:16 +0000)
.gitattributes
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/agent/Team.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/agent/TeamOrPersonBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IdentifiableEntity.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/agent/PersonDefaultCacheStrategy.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/agent/TeamDefaultCacheStrategy.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/PersonDefaultCacheStrategyTest.java [new file with mode: 0644]
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/TeamDefaultCacheStrategyTest.java [new file with mode: 0644]

index 0f6c6a4ca9a654dbcf7b7c394c707c60e12257ef..e1a84c9dab76c3a43a98c3774dd291b782b89e39 100644 (file)
@@ -1679,6 +1679,8 @@ cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/taxon/TaxonComparatorTest.java
 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
index aad7eef1a0c638c0b1f5f36474ffcf1a22768a00..92c2bcfc16a86c683b279c6a7241048f6f5e3c47 100644 (file)
@@ -33,6 +33,7 @@ import org.hibernate.envers.Audited;
 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;
@@ -193,6 +194,9 @@ public class Team extends TeamOrPersonBase<Team> {
                }
                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;      
        }
@@ -221,4 +225,22 @@ public class Team extends TeamOrPersonBase<Team> {
                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
index f4a009094e5f425b92e6cbe97cc8a40ebaf08fd4..88fba1dce362b2d0316b89db38cbc4363b2c6061 100644 (file)
@@ -22,6 +22,7 @@ import org.hibernate.search.annotations.Field;
 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
@@ -49,6 +50,10 @@ public abstract class TeamOrPersonBase<T extends TeamOrPersonBase<?>> extends Ag
        @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
@@ -56,7 +61,11 @@ public abstract class TeamOrPersonBase<T extends TeamOrPersonBase<?>> extends Ag
         * @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
@@ -65,4 +74,32 @@ public abstract class TeamOrPersonBase<T extends TeamOrPersonBase<?>> extends Ag
        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
index 295585239d0792d7c2fd54c7a32a8e67d1d4e207..748aa2fcdab0ff3af53bee0c949f36f1fb31ae37 100644 (file)
@@ -180,7 +180,8 @@ public abstract class IdentifiableEntity<S extends IIdentifiableEntityCacheStrat
                }
                // is title dirty, i.e. equal NULL?
                if (titleCache == null){
-                       this.titleCache = getTruncatedCache(generateTitle()) ;
+                       this.titleCache = generateTitle();
+                       this.titleCache = getTruncatedCache(this.titleCache) ;
                }
                return titleCache;
        }
index 76f1ee61a163d447dd106620798fc0e39ebbc03d..a6ca92efd9bbd610f6589da4f1a2638aeb013a40 100644 (file)
@@ -6,6 +6,7 @@ package eu.etaxonomy.cdm.strategy.cache.agent;
 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
@@ -15,6 +16,7 @@ import eu.etaxonomy.cdm.strategy.StrategyBase;
  */\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
@@ -49,16 +51,33 @@ public class PersonDefaultCacheStrategy extends StrategyBase implements
         * @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
index 70fe9300a948c2f9669ade170eaaede9b85bdd04..16559c3d0ef07ad1cbf0e8cade2a8b9bfc40445e 100644 (file)
@@ -17,10 +17,14 @@ import eu.etaxonomy.cdm.strategy.StrategyBase;
  *\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
@@ -49,8 +53,10 @@ public class TeamDefaultCacheStrategy extends StrategyBase implements INomenclat
                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
@@ -65,8 +71,10 @@ public class TeamDefaultCacheStrategy extends StrategyBase implements INomenclat
                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
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/PersonDefaultCacheStrategyTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/PersonDefaultCacheStrategyTest.java
new file mode 100644 (file)
index 0000000..684ec06
--- /dev/null
@@ -0,0 +1,128 @@
+// $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
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/TeamDefaultCacheStrategyTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/TeamDefaultCacheStrategyTest.java
new file mode 100644 (file)
index 0000000..52d7971
--- /dev/null
@@ -0,0 +1,150 @@
+// $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