X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/a13c5f660e612247367698f15186260a25a10650..7f3d97b0d181b0da0d8551587a2091d765b2f62c:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java index 69619f100b..010f9c209c 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java @@ -12,14 +12,14 @@ package eu.etaxonomy.cdm.api.service; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import org.hibernate.criterion.Criterion; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator; @@ -38,6 +38,8 @@ import eu.etaxonomy.cdm.model.name.NonViralName; import eu.etaxonomy.cdm.model.reference.Reference; import eu.etaxonomy.cdm.model.reference.ReferenceFactory; import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao; +import eu.etaxonomy.cdm.persistence.dao.hibernate.HibernateBeanInitializer; +import eu.etaxonomy.cdm.persistence.dao.initializer.AutoPropertyInitializer; import eu.etaxonomy.cdm.persistence.query.MatchMode; import eu.etaxonomy.cdm.persistence.query.OrderHint; import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder; @@ -53,8 +55,8 @@ import eu.etaxonomy.cdm.strategy.merge.MergeException; public abstract class IdentifiableServiceBase> extends AnnotatableServiceBase implements IIdentifiableEntityService{ - @Autowired - protected ICommonService commonService; +// @Autowired +// protected ICommonService commonService; protected static final int UPDATE_TITLE_CACHE_DEFAULT_STEP_SIZE = 1000; @@ -217,7 +219,7 @@ public abstract class IdentifiableServiceBase clazz, Integer stepSize, IIdentifiableEntityCacheStrategy cacheStrategy, IProgressMonitor monitor) { + protected void updateTitleCacheImpl(Class clazz, Integer stepSize, IIdentifiableEntityCacheStrategy cacheStrategy, IProgressMonitor monitor) { if (stepSize == null){ stepSize = UPDATE_TITLE_CACHE_DEFAULT_STEP_SIZE; } @@ -232,7 +234,12 @@ public abstract class IdentifiableServiceBase orderHints = new ArrayList(); orderHints.add( new OrderHint("id", OrderHint.SortOrder.ASCENDING)); - List list = this.list(clazz, stepSize, i, orderHints, null); + + + Map, AutoPropertyInitializer> oldAutoInit = switchOfAutoinitializer(); + List list = this.list(clazz, stepSize, i, orderHints, null); + switchOnOldAutoInitializer(oldAutoInit); + List entitiesToUpdate = new ArrayList(); for (T entity : list){ if (entity.isProtectedTitleCache() == false){ @@ -257,6 +264,31 @@ public abstract class IdentifiableServiceBase, AutoPropertyInitializer> oldAutoInit) { + HibernateBeanInitializer initializer = (HibernateBeanInitializer)this.appContext.getBean("defaultBeanInitializer"); + initializer.setBeanAutoInitializers(oldAutoInit); + } + + /** + * Removes all auto initializers from the bean initializer + * + * @see #switchOnOldAutoInitializer(Map) + * @return + */ + protected Map, AutoPropertyInitializer> switchOfAutoinitializer() { + HibernateBeanInitializer initializer = (HibernateBeanInitializer)this.appContext.getBean("defaultBeanInitializer"); + Map, AutoPropertyInitializer> oldAutoInitializers = initializer.getBeanAutoInitializers(); + Map, AutoPropertyInitializer> map = new HashMap, AutoPropertyInitializer>(); + initializer.setBeanAutoInitializers(map); + return oldAutoInitializers; + } + /** * @param cacheStrategy * @param entitiesToUpdate @@ -297,11 +329,12 @@ public abstract class IdentifiableServiceBase nvn = (NonViralName) entity; if (!nvn.isProtectedNameCache()){ @@ -314,28 +347,51 @@ public abstract class IdentifiableServiceBase ref = (Reference) entity; + if (!ref.isProtectedAbbrevTitleCache()){ + ref.setProtectedAbbrevTitleCache(true); + oldAbbrevTitleCache = ref.getAbbrevTitleCache(); + ref.setProtectedAbbrevTitleCache(false); + } } setOtherCachesNull(entity); //TODO find better solution String newTitleCache = entityCacheStrategy.getTitleCache(entity); if (oldTitleCache == null || oldTitleCache != null && ! oldTitleCache.equals(newTitleCache) ){ entity.setTitleCache(null, false); - entity.getTitleCache(); + String newCache = entity.getTitleCache(); + if (newCache == null){ + logger.warn("newCache should never be null"); + } + if (oldTitleCache == null){ + logger.info("oldTitleCache should never be null"); + } if (entity instanceof NonViralName){ NonViralName nvn = (NonViralName) entity; nvn.getNameCache(); nvn.getFullTitleCache(); } + if (entity instanceof Reference){ + Reference ref = (Reference) entity; + ref.getAbbrevTitleCache(); + } entitiesToUpdate.add(entity); }else if (entity instanceof NonViralName){ NonViralName nvn = (NonViralName) entity; - String newnameCache = nvn.getNameCache(); + String newNameCache = nvn.getNameCache(); String newFullTitleCache = nvn.getFullTitleCache(); - if (oldNameCache == null || (oldNameCache != null && !oldNameCache.equals(newnameCache))){ + if (oldNameCache == null || (oldNameCache != null && !oldNameCache.equals(newNameCache))){ entitiesToUpdate.add(entity); }else if (oldFullTitleCache == null || (oldFullTitleCache != null && !oldFullTitleCache.equals(newFullTitleCache))){ entitiesToUpdate.add(entity); } + }else if (entity instanceof Reference){ + Reference ref = (Reference) entity; + String newAbbrevTitleCache = ref.getAbbrevTitleCache(); + if (oldAbbrevTitleCache == null || (oldAbbrevTitleCache != null && !oldAbbrevTitleCache.equals(newAbbrevTitleCache))){ + entitiesToUpdate.add(entity); + } } } @@ -364,7 +420,7 @@ public abstract class IdentifiableServiceBase clazz, IMatchStrategy matchStrategy, IMergeStrategy mergeStrategy) { DeduplicateState dedupState = new DeduplicateState(); @@ -484,6 +540,9 @@ public abstract class IdentifiableServiceBase