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
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
* @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)
* @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
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
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
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
\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
}\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
\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
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;
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;
}
/**
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;
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;
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;
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);
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());
+ }
+
}
\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
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
*/\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
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
}\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
\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
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
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
\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
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;
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;
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);
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);
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);
\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
\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
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
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
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
@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
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
}\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
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
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
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
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
\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
\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
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
\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
}\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
}\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
\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
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
\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
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
}\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
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
@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
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
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
*/\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
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
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
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
// 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
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
}\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
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
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
// TODO Auto-generated method stub\r
return null;\r
}\r
-\r
- \r
}\r
\r
public TaxonomicTreeDaoHibernateImpl() {\r
super(TaxonomicTree.class);\r
+ indexedClasses = new Class[1];\r
+ indexedClasses[0] = TaxonomicTree.class;\r
}\r
\r
\r
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
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
* @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
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
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
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
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
* @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
\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
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
package eu.etaxonomy.cdm.persistence.query;
+import java.util.Map;
+
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
}
@Override
- public void add(Criteria criteria) {
+ public void add(Criteria criteria, Map<String, Criteria> criteriaMap) {
criteria.addOrder(new RandomHibernateOrder());
}
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
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
\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
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
@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
<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