diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java index d25485e57ec56b797a2afea4167dea877e857d2b..e83f77686ff294cd00743589307788ab19af7310 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java @@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.IDataStoreServiceFactory import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.DynamicPropertyEvaluationOperation; import ch.systemsx.cisd.openbis.generic.server.dataaccess.EntityPropertiesConverter; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAttachmentDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAuthorizationGroupDAO; @@ -47,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataSetTypeDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataStoreDAO; 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.IEntityHistoryDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityOperationsLogDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter; @@ -82,6 +84,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.ICodeSequenceDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.IPermIdDAO; import ch.systemsx.cisd.openbis.generic.server.util.SpaceIdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Identifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; @@ -92,6 +95,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityWithMetaprojects; import ch.systemsx.cisd.openbis.generic.shared.dto.IModifierAndModificationDateBean; @@ -833,5 +837,24 @@ abstract class AbstractBusinessObject implements IDAOFactory assignmentManager.assignDataSetAndRelatedComponents(data, newSample, experiment); assignmentManager.performAssignment(relationshipService, session); } + + protected <T extends IEntityInformationWithPropertiesHolder> void reindex(Class<T> objectClass, Collection<T> objects) + { + IDynamicPropertyEvaluationScheduler indexUpdater = daoFactory.getPersistencyResources().getDynamicPropertyEvaluationScheduler(); + List<Long> objectIds = new ArrayList<Long>(); + + for (IIdHolder object : objects) + { + if (object != null && object.getId() != null) + { + objectIds.add(object.getId()); + } + } + + if (false == objectIds.isEmpty()) + { + indexUpdater.scheduleUpdate(DynamicPropertyEvaluationOperation.evaluate(objectClass, objectIds)); + } + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java index 183c65a95c9028bf5e31ae947184241fee7dc383..765d1a88ff0daefa9020c946b21344833672dfd1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java @@ -334,6 +334,9 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB relationshipService.assignProjectToSpace(session, project, findGroup(groupCode)); } dataChanged = true; + + //Schedule projects experiments for index update, they require to update the Space on the index at least + reindex(ExperimentPE.class, project.getExperiments()); } private SpacePE findGroup(String groupCode) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java index a041cb66d4e00809463b297ddace2ce7bc1ca584..26525f578b521164bd310e5fdc00feeae5d50a57 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java @@ -1330,6 +1330,11 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple flushWithSqlExceptionHandling(getHibernateTemplate()); scheduleDynamicPropertiesEvaluation(dataSets); + //Schedule contained datasets for index update, they also have the experiment and samples ids the index at least + for(DataPE dataSet:dataSets) { + scheduleDynamicPropertiesEvaluation(dataSet.getContainedDataSets()); + } + // if session is not cleared registration of many samples slows down after each batch hibernateTemplate.clear(); } @@ -1340,6 +1345,9 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple this.currentSession().flush(); super.validateAndSaveUpdatedEntity(entity); scheduleDynamicPropertiesEvaluation(Arrays.asList(entity)); + + //Schedule contained datasets for index update, they also have the experiment and samples ids the index at least + scheduleDynamicPropertiesEvaluation(entity.getContainedDataSets()); } @Override