From: Andreas Müller Date: Tue, 22 Jun 2010 16:43:58 +0000 (+0000) Subject: improved cache strategy for media (and resolved some svn merge error) X-Git-Tag: 3.0.3~1112 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/commitdiff_plain/a031194604558cdc775c042d85e7863dbe86b0dd improved cache strategy for media (and resolved some svn merge error) --- diff --git a/.gitattributes b/.gitattributes index e408734ac9..b848d62fea 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/Media.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/Media.java index e9dd0618aa..2e51eecb34 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/Media.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/Media.java @@ -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 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 diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategy.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategy.java index 9dd6109b1e..0b059c812c 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategy.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategy.java @@ -13,22 +13,28 @@ import java.util.Arrays; import java.util.List; import java.util.UUID; -import javax.persistence.Transient; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.Language; import eu.etaxonomy.cdm.model.common.LanguageString; import eu.etaxonomy.cdm.model.common.MultilanguageTextHelper; -import eu.etaxonomy.cdm.model.description.TaxonDescription; import eu.etaxonomy.cdm.model.media.Media; -import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.media.MediaRepresentation; +import eu.etaxonomy.cdm.model.media.MediaRepresentationPart; import eu.etaxonomy.cdm.strategy.StrategyBase; import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy; -public class MediaDefaultCacheStrategy extends StrategyBase implements - IIdentifiableEntityCacheStrategy { +public class MediaDefaultCacheStrategy extends StrategyBase implements IIdentifiableEntityCacheStrategy { + protected static final Logger logger = Logger.getLogger(MediaDefaultCacheStrategy.class); final static UUID uuid = UUID.fromString("0517ae48-597d-4d6b-9f18-8752d689720d"); + + + public static MediaDefaultCacheStrategy NewInstance() { + return new MediaDefaultCacheStrategy(); + } @Override protected UUID getUuid() { @@ -38,24 +44,33 @@ public class MediaDefaultCacheStrategy extends StrategyBase implements public String getTitleCache(Media media) { media = (Media) HibernateProxyHelper.deproxy(media, Media.class); - - List languages = Arrays.asList(new Language[]{Language.DEFAULT()}); - LanguageString languageString = MultilanguageTextHelper.getPreferredLanguageString(media.getAllTitles(), languages); - return languageString != null ? languageString.getText() : null; - + return getTitleCacheByLanguage(media, Language.DEFAULT()); } public String getTitleCacheByLanguage(Media media, Language lang) { + String result; List languages = Arrays.asList(new Language[]{lang}); LanguageString languageString = MultilanguageTextHelper.getPreferredLanguageString(media.getAllTitles(), languages); - return languageString != null ? languageString.getText() : null; - + result = (languageString != null ? languageString.getText() : ""); + + //get first image uri + if (StringUtils.isBlank(result)){ + for (MediaRepresentation mediaRepresentation : media.getRepresentations()){ + for (MediaRepresentationPart part : mediaRepresentation.getParts()){ + result = part.getUri(); + break; + } + if (StringUtils.isBlank(result)){ + break; + } + } + if (StringUtils.isBlank(result)){ + result = "- empty media - <" + media.getUuid() + ">"; + } + } + return result; } - public static MediaDefaultCacheStrategy NewInstance() { - return new MediaDefaultCacheStrategy(); - } - } 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 index 0000000000..7a2303868a --- /dev/null +++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/media/MediaDefaultCacheStrategyTest.java @@ -0,0 +1,71 @@ +/** +* Copyright (C) 2009 EDIT +* European Distributed Institute of Taxonomy +* http://www.e-taxonomy.eu +* +* The contents of this file are subject to the Mozilla Public License Version 1.1 +* See LICENSE.TXT at the top of this package for the full license terms. +*/ + +package eu.etaxonomy.cdm.strategy.cache.media; + + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import eu.etaxonomy.cdm.model.common.DefaultTermInitializer; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.media.Media; +import eu.etaxonomy.cdm.model.media.MediaRepresentation; +import eu.etaxonomy.cdm.model.name.BotanicalName; +import eu.etaxonomy.cdm.model.name.Rank; +import eu.etaxonomy.cdm.model.reference.ReferenceBase; +import eu.etaxonomy.cdm.model.reference.ReferenceFactory; +import eu.etaxonomy.cdm.model.taxon.Taxon; + +/** + * @author a.mueller + * + */ +public class MediaDefaultCacheStrategyTest { + + /** + * @throws java.lang.Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + new DefaultTermInitializer().initialize(); + } + + /** + * @throws java.lang.Exception + */ + @Before + public void setUp() throws Exception { + } + + +//*********************** TESTS ****************************************************/ + + @Test + public void testGetTitleCache(){ + + Media media = Media.NewInstance(); + media.addTitle("My best media", Language.DEFAULT()); + Assert.assertEquals("Wrong title cache for media", "My best media", media.getTitleCache()); + + media = Media.NewInstance(); + Assert.assertTrue("Wrong title cache for media", media.getTitleCache().startsWith("- empty")); + + MediaRepresentation representation = MediaRepresentation.NewInstance(null, null, "www.abc.de/Abc my title is here", 0); + media.addRepresentation(representation); + Assert.assertEquals("Wrong title cache for media", "www.abc.de/Abc my title is here", media.getTitleCache()); + + + + } + +}