Refactored free text search to re-use the same code for all identifiable entities...
authorben.clark <ben.clark@localhost>
Fri, 18 Dec 2009 10:33:28 +0000 (10:33 +0000)
committerben.clark <ben.clark@localhost>
Fri, 18 Dec 2009 10:33:28 +0000 (10:33 +0000)
31 files changed:
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/agent/IAgentDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IIdentifiableDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IVersionableDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/agent/AgentDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmEntityDaoBase.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBase.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/TermVocabularyDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/VersionableDaoBase.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionElementDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/FeatureTreeDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/name/TaxonNameDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/CollectionDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/reference/ReferenceDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonomicTreeDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/media/IMediaDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/name/ITaxonNameDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/ICollectionDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/IOccurrenceDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/reference/IReferenceDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/query/OrderHint.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/query/RandomOrder.java
cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/agent/AgentDaoImplTest.java
cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImplTest.java
cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDeleteListenerTest.java
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/hibernate/CdmDeleteListenerTest.xml

index 1873f498195749f93cfeb85219b73029ea7b8eab..8c2c11be5305a54592e4af63ce18f1123c1b835a 100644 (file)
@@ -20,9 +20,8 @@ import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 \r
-public interface IAgentDao extends IIdentifiableDao<AgentBase>, ISearchableDao<AgentBase> {\r
+public interface IAgentDao extends IIdentifiableDao<AgentBase> {\r
        \r
        public List<Institution> getInstitutionByCode(String code);\r
        \r
index 122a6034ce870978772e795646375a48c565afca..0f62514efc6491a99d2f3a77ad4057bfbb80545c 100644 (file)
@@ -22,7 +22,7 @@ import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
-public interface IIdentifiableDao <T extends IdentifiableEntity> extends IAnnotatableDao<T>, ITitledDao<T>{
+public interface IIdentifiableDao <T extends IdentifiableEntity> extends IAnnotatableDao<T>, ITitledDao<T>, ISearchableDao<T>{
        
        /**
         * Return an object by LSID. NOTE: Because of the fact that LSIDs are supposed to
index a72f05349b349020d7643c46444e590ccb867656..6d44fc43f4db225725d28a28ca4e446fcbe2d7c6 100644 (file)
@@ -46,7 +46,7 @@ public interface IVersionableDao<T extends VersionableEntity> extends ICdmEntity
      * @param sort should the events considered start now and go forward in time (AuditEventSort.FORWARDS) or backwards (AuditEventSort.BACKWARDS)
      * @return a count of audit events
      */
-       public Integer countAuditEvents(T t, AuditEventSort sort);
+       public int countAuditEvents(T t, AuditEventSort sort);
        
        /**
         * A convenience method which returns a record of the next (relative to the audit event in context)
@@ -76,7 +76,7 @@ public interface IVersionableDao<T extends VersionableEntity> extends ICdmEntity
         * @param criteria Extra criteria to filter by
         * @return the count of audit events
         */
-       public Integer countAuditEvents(Class<? extends T> clazz,AuditEvent from,AuditEvent to,List<AuditCriterion> criteria);
+       public int countAuditEvents(Class<? extends T> clazz,AuditEvent from,AuditEvent to,List<AuditCriterion> criteria);
        
        /**
         * Returns a list of all audit events occurring to objects of type T, optionally restricted to objects of type clazz
index e3897d3a7d0acdf46b72cd47153444496759a42c..97861cf4e2a0c6012f1b8f8db2d8648c1d1582b2 100644 (file)
@@ -14,18 +14,12 @@ import java.util.List;
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
-import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Criteria;\r
 import org.hibernate.Query;\r
 import org.hibernate.Session;\r
 import org.hibernate.criterion.Restrictions;\r
 import org.hibernate.envers.query.AuditEntity;\r
 import org.hibernate.envers.query.AuditQuery;\r
-import org.hibernate.search.FullTextSession;\r
-import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.agent.Address;\r
@@ -37,19 +31,13 @@ import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.model.view.AuditEvent;\r
-import eu.etaxonomy.cdm.persistence.dao.QueryParseException;\r
 import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 \r
 @Repository\r
 public class AgentDaoImpl extends IdentifiableDaoBase<AgentBase> implements IAgentDao{\r
        \r
-       private String defaultField = "titleCache";\r
-       private Class<? extends AgentBase> indexedClasses[]; \r
-\r
-       \r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(AgentDaoImpl.class);\r
 \r
@@ -134,99 +122,6 @@ public class AgentDaoImpl extends IdentifiableDaoBase<AgentBase> implements IAge
                return (List<Address>)query.list();\r
        }\r
 \r
-       \r
-\r
-       public int count(Class<? extends AgentBase> clazz, String queryString) {\r
-               checkNotInPriorView("AgentDaoHibernateImpl.count(String queryString, Boolean accepted)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               for(Class clazz : indexedClasses) {\r
-                   fullTextSession.purgeAll(clazz); // remove all taxon base from indexes\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void rebuildIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               \r
-               for(AgentBase agentBase : list(null,null)) { // re-index all agents\r
-                       fullTextSession.index(agentBase);\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public List<AgentBase> search(Class<? extends AgentBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               checkNotInPriorView("AgentDaoHibernateImpl.searchTaxa(String queryString, Boolean accepted,     Integer pageSize, Integer pageNumber)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<AgentBase> results = new ArrayList<AgentBase>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<AgentBase> result = (List<AgentBase>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public String suggestQuery(String string) {\r
-               throw new UnsupportedOperationException("suggestQuery is not supported for AgentBase");\r
-       }\r
-\r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-               for(Class clazz : indexedClasses) {\r
-               searchFactory.optimize(clazz); // optimize the indices ()\r
-               }\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao#getTeamOrPersonBaseUuidAndNomenclaturalTitle()\r
         */\r
index b53405350adbc2be8354ae6d759133bdef225399..db654df2046879b3112f37b0a6b44d87524dc83d 100644 (file)
@@ -11,6 +11,8 @@ package eu.etaxonomy.cdm.persistence.dao.hibernate.common;
 \r
 import java.lang.reflect.Field;\r
 import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
 import java.util.HashMap;\r
 import java.util.Iterator;\r
 import java.util.List;\r
@@ -188,6 +190,17 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
        }\r
        \r
        public UUID delete(T persistentObject) throws DataAccessException {\r
+               if (persistentObject == null){\r
+                       logger.warn(type.getName() + " was 'null'");\r
+                       return null;\r
+               }\r
+               \r
+               // Merge the object in if it is detached\r
+               //\r
+               // I think this is preferable to catching lazy initialization errors \r
+               // as that solution only swallows and hides the exception, but doesn't \r
+               // actually solve it.\r
+               getSession().merge(persistentObject);\r
                getSession().delete(persistentObject);\r
                return persistentObject.getUuid();\r
        }\r
@@ -367,10 +380,23 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
                        \r
        }\r
        \r
+       private class OrderHintComparator implements Comparator<OrderHint> {\r
+\r
+               public int compare(OrderHint o1, OrderHint o2) {\r
+                       return o1.getPropertyName().compareTo(o2.getPropertyName());\r
+               }\r
+               \r
+       }\r
+       \r
        protected void addOrder(Criteria criteria, List<OrderHint> orderHints) {\r
+               \r
                if(orderHints != null){\r
+                       Collections.sort(orderHints, new OrderHintComparator());\r
+                       \r
+                       Map<String,Criteria> criteriaMap = new HashMap<String,Criteria>();\r
                        for(OrderHint orderHint : orderHints){\r
-                               orderHint.add(criteria);\r
+                               System.out.println("Adding OrderHint " + orderHint.getPropertyName());\r
+                               orderHint.add(criteria,criteriaMap);\r
                        }\r
                }\r
        }\r
index 3a789f70292f5a336bcd514544c3dba9664af8a5..8249515bde737a09266996ed9d42357a4a217b94 100644 (file)
@@ -26,16 +26,43 @@ import org.hibernate.envers.query.AuditEntity;
 import org.hibernate.envers.query.AuditQuery;
 import org.springframework.stereotype.Repository;
 
+import eu.etaxonomy.cdm.model.agent.InstitutionType;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.description.AbsenceTerm;
+import eu.etaxonomy.cdm.model.description.MeasurementUnit;
+import eu.etaxonomy.cdm.model.description.Modifier;
 import eu.etaxonomy.cdm.model.description.PresenceTerm;
+import eu.etaxonomy.cdm.model.description.Scope;
+import eu.etaxonomy.cdm.model.description.Sex;
+import eu.etaxonomy.cdm.model.description.Stage;
+import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
+import eu.etaxonomy.cdm.model.description.TextFormat;
+import eu.etaxonomy.cdm.model.location.Continent;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.model.location.NamedAreaType;
+import eu.etaxonomy.cdm.model.location.ReferenceSystem;
+import eu.etaxonomy.cdm.model.location.TdwgArea;
 import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
 import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.model.media.RightsTerm;
+import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;
+import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
+import eu.etaxonomy.cdm.model.occurrence.DeterminationModifier;
+import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.cdm.model.view.AuditEvent;
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
@@ -52,6 +79,41 @@ public class DefinedTermDaoImpl extends IdentifiableDaoBase<DefinedTermBase> imp
 
        public DefinedTermDaoImpl() {
                super(DefinedTermBase.class);
+               indexedClasses = new Class[34];
+               indexedClasses[0] = InstitutionType.class;
+               indexedClasses[1] = AnnotationType.class;
+               indexedClasses[2] = ExtensionType.class;
+               indexedClasses[3] = Language.class;
+               indexedClasses[4] = MarkerType.class;
+               indexedClasses[5] = AbsenceTerm.class;
+               indexedClasses[6] = MeasurementUnit.class;
+               indexedClasses[7] = Modifier.class;
+               indexedClasses[8] = PresenceTerm.class;
+               indexedClasses[9] = Scope.class;
+               indexedClasses[10] = Sex.class;
+               indexedClasses[11] = Stage.class;
+               indexedClasses[12] = State.class;
+               indexedClasses[13] = StatisticalMeasure.class;
+               indexedClasses[14] = TextFormat.class;
+               indexedClasses[15] = Continent.class;
+               indexedClasses[16] = NamedArea.class;
+               indexedClasses[17] = NamedAreaLevel.class;
+               indexedClasses[18] = NamedAreaType.class;
+               indexedClasses[19] = ReferenceSystem.class;
+               indexedClasses[20] = TdwgArea.class;
+               indexedClasses[21] = WaterbodyOrCountry.class;
+               indexedClasses[22] = RightsTerm.class;
+               indexedClasses[23] = HybridRelationshipType.class;
+               indexedClasses[24] = NameRelationshipType.class;
+               indexedClasses[25] = NameTypeDesignationStatus.class;
+               indexedClasses[26] = NomenclaturalStatusType.class;
+               indexedClasses[27] = Rank.class;
+               indexedClasses[28] = SpecimenTypeDesignationStatus.class;
+               indexedClasses[29] = DerivationEventType.class;
+               indexedClasses[30] = DeterminationModifier.class;
+               indexedClasses[31] = PreservationMethod.class;
+               indexedClasses[32] = SynonymRelationshipType.class;
+               indexedClasses[33] = TaxonRelationshipType.class;
        }
 
        /** 
index 4b68a21a411a47118ea32967a7c8a59c6152e4c1..2bed58f5b16391a3098fd66c320ca999e3efce3b 100644 (file)
@@ -11,10 +11,12 @@ package eu.etaxonomy.cdm.persistence.dao.hibernate.common;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
 import org.hibernate.Criteria;
 import org.hibernate.Query;
 import org.hibernate.Session;
@@ -24,6 +26,9 @@ import org.hibernate.criterion.Projections;
 import org.hibernate.criterion.Restrictions;
 import org.hibernate.envers.query.AuditEntity;
 import org.hibernate.envers.query.AuditQuery;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.search.SearchFactory;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Credit;
@@ -32,6 +37,7 @@ import eu.etaxonomy.cdm.model.common.IdentifiableSource;
 import eu.etaxonomy.cdm.model.common.LSID;
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
 import eu.etaxonomy.cdm.model.media.Rights;
+import eu.etaxonomy.cdm.persistence.dao.QueryParseException;
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
@@ -40,7 +46,8 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 public class IdentifiableDaoBase<T extends IdentifiableEntity> extends AnnotatableDaoImpl<T> implements IIdentifiableDao<T>{
        @SuppressWarnings("unused")
        private static final Logger logger = Logger.getLogger(IdentifiableDaoBase.class);
-
+       protected String defaultField = "titleCache";
+       protected Class<? extends T> indexedClasses[]; 
 
        public IdentifiableDaoBase(Class<T> type) {
                super(type);
@@ -299,4 +306,95 @@ public class IdentifiableDaoBase<T extends IdentifiableEntity> extends Annotatab
        return (Integer)criteria.uniqueResult();
        }
 
+       public int count(Class<? extends T> clazz, String queryString) {
+               checkNotInPriorView("IdentifiableDaoBase.count(Class<? extends T> clazz, String queryString)");
+        QueryParser queryParser = new QueryParser(defaultField , new StandardAnalyzer());
+               
+               try {
+                       org.apache.lucene.search.Query query = queryParser.parse(queryString);
+                       
+                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());
+                       org.hibernate.search.FullTextQuery fullTextQuery = null;
+                       
+                       if(clazz == null) {
+                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);
+                       } else {
+                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);
+                       }
+                       
+                   Integer  result = fullTextQuery.getResultSize();
+                   return result;
+
+               } catch (ParseException e) {
+                       throw new QueryParseException(e, queryString);
+               }
+       }
+
+       public void optimizeIndex() {
+               FullTextSession fullTextSession = Search.getFullTextSession(getSession());
+               SearchFactory searchFactory = fullTextSession.getSearchFactory();
+               for(Class clazz : indexedClasses) {
+               searchFactory.optimize(clazz); // optimize the indices ()
+               }
+           fullTextSession.flushToIndexes();
+       }
+
+       public void purgeIndex() {
+               FullTextSession fullTextSession = Search.getFullTextSession(getSession());
+               for(Class clazz : indexedClasses) {
+                   fullTextSession.purgeAll(clazz); // remove all objects of type t from indexes
+               }
+               fullTextSession.flushToIndexes();
+       }
+
+       public void rebuildIndex() {
+        FullTextSession fullTextSession = Search.getFullTextSession(getSession());
+               
+               for(T t : list(null,null)) { // re-index all objects
+                       fullTextSession.index(t);
+               }
+               fullTextSession.flushToIndexes();
+       }
+
+       public List<T> search(Class<? extends T> clazz, String queryString,     Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,List<String> propertyPaths) {
+               checkNotInPriorView("IdentifiableDaoBase.search(Class<? extends T> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,List<String> propertyPaths)");
+               QueryParser queryParser = new QueryParser(defaultField, new StandardAnalyzer());
+               List<T> results = new ArrayList<T>();
+                
+               try {
+                       org.apache.lucene.search.Query query = queryParser.parse(queryString);
+                       
+                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());
+                       org.hibernate.search.FullTextQuery fullTextQuery = null;
+                       
+                       if(clazz == null) {
+                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);
+                       } else {
+                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);
+                       }
+                       
+                       addOrder(fullTextQuery,orderHints);
+                       
+                   if(pageSize != null) {
+                       fullTextQuery.setMaxResults(pageSize);
+                           if(pageNumber != null) {
+                               fullTextQuery.setFirstResult(pageNumber * pageSize);
+                           } else {
+                               fullTextQuery.setFirstResult(0);
+                           }
+                       }
+                   
+                   List<T> result = (List<T>)fullTextQuery.list();
+                   defaultBeanInitializer.initializeAll(result, propertyPaths);
+                   return result;
+
+               } catch (ParseException e) {
+                       throw new QueryParseException(e, queryString);
+               }
+       }
+
+       public String suggestQuery(String string) {
+               throw new UnsupportedOperationException("suggestQuery is not supported for objects of class " + type.getName());
+       }
+
 }
index 91e6710f81d65ef03e3a2b457f6ad5dbcc7741e1..d3d9e7e98d05d9e0c9e536f8f183efa3ba0b5234 100644 (file)
@@ -14,7 +14,6 @@ import java.util.List;
 \r
 import org.hibernate.Criteria;\r
 import org.hibernate.Query;\r
-import org.hibernate.criterion.ProjectionList;\r
 import org.hibernate.criterion.Projections;\r
 import org.hibernate.criterion.Restrictions;\r
 import org.hibernate.envers.query.AuditEntity;\r
@@ -22,6 +21,7 @@ import org.hibernate.envers.query.AuditQuery;
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.view.AuditEvent;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;\r
@@ -39,6 +39,9 @@ public class TermVocabularyDaoImpl extends IdentifiableDaoBase<TermVocabulary> i
         */\r
        public TermVocabularyDaoImpl() {\r
                super(TermVocabulary.class);\r
+               indexedClasses = new Class[2];\r
+               indexedClasses[0] = TermVocabulary.class;\r
+               indexedClasses[1] = OrderedTermVocabulary.class;\r
        }\r
 \r
        public int countTerms(TermVocabulary termVocabulary) {\r
index 8761bb685ecff95a23e8e9a9af60ba4915cf1ad8..a22252591f56359e5dbfca5d181dc6a91bd2a58c 100644 (file)
@@ -246,7 +246,7 @@ public abstract class VersionableDaoBase<T extends VersionableEntity> extends Cd
                return records;\r
        }\r
        \r
-       public Integer countAuditEvents(T t, AuditEventSort sort) {\r
+       public int countAuditEvents(T t, AuditEventSort sort) {\r
                AuditEvent auditEvent = getAuditEventFromContext();\r
                \r
                AuditQuery query = getAuditReader().createQuery().forRevisionsOfEntity(type, false, true);\r
@@ -287,7 +287,7 @@ public abstract class VersionableDaoBase<T extends VersionableEntity> extends Cd
                }\r
        }\r
 \r
-       public Integer countAuditEvents(Class<? extends T> clazz, AuditEvent from,      AuditEvent to, List<AuditCriterion> criteria) {\r
+       public int countAuditEvents(Class<? extends T> clazz, AuditEvent from,  AuditEvent to, List<AuditCriterion> criteria) {\r
                AuditQuery query = null;\r
                \r
                if(clazz == null) {\r
@@ -306,7 +306,7 @@ public abstract class VersionableDaoBase<T extends VersionableEntity> extends Cd
                \r
                addCriteria(query,criteria);\r
                \r
-               query.addProjection(AuditEntity.property("id").count());\r
+               query.addProjection(AuditEntity.revisionNumber().count());\r
                \r
                return ((Long)query.getSingleResult()).intValue();\r
        }\r
@@ -336,6 +336,12 @@ public abstract class VersionableDaoBase<T extends VersionableEntity> extends Cd
                        query.add(AuditEntity.revisionNumber().lt(to.getRevisionNumber()));\r
                } \r
                \r
+               if(sort.equals(AuditEventSort.BACKWARDS)) {\r
+                   query.addOrder(AuditEntity.revisionNumber().desc());\r
+       } else {\r
+                   query.addOrder(AuditEntity.revisionNumber().asc());\r
+       }\r
+               \r
                addCriteria(query,criteria);\r
                \r
                if(pageSize != null) {\r
index d0f2ed469c51ab933ea489ffb462c296e9a241dc..542d00c65111e17d171008c88746607e6912f0d9 100644 (file)
@@ -32,6 +32,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.Scope;\r
+import eu.etaxonomy.cdm.model.description.SpecimenDescription;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
@@ -53,6 +54,10 @@ public class DescriptionDaoImpl extends IdentifiableDaoBase<DescriptionBase> imp
 \r
        public DescriptionDaoImpl() {\r
                super(DescriptionBase.class); \r
+               indexedClasses = new Class[3];\r
+               indexedClasses[0] = TaxonDescription.class;\r
+               indexedClasses[1] = TaxonNameDescription.class;\r
+               indexedClasses[2] = SpecimenDescription.class;\r
        }\r
 \r
        public int countDescriptionByDistribution(Set<NamedArea> namedAreas, PresenceAbsenceTermBase status) {\r
index 475231faa4646669915e3d78b9fd0a25147dd3b9..e0c68d61cbe7a3490bc91baed3612594e1b93c77 100644 (file)
@@ -3,14 +3,11 @@ package eu.etaxonomy.cdm.persistence.dao.hibernate.description;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.lucene.analysis.SimpleAnalyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Sort;
-import org.apache.lucene.search.SortField;
 import org.hibernate.Hibernate;
 import org.hibernate.Query;
-import org.hibernate.envers.query.AuditQuery;
 import org.hibernate.search.FullTextSession;
 import org.hibernate.search.Search;
 import org.hibernate.search.SearchFactory;
@@ -19,7 +16,6 @@ import org.springframework.stereotype.Repository;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.media.Media;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.view.AuditEvent;
 import eu.etaxonomy.cdm.persistence.dao.QueryParseException;
 import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionElementDao;
@@ -58,7 +54,7 @@ public class DescriptionElementDaoImpl extends AnnotatableDaoImpl<DescriptionEle
 
        public int count(Class<? extends DescriptionElementBase> clazz, String queryString) {
                checkNotInPriorView("DescriptionElementDaoImpl.countTextData(String queryString)");
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());
+               QueryParser queryParser = new QueryParser(defaultField, new StandardAnalyzer());
                 
                try {
                        org.apache.lucene.search.Query query = queryParser.parse(queryString);
@@ -123,7 +119,7 @@ public class DescriptionElementDaoImpl extends AnnotatableDaoImpl<DescriptionEle
 
        public List<DescriptionElementBase> search(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
                checkNotInPriorView("DescriptionElementDaoImpl.searchTextData(String queryString, Integer pageSize,     Integer pageNumber)");
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());
+               QueryParser queryParser = new QueryParser(defaultField, new StandardAnalyzer());
                 
                try {
                        org.apache.lucene.search.Query query = queryParser.parse(queryString);
@@ -184,7 +180,7 @@ public class DescriptionElementDaoImpl extends AnnotatableDaoImpl<DescriptionEle
 
        public int count(String queryString) {
                checkNotInPriorView("DescriptionElementDaoImpl.count(String queryString)");
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());
+        QueryParser queryParser = new QueryParser(defaultField, new StandardAnalyzer());
                
                try {
                        org.apache.lucene.search.Query query = queryParser.parse(queryString);
index f306afed5e393bf4904e33de6464f1b180bbd61f..d47a1f4dfbd4786e087b7aadc819321b20f03793 100644 (file)
@@ -17,6 +17,7 @@ import org.springframework.stereotype.Repository;
 \r
 import eu.etaxonomy.cdm.model.description.FeatureNode;\r
 import eu.etaxonomy.cdm.model.description.FeatureTree;\r
+import eu.etaxonomy.cdm.model.description.PolytomousKey;\r
 import eu.etaxonomy.cdm.persistence.dao.description.IFeatureTreeDao;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 \r
@@ -32,6 +33,9 @@ public class FeatureTreeDaoImpl extends IdentifiableDaoBase<FeatureTree> impleme
 \r
        public FeatureTreeDaoImpl() {\r
                super(FeatureTree.class); \r
+               indexedClasses = new Class[2];\r
+               indexedClasses[0] = FeatureTree.class;\r
+               indexedClasses[1] = PolytomousKey.class;\r
        }\r
        \r
        public List<FeatureTree> list() {\r
index 425770bbdf2306ab4f60280b58d06ffe9b6cd643..b82dcb673cc28743afc708ae5964b5c41f548c6d 100644 (file)
@@ -7,16 +7,12 @@
 package eu.etaxonomy.cdm.persistence.dao.hibernate.media;\r
 \r
 import java.net.URI;\r
-import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
 \r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
-import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Criteria;\r
 import org.hibernate.Hibernate;\r
 import org.hibernate.Query;\r
@@ -26,11 +22,9 @@ import org.hibernate.envers.query.AuditEntity;
 import org.hibernate.envers.query.AuditQuery;\r
 import org.hibernate.search.FullTextSession;\r
 import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.common.mediaMetaData.ImageMetaData;\r
-import eu.etaxonomy.cdm.model.agent.AgentBase;\r
 import eu.etaxonomy.cdm.model.description.MediaKey;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
@@ -38,12 +32,9 @@ import eu.etaxonomy.cdm.model.media.Rights;
 import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.view.AuditEvent;\r
-import eu.etaxonomy.cdm.persistence.dao.QueryParseException;\r
 import eu.etaxonomy.cdm.persistence.dao.common.OperationNotSupportedInPriorViewException;\r
-import eu.etaxonomy.cdm.persistence.dao.hibernate.common.AnnotatableDaoImpl;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.media.IMediaDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 /**\r
  * @author a.babadshanjan\r
@@ -52,8 +43,9 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 @Repository\r
 public class MediaDaoHibernateImpl extends IdentifiableDaoBase<Media> implements IMediaDao {\r
 \r
-       private String defaultField = "title.text";\r
-       private Class<? extends Media> indexedClasses[]; \r
+       protected String getDefaultField() {\r
+               return "title.text";\r
+       }\r
        \r
        public MediaDaoHibernateImpl() {\r
                super(Media.class);\r
@@ -174,47 +166,9 @@ public class MediaDaoHibernateImpl extends IdentifiableDaoBase<Media> implements
                return ((Long)query.uniqueResult()).intValue();\r
        }\r
 \r
-       public int count(Class<? extends Media> clazz, String queryString) {\r
-               checkNotInPriorView("MediaDaoHibernateImpl.count(String queryString, Boolean accepted)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-               for(Class clazz : indexedClasses) {\r
-               searchFactory.optimize(clazz); // optimize the indices ()\r
-               }\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               for(Class clazz : indexedClasses) {\r
-                   fullTextSession.purgeAll(clazz); // remove all taxon base from indexes\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
+       \r
 \r
+       @Override\r
        public void rebuildIndex() {\r
         FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
                \r
@@ -226,47 +180,6 @@ public class MediaDaoHibernateImpl extends IdentifiableDaoBase<Media> implements
                }\r
                fullTextSession.flushToIndexes();\r
        }\r
-\r
-       public List<Media> search(Class<? extends Media> clazz, String queryString,     Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,List<String> propertyPaths) {\r
-               checkNotInPriorView("MediaDaoHibernateImpl.searchTaxa(String queryString, Boolean accepted,     Integer pageSize, Integer pageNumber)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<Media> results = new ArrayList<Media>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<Media> result = (List<Media>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public String suggestQuery(String string) {\r
-               throw new UnsupportedOperationException("suggestQuery is not supported for Media");\r
-       }\r
        \r
        public Map<String, String> getMediaMetaData(URI uri, Integer timeOut){\r
                \r
index 26fb8b5e04681f03fa20b92f307b2f502c7c4453..1558de49f933127d4b426b5466d8b52ec6cd4504 100644 (file)
 package eu.etaxonomy.cdm.persistence.dao.hibernate.name;\r
 \r
 import java.util.ArrayList;\r
-import java.util.HashMap;\r
 import java.util.List;\r
-import java.util.Map;\r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
-import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Criteria;\r
 import org.hibernate.Query;\r
 import org.hibernate.criterion.Criterion;\r
@@ -27,9 +22,6 @@ import org.hibernate.criterion.Projections;
 import org.hibernate.criterion.Restrictions;\r
 import org.hibernate.envers.query.AuditEntity;\r
 import org.hibernate.envers.query.AuditQuery;\r
-import org.hibernate.search.FullTextSession;\r
-import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.stereotype.Repository;\r
 \r
@@ -51,7 +43,6 @@ import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;
 import eu.etaxonomy.cdm.model.name.ViralName;\r
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.view.AuditEvent;\r
-import eu.etaxonomy.cdm.persistence.dao.QueryParseException;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;\r
 import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
@@ -79,9 +70,6 @@ extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
                indexedClasses[4] = ViralName.class;\r
                indexedClasses[5] = ZoologicalName.class;\r
        }\r
-       \r
-       private String defaultField = "titleCache";\r
-       private Class<? extends TaxonNameBase> indexedClasses[]; \r
 \r
        public int countHybridNames(NonViralName name, HybridRelationshipType type) {\r
                AuditEvent auditEvent = getAuditEventFromContext();\r
@@ -546,98 +534,6 @@ extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
                \r
        }\r
 \r
-\r
-       public int count(Class<? extends TaxonNameBase> clazz, String queryString) {\r
-               checkNotInPriorView("TaxonNameDaoHibernateImpl.count(String queryString, Boolean accepted)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-               for(Class clazz : indexedClasses) {\r
-               searchFactory.optimize(clazz); // optimize the indices ()\r
-               }\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               for(Class clazz : indexedClasses) {\r
-                   fullTextSession.purgeAll(clazz); // remove all taxon base from indexes\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void rebuildIndex() {\r
-        FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               \r
-               for(TaxonNameBase name : list(null,null)) { // re-index all taxon base\r
-                       fullTextSession.index(name);\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public List<TaxonNameBase> search(Class<? extends TaxonNameBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               checkNotInPriorView("TaxonNameDaoHibernateImpl.searchTaxa(String queryString, Boolean accepted, Integer pageSize, Integer pageNumber)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, TaxonNameBase.class);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<TaxonNameBase> result = (List<TaxonNameBase>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public String suggestQuery(String string) {\r
-               throw new UnsupportedOperationException("suggestQuery is not supported for TaxonNameBase");\r
-       }\r
-\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getUuidAndTitleCacheOfNames()\r
         */\r
index 0185d5fc13a4d3eeac802a5305406811956d108e..4937994430bd2ccb2c6a64885776606117bb748a 100644 (file)
@@ -9,12 +9,8 @@
 \r
 package eu.etaxonomy.cdm.persistence.dao.hibernate.occurrence;\r
 \r
-import java.util.ArrayList;\r
 import java.util.List;\r
 \r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
-import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Criteria;\r
 import org.hibernate.Hibernate;\r
 import org.hibernate.criterion.Restrictions;\r
@@ -22,16 +18,12 @@ import org.hibernate.envers.query.AuditEntity;
 import org.hibernate.envers.query.AuditQuery;\r
 import org.hibernate.search.FullTextSession;\r
 import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.occurrence.Collection;\r
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
 import eu.etaxonomy.cdm.model.view.AuditEvent;\r
-import eu.etaxonomy.cdm.persistence.dao.QueryParseException;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.occurrence.ICollectionDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 @Repository\r
 public class CollectionDaoHibernateImpl extends IdentifiableDaoBase<Collection> implements\r
@@ -41,6 +33,8 @@ public class CollectionDaoHibernateImpl extends IdentifiableDaoBase<Collection>
                \r
        public CollectionDaoHibernateImpl() {\r
                super(Collection.class);\r
+               indexedClasses = new Class[1];\r
+               indexedClasses[0] = Collection.class;\r
        }\r
 \r
        public List<Collection> getCollectionByCode(String code) {\r
@@ -57,43 +51,7 @@ public class CollectionDaoHibernateImpl extends IdentifiableDaoBase<Collection>
                }\r
        }\r
 \r
-       public int count(Class<? extends Collection> clazz, String queryString) {\r
-               checkNotInPriorView("CollectionDaoHibernateImpl.count(Class<? extends Collection> clazz, String queryString)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-           searchFactory.optimize(Collection.class); // optimize the indices ()\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               fullTextSession.purgeAll(Collection.class); // remove all taxon base from indexes\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
+       @Override\r
        public void rebuildIndex() {\r
                 FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
                        \r
@@ -105,45 +63,4 @@ public class CollectionDaoHibernateImpl extends IdentifiableDaoBase<Collection>
                        }\r
                        fullTextSession.flushToIndexes();\r
        }\r
-\r
-       public List<Collection> search(Class<? extends Collection> clazz, String queryString, Integer pageSize, Integer pageNumber,     List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               checkNotInPriorView("CollectionDaoHibernateImpl.search(Class<? extends Collection> clazz, String queryString, Integer pageSize, Integer pageNumber,     List<OrderHint> orderHints, List<String> propertyPaths)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<SpecimenOrObservationBase> results = new ArrayList<SpecimenOrObservationBase>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, SpecimenOrObservationBase.class);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<Collection> result = (List<Collection>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public String suggestQuery(String string) {\r
-               throw new UnsupportedOperationException("suggestQuery is not supported for Collection");\r
-       }\r
 }
\ No newline at end of file
index a3b21e86fca320cadd2009d93ca2f7f3bc0371e1..aa48b165d680aec06a6de2b3d34b9f4218e19fff 100644 (file)
@@ -6,21 +6,16 @@
 \r
 package eu.etaxonomy.cdm.persistence.dao.hibernate.occurrence;\r
 \r
-import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
-import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Hibernate;\r
 import org.hibernate.Query;\r
 import org.hibernate.envers.query.AuditEntity;\r
 import org.hibernate.envers.query.AuditQuery;\r
 import org.hibernate.search.FullTextSession;\r
 import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.media.Media;\r
@@ -30,21 +25,15 @@ import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;\r
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;\r
 import eu.etaxonomy.cdm.model.occurrence.FieldObservation;\r
+import eu.etaxonomy.cdm.model.occurrence.Fossil;\r
 import eu.etaxonomy.cdm.model.occurrence.LivingBeing;\r
 import eu.etaxonomy.cdm.model.occurrence.Observation;\r
 import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
-import eu.etaxonomy.cdm.model.occurrence.Fossil;\r
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.view.AuditEvent;\r
-import eu.etaxonomy.cdm.persistence.dao.QueryParseException;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.taxon.TaxonDaoHibernateImpl;\r
 import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 /**\r
  * @author a.babadshanjan\r
@@ -55,9 +44,6 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
        \r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(TaxonDaoHibernateImpl.class);\r
-       \r
-       private static final String defaultField = "titleCache";\r
-       private Class<? extends SpecimenOrObservationBase> indexedClasses[]; \r
 \r
        public OccurrenceDaoHibernateImpl() {\r
                super(SpecimenOrObservationBase.class);\r
@@ -174,47 +160,7 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
                return results;\r
        }\r
 \r
-       public int count(Class clazz, String queryString) {\r
-               checkNotInPriorView("OccurrenceDaoHibernateImpl.count(String queryString, Boolean accepted)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-               for(Class clazz : indexedClasses) {\r
-               searchFactory.optimize(clazz); // optimize the indices ()\r
-               }\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               for(Class clazz : indexedClasses) {\r
-                   fullTextSession.purgeAll(clazz); // remove all taxon base from indexes\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
+       @Override\r
        public void rebuildIndex() {\r
         FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
                \r
@@ -246,45 +192,4 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
                }\r
                fullTextSession.flushToIndexes();\r
        }\r
-\r
-       public List<SpecimenOrObservationBase> search(Class<? extends SpecimenOrObservationBase> clazz, String queryString,Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               checkNotInPriorView("OccurrenceDaoHibernateImpl.searchTaxa(String queryString, Boolean accepted,        Integer pageSize, Integer pageNumber)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<SpecimenOrObservationBase> results = new ArrayList<SpecimenOrObservationBase>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, SpecimenOrObservationBase.class);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<SpecimenOrObservationBase> result = (List<SpecimenOrObservationBase>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public String suggestQuery(String string) {\r
-               throw new UnsupportedOperationException("suggestQuery is not supported for SpecimenOrObservationBase");\r
-       }\r
 }
\ No newline at end of file
index b57e6af0c6bf7fdd31636faf785e191bda96559c..b2842030362483b790a683a945f8c3d238acbb80 100644 (file)
@@ -13,49 +13,40 @@ import java.util.List;
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
-import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Hibernate;\r
 import org.hibernate.Query;\r
 import org.hibernate.Session;\r
 import org.hibernate.search.FullTextSession;\r
 import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-/*import eu.etaxonomy.cdm.model.reference.Article;\r
+import eu.etaxonomy.cdm.model.reference.Article;\r
 import eu.etaxonomy.cdm.model.reference.Book;\r
 import eu.etaxonomy.cdm.model.reference.BookSection;\r
 import eu.etaxonomy.cdm.model.reference.CdDvd;\r
 import eu.etaxonomy.cdm.model.reference.Database;\r
 import eu.etaxonomy.cdm.model.reference.Generic;\r
-import eu.etaxonomy.cdm.model.reference.InProceedings;\r
-import eu.etaxonomy.cdm.model.reference.Journal;\r
-import eu.etaxonomy.cdm.model.reference.Map;\r
-import eu.etaxonomy.cdm.model.reference.Patent;\r
-import eu.etaxonomy.cdm.model.reference.PersonalCommunication;\r
-import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;\r
-import eu.etaxonomy.cdm.model.reference.Proceedings;\r
-import eu.etaxonomy.cdm.model.reference.PublicationBase;*/\r
 import eu.etaxonomy.cdm.model.reference.IArticle;\r
 import eu.etaxonomy.cdm.model.reference.IBookSection;\r
 import eu.etaxonomy.cdm.model.reference.IInProceedings;\r
 import eu.etaxonomy.cdm.model.reference.IPrintedUnitBase;\r
 import eu.etaxonomy.cdm.model.reference.IReport;\r
 import eu.etaxonomy.cdm.model.reference.IThesis;\r
+import eu.etaxonomy.cdm.model.reference.InProceedings;\r
+import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.Map;\r
+import eu.etaxonomy.cdm.model.reference.Patent;\r
+import eu.etaxonomy.cdm.model.reference.PersonalCommunication;\r
+import eu.etaxonomy.cdm.model.reference.Proceedings;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceType;\r
-/*import eu.etaxonomy.cdm.model.reference.Report;\r
-import eu.etaxonomy.cdm.model.reference.SectionBase;\r
+import eu.etaxonomy.cdm.model.reference.Report;\r
 import eu.etaxonomy.cdm.model.reference.Thesis;\r
-import eu.etaxonomy.cdm.model.reference.WebPage;*/\r
-import eu.etaxonomy.cdm.persistence.dao.QueryParseException;\r
+import eu.etaxonomy.cdm.model.reference.WebPage;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 /**\r
  * @author a.mueller\r
@@ -64,16 +55,13 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 @Repository\r
 @Qualifier("referenceDaoHibernateImpl")\r
 public class ReferenceDaoHibernateImpl extends IdentifiableDaoBase<ReferenceBase> implements IReferenceDao {\r
-       \r
-       private String defaultField = "titleCache";\r
-       private Class<? extends ReferenceBase> indexedClasses[]; \r
-       \r
+               \r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(ReferenceDaoHibernateImpl.class);\r
 \r
        public ReferenceDaoHibernateImpl() {\r
                super(ReferenceBase.class);\r
-               /*indexedClasses = new Class[15];\r
+               indexedClasses = new Class[15];\r
                indexedClasses[0] = Article.class;\r
                indexedClasses[1] = Patent.class;\r
                indexedClasses[2] = PersonalCommunication.class;\r
@@ -88,50 +76,10 @@ public class ReferenceDaoHibernateImpl extends IdentifiableDaoBase<ReferenceBase
                indexedClasses[11] = Book.class;\r
                indexedClasses[12] = Proceedings.class;\r
                indexedClasses[13] = Report.class;\r
-               indexedClasses[14] = Thesis.class;*/\r
-       }\r
-\r
-       public int count(Class<? extends ReferenceBase> clazz, String queryString) {\r
-               checkNotInPriorView("ReferenceDaoHibernateImpl.count(String queryString, Boolean accepted)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-               for(Class clazz : indexedClasses) {\r
-               searchFactory.optimize(clazz); // optimize the indices ()\r
-               }\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               for(Class clazz : indexedClasses) {\r
-                   fullTextSession.purgeAll(clazz); // remove all taxon base from indexes\r
-               }\r
-               fullTextSession.flushToIndexes();\r
+               indexedClasses[14] = Thesis.class;\r
        }\r
 \r
+       @Override\r
        public void rebuildIndex() {\r
         FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
                \r
@@ -156,47 +104,6 @@ public class ReferenceDaoHibernateImpl extends IdentifiableDaoBase<ReferenceBase
                fullTextSession.flushToIndexes();\r
        }\r
 \r
-       public List<ReferenceBase> search(Class<? extends ReferenceBase> clazz, String queryString, Integer pageSize, Integer pageNumber,List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               checkNotInPriorView("ReferenceDaoHibernateImpl.searchTaxa(String queryString, Boolean accepted, Integer pageSize, Integer pageNumber)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<ReferenceBase> results = new ArrayList<ReferenceBase>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<ReferenceBase> result = (List<ReferenceBase>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-\r
-       public String suggestQuery(String string) {\r
-               throw new UnsupportedOperationException("suggestQuery is not supported for ReferenceBase");\r
-       }\r
-\r
        public List<UuidAndTitleCache<ReferenceBase>> getUuidAndTitle(){\r
                List<UuidAndTitleCache<ReferenceBase>> list = new ArrayList<UuidAndTitleCache<ReferenceBase>>();\r
                Session session = getSession();\r
index c26859516c25b2495085d9ff29e9e98f683a28e5..b4eaed2845b2474447dd5d873a084541155c9b90 100644 (file)
@@ -8,7 +8,6 @@
  */\r
 package eu.etaxonomy.cdm.persistence.dao.hibernate.taxon;\r
 \r
-import java.lang.reflect.Field;\r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
 import java.util.Comparator;\r
@@ -21,9 +20,7 @@ import java.util.TreeSet;
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.apache.lucene.analysis.SimpleAnalyzer;\r
 import org.apache.lucene.queryParser.ParseException;\r
-import org.apache.lucene.queryParser.QueryParser;\r
 import org.hibernate.Criteria;\r
 import org.hibernate.FetchMode;\r
 import org.hibernate.Hibernate;\r
@@ -35,25 +32,16 @@ import org.hibernate.envers.query.AuditEntity;
 import org.hibernate.envers.query.AuditQuery;\r
 import org.hibernate.search.FullTextSession;\r
 import org.hibernate.search.Search;\r
-import org.hibernate.search.SearchFactory;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.dao.DataAccessException;\r
 import org.springframework.stereotype.Repository;\r
-import org.springframework.util.ReflectionUtils;\r
 \r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
-import eu.etaxonomy.cdm.model.common.Extension;\r
-import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
 import eu.etaxonomy.cdm.model.common.LSID;\r
-import eu.etaxonomy.cdm.model.common.Marker;\r
 import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.model.common.RelationshipBase.Direction;\r
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
-import eu.etaxonomy.cdm.model.media.Rights;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
@@ -85,15 +73,13 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implements ITaxonDao {       \r
        private AlternativeSpellingSuggestionParser<TaxonBase> alternativeSpellingSuggestionParser;\r
        private static final Logger logger = Logger.getLogger(TaxonDaoHibernateImpl.class);\r
-               \r
-       private String defaultField = "name.titleCache";\r
-       private Class<? extends TaxonBase> indexedClasses[]; \r
 \r
        public TaxonDaoHibernateImpl() {\r
                super(TaxonBase.class);\r
                indexedClasses = new Class[2];\r
                indexedClasses[0] = Taxon.class;\r
                indexedClasses[1] = Synonym.class;\r
+               super.defaultField = "name.titleCache";\r
        }\r
        \r
        @Autowired(required = false)   //TODO switched of because it caused problems when starting CdmApplicationController\r
@@ -673,47 +659,9 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                // actually solve it.\r
                getSession().merge(taxonBase);\r
                \r
-               for(Iterator<Annotation> iterator = taxonBase.getAnnotations().iterator(); iterator.hasNext();) {\r
-                       Annotation annotation = iterator.next();\r
-                   annotation.setAnnotatedObj(null);\r
-                   iterator.remove();\r
-                   getSession().delete(annotation);\r
-           }\r
-               \r
-               for(Iterator<Marker> iterator = taxonBase.getMarkers().iterator(); iterator.hasNext();) {\r
-                       Marker marker = iterator.next();\r
-                   marker.setMarkedObj(null);\r
-                   iterator.remove();\r
-                   getSession().delete(marker);\r
-           }\r
-               \r
-               for(Iterator<Extension> iterator = taxonBase.getExtensions().iterator(); iterator.hasNext();) {\r
-                       Extension extension = iterator.next();\r
-                   extension.setExtendedObj(null);\r
-                   iterator.remove();\r
-                   getSession().delete(extension);\r
-           }\r
-               \r
-               for(Iterator<IdentifiableSource> iterator = taxonBase.getSources().iterator(); iterator.hasNext();) {\r
-                       IdentifiableSource source = iterator.next();\r
-                   source.setSourcedObj(null);\r
-                   iterator.remove();\r
-                   getSession().delete(source);\r
-           }\r
-\r
-               for(Iterator<Rights> iterator = taxonBase.getRights().iterator(); iterator.hasNext();) {\r
-                       Rights rights = iterator.next();\r
-                   iterator.remove();\r
-                   getSession().delete(rights);\r
-           }\r
-               \r
                if (taxonBase instanceof Taxon){ //     is Taxon\r
-                       //taxonRelationships\r
-                       Taxon taxon = (Taxon)taxonBase;\r
-                                               \r
-                       for (Iterator<TaxonRelationship> iterator = taxon.getRelationsFromThisTaxon().iterator(); iterator.hasNext();){\r
+                       for (Iterator<TaxonRelationship> iterator = ((Taxon)taxonBase).getRelationsFromThisTaxon().iterator(); iterator.hasNext();){\r
                                TaxonRelationship relationFromThisTaxon = iterator.next();\r
-                               iterator.remove();\r
                                \r
                                // decrease children count of taxonomic parent by one\r
                                if (relationFromThisTaxon.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {\r
@@ -722,64 +670,9 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                                                toTaxon.setTaxonomicChildrenCount(toTaxon.getTaxonomicChildrenCount() - 1);     \r
                                        }\r
                                }\r
-                               relationFromThisTaxon.setToTaxon(null);\r
-                               relationFromThisTaxon.setFromTaxon(null);\r
-                               getSession().delete(relationFromThisTaxon);\r
-                       }\r
-                       \r
-                       for (Iterator<TaxonRelationship> iterator = taxon.getRelationsToThisTaxon().iterator(); iterator.hasNext();){\r
-                               TaxonRelationship relationToThisTaxon = iterator.next();\r
-                               iterator.remove();\r
-                               \r
-                // set parent cache of child to null\r
-                               if (relationToThisTaxon.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {\r
-                                       Taxon fromTaxon = relationToThisTaxon.getFromTaxon(); // child\r
-                                       if (fromTaxon != null) {\r
-                                               fromTaxon.nullifyTaxonomicParent();\r
-                                       }\r
-                               }\r
-                               relationToThisTaxon.setFromTaxon(null);\r
-                               relationToThisTaxon.setToTaxon(null);\r
-                               getSession().delete(relationToThisTaxon);\r
                        }\r
-                       \r
-                       //SynonymRelationships\r
-                       for (Iterator<SynonymRelationship> iterator = taxon.getSynonymRelations().iterator(); iterator.hasNext();){\r
-                               SynonymRelationship synonymRelation = iterator.next();\r
-                               iterator.remove();\r
-                               synonymRelation.setAcceptedTaxon(null);\r
-                               synonymRelation.setSynonym(null);\r
-                               getSession().delete(synonymRelation);\r
-                       } \r
-                       \r
-                       // Descriptions\r
-                       for (Iterator<TaxonDescription> iterDesc = taxon.getDescriptions().iterator(); iterDesc.hasNext();) {\r
-                               TaxonDescription taxonDescription = iterDesc.next();\r
-                               iterDesc.remove();\r
-                               //taxonDescription.setTaxon(null);\r
-                               Field field = ReflectionUtils.findField(TaxonDescription.class, "taxon", Taxon.class);\r
-                               ReflectionUtils.makeAccessible(field);\r
-                               ReflectionUtils.setField(field, taxonDescription, null);\r
-                               for (Iterator<DescriptionElementBase> iterDescElem = \r
-                                       taxonDescription.getElements().iterator(); iterDescElem.hasNext();) {\r
-                                       DescriptionElementBase descriptionElement = iterDescElem.next();\r
-                                       iterDescElem.remove();\r
-                                       getSession().delete(descriptionElement);\r
-                               }\r
-                               getSession().delete(taxonDescription);\r
-                       }\r
-                       \r
-                       taxon.nullifyTaxonomicParent();\r
-\r
-               } else { //is Synonym\r
-                       Synonym synonym = (Synonym)taxonBase;\r
-                       for (Iterator<SynonymRelationship> iterator = synonym.getSynonymRelations().iterator(); iterator.hasNext();){\r
-                               SynonymRelationship synonymRelation = iterator.next();\r
-                               iterator.remove();\r
-                               synonymRelation.setAcceptedTaxon(null);\r
-                               synonymRelation.setSynonym(null);\r
-                       } ;\r
                }\r
+               \r
                return super.delete(taxonBase);\r
        }\r
 \r
@@ -892,38 +785,6 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                }\r
        }\r
 \r
-       public int count(Class<? extends TaxonBase> clazz, String queryString) {\r
-               checkNotInPriorView("TaxonDaoHibernateImpl.count(String queryString, Boolean accepted)");\r
-        QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(this.getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, type);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                   Integer  result = fullTextQuery.getResultSize();\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
-       \r
-//     public int countTaxaByName(String queryString, Boolean accepted, ReferenceBase sec) {\r
-//             \r
-//             SelectMode selectMode = (accepted ? SelectMode.TAXA : SelectMode.SYNONYMS);\r
-//             Long count = countTaxaByName(queryString, MatchMode.ANYWHERE, selectMode , sec, null);\r
-//             \r
-//             return count.intValue();\r
-//     }\r
-\r
        public int countTaxaByName(Class<? extends TaxonBase> clazz, String genusOrUninomial, String infraGenericEpithet, String specificEpithet,       String infraSpecificEpithet, Rank rank) {\r
                checkNotInPriorView("TaxonDaoHibernateImpl.countTaxaByName(Boolean accepted, String genusOrUninomial,   String infraGenericEpithet, String specificEpithet,     String infraSpecificEpithet, Rank rank)");\r
         Criteria criteria = null;\r
@@ -1179,52 +1040,8 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                        return result;\r
                }\r
        }\r
-\r
-       public List<TaxonBase> search(Class<? extends TaxonBase> clazz, String queryString,Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths)  {\r
-               checkNotInPriorView("TaxonDaoHibernateImpl.searchTaxa(String queryString, Boolean accepted,     Integer pageSize, Integer pageNumber)");\r
-               QueryParser queryParser = new QueryParser(defaultField, new SimpleAnalyzer());\r
-               List<TaxonBase> results = new ArrayList<TaxonBase>();\r
-                \r
-               try {\r
-                       org.apache.lucene.search.Query query = queryParser.parse(queryString);\r
-                       \r
-                       FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-                       org.hibernate.search.FullTextQuery fullTextQuery = null;\r
-                       \r
-                       if(clazz == null) {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, TaxonBase.class);\r
-                       } else {\r
-                               fullTextQuery = fullTextSession.createFullTextQuery(query, clazz);\r
-                       }\r
-                       \r
-                       addOrder(fullTextQuery,orderHints);\r
-                       \r
-                   if(pageSize != null) {\r
-                       fullTextQuery.setMaxResults(pageSize);\r
-                           if(pageNumber != null) {\r
-                               fullTextQuery.setFirstResult(pageNumber * pageSize);\r
-                           } else {\r
-                               fullTextQuery.setFirstResult(0);\r
-                           }\r
-                       }\r
-                   \r
-                   List<TaxonBase> result = (List<TaxonBase>)fullTextQuery.list();\r
-                   defaultBeanInitializer.initializeAll(result, propertyPaths);\r
-                   return result;\r
-\r
-               } catch (ParseException e) {\r
-                       throw new QueryParseException(e, queryString);\r
-               }\r
-       }\r
        \r
-       public void purgeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               for(Class clazz : indexedClasses) {\r
-                   fullTextSession.purgeAll(clazz); // remove all taxon base from indexes\r
-               }\r
-               fullTextSession.flushToIndexes();\r
-       }\r
-\r
+       @Override\r
        public void rebuildIndex() {\r
                FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
                \r
@@ -1235,15 +1052,7 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                fullTextSession.flushToIndexes();\r
        }\r
        \r
-       public void optimizeIndex() {\r
-               FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
-               SearchFactory searchFactory = fullTextSession.getSearchFactory();\r
-               for(Class clazz : indexedClasses) {\r
-               searchFactory.optimize(clazz); // optimize the indices ()\r
-               }\r
-           fullTextSession.flushToIndexes();\r
-       }\r
-\r
+       @Override\r
        public String suggestQuery(String queryString) {\r
                checkNotInPriorView("TaxonDaoHibernateImpl.suggestQuery(String queryString)");\r
                String alternativeQueryString = null;\r
@@ -1354,6 +1163,4 @@ public class TaxonDaoHibernateImpl extends IdentifiableDaoBase<TaxonBase> implem
                // TODO Auto-generated method stub\r
                return null;\r
        }\r
-\r
-       \r
 }\r
index b638040ca6e8c94fd4a432c3d0fc0607f413ebee..e1af5d15afcaa53b7cef29900b87992cd52ad3ed 100644 (file)
@@ -32,6 +32,8 @@ public class TaxonomicTreeDaoHibernateImpl extends IdentifiableDaoBase<Taxonomic
        \r
        public TaxonomicTreeDaoHibernateImpl() {\r
                super(TaxonomicTree.class);\r
+               indexedClasses = new Class[1];\r
+               indexedClasses[0] = TaxonomicTree.class;\r
        }\r
        \r
        \r
index cb127b14ca081185036eaca719d80007d0de8992..291a80b596d2b8be546fd85787a05e7fffe74f1a 100644 (file)
@@ -12,21 +12,18 @@ import java.util.Map;
 import java.util.Set;\r
 \r
 import eu.etaxonomy.cdm.model.description.MediaKey;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
 import eu.etaxonomy.cdm.model.media.Rights;\r
-import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;\r
-import eu.etaxonomy.cdm.persistence.dao.common.IAnnotatableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 \r
 /**\r
  * @author a.babadshanjan\r
  * @created 08.09.2008\r
  */\r
-public interface IMediaDao extends IIdentifiableDao<Media>, ISearchableDao<Media> {\r
+public interface IMediaDao extends IIdentifiableDao<Media> {\r
        \r
        /**\r
         * Return a count of MediaKeys, optionally filtered by the parameters passed.\r
index a562af13da0235a3a70888de93f20484272fd268..f1362db3bb51837acb02db199ab7435f4e66f857 100644 (file)
@@ -9,27 +9,23 @@
 package eu.etaxonomy.cdm.persistence.dao.name;\r
 \r
 import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
 \r
 import org.hibernate.criterion.Criterion;\r
 \r
 import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\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.persistence.dao.BeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
@@ -37,7 +33,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
  * @author a.mueller\r
  * \r
  */\r
-public interface ITaxonNameDao extends IIdentifiableDao<TaxonNameBase>, ISearchableDao<TaxonNameBase> {\r
+public interface ITaxonNameDao extends IIdentifiableDao<TaxonNameBase> {\r
 \r
        /**\r
         * Return a count of names related to or from this name, optionally filtered\r
index 73688468b37102ff1f812c0fa4e3dc6bf6e9bb7b..ddd93aecffadc22fc290dec5650c43146b538c12 100644 (file)
@@ -13,9 +13,8 @@ import java.util.List;
 
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;
 
-public interface ICollectionDao extends IIdentifiableDao<Collection>, ISearchableDao<Collection> {
+public interface ICollectionDao extends IIdentifiableDao<Collection> {
        
        /**
         * Returns a list of Collection instances matching the code supplied
index ebd6bc2665aecd327bc2b72389b4b5ee404aacb9..ca06f691b14a7d60727fbb576e770966f7f8cddb 100644 (file)
@@ -14,13 +14,12 @@ import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
 import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 \r
 /**\r
  * @author a.babadshanjan\r
  * @created 01.09.2008\r
  */\r
-public interface IOccurrenceDao extends IIdentifiableDao<SpecimenOrObservationBase>, ISearchableDao<SpecimenOrObservationBase> {\r
+public interface IOccurrenceDao extends IIdentifiableDao<SpecimenOrObservationBase> {\r
        \r
        /**\r
      * Returns a count of Media that are associated with a given occurence\r
index 41ae81526fa91348d3aa8b51be16a8826aa333b4..95b645e4a45332bebc17ae8ec1a5908c22504237 100644 (file)
@@ -13,14 +13,13 @@ import java.util.List;
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;\r
 \r
 /**\r
  * @author a.mueller\r
  *\r
  */\r
-public interface IReferenceDao extends IIdentifiableDao<ReferenceBase>, ITitledDao<ReferenceBase>, ISearchableDao<ReferenceBase> {\r
+public interface IReferenceDao extends IIdentifiableDao<ReferenceBase>, ITitledDao<ReferenceBase> {\r
        public List<UuidAndTitleCache<ReferenceBase>> getUuidAndTitle();\r
        /**\r
         * @return all references marked with publish-flag\r
index be0bfe2fdb6b8526f0fa6fa2950219a1694f5b6e..57384be268b311dfad019f3e97c560b680fc9937 100644 (file)
@@ -31,7 +31,6 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
 import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
-import eu.etaxonomy.cdm.persistence.dao.common.ISearchableDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;\r
 import eu.etaxonomy.cdm.persistence.fetch.CdmFetch;\r
 import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
@@ -41,30 +40,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
  * @author a.mueller\r
  *\r
  */\r
-public interface ITaxonDao extends IIdentifiableDao<TaxonBase>, ITitledDao<TaxonBase>, ISearchableDao<TaxonBase> {\r
-       \r
-//     /**\r
-//      * Returns a count of TaxonBase instances (or Taxon instances, if accepted == true, or Synonym instance, if accepted == false) \r
-//      * where the taxonBase.name.nameCache property matches the String queryString\r
-//      * \r
-//      * @param queryString\r
-//      * @param accepted\r
-//      * @param sec\r
-//      * @return a count of the matching taxa\r
-//      */\r
-//     public int countTaxaByName(String queryString, Boolean accepted, ReferenceBase sec);\r
-\r
-//     /**\r
-//      * Returns a count of TaxonBase instances where the\r
-//      * taxon.name properties match the parameters passed.\r
-//      * \r
-//      * @param queryString search string\r
-//      * @param matchMode way how search string shall be matched: exact, beginning, or anywhere\r
-//      * @param selectMode either all taxon bases, or all taxa, or all synonyms\r
-//      * @param sec reference\r
-//      */ \r
-//     public Integer countTaxaByName(String queryString, \r
-//                     MatchMode matchMode, SelectMode selectMode, ReferenceBase sec);\r
+public interface ITaxonDao extends IIdentifiableDao<TaxonBase>, ITitledDao<TaxonBase> {\r
 \r
        /** \r
         * Returns a list of TaxonBase instances where the taxon.titleCache property matches the name parameter, \r
index 208be2a7a4477276cbcf8499dcd4f88d559262b8..1b2d1aade8b52d281e26eac0f0568ffdb3812a47 100644 (file)
@@ -9,10 +9,14 @@
 \r
 package eu.etaxonomy.cdm.persistence.query;\r
 \r
+import java.util.List;\r
+import java.util.Map;\r
+\r
 import org.hibernate.Criteria;\r
 import org.hibernate.criterion.Order;\r
 import org.hibernate.envers.query.AuditEntity;\r
 import org.hibernate.envers.query.AuditQuery;\r
+import org.hibernate.search.FullTextQuery;\r
 \r
 import eu.etaxonomy.cdm.persistence.dao.common.OperationNotSupportedInPriorViewException;\r
 \r
@@ -62,25 +66,41 @@ public class OrderHint {
                return sortOrder.equals(SortOrder.ASCENDING);\r
        }\r
        \r
-       public void add(Criteria criteria) {\r
-               Order order;\r
-               String assocObj = null, propname;\r
-               int pos;\r
-               if((pos = getPropertyName().indexOf('.', 0)) >= 0){\r
-                       assocObj = getPropertyName().substring(0, pos);\r
-                       propname = getPropertyName().substring(pos + 1);\r
-               } else {\r
-                       propname = getPropertyName();\r
-               }\r
-               if(isAscending()){\r
-                       order = Order.asc(propname);                                    \r
-               } else {\r
-                       order = Order.desc(propname);\r
-               }\r
-               if(assocObj != null){\r
-                       criteria.createCriteria(assocObj).addOrder(order);\r
+       public void add(Criteria criteria, Map<String, Criteria> criteriaMap) {\r
+               if(getPropertyName().indexOf(".") != -1) {\r
+                       /**\r
+                        * Here we have to work a bit of magic as currently hibernate will\r
+                        * throw an error if we attempt to join the same association twice.\r
+                        * \r
+                        * http://opensource.atlassian.com/projects/hibernate/browse/HHH-879\r
+                        */\r
+                       Order order;\r
+                       \r
+                       String[] assocObjs = getPropertyName().split("\\.");\r
+                       String path = "";\r
+                       Criteria c = criteria;\r
+                       for(int i = 0; i < assocObjs.length - 1; i++) {\r
+                               path = path + assocObjs[i];\r
+                               if(criteriaMap.get(path) == null) {\r
+                                       c = c.createCriteria(assocObjs[i]);\r
+                                       criteriaMap.put(path, c);\r
+                               } else {\r
+                                       c = criteriaMap.get(path);\r
+                               }                              \r
+                path = path + '.';\r
+            }\r
+                       String propname = assocObjs[assocObjs.length - 1];\r
+                       if(isAscending()){\r
+                               c.addOrder(Order.asc(propname));                                        \r
+                       } else {\r
+                               c.addOrder(Order.desc(propname));\r
+                       }\r
                } else {\r
-                       criteria.addOrder(order);                               \r
+                       if(isAscending()){\r
+                               criteria.addOrder(Order.asc(getPropertyName()));                                        \r
+                       } else {\r
+                               criteria.addOrder(Order.desc(getPropertyName()));\r
+                       }\r
                }\r
        }\r
        \r
index f4c2884d0468c68051e3feae628812baa81c6560..0743381fb459ba87b9a715dc4c3633c358e02715 100644 (file)
@@ -1,5 +1,7 @@
 package eu.etaxonomy.cdm.persistence.query;
 
+import java.util.Map;
+
 import org.hibernate.Criteria;
 import org.hibernate.HibernateException;
 import org.hibernate.criterion.CriteriaQuery;
@@ -18,7 +20,7 @@ public class RandomOrder extends OrderHint {
     }
        
        @Override
-       public void add(Criteria criteria) {
+       public void add(Criteria criteria, Map<String, Criteria> criteriaMap) {
                criteria.addOrder(new RandomHibernateOrder());
        }
     
index 91aaf93e384b7efb4400bde25a6431ea6c35fd13..4f54ab51dbae5dfc6e68b715670a79b6a5d6d4ab 100644 (file)
@@ -186,6 +186,12 @@ public class AgentDaoImplTest extends CdmTransactionalIntegrationTest {
                Assert.assertEquals("There should be nine agents in the previous view",9, agentDao.count());\r
        }\r
        \r
+       @Test\r
+       @DataSet("AgentDaoImplTest.testExists.xml")\r
+       public void testCountAuditEvents() {\r
+               Assert.assertEquals("There should be eleven AuditEvents",11, agentDao.countAuditEvents(null, null, null, null));\r
+       }\r
+       \r
        @Test\r
        @DataSet("AgentDaoImplTest.testExists.xml")\r
        public void testList() {\r
index 30ce611c087be7dcd217d00054071733b621b31d..262b02686319a12592480e767d73df7fe9868455 100644 (file)
@@ -370,8 +370,10 @@ public class TaxonDaoHibernateImplTest extends CdmTransactionalIntegrationTest {
                propertyPaths.add("fromTaxon");\r
                propertyPaths.add("fromTaxon.name");\r
                List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
-               orderHints.add(new OrderHint("relatedFrom.titleCache", SortOrder.ASCENDING));\r
-               \r
+               orderHints.add(new OrderHint("relatedFrom.name.genusOrUninomial", SortOrder.ASCENDING));\r
+               orderHints.add(new OrderHint("relatedFrom.name.specificEpithet", SortOrder.ASCENDING));\r
+               orderHints.add(new OrderHint("relatedFrom.name.infraSpecificEpithet", SortOrder.ASCENDING));\r
+                                                              \r
                List<TaxonRelationship> relatedTaxa = taxonDao.getTaxonRelationships(taxon, TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(), null, null, orderHints,propertyPaths, TaxonRelationship.Direction.relatedTo);\r
                assertNotNull("getRelatedTaxa should return a List",relatedTaxa);\r
                assertEquals("getRelatedTaxa should return all 23 related taxa",relatedTaxa.size(),23);\r
index 90a710472fe87b383a811dc4d63ec9e3dfebca2b..af081b7f1f6add4f708eb42a686f4200e2aa01e3 100644 (file)
@@ -17,6 +17,7 @@ import java.util.UUID;
 \r
 import org.apache.log4j.Logger;\r
 import org.junit.Assert;\r
+import org.junit.Before;\r
 import org.junit.Ignore;\r
 import org.junit.Test;\r
 import org.unitils.dbunit.annotation.DataSet;\r
@@ -26,28 +27,30 @@ import org.unitils.spring.annotation.SpringBeanByType;
 import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;\r
-import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
 \r
 /**\r
  * @author a.mueller\r
  * @created 17.09.2009\r
  * @version 1.0\r
  */\r
-public class CdmDeleteListenerTest extends CdmIntegrationTest {\r
+public class CdmDeleteListenerTest extends CdmTransactionalIntegrationTest {\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(CdmDeleteListenerTest.class);\r
 \r
        @SpringBeanByType\r
        private ITaxonNameDao taxonNameDao;\r
 \r
-       private UUID name1Uuid = UUID.fromString("a49a3963-c4ea-4047-8588-2f8f15352730");\r
+       private UUID uuid;\r
        \r
-       @Ignore\r
-       @Test\r
-       @DataSet("CdmDeleteListenerTest.xml")\r
-       public void testTaxonNameDao() throws Exception {\r
-               assertNotNull("taxonNameDao should exist",taxonNameDao);\r
+       /**\r
+        * @throws java.lang.Exception\r
+        */\r
+       @Before\r
+       public void setUp() throws Exception {\r
+               uuid = UUID.fromString("a49a3963-c4ea-4047-8588-2f8f15352730");\r
        }\r
        \r
        /**\r
@@ -57,15 +60,17 @@ public class CdmDeleteListenerTest extends CdmIntegrationTest {
        @DataSet("CdmDeleteListenerTest.xml")\r
        @ExpectedDataSet\r
        public void testOnDelete() {\r
-               NonViralName name1 = (NonViralName)taxonNameDao.findByUuid(name1Uuid);\r
-               assertNotNull(name1);\r
-               Set<NameRelationship> relations = name1.getNameRelations();\r
+               NonViralName name = (NonViralName)taxonNameDao.findByUuid(uuid);\r
+               assertNotNull(name);\r
+               Set<NameRelationship> relations = name.getNameRelations();\r
                Assert.assertEquals("There must be 1 name relationship", 1, relations.size());\r
-               name1.removeNameRelationship(relations.iterator().next());\r
+               name.removeNameRelationship(relations.iterator().next());\r
                \r
-               Set<HybridRelationship> hybridRels = name1.getParentRelationships();\r
+               Set<HybridRelationship> hybridRels = name.getParentRelationships();\r
                Assert.assertEquals("There must be 1 parent relationship", 1, hybridRels.size());\r
                \r
-               taxonNameDao.saveOrUpdate(name1);\r
+               taxonNameDao.saveOrUpdate(name);\r
+               setComplete();\r
+               endTransaction();\r
        }\r
 }\r
index 6ade66b05ee478fecba38d6547745ab20f6a5172..2770b646758562bca2f2e97a4075a38aa8bdf16e 100644 (file)
@@ -18,5 +18,4 @@
   <TAXONBASE DTYPE="Taxon" ID="1001" SEC_ID="1" CREATED="2008-01-10 09:56:07.0" UUID="496b1325-be50-4b0a-9aa2-3ecd610215f2" UPDATED="2008-12-10 09:56:07.253" TITLECACHE=" sec. ???" PROTECTEDTITLECACHE="true" TAXONSTATUSUNKNOWN="false" DOUBTFUL="false" USENAMECACHE="false" TAXONOMICCHILDRENCOUNT="1" TAXONNAME_FK="1"/>\r
   <TAXONBASE DTYPE="Taxon" ID="1002" SEC_ID="1" CREATED="2008-01-12 09:56:07.0" UUID="822d98dc-9ef7-44b7-a870-94573a3bcb46" UPDATED="2008-12-10 09:56:07.253" TITLECACHE="  sec. ???" PROTECTEDTITLECACHE="true" TAXONSTATUSUNKNOWN="false" DOUBTFUL="false" USENAMECACHE="false" TAXONOMICCHILDRENCOUNT="0" TAXONOMICPARENTCACHE_ID="1" TAXONNAME_FK="2"/>\r
   <TAXONBASE DTYPE="Synonym" ID="1003" SEC_ID="2" CREATED="2009-12-10 09:56:07.0" UUID="d75b2e3d-7394-4ada-b6a5-93175b8751c1" UPDATED="2008-12-10 09:56:07.253" TITLECACHE="Atropos Agassiz, 1846 sec. cate-sphingidae.org" PROTECTEDTITLECACHE="true" TAXONSTATUSUNKNOWN="false" DOUBTFUL="false" USENAMECACHE="false" TAXONNAME_FK="27"/>\r
-  \r
 </dataset>
\ No newline at end of file