From 196dd13d1c04ff60573132477f6bf7c84b054b64 Mon Sep 17 00:00:00 2001 From: gpawel <gpawel> Date: Fri, 29 Jul 2011 07:31:30 +0000 Subject: [PATCH] [LMS-2421] remove from index trashed entities, add to index reverted entities SVN: 22284 --- .../server/dataaccess/db/DeletionDAO.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java index af3a4f1213b..bc95fada8c5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; import java.sql.SQLException; +import java.util.Collections; import java.util.List; import org.apache.log4j.Logger; @@ -34,6 +35,10 @@ import org.springframework.orm.hibernate3.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; @@ -54,9 +59,14 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, DeletionDAO.class); - DeletionDAO(final SessionFactory sessionFactory, final DatabaseInstancePE databaseInstance) + private final PersistencyResources persistencyResources; + + DeletionDAO(final SessionFactory sessionFactory, final DatabaseInstancePE databaseInstance, + final PersistencyResources persistencyResources) { super(sessionFactory, databaseInstance, DeletionPE.class); + + this.persistencyResources = persistencyResources; } // @@ -96,6 +106,9 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements assert deletion != null : "Unspecified deletion"; assert entityKind != null : "Unspecified entity kind"; + List<TechId> ids = + findTrashedEntityIds(Collections.singletonList(TechId.create(deletion)), entityKind); + final HibernateTemplate hibernateTemplate = getHibernateTemplate(); String query = String.format("UPDATE VERSIONED %s SET deletion = NULL WHERE deletion = ?", @@ -103,6 +116,9 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements int updatedRows = hibernateTemplate.bulkUpdate(query, deletion); hibernateTemplate.flush(); hibernateTemplate.clear(); + + scheduleDynamicPropertiesEvaluationByIds(TechId.asLongs(ids), entityKind); + operationLog.info(String.format("%s %s(s) reverted", updatedRows, entityKind.name())); } @@ -176,7 +192,32 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements operationLog.info(String.format("trashing %d %ss", updatedRows, entityKind.getLabel())); } hibernateTemplate.flush(); + + List<Long> ids = TechId.asLongs(entityIds); + scheduleRemoveFromFullTextIndex(ids, entityKind); + return updatedRows; } + protected IFullTextIndexUpdateScheduler getIndexUpdateScheduler() + { + return persistencyResources.getIndexUpdateScheduler(); + } + + protected IDynamicPropertyEvaluationScheduler getDynamicPropertyEvaluatorScheduler() + { + return persistencyResources.getDynamicPropertyEvaluationScheduler(); + } + + protected void scheduleRemoveFromFullTextIndex(List<Long> ids, EntityKind entityKind) + { + getIndexUpdateScheduler().scheduleUpdate( + IndexUpdateOperation.remove(entityKind.getEntityClass(), ids)); + } + + protected void scheduleDynamicPropertiesEvaluationByIds(List<Long> ids, EntityKind entityKind) + { + scheduleDynamicPropertiesEvaluationForIds(getDynamicPropertyEvaluatorScheduler(), + entityKind.getEntityClass(), ids); + } } -- GitLab