Skip to content
Snippets Groups Projects
Commit 75d977ec authored by buczekp's avatar buczekp
Browse files

[LMS-2036] refactoring: moved IEntityInformationProvider to api, renamed...

[LMS-2036] refactoring: moved IEntityInformationProvider to api, renamed ScriptUtilityFactory->ManagedPropertyFunctions, stripped 'get' from some jython api methods;
unit tests

SVN: 19939
parent 053ac6f0
No related branches found
No related tags found
No related merge requests found
Showing
with 175 additions and 35 deletions
......@@ -26,7 +26,7 @@ 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.IEntityInformationProvider;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
/**
......@@ -35,10 +35,17 @@ 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
private IDAOFactory daoFactory;
public EntityInformationProvider(IDAOFactory daoFactory)
{
assert daoFactory != null;
this.daoFactory = daoFactory;
}
public String getIdentifier(EntityKind entityKind, String permId)
private String getIdentifier(EntityKind entityKind, String permId)
{
IIdentifierHolder identifierHolderOrNull = null;
switch (entityKind)
......
......@@ -106,7 +106,7 @@ public class ManagedPropertyEvaluator
public ManagedPropertyEvaluator(String scriptExpression)
{
evaluator = new Evaluator("", ScriptUtilityFactory.class, scriptExpression);
evaluator = new Evaluator("", ManagedPropertyFunctions.class, scriptExpression);
updateFromBatchFunctionDefined = evaluator.hasFunction(UPDATE_FROM_BATCH_INPUT_FUNCTION);
List<String> names = new ArrayList<String>();
if (evaluator.hasFunction(BATCH_COLUMN_NAMES_FUNCTION))
......
......@@ -8,6 +8,7 @@ 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;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityInformationProvider;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IStructuredPropertyConverter;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.ElementFactory;
......@@ -19,7 +20,7 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.XmlSt
* All public methods of this class are part of the Managed Properties API.
*/
@Component(value = ResourceNames.MANAGED_PROPERTY_SCRIPT_UTILITY_FACTORY)
public class ScriptUtilityFactory
public class ManagedPropertyFunctions
{
private static final IElementFactory ELEMENT_FACTORY_INSTANCE = new ElementFactory();
......@@ -38,10 +39,10 @@ public class ScriptUtilityFactory
@Resource(name = ResourceNames.ENTITY_INFORMATION_PROVIDER)
public void setEntityInformationProvider(IEntityInformationProvider entityInformationProvider)
{
ScriptUtilityFactory.entityInformationProvider = entityInformationProvider;
ManagedPropertyFunctions.entityInformationProvider = entityInformationProvider;
}
private ScriptUtilityFactory()
private ManagedPropertyFunctions()
{
}
......@@ -67,7 +68,7 @@ public class ScriptUtilityFactory
/**
* @return a factory object that can be used to create {@link IElement}-s.
*/
public static IElementFactory getElementFactory()
public static IElementFactory elementFactory()
{
return ELEMENT_FACTORY_INSTANCE;
}
......@@ -75,9 +76,17 @@ public class ScriptUtilityFactory
/**
* @return a converter that can translate {@link IElement} to/from Strings.
*/
public static IStructuredPropertyConverter getPropertyConverter()
public static IStructuredPropertyConverter propertyConverter()
{
return STRUCTURED_PROPERTY_CONVERTER_INSTANCE;
}
/**
* @return a provider of information about entities.
*/
public static IEntityInformationProvider entityInformationProvider()
{
return entityInformationProvider;
}
}
\ No newline at end of file
......@@ -21,6 +21,7 @@ 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.IEntityInformationProvider;
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;
......@@ -118,7 +119,7 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
final EntityKind entityKind =
EntityLinkElementTranslator.translate(value.getEntityLinkKind());
final String permId = value.getPermId();
final String identifierOrNull = tryExtractIdentifier(entityKind, permId);
final String identifierOrNull = tryExtractIdentifier(value);
return new EntityTableCell(entityKind, permId, identifierOrNull);
}
......@@ -135,8 +136,8 @@ public class SimpleTableModelBuilderAdaptor implements ISimpleTableModelBuilderA
builder.addFullRow(values);
}
private String tryExtractIdentifier(EntityKind entityKind, String permId)
private String tryExtractIdentifier(IEntityLinkElement entityLink)
{
return entityInformationProvider.getIdentifier(entityKind, permId);
return entityInformationProvider.getIdentifier(entityLink);
}
}
......@@ -19,15 +19,18 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
/**
* The type of an entity link.
* <p>
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @author Kaloyan Enimanev
*/
public enum EntityLinkElementKind
{
EXPERIMENT("Experiment"), SAMPLE("Sample"), DATA_SET("Dataset", "Data Set"), MATERIAL("Material");
EXPERIMENT("Experiment"), SAMPLE("Sample"), DATA_SET("Dataset", "Data Set"), MATERIAL(
"Material");
private final String elementName;
private final String label;
private EntityLinkElementKind(String elementName)
......@@ -40,7 +43,7 @@ public enum EntityLinkElementKind
this.elementName = elementName;
this.label = label;
}
/**
* the {@link IElement} name corresponding to the link.
*/
......
......@@ -26,6 +26,8 @@ import java.util.Map;
* <p>
* {@link IElement}-s are meant to be used as a convenient, hierarchical property-value persistence
* technique for managed properties.
* <p>
* <b>All methods of this interface are part of the Managed Properties API.</b>
*
* @author Piotr Buczek
* @author Kaloyan Enimanev
......@@ -60,9 +62,9 @@ public interface IElement
* @return all children {@link IElement}-s.
*/
List<IElement> getChildren();
Map<String, String> getAttributes();
IElement setAttributes(Map<String, String> attributes);
/**
......
......@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
/**
* Contains helper method to construct {@link IElement} instances.
* <p>
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @author Kaloyan Enimanev
*/
......
......@@ -14,15 +14,21 @@
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.generic.shared.managed_property;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
/**
* Provides required information about entities.
* <p>
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @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);
/**
* @return identifier of entity specified by given link, <code>null</code> if such an entity
* doesn't exist
*/
String getIdentifier(IEntityLinkElement entityLink);
}
......@@ -16,9 +16,10 @@
package ch.systemsx.cisd.openbis.generic.shared.managed_property.api;
/**
* Denotes a link to an entity in the openBIS database.
* <p>
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @author Kaloyan Enimanev
*/
......
......@@ -21,7 +21,7 @@ import java.util.Date;
/**
* Builder of a row of a simple table.
* <p>
* All methods of this interface are part of the Managed Properties API.
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @see ISimpleTableModelBuilderAdaptor
* @author Piotr Buczek
......
......@@ -22,7 +22,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ITableModel;
/**
* Builder of simple table models. All column titles should be unique.
* <p>
* All methods of this interface are part of the Managed Properties API.
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @author Piotr Buczek
*/
......
......@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.Eleme
/**
* Abstracts the conversion of {@link Element} objects to/from database strings.
* <p>
* <b>All methods of this enum are part of the Managed Properties API.</b>
*
* @author Kaloyan Enimanev
*/
......@@ -34,10 +36,10 @@ public interface IStructuredPropertyConverter
* @return an empty list if the value is undefined or special.
*/
List<IElement> convertToElements(IManagedProperty property);
/**
* @return a {@link String} representation of the specified elements that can be persisted in
* the database.
* the database.
*/
String convertToString(List<IElement> elements);
......
......@@ -36,7 +36,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExternalDataDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IFileFormatTypeDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IGridCustomFilterDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISpaceDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.ILocatorTypeDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonDAO;
......@@ -46,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRelationshipTypeDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleTypeDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IScriptDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISpaceDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyTermDAO;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.IPermIdDAO;
......@@ -186,6 +186,8 @@ public abstract class AbstractBOTest extends AssertJUnit
will(returnValue(scriptDAO));
allowing(daoFactory).getMaterialDAO();
will(returnValue(materialDAO));
allowing(daoFactory).getExperimentDAO();
will(returnValue(experimentDAO));
}
});
}
......
/*
* Copyright 2009 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.jmock.Expectations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import ch.systemsx.cisd.common.logging.LogInitializer;
import ch.systemsx.cisd.openbis.generic.server.business.bo.AbstractBOTest;
import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IEntityLinkElement;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.structured.ElementFactory;
/**
* @author Piotr Buczek
*/
public class EntityInformationProviderTest extends AbstractBOTest
{
private EntityInformationProvider provider;
private ElementFactory elementFactory;
@BeforeMethod
public void setUp()
{
LogInitializer.init();
provider = new EntityInformationProvider(daoFactory);
elementFactory = new ElementFactory();
}
@Test
public void testGetIdentifier()
{
final String mCode = "mCode";
final String mTypeCode = "mTypeCode";
final String sPermId = "sPermId";
final String ePermId = "ePermId";
final String dPermId = "dPermId";
IEntityLinkElement sampleLink = elementFactory.createSampleLink(sPermId);
IEntityLinkElement experimentLink = elementFactory.createExperimentLink(ePermId);
IEntityLinkElement materialLink = elementFactory.createMaterialLink(mCode, mTypeCode);
IEntityLinkElement datasetLink = elementFactory.createDataSetLink(dPermId);
final SamplePE sample = CommonTestUtils.createSample();
final ExperimentPE experiment =
CommonTestUtils.createExperiment(new ExperimentIdentifier("proj", "exp"));
context.checking(new Expectations()
{
{
one(sampleDAO).tryToFindByPermID(sPermId);
will(returnValue(sample));
one(experimentDAO).tryGetByPermID(ePermId);
will(returnValue(experiment));
one(materialDAO).tryFindMaterial(new MaterialIdentifier(mCode, mTypeCode));
// will(returnValue(any(MaterialPE.class)));
one(externalDataDAO).tryToFindDataSetByCode(dPermId);
// will(returnValue(any(DataPE.class)));
}
});
String sIdentifier = provider.getIdentifier(sampleLink);
assertEquals(sample.getIdentifier(), sIdentifier);
String eIdentifier = provider.getIdentifier(experimentLink);
assertEquals(experiment.getIdentifier(), eIdentifier);
String mIdentifier = provider.getIdentifier(materialLink);
String dIdentifier = provider.getIdentifier(datasetLink);
}
}
......@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ManagedEntityProperty;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.IManagedProperty;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluator;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.ScriptUtilityFactory;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyFunctions;
import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.IElement;
/**
......@@ -55,7 +55,7 @@ public class StructuredPropertyConverterPythonTest extends AssertJUnit
// the script will create several elements and serialize them in the property value
List<IElement> elements =
ScriptUtilityFactory.getPropertyConverter().convertToElements(managedProperty);
ManagedPropertyFunctions.propertyConverter().convertToElements(managedProperty);
assertEquals(3, elements.size());
}
......
factory = getElementFactory()
converter = getPropertyConverter()
factory = elementFactory()
converter = propertyConverter()
#
# we use a function named "configureUI" to test something completely unrelated,
......
......@@ -196,9 +196,9 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
rowBuilder.setCell("datasetCol", createDataSetCell("d2"));
rowBuilder = builder.addRow();
rowBuilder.setCell("materialCol", SimpleTableModelBuilder.createNullCell());
rowBuilder.setCell("sampleCol", createSampleCell("s3"));
rowBuilder.setCell("sampleCol", createSampleCell("s3", null));
rowBuilder.setCell("experimentCol", SimpleTableModelBuilder.createNullCell());
rowBuilder.setCell("datasetCol", createDataSetCell("d3"));
rowBuilder.setCell("datasetCol", createDataSetCell("d3", "d3 id"));
TableModel tableModel = builder.getTableModel();
......@@ -225,9 +225,13 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
assertEquals("d2", rows.get(1).getValues().get(3).toString());
assertEquals(4, rows.get(2).getValues().size());
assertEquals("", rows.get(2).getValues().get(0).toString());
assertEquals("s3", rows.get(2).getValues().get(1).toString());
assertEquals("s3 (missing)", rows.get(2).getValues().get(1).toString());
assertEquals(true, ((EntityTableCell) rows.get(2).getValues().get(1)).isMissing());
assertEquals("s3", ((EntityTableCell) rows.get(2).getValues().get(1)).getPermId());
assertEquals("", rows.get(2).getValues().get(2).toString());
assertEquals("d3", rows.get(2).getValues().get(3).toString());
assertEquals("d3 id", rows.get(2).getValues().get(3).toString());
assertEquals(false, ((EntityTableCell) rows.get(2).getValues().get(3)).isMissing());
assertEquals("d3", ((EntityTableCell) rows.get(2).getValues().get(3)).getPermId());
}
private static EntityTableCell createMaterialCell(String permId)
......@@ -240,6 +244,11 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
return new EntityTableCell(EntityKind.SAMPLE, permId);
}
private static EntityTableCell createSampleCell(String permId, String identifierOrNull)
{
return new EntityTableCell(EntityKind.SAMPLE, permId, identifierOrNull);
}
private static EntityTableCell createExperimentCell(String permId)
{
return new EntityTableCell(EntityKind.EXPERIMENT, permId);
......@@ -250,6 +259,11 @@ public class SimpleTableModelBuilderTest extends AssertJUnit
return new EntityTableCell(EntityKind.DATA_SET, permId);
}
private static EntityTableCell createDataSetCell(String permId, String identifierOrNull)
{
return new EntityTableCell(EntityKind.DATA_SET, permId, identifierOrNull);
}
private void assertHeader(String expectedTitle, String expectedID, int expectedDefaultWidth,
int expectedIndex, DataTypeCode expectedDataType, TableModelColumnHeader header)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment