taking over class from IdentificationKeyGenerator2:
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / NameServiceImpl.java
index 40f2910a1acbb30e1cdbbcb7de0578cb4b20814b..2a40aa4f1af71457956a1914fdd3e1ccf8e950fc 100644 (file)
@@ -14,7 +14,6 @@ import java.util.ArrayList;
 import java.util.Collection;\r
 import java.util.List;\r
 import java.util.Map;\r
-import java.util.Set;\r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
@@ -22,21 +21,18 @@ import org.hibernate.criterion.Criterion;
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;\r
-import eu.etaxonomy.cdm.api.service.config.INameServiceConfigurator;\r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.ReferencedEntityBase;\r
 import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
-import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
@@ -46,11 +42,9 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
-import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IOrderedTermVocabularyDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IReferencedEntityDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;\r
@@ -63,7 +57,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 \r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxonNameDao> implements INameService {\r
        static private final Logger logger = Logger.getLogger(NameServiceImpl.class);\r
        \r
@@ -229,17 +223,13 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
                return typeDesignationVocabulary;\r
        }\r
 \r
-       public void generateTitleCache() {\r
-               logger.warn("Not yet implemented");\r
-               // TODO Auto-generated method stub\r
-       }\r
 \r
        @Autowired\r
        protected void setDao(ITaxonNameDao dao) {\r
                this.dao = dao;\r
        }\r
 \r
-       public Pager<HybridRelationship> getHybridNames(BotanicalName name,     HybridRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+       public Pager<HybridRelationship> getHybridNames(NonViralName name,      HybridRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Integer numberOfResults = dao.countHybridNames(name, type);\r
                \r
                List<HybridRelationship> results = new ArrayList<HybridRelationship>();\r
@@ -277,8 +267,13 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
 \r
                List<NameRelationship> results = new ArrayList<NameRelationship>();\r
                if (numberOfResults > 0) { // no point checking again\r
-                       results = dao.getNameRelationships(name, NameRelationship.Direction.relatedTo, type, pageSize, pageNumber,\r
-                               orderHints, propertyPaths);\r
+                       results = dao.getNameRelationships(name, \r
+                                                                                          NameRelationship.Direction.relatedTo, \r
+                                                                                          type, \r
+                                                                                          pageSize, \r
+                                                                                          pageNumber,\r
+                                                              orderHints, \r
+                                                              propertyPaths);\r
                }\r
                return results;\r
        }\r
@@ -328,17 +323,6 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
                \r
                return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
-       \r
-       public Pager<TaxonNameBase> search(Class<? extends TaxonNameBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
 \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.service.INameService#getUuidAndTitleCacheOfNames()\r
@@ -357,4 +341,36 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
                        \r
                  return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
+\r
+       public HomotypicalGroup findHomotypicalGroup(UUID uuid) {\r
+               return homotypicalGroupDao.findByUuid(uuid);\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache()\r
+        */\r
+       @Override\r
+       public void updateTitleCache() {\r
+               Class<TaxonNameBase> clazz = TaxonNameBase.class;\r
+               super.updateTitleCache(clazz, null, null);\r
+       }\r
+       \r
+       @Override\r
+       protected void setOtherCachesNull(TaxonNameBase name) {\r
+               if (name.isInstanceOf(NonViralName.class)){\r
+                       NonViralName nvn = CdmBase.deproxy(name, NonViralName.class);\r
+                       if (! nvn.isProtectedNameCache()){\r
+                               nvn.setNameCache(null, false);\r
+                       }\r
+                       if (! nvn.isProtectedAuthorshipCache()){\r
+                               nvn.setAuthorshipCache(null, false);\r
+                       }\r
+                       if (! nvn.isProtectedFullTitleCache()){\r
+                               nvn.setFullTitleCache(null, false);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       \r
 }\r