diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java index b0ff3aa9165fc3a894d815e5fbf01ecc8e07fa34..fa17d2b22ff22bd4117e9903e6469c95864bc80a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java @@ -19,12 +19,18 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo.managed_property; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.ResourceNames; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.managed_property.EntityLinkElementTranslator; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement; @@ -35,7 +41,6 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkE @Component(value = ResourceNames.ENTITY_INFORMATION_PROVIDER) public class EntityInformationProvider implements IEntityInformationProvider { - // @Autowired private final IDAOFactory daoFactory; @Autowired @@ -45,6 +50,14 @@ public class EntityInformationProvider implements IEntityInformationProvider this.daoFactory = daoFactory; } + public String getIdentifier(IEntityLinkElement entityLink) + { + final EntityKind entityKind = + EntityLinkElementTranslator.translate(entityLink.getEntityLinkKind()); + final String permId = entityLink.getPermId(); + return getIdentifier(entityKind, permId); + } + private String getIdentifier(EntityKind entityKind, String permId) { IIdentifierHolder identifierHolderOrNull = null; @@ -89,12 +102,36 @@ public class EntityInformationProvider implements IEntityInformationProvider return identifierHolderOrNull == null ? null : identifierHolderOrNull.getIdentifier(); } - public String getIdentifier(IEntityLinkElement entityLink) + public String getSamplePermId(String spaceCode, String sampleCode) { - final EntityKind entityKind = - EntityLinkElementTranslator.translate(entityLink.getEntityLinkKind()); - final String permId = entityLink.getPermId(); - return getIdentifier(entityKind, permId); + DatabaseInstancePE homeInstance = daoFactory.getDatabaseInstanceDAO().getHomeInstance(); + SpacePE space = + daoFactory.getSpaceDAO().tryFindSpaceByCodeAndDatabaseInstance(spaceCode, + homeInstance); + if (space == null) + { + throw new UserFailureException("space " + spaceCode + " doesn't exist"); + } + SamplePE sample = daoFactory.getSampleDAO().tryFindByCodeAndSpace(sampleCode, space); + return (sample != null) ? sample.getPermId() : null; + } + + public String getSamplePermId(String sampleIdentifier) + { + SampleIdentifier identifier = SampleIdentifierFactory.parse(sampleIdentifier); + String sampleCode = identifier.getSampleCode(); + if (identifier.isSpaceLevel()) + { + String spaceCode = identifier.getSpaceLevel().getSpaceCode(); + return getSamplePermId(spaceCode, sampleCode); + } else + { + DatabaseInstancePE homeInstance = daoFactory.getDatabaseInstanceDAO().getHomeInstance(); + SamplePE sample = + daoFactory.getSampleDAO().tryFindByCodeAndDatabaseInstance(sampleCode, + homeInstance); + return (sample != null) ? sample.getPermId() : null; + } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java index 608bece4b357f37553eb98c29bee02cb01a55d14..91ba4deb46b97b8194c2cffad35d19a74fd358d0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/SimpleTableModelBuilderAdaptor.java @@ -111,18 +111,27 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA public void setCell(String headerTitle, IEntityLinkElement value) { - row.setCell(headerTitle, asTableCell(value)); + row.setCell(headerTitle, asTableCell(value, null)); } - private EntityTableCell asTableCell(IEntityLinkElement value) + public void setCell(String headerTitle, IEntityLinkElement value, String linkText) + { + row.setCell(headerTitle, asTableCell(value, linkText)); + } + + private EntityTableCell asTableCell(IEntityLinkElement value, + String linkTextOrNull) { final EntityKind entityKind = EntityLinkElementTranslator.translate(value.getEntityLinkKind()); final String permId = value.getPermId(); final String identifierOrNull = tryExtractIdentifier(value); - return new EntityTableCell(entityKind, permId, identifierOrNull); - } + final EntityTableCell result = + new EntityTableCell(entityKind, permId, identifierOrNull); + result.setLinkText(linkTextOrNull); + return result; + } }; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java index 158fddfa33f802c9dfd488746fb58e870908a0bd..75f647026694e3f96aa23badfea8246f12123c92 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IEntityInformationProvider.java @@ -31,4 +31,16 @@ public interface IEntityInformationProvider */ String getIdentifier(IEntityLinkElement entityLink); + /** + * @return permId of entity specified by given space and sample, <code>null</code> if such an + * entity doesn't exist + */ + String getSamplePermId(String spaceCode, String sampleCode); + + /** + * @return permId of entity specified by given identifier, <code>null</code> if such an entity + * doesn't exist + */ + String getSamplePermId(String sampleIdentifier); + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java index b58eb0b68d6ab994b9e550047a0b76828417275f..591de1973946343141e405d54aa668645a623ec2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/api/IRowBuilderAdaptor.java @@ -30,28 +30,35 @@ public interface IRowBuilderAdaptor { /** - * Sets the value of the column specified by the header title by the specified string. + * Sets the value of the column specified by the header title to the specified string. */ public void setCell(String headerTitle, String value); /** - * Sets the value of the column specified by the header title by the specified long value. + * Sets the value of the column specified by the header title to the specified long value. */ public void setCell(String headerTitle, long value); /** - * Sets the value of the column specified by the header title by the specified double value. + * Sets the value of the column specified by the header title to the specified double value. */ public void setCell(String headerTitle, double value); /** - * Sets the value of the column specified by the header title by the specified date. + * Sets the value of the column specified by the header title to the specified date. */ public void setCell(String headerTitle, Date value); /** - * Sets the value of the column specified by the header title by the specified entity link. + * Sets the value of the column specified by the header title to the specified entity link + * rendered using identifier. */ public void setCell(String headerTitle, IEntityLinkElement value); + /** + * Sets the value of the column specified by the header title to the specified entity link + * rendered using given text. + */ + public void setCell(String headerTitle, IEntityLinkElement value, String linkText); + }