package eu.etaxonomy.cdm.persistence.dao.hibernate.occurrence;\r
\r
import java.util.List;\r
+import java.util.Set;\r
\r
import org.apache.log4j.Logger;\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.springframework.stereotype.Repository;\r
\r
import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.molecular.DnaSample;\r
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;\r
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\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.SpecimenOrObservationBase;\r
import eu.etaxonomy.cdm.model.view.AuditEvent;\r
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
* @created 01.09.2008\r
*/\r
@Repository\r
-public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrObservationBase> implements\r
- IOccurrenceDao {\r
+public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrObservationBase> implements IOccurrenceDao {\r
\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(TaxonDaoHibernateImpl.class);\r
\r
public OccurrenceDaoHibernateImpl() {\r
super(SpecimenOrObservationBase.class);\r
+ indexedClasses = new Class[7];\r
+ indexedClasses[0] = FieldObservation.class;\r
+ indexedClasses[1] = DerivedUnit.class;\r
+ indexedClasses[2] = LivingBeing.class;\r
+ indexedClasses[3] = Observation.class;\r
+ indexedClasses[4] = Specimen.class;\r
+ indexedClasses[5] = DnaSample.class;\r
+ indexedClasses[6] = Fossil.class;\r
}\r
\r
public int countDerivationEvents(SpecimenOrObservationBase occurence) {\r
AuditEvent auditEvent = getAuditEventFromContext();\r
if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {\r
Query query = getSession().createQuery("select count(determination) from DeterminationEvent determination where determination.identifiedUnit = :occurence");\r
- \r
+ query.setParameter("occurence", occurence);\r
return ((Long)query.uniqueResult()).intValue();\r
} else {\r
AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(DeterminationEvent.class,auditEvent.getRevisionNumber());\r
return ((Long)query.uniqueResult()).intValue();\r
}\r
\r
- public List<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize,Integer pageNumber) {\r
+ public List<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize,Integer pageNumber, List<String> propertyPaths) {\r
checkNotInPriorView("OccurrenceDaoHibernateImpl.getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize,Integer pageNumber)");\r
Query query = getSession().createQuery("select distinct derivationEvent from DerivationEvent derivationEvent join derivationEvent.originals occurence where occurence = :occurence");\r
query.setParameter("occurence", occurence);\r
}\r
}\r
\r
- return (List<DerivationEvent>)query.list();\r
+ List<DerivationEvent> result = (List<DerivationEvent>)query.list();\r
+ defaultBeanInitializer.initializeAll(result, propertyPaths);\r
+ return result;\r
}\r
\r
- public List<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber) {\r
+ public List<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
AuditEvent auditEvent = getAuditEventFromContext();\r
if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {\r
Query query = getSession().createQuery("select determination from DeterminationEvent determination where determination.identifiedUnit = :occurence");\r
query.setFirstResult(0);\r
}\r
}\r
-\r
- return (List<DeterminationEvent>)query.list();\r
+ List<DeterminationEvent> result = (List<DeterminationEvent>)query.list();\r
+ defaultBeanInitializer.initializeAll(result, propertyPaths); \r
+ return result;\r
} else {\r
AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(DeterminationEvent.class,auditEvent.getRevisionNumber());\r
query.add(AuditEntity.relatedId("identifiedUnit").eq(occurence.getId()));\r
query.setFirstResult(0);\r
}\r
}\r
-\r
- return (List<DeterminationEvent>)query.getResultList();\r
+ List<DeterminationEvent> result = (List<DeterminationEvent>)query.getResultList();\r
+ defaultBeanInitializer.initializeAll(result, propertyPaths); \r
+ return result;\r
}\r
}\r
\r
- public List<Media> getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber) {\r
- checkNotInPriorView("OccurrenceDaoHibernateImpl.getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber)");\r
+ public List<Media> getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
+ checkNotInPriorView("OccurrenceDaoHibernateImpl.getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths)");\r
Query query = getSession().createQuery("select media from SpecimenOrObservationBase occurence join occurence.media media where occurence = :occurence");\r
query.setParameter("occurence", occurence);\r
\r
}\r
}\r
\r
- return (List<Media>)query.list();\r
- } \r
-}\r
+ List<Media> results = (List<Media>)query.list();\r
+ defaultBeanInitializer.initializeAll(results, propertyPaths); \r
+ return results;\r
+ }\r
+\r
+ @Override\r
+ public void rebuildIndex() {\r
+ FullTextSession fullTextSession = Search.getFullTextSession(getSession());\r
+ \r
+ for(SpecimenOrObservationBase occurrence : list(null,null)) { // re-index all taxon base\r
+\r
+ for(DeterminationEvent determination : (Set<DeterminationEvent>)occurrence.getDeterminations()) {\r
+ Hibernate.initialize(determination.getActor());\r
+ Hibernate.initialize(determination.getTaxon());\r
+ }\r
+ Hibernate.initialize(occurrence.getDefinition());\r
+ if(occurrence instanceof DerivedUnitBase) {\r
+ DerivedUnitBase derivedUnit = (DerivedUnitBase) occurrence;\r
+ Hibernate.initialize(derivedUnit.getCollection());\r
+ if(derivedUnit.getCollection() != null) {\r
+ Hibernate.initialize(derivedUnit.getCollection().getSuperCollection());\r
+ Hibernate.initialize(derivedUnit.getCollection().getInstitute());\r
+ }\r
+ Hibernate.initialize(derivedUnit.getStoredUnder());\r
+ SpecimenOrObservationBase original = derivedUnit.getOriginalUnit();\r
+ if(original != null && original.isInstanceOf(FieldObservation.class)) {\r
+ FieldObservation fieldObservation = original.deproxy(original, FieldObservation.class);\r
+ Hibernate.initialize(fieldObservation.getGatheringEvent());\r
+ if(fieldObservation.getGatheringEvent() != null) {\r
+ Hibernate.initialize(fieldObservation.getGatheringEvent().getActor());\r
+ }\r
+ }\r
+ }\r
+ fullTextSession.index(occurrence);\r
+ }\r
+ fullTextSession.flushToIndexes();\r
+ }\r
+}
\ No newline at end of file