From 925408669cf31c0085c0ef853b886070c2d04641 Mon Sep 17 00:00:00 2001 From: "ben.clark" Date: Thu, 7 May 2009 15:21:25 +0000 Subject: [PATCH] Added inefficient method for getting images in prior view --- .../DescriptionElementDaoImpl.java | 70 ++++++++++++++----- 1 file changed, 51 insertions(+), 19 deletions(-) diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionElementDaoImpl.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionElementDaoImpl.java index 095b6bce2e..a5a3a2b9ad 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionElementDaoImpl.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionElementDaoImpl.java @@ -10,6 +10,7 @@ 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,6 +20,7 @@ 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; import eu.etaxonomy.cdm.persistence.dao.hibernate.common.AnnotatableDaoImpl; @@ -39,11 +41,20 @@ public class DescriptionElementDaoImpl extends AnnotatableDaoImpl propertyPaths = new ArrayList(); + propertyPaths.add("media"); + DescriptionElementBase d = super.load(descriptionElement.getUuid(), propertyPaths); + return d.getMedia().size(); + } } public int countTextData(String queryString) { @@ -62,22 +73,43 @@ public class DescriptionElementDaoImpl extends AnnotatableDaoImpl getMedia(DescriptionElementBase descriptionElement, Integer pageSize, Integer pageNumber, List propertyPaths) { - checkNotInPriorView("DescriptionElementDaoImpl.getMedia(DescriptionElementBase descriptionElement, Integer pageSize, Integer pageNumber, List propertyPaths)"); - Query query = getSession().createQuery("select media from DescriptionElementBase descriptionElement join descriptionElement.media media where descriptionElement = :descriptionElement"); - query.setParameter("descriptionElement", descriptionElement); - - if(pageSize != null) { - query.setMaxResults(pageSize); - if(pageNumber != null) { - query.setFirstResult(pageNumber * pageSize); - } else { - query.setFirstResult(0); - } + AuditEvent auditEvent = getAuditEventFromContext(); + if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) { + Query query = getSession().createQuery("select media from DescriptionElementBase descriptionElement join descriptionElement.media media where descriptionElement = :descriptionElement"); + query.setParameter("descriptionElement", descriptionElement); + + if(pageSize != null) { + query.setMaxResults(pageSize); + if(pageNumber != null) { + query.setFirstResult(pageNumber * pageSize); + } else { + query.setFirstResult(0); + } + } + + List results = (List)query.list(); + defaultBeanInitializer.initializeAll(results, propertyPaths); + return results; + } else { + // Horribly inefficient, I know, but hard to do at the moment with envers. + // FIXME Improve this (by improving envers) + List pPaths = new ArrayList(); + propertyPaths.add("media"); + DescriptionElementBase d = super.load(descriptionElement.getUuid(), pPaths); + List results = new ArrayList(); + results.addAll(d.getMedia()); + if(pageSize != null) { + int fromIndex = 0; + int toIndex = 0; + if(pageNumber != null) { + fromIndex = pageNumber * pageSize; + } + toIndex = fromIndex + pageSize; + results = results.subList(fromIndex, toIndex); + } + defaultBeanInitializer.initializeAll(results, propertyPaths); + return results; } - - List results = (List)query.list(); - defaultBeanInitializer.initializeAll(results, propertyPaths); - return results; } public List searchTextData(String queryString, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths) { -- 2.34.1