From f9b70242b002f472c4dd33011b6b38813e3766f4 Mon Sep 17 00:00:00 2001 From: gakin <gakin> Date: Mon, 23 Jan 2017 10:57:07 +0000 Subject: [PATCH] SSDM-4675 : Adding mandatory property or removing a property when entities of that type exist should update entity time stamps SVN: 37608 --- .../business/bo/EntityTypePropertyTypeBO.java | 7 +++ .../dataaccess/IEntityPropertyTypeDAO.java | 7 +++ .../dataaccess/db/EntityPropertyTypeDAO.java | 43 +++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java index bf9d8b1c03d..c27e8af2025 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java @@ -161,6 +161,12 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements } } + private void updateEntityModificationTimestamps(List<Long> entityIds) + { + IEntityPropertyTypeDAO entityPropertyTypeDAO = getEntityPropertyTypeDAO(entityKind); + entityPropertyTypeDAO.updateEntityModificationTimestamps(entityIds, getTransactionTimeStamp()); + } + private ScriptPE tryFindScript(NewETPTAssignment newAssignment) { if (newAssignment.getScriptName() == null) @@ -205,6 +211,7 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements registrator, validatedValue); entityPropertyTypeDAO.createProperties(property, entityIds); + updateEntityModificationTimestamps(entityIds); } if (operationLog.isDebugEnabled()) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java index 76e9fdb9b5e..409247eceff 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IEntityPropertyTypeDAO.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess; +import java.util.Date; import java.util.List; import org.springframework.dao.DataAccessException; @@ -121,4 +122,10 @@ public interface IEntityPropertyTypeDAO */ public void createProperties(EntityPropertyPE property, List<Long> entityIds); + /** + * Updates the modification time stamps of the entities specified by entityIds This is necessary when 1. A new mandatory property is assigned to + * the entity type and existing entities need to be updated with a default value for the mandatory property 2. If a property is unassigned from an + * entity type. + */ + public void updateEntityModificationTimestamps(final List<Long> entityIds, final Date timestamp); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java index 6ae0233d308..584e9e1908d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; import java.io.Serializable; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -26,13 +27,16 @@ import java.util.Set; import org.apache.log4j.Logger; import org.hibernate.Criteria; +import org.hibernate.HibernateException; import org.hibernate.SQLQuery; +import org.hibernate.Session; import org.hibernate.StatelessSession; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.ProjectionList; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.springframework.dao.DataAccessException; +import org.springframework.orm.hibernate4.HibernateCallback; import org.springframework.orm.hibernate4.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; @@ -242,6 +246,44 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty return list; } + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void updateEntityModificationTimestamps(final List<Long> entityIds, final Date timestamp) + { + getHibernateTemplate().execute(new HibernateCallback() + { + @Override + public Object doInHibernate(Session session) throws HibernateException + { + String entityTableName = null; + + switch (entityKind) + { + case SAMPLE: + entityTableName = TableNames.SAMPLES_ALL_TABLE; + break; + case DATA_SET: + entityTableName = TableNames.DATA_ALL_TABLE; + break; + case MATERIAL: + entityTableName = TableNames.MATERIALS_TABLE; + break; + case EXPERIMENT: + entityTableName = TableNames.EXPERIMENTS_VIEW; + break; + default: + throw new IllegalArgumentException(entityKind.toString()); + } + SQLQuery clearQuery = + session.createSQLQuery( + "update " + entityTableName + " set modification_timestamp = :timestamp where id in :entityIds "); + clearQuery.setTimestamp("timestamp", timestamp); + clearQuery.setParameterList("entityIds", entityIds); + clearQuery.executeUpdate(); + return null; + } + }); + } + @Override public List<Long> listIdsOfEntitiesWithoutPropertyValue( final EntityTypePropertyTypePE assignment) throws DataAccessException @@ -509,6 +551,7 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty template.clear(); template.delete(assignment); + updateEntityModificationTimestamps(entityIds, getTransactionTimeStamp()); scheduleDynamicPropertiesEvaluation(entityIds); if (operationLog.isInfoEnabled()) -- GitLab