improved cache strategy for media (and resolved some svn merge error)
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 22 Jun 2010 16:43:58 +0000 (16:43 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 22 Jun 2010 16:43:58 +0000 (16:43 +0000)
.gitattributes
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/Media.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategy.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategyTest.java [new file with mode: 0644]

index e408734ac91785a0b4d4e3f883518dc5af8497e8..b848d62feafafbd93cdcab0a7af61a3a099db1f5 100644 (file)
@@ -2121,6 +2121,7 @@ cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/PersonDefaultCa
 cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/agent/TeamDefaultCacheStrategyTest.java -text
 cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/common/TermDefaultCacheStrategyTest.java -text
 cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/description/TaxonDescriptionDefaultCacheStrategyTest.java -text
+cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategyTest.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 e9dd0618aa8243ab0d8e7b39a503249ad33833c7..2e51eecb3487bfd62d0b09721af38fcd4637b419 100644 (file)
@@ -229,6 +229,9 @@ public class Media extends IdentifiableEntity implements Cloneable {
        public void addTitle(LanguageString title){
                this.title.put(title.getLanguage(), title);
        }
+       public void addTitle(String title, Language language){
+               this.title.put(language, LanguageString.NewInstance(title, language));
+       }
        
        public void removeTitle(Language language){
                this.title.remove(language);
@@ -323,24 +326,26 @@ public class Media extends IdentifiableEntity implements Cloneable {
                addTitle(LanguageString.NewInstance(titleCache, Language.DEFAULT()));
        }
        
-       /*
-        * Overriding the title cache methods here to avoid confusion with the title field
-        */
-       
-       /*
-        * (non-Javadoc)
-        * @see eu.etaxonomy.cdm.model.common.IdentifiableEntity#getTitleCache()
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.IIdentifiableEntity#getTitleCache()
         */
        @Override
-       public String getTitleCache() {
-               List<Language> languages = Arrays.asList(new Language[]{Language.DEFAULT()});
-               LanguageString languageString = MultilanguageTextHelper.getPreferredLanguageString(title, languages);
-               return languageString != null ? languageString.getText() : null;
+       public String getTitleCache(){
+               if (protectedTitleCache){
+                       return this.titleCache;                 
+               }
+               // is title dirty, i.e. equal NULL?
+               if (titleCache == null){
+                       this.titleCache = generateTitle();
+                       this.titleCache = getTruncatedCache(this.titleCache) ;
+               }else{
+                       //do the same as listeners on dependend objects like representations parts
+                       //are not yet installed
+                       this.titleCache = generateTitle();
+                       this.titleCache = getTruncatedCache(this.titleCache) ;
+               }
+               return titleCache;
        }
        
-       @Override
-       public String generateTitle() {
-               return getTitleCache();
-       }
        
 }
\ No newline at end of file
index 9dd6109b1eab3b8a4fb7c5446e995b3215bce043..0b059c812c75335f0e4a0844509bc95e2fd11a2f 100644 (file)
@@ -13,22 +13,28 @@ import java.util.Arrays;
 import java.util.List;\r
 import java.util.UUID;\r
 \r
-import javax.persistence.Transient;\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.LanguageString;\r
 import eu.etaxonomy.cdm.model.common.MultilanguageTextHelper;\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
 import eu.etaxonomy.cdm.strategy.StrategyBase;\r
 import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;\r
 \r
-public class MediaDefaultCacheStrategy extends StrategyBase implements\r
-               IIdentifiableEntityCacheStrategy<Media> {\r
+public class MediaDefaultCacheStrategy extends StrategyBase implements IIdentifiableEntityCacheStrategy<Media> {\r
+       protected static final  Logger logger = Logger.getLogger(MediaDefaultCacheStrategy.class);\r
 \r
        final static UUID uuid = UUID.fromString("0517ae48-597d-4d6b-9f18-8752d689720d");\r
+\r
+\r
+       public static MediaDefaultCacheStrategy NewInstance() {\r
+               return new MediaDefaultCacheStrategy();\r
+       }\r
        \r
        @Override\r
        protected UUID getUuid() {\r
@@ -38,24 +44,33 @@ public class MediaDefaultCacheStrategy extends StrategyBase implements
        \r
        public String getTitleCache(Media media) {\r
                media = (Media) HibernateProxyHelper.deproxy(media, Media.class);\r
-               \r
-               List<Language> languages = Arrays.asList(new Language[]{Language.DEFAULT()});\r
-               LanguageString languageString = MultilanguageTextHelper.getPreferredLanguageString(media.getAllTitles(), languages);\r
-               return languageString != null ? languageString.getText() : null;\r
-       \r
+               return getTitleCacheByLanguage(media, Language.DEFAULT());\r
        }\r
        \r
        public String getTitleCacheByLanguage(Media media, Language lang) {\r
+               String result;\r
                List<Language> languages = Arrays.asList(new Language[]{lang});\r
                LanguageString languageString = MultilanguageTextHelper.getPreferredLanguageString(media.getAllTitles(), languages);\r
-               return languageString != null ? languageString.getText() : null;\r
-       \r
+               result = (languageString != null ? languageString.getText() : "");\r
+               \r
+               //get first image uri\r
+               if (StringUtils.isBlank(result)){\r
+                       for (MediaRepresentation mediaRepresentation : media.getRepresentations()){\r
+                               for (MediaRepresentationPart part : mediaRepresentation.getParts()){\r
+                                       result = part.getUri();\r
+                                       break;\r
+                               }\r
+                               if (StringUtils.isBlank(result)){\r
+                                       break;\r
+                               }\r
+                       }\r
+                       if (StringUtils.isBlank(result)){\r
+                               result = "- empty media - <" + media.getUuid() + ">";\r
+                       }\r
+               }\r
+               return result;\r
        }\r
 \r
 \r
-       public static MediaDefaultCacheStrategy NewInstance() {\r
-               return new MediaDefaultCacheStrategy();\r
-       }\r
-\r
        \r
 }\r
diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategyTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategyTest.java
new file mode 100644 (file)
index 0000000..7a23038
--- /dev/null
@@ -0,0 +1,71 @@
+/**\r
+* Copyright (C) 2009 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.media;\r
+\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
+/**\r
+ * @author a.mueller\r
+ *\r
+ */\r
+public class MediaDefaultCacheStrategyTest {\r
+\r
+       /**\r
+        * @throws java.lang.Exception\r
+        */\r
+       @BeforeClass\r
+       public static void setUpBeforeClass() throws Exception {\r
+               new DefaultTermInitializer().initialize();\r
+       }\r
+       \r
+       /**\r
+        * @throws java.lang.Exception\r
+        */\r
+       @Before\r
+       public void setUp() throws Exception {\r
+       }\r
+\r
+       \r
+//*********************** TESTS ****************************************************/\r
+       \r
+       @Test\r
+       public void testGetTitleCache(){\r
+               \r
+               Media media = Media.NewInstance();\r
+               media.addTitle("My best media", Language.DEFAULT());\r
+               Assert.assertEquals("Wrong title cache for media", "My best media", media.getTitleCache());\r
+               \r
+               media = Media.NewInstance();\r
+               Assert.assertTrue("Wrong title cache for media", media.getTitleCache().startsWith("- empty"));\r
+               \r
+               MediaRepresentation representation = MediaRepresentation.NewInstance(null, null, "www.abc.de/Abc my title is here", 0);\r
+               media.addRepresentation(representation);\r
+               Assert.assertEquals("Wrong title cache for media", "www.abc.de/Abc my title is here", media.getTitleCache());\r
+               \r
+               \r
+               \r
+       }\r
+       \r
+}\r