diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index 4a562c7f690bdb82aea55f6d2866d8800f641b6f..c3f7ed8094cdcef2ebbed05b81c423f176480cc1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -641,8 +641,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServer> impl IEntityTypePropertyTypeBO etptBO = businessObjectFactory.createEntityTypePropertyTypeBO(session, DtoConverters .convertEntityKind(entityKind)); - etptBO.loadAssignment(propertyTypeCode, entityTypeCode); - return etptBO.getLoadedAssignment().getPropertyValues().size(); + return etptBO.countAssignmentValues(propertyTypeCode, entityTypeCode); } public final void registerPropertyType(final String sessionToken, 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 c0a4b11b871d44cdec4b167f9b3dc300ea4964ed..4bae4196747265735123cdf38905b09925bcf85a 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 @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.List; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.time.StopWatch; import org.springframework.dao.DataAccessException; import ch.rinn.restrictions.Private; @@ -84,12 +85,20 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements public void loadAssignment(String propertyTypeCode, String entityTypeCode) { + StopWatch watch = new StopWatch(); + watch.start(); EntityTypePE entityType = findEntityType(entityTypeCode); PropertyTypePE propertyType = findPropertyType(propertyTypeCode); IEntityPropertyTypeDAO entityPropertyTypeDAO = getEntityPropertyTypeDAO(entityKind); assignment = entityPropertyTypeDAO.tryFindAssignment(entityType, propertyType); } + public int countAssignmentValues(String propertyTypeCode, String entityTypeCode) + { + IEntityPropertyTypeDAO entityPropertyTypeDAO = getEntityPropertyTypeDAO(entityKind); + return entityPropertyTypeDAO.countAssignmentValues(entityTypeCode, propertyTypeCode); + } + public void createAssignment(String propertyTypeCode, String entityTypeCode, boolean isMandatory, String defaultValue, String section, Long previousETPTOrdinal) { @@ -101,11 +110,11 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements // fill default property values if (isMandatory) { - List<IEntityPropertiesHolder> entities = getAllEntities(entityType); String errorMsgTemplate = "Cannot create mandatory assignment. " + "Please specify 'Initial Value', which will be used for %s %s%s " + "of type '%s' already existing in the database."; + List<IEntityPropertiesHolder> entities = getAllEntities(entityType); addPropertyWithDefaultValue(entityType, propertyType, defaultValue, entities, errorMsgTemplate); } else if (StringUtils.isEmpty(defaultValue) == false) @@ -132,7 +141,6 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements .getLabel(), createPlural(size), entityType.getCode())); } } - // TODO 2009-06-01, Piotr Buczek: no validation of default value for (IEntityPropertiesHolder entity : entities) { final EntityPropertyPE property = diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java index c0c976fb130861020698dc8bd9483a9b22cbc5f1..55a0fc87423d3ff1213245e6057ac58c8befcf83 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IEntityTypePropertyTypeBO.java @@ -37,6 +37,12 @@ public interface IEntityTypePropertyTypeBO */ void loadAssignment(String propertyTypeCode, String entityTypeCode); + /** + * Returns number of property values used by entities for assignment between specified property + * type and entity type. + */ + int countAssignmentValues(String propertyTypeCode, String entityTypeCode); + /** * Returns loaded assignment. */ 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 a24c1e9132ebcd3762ecdde5893a770eb96fd60a..dbf8508c0ca6346e30efcb0acbb893bf3dfeb9df 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 @@ -51,6 +51,8 @@ public interface IEntityPropertyTypeDAO public EntityTypePropertyTypePE tryFindAssignment(EntityTypePE entityType, PropertyTypePE propertyType); + public int countAssignmentValues(String entityTypeCode, String propertyTypeCode); + /** * Creates a new {@link EntityTypePropertyTypePE} assignment. */ 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 faad74b2ae4a407669b328a1e9887173be8a1f0f..1aa7c0be941a83eb1ce9aae918701a0c0c32249e 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 @@ -110,6 +110,21 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty return etpt; } + public int countAssignmentValues(String entityTypeCode, String propertyTypeCode) + { + assert entityTypeCode != null : "Unspecified entity type."; + assert propertyTypeCode != null : "Unspecified property type."; + + String query = + String.format("select count(pv) from %s pa join pa.propertyValues pv " + + "where pa.propertyTypeInternal.simpleCode = ? " + + "and pa.entityTypeInternal.code = ?", entityKind + .getEntityTypePropertyTypeAssignmentClass().getSimpleName(), entityKind + .getEntityPropertyClass().getSimpleName()); + return ((Long) (getHibernateTemplate().find(query, + toArray(propertyTypeCode, entityTypeCode)).get(0))).intValue(); + } + public final void createEntityPropertyTypeAssignment( final EntityTypePropertyTypePE entityPropertyTypeAssignement) throws DataAccessException @@ -307,7 +322,7 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty { for (EntityPropertyPE propertyValue : propertyValues) { - propertyValue.getEntity().removeProperty(propertyValue); + propertyValue.getEntity().removeProperty(propertyValue); // FIXME loads entities? } }