From d50c3d3528d54ef38d04f765b67eadc5cdd7e86c Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 10 May 2016 09:08:48 +0000 Subject: [PATCH] SSDM-3597 : Lucene reindexing triggered when sample type changed SVN: 36520 --- .../generic/server/dataaccess/ISampleDAO.java | 3 +++ .../server/dataaccess/db/DAOFactory.java | 2 +- .../server/dataaccess/db/EntityTypeDAO.java | 22 +++++++++++++++-- .../server/dataaccess/db/SampleDAO.java | 24 +++++++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/ISampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/ISampleDAO.java index bb97241432d..6059bd40128 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/ISampleDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/ISampleDAO.java @@ -119,6 +119,9 @@ public interface ISampleDAO extends IGenericDAO<SamplePE> /** Returns ids of samples connected with experiments specified by given ids. */ List<TechId> listSampleIdsByExperimentIds(Collection<TechId> experimentIds); + /** Returns ids of sample of specified types specified by given ids. */ + List<TechId> listSampleIdsBySampleTypeIds(Collection<TechId> sampleTypeIds); + /** * Lists samples (with minimal additional information) belonging to the given <code>space</code> and having a property with the specified value. */ diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java index 2988dc0cc23..c474d33dc0a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java @@ -174,7 +174,7 @@ public final class DAOFactory extends AuthorizationDAOFactory implements IDAOFac for (final EntityKind entityKind : entityKinds) { final EntityTypeDAO dao = - new EntityTypeDAO(entityKind, sessionFactory, historyCreator); + new EntityTypeDAO(entityKind, sessionFactory, historyCreator, this); entityTypeDAOs.put(entityKind, dao); entityPropertyTypeDAOs.put(entityKind, new EntityPropertyTypeDAO(entityKind, getPersistencyResources())); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityTypeDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityTypeDAO.java index d3195a7309b..434c9956f45 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityTypeDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityTypeDAO.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; +import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; @@ -28,10 +29,15 @@ import org.springframework.orm.hibernate4.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityTypeDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.deletion.EntityHistoryCreator; import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; /** @@ -45,11 +51,14 @@ final class EntityTypeDAO extends AbstractTypeDAO<EntityTypePE> implements IEnti LogFactory.getLogger(LogCategory.OPERATION, EntityTypeDAO.class); private final EntityKind entityKind; - - EntityTypeDAO(final EntityKind entityKind, final SessionFactory sessionFactory, EntityHistoryCreator historyCreator) + private final IDAOFactory daoFactory; + + EntityTypeDAO(final EntityKind entityKind, final SessionFactory sessionFactory, + EntityHistoryCreator historyCreator, IDAOFactory daoFactory) { super(sessionFactory, entityKind.getTypeClass(), historyCreator); this.entityKind = entityKind; + this.daoFactory = daoFactory; } // @@ -96,6 +105,15 @@ final class EntityTypeDAO extends AbstractTypeDAO<EntityTypePE> implements IEnti { operationLog.info(String.format("ADD: entity type '%s'.", entityType)); } + + if (entityType instanceof SampleTypePE) + { + ISampleDAO sampleDAO = daoFactory.getSampleDAO(); + List<TechId> sampleIds = sampleDAO.listSampleIdsBySampleTypeIds(Arrays.asList(new TechId(entityType.getId()))); + scheduleDynamicPropertiesEvaluationForIds( + daoFactory.getPersistencyResources().getDynamicPropertyEvaluationScheduler(), + SamplePE.class, TechId.asLongs(sampleIds)); + } } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java index 172437d7cc1..79ef99fd721 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java @@ -740,6 +740,30 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> return transformNumbers2TechIdList(results); } + @Override + public List<TechId> listSampleIdsBySampleTypeIds(Collection<TechId> sampleTypeIds) + { + final List<Long> longIds = TechId.asLongs(sampleTypeIds); + final List<Long> results = + DAOUtils.listByCollection(getHibernateTemplate(), new IDetachedCriteriaFactory() + { + @Override + public DetachedCriteria createCriteria() + { + final DetachedCriteria criteria = + DetachedCriteria.forClass(SamplePE.class); + criteria.setProjection(Projections.id()); + return criteria; + } + }, "sampleType.id", longIds); + if (operationLog.isDebugEnabled()) + { + operationLog.info(String.format("found %s samples for given sample types", + results.size())); + } + return transformNumbers2TechIdList(results); + } + @Override public List<TechId> listSampleIdsByExperimentIds(final Collection<TechId> experiments) { -- GitLab