From 053ac6f0f69cbe0b6b2ea6f557737c1223e57d96 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 14 Feb 2011 15:10:52 +0000 Subject: [PATCH] [LMS-2036] display links as entity identifiers; handle missing entities SVN: 19937 --- .../client/application/ui/TypedTableGrid.java | 6 +- .../ui/TypedTableGridColumnDefinitionUI.java | 1 + .../EntityInformationProvider.java | 93 +++++++++++++++++++ .../openbis/generic/shared/ResourceNames.java | 11 ++- .../shared/basic/dto/EntityTableCell.java | 22 ++++- .../EntityLinkElementTranslator.java | 42 +++++++++ .../IEntityInformationProvider.java | 28 ++++++ .../ScriptUtilityFactory.java | 31 ++++++- .../SimpleTableModelBuilderAdaptor.java | 36 ++++--- 9 files changed, 240 insertions(+), 30 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/EntityLinkElementTranslator.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java index e15e9415313..aefca7defd0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java @@ -130,6 +130,10 @@ public abstract class TypedTableGrid<T extends ISerializable> if (value instanceof EntityTableCell) { EntityTableCell entityTableCell = (EntityTableCell) value; + if (entityTableCell.isMissing()) + { + return null; + } String permId = entityTableCell.getPermId(); if (entityTableCell.getEntityKind() == EntityKind.MATERIAL) { @@ -229,7 +233,7 @@ public abstract class TypedTableGrid<T extends ISerializable> String id = header.getId(); if (listenerLinkGenerators.containsKey(id)) { - definitions.setGridCellRendererFor(id, createInternalLinkCellRenderer()); + definitions.setGridCellRendererFor(id, LinkRenderer.createLinkRenderer(true)); } else { final GridCellRenderer<BaseEntityModel<?>> specificRendererOrNull = diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java index aab1285b3a8..26a0d7e5b8a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java @@ -80,6 +80,7 @@ public class TypedTableGridColumnDefinitionUI<T extends ISerializable> extends { return null; } + // TODO final ISerializableComparable value = entity.getValues().get(header.getIndex()); final T objectOrNull = entity.getObjectOrNull(); return objectOrNull == null ? null : linkGeneratorOrNull.tryGetLink(objectOrNull, value); 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 new file mode 100644 index 00000000000..e16f819943f --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/managed_property/EntityInformationProvider.java @@ -0,0 +1,93 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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.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.MaterialPE; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.EntityLinkElementTranslator; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.IEntityInformationProvider; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement; + +/** + * @author Piotr Buczek + */ +@Component(value = ResourceNames.ENTITY_INFORMATION_PROVIDER) +public class EntityInformationProvider implements IEntityInformationProvider +{ + @Autowired + private IDAOFactory daoFactory; + + public String getIdentifier(EntityKind entityKind, String permId) + { + IIdentifierHolder identifierHolderOrNull = null; + switch (entityKind) + { + case EXPERIMENT: + identifierHolderOrNull = daoFactory.getExperimentDAO().tryGetByPermID(permId); + break; + case SAMPLE: + identifierHolderOrNull = daoFactory.getSampleDAO().tryToFindByPermID(permId); + break; + case DATA_SET: + identifierHolderOrNull = + daoFactory.getExternalDataDAO().tryToFindDataSetByCode(permId); + break; + case MATERIAL: + MaterialIdentifier idOrNull = MaterialIdentifier.tryParseIdentifier(permId); + if (idOrNull == null) + { + return null; + } else + { + final MaterialPE materialOrNull = + daoFactory.getMaterialDAO().tryFindMaterial(idOrNull); + if (materialOrNull == null) + { + return null; + } else + { + identifierHolderOrNull = new IIdentifierHolder() + { + + public String getIdentifier() + { + return new MaterialIdentifier(materialOrNull.getCode(), + materialOrNull.getEntityType().getCode()).print(); + } + }; + } + } + } + return identifierHolderOrNull == null ? null : identifierHolderOrNull.getIdentifier(); + } + + public String getIdentifier(IEntityLinkElement entityLink) + { + final EntityKind entityKind = + EntityLinkElementTranslator.translate(entityLink.getEntityLinkKind()); + final String permId = entityLink.getPermId(); + return getIdentifier(entityKind, permId); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ResourceNames.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ResourceNames.java index 15c6fd3395a..df5c19a4bdc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ResourceNames.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ResourceNames.java @@ -37,18 +37,23 @@ public final class ResourceNames "generic-data-set-type-slave-server-plugin"; public final static String GENERIC_DATA_SET_SERVER_PLUGIN = "generic-data-set-server-plugin"; - + public final static String SAMPLE_PLUGIN_REGISTRY = "sample-plugin-registry"; - + public final static String DATA_SET_PLUGIN_REGISTRY = "data-set-plugin-registry"; + public final static String MANAGED_PROPERTY_SCRIPT_UTILITY_FACTORY = + "managed-property-script-utility-factory"; + + public final static String ENTITY_INFORMATION_PROVIDER = "entity-information-provider"; + private ResourceNames() { // Can not be instantiated. } public final static String ETL_SERVICE = "etl-service"; - + public final static String ETL_SERVICE_URL = "/rmi-etl"; public final static String COMMON_SERVICE = "common-service"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java index 4e6b89a0bc8..30210340a1e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; - /** * Table cell for an entity link. * @@ -24,13 +23,22 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; */ public class EntityTableCell implements ISerializableComparable { + private static final String MISSING_ENTITY_SUFFIX = " (missing)"; + private static final long serialVersionUID = ServiceVersionHolder.VERSION; private EntityKind entityKind; private String permId; + private String identifierOrNull; // 'null' when entity is missing + public EntityTableCell(EntityKind entityKind, String permId) + { + this(entityKind, permId, permId); + } + + public EntityTableCell(EntityKind entityKind, String permId, String identifierOrNull) { if (entityKind == null) { @@ -42,6 +50,7 @@ public class EntityTableCell implements ISerializableComparable } this.entityKind = entityKind; this.permId = permId; + this.identifierOrNull = identifierOrNull; } public int compareTo(ISerializableComparable o) @@ -59,6 +68,11 @@ public class EntityTableCell implements ISerializableComparable return permId; } + public boolean isMissing() + { + return identifierOrNull == null; + } + @Override public int hashCode() { @@ -76,14 +90,14 @@ public class EntityTableCell implements ISerializableComparable { return false; } - EntityTableCell cell = (EntityTableCell) obj; - return getPermId().equals(cell.getPermId()); + EntityTableCell otherCell = (EntityTableCell) obj; + return entityKind.equals(otherCell.entityKind) && permId.equals(otherCell.permId); } @Override public String toString() { - return getPermId().toString(); + return isMissing() ? String.valueOf(permId) + MISSING_ENTITY_SUFFIX : identifierOrNull; } // --------------------------- diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/EntityLinkElementTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/EntityLinkElementTranslator.java new file mode 100644 index 00000000000..2453015b705 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/EntityLinkElementTranslator.java @@ -0,0 +1,42 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.managed_property; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.EntityLinkElementKind; + +/** + * @author Piotr Buczek + */ +public class EntityLinkElementTranslator +{ + public static EntityKind translate(EntityLinkElementKind linkElementKind) + { + switch (linkElementKind) + { + case DATA_SET: + return EntityKind.DATA_SET; + case EXPERIMENT: + return EntityKind.EXPERIMENT; + case MATERIAL: + return EntityKind.MATERIAL; + case SAMPLE: + return EntityKind.SAMPLE; + } + return null; // won't happen + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java new file mode 100644 index 00000000000..2333d91646c --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/IEntityInformationProvider.java @@ -0,0 +1,28 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.managed_property; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; + +/** + * @author Piotr Buczek + */ +public interface IEntityInformationProvider +{ + /** @return identifier of entity with given kind and permid, <code>null</code> if such entity doesn't exist */ + String getIdentifier(EntityKind entityKind, String permId); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java index b9afe6eef59..a58bc5c8708 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/managed_property/ScriptUtilityFactory.java @@ -1,5 +1,10 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property; +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import ch.systemsx.cisd.openbis.generic.shared.ResourceNames; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ValidationException; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElement; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElementFactory; @@ -9,10 +14,11 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.Eleme import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.XmlStructuredPropertyConverter; /** - * This utility class with function to be used by jython scripts for managed properties. + * This is a utility class with functions to be used by Jython scripts for managed properties. * <p> * All public methods of this class are part of the Managed Properties API. */ +@Component(value = ResourceNames.MANAGED_PROPERTY_SCRIPT_UTILITY_FACTORY) public class ScriptUtilityFactory { private static final IElementFactory ELEMENT_FACTORY_INSTANCE = new ElementFactory(); @@ -20,12 +26,32 @@ public class ScriptUtilityFactory private static final IStructuredPropertyConverter STRUCTURED_PROPERTY_CONVERTER_INSTANCE = new XmlStructuredPropertyConverter(ELEMENT_FACTORY_INSTANCE); + // initialized by spring + private static IEntityInformationProvider entityInformationProvider; + + public IEntityInformationProvider getEntityInformationProvider() + { + return entityInformationProvider; + } + + // @Autowired + @Resource(name = ResourceNames.ENTITY_INFORMATION_PROVIDER) + public void setEntityInformationProvider(IEntityInformationProvider entityInformationProvider) + { + ScriptUtilityFactory.entityInformationProvider = entityInformationProvider; + } + + private ScriptUtilityFactory() + { + + } + /** * Creates a table builder. */ public static ISimpleTableModelBuilderAdaptor createTableBuilder() { - return SimpleTableModelBuilderAdaptor.create(); + return SimpleTableModelBuilderAdaptor.create(entityInformationProvider); } /** @@ -53,4 +79,5 @@ public class ScriptUtilityFactory { return STRUCTURED_PROPERTY_CONVERTER_INSTANCE; } + } \ No newline at end of file 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 e5d14ef43bf..d9510a6c800 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 @@ -21,7 +21,6 @@ import java.util.Date; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; -import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.EntityLinkElementKind; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IRowBuilderAdaptor; import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor; @@ -42,14 +41,20 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA private final SimpleTableModelBuilder builder; - public static SimpleTableModelBuilderAdaptor create() + private final IEntityInformationProvider entityInformationProvider; + + public static SimpleTableModelBuilderAdaptor create( + IEntityInformationProvider entityInformationProvider) { - return new SimpleTableModelBuilderAdaptor(new SimpleTableModelBuilder(true)); + return new SimpleTableModelBuilderAdaptor(new SimpleTableModelBuilder(true), + entityInformationProvider); } - private SimpleTableModelBuilderAdaptor(SimpleTableModelBuilder builder) + private SimpleTableModelBuilderAdaptor(SimpleTableModelBuilder builder, + IEntityInformationProvider entityInformationProvider) { this.builder = builder; + this.entityInformationProvider = entityInformationProvider; } // @@ -110,8 +115,11 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA private EntityTableCell asTableCell(IEntityLinkElement value) { - return new EntityTableCell(convert(value.getEntityLinkKind()), - value.getPermId()); + final EntityKind entityKind = + EntityLinkElementTranslator.translate(value.getEntityLinkKind()); + final String permId = value.getPermId(); + final String identifierOrNull = tryExtractIdentifier(entityKind, permId); + return new EntityTableCell(entityKind, permId, identifierOrNull); } }; @@ -127,20 +135,8 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA builder.addFullRow(values); } - private static EntityKind convert(EntityLinkElementKind linkElementKind) + private String tryExtractIdentifier(EntityKind entityKind, String permId) { - switch (linkElementKind) - { - case DATA_SET: - return EntityKind.DATA_SET; - case EXPERIMENT: - return EntityKind.EXPERIMENT; - case MATERIAL: - return EntityKind.MATERIAL; - case SAMPLE: - return EntityKind.SAMPLE; - } - return null; // won't happen + return entityInformationProvider.getIdentifier(entityKind, permId); } - } -- GitLab