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 8c4abfb3c5606ca7d060f0bb0315e2772684cf42..5471b45a67b88a30ee0354187fa95650df350b3d 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 @@ -129,6 +129,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calcu import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityAdaptorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityValidationCalculator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityValidationCalculator.IValidationRequestDelegate; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.EncapsulatedCommonServer; import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.MasterDataRegistrationScriptRunner; @@ -2810,14 +2811,18 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt EntityValidationCalculator calculator = EntityValidationCalculator.create(info.getScript(), - new IValidationRequestDelegate() + new IValidationRequestDelegate<INonAbstractEntityAdapter>() { @Override - public void requestValidation(Object o) + public void requestValidation( + INonAbstractEntityAdapter entityAdaptor) { - objectsWhichValidationWouldBeForced - .add(((IEntityInformationWithPropertiesHolder) o) - .getIdentifier()); + IEntityInformationWithPropertiesHolder localEntity = + entityAdaptor.entityPE(); + objectsWhichValidationWouldBeForced.add(localEntity + .getEntityKind() + + " " + + localEntity.getIdentifier()); } }); IDynamicPropertyEvaluator evaluator = diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java index 570d3627bdd063276ff872826768aedca3bc7afd..21b88564987d7bbdfac9306ea46d7ce62ac46408 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityValidationInterceptor.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.IDyna import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityAdaptorFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityValidationCalculator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.EntityValidationCalculator.IValidationRequestDelegate; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; @@ -56,7 +57,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; * @author Jakub Straszewski */ public class EntityValidationInterceptor extends EmptyInterceptor implements - IValidationRequestDelegate + IValidationRequestDelegate<INonAbstractEntityAdapter> { private static final long serialVersionUID = ServiceVersionHolder.VERSION; @@ -293,17 +294,15 @@ public class EntityValidationInterceptor extends EmptyInterceptor implements } @Override - public void requestValidation(Object entity) + public void requestValidation(INonAbstractEntityAdapter entityAdapter) { + IEntityInformationWithPropertiesHolder entity = entityAdapter.entityPE(); if (validatedEntities.contains(entity) || entitiesToValidate.contains(entity)) { // forcing validation of entity already listed for validation } else { - IEntityInformationWithPropertiesHolder typedEntity = - (IEntityInformationWithPropertiesHolder) entity; - - entitiesToValidate.add(typedEntity); + entitiesToValidate.add(entity); totalEntitiesToValidateCount++; } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/EntityValidationCalculator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/EntityValidationCalculator.java index 908e39f1ecd6920aa897bdd67435921e8e0a5df3..d5584fa6cf0aea0ed8b104b58d0436f4e5e3c4ae 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/EntityValidationCalculator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/EntityValidationCalculator.java @@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calc import ch.systemsx.cisd.common.evaluator.Evaluator; import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api.IEntityAdaptor; import ch.systemsx.cisd.openbis.generic.shared.calculator.AbstractCalculator; -import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; /** * @author Jakub Straszewski @@ -38,9 +37,9 @@ public class EntityValidationCalculator extends AbstractCalculator private static final String VALIDATION_REQUEST_FUNCTION = "def requestValidation(entity):\n " + CALCULATOR_VARIABLE + ".requestValidation(entity)\n"; - public interface IValidationRequestDelegate + public interface IValidationRequestDelegate<T> { - public void requestValidation(Object o); + public void requestValidation(T o); } /** @@ -50,7 +49,7 @@ public class EntityValidationCalculator extends AbstractCalculator * "isNewEntity" */ public static EntityValidationCalculator create(String expression, - final IValidationRequestDelegate validationRequestedDelegate) + final IValidationRequestDelegate<INonAbstractEntityAdapter> validationRequestedDelegate) { String initialScript = getBasicInitialScript(); initialScript += importFunctions(EntityValidationCalculator.class) + NEWLINE; @@ -63,14 +62,14 @@ public class EntityValidationCalculator extends AbstractCalculator } public EntityValidationCalculator(Evaluator evaluator, - final IValidationRequestDelegate validationRequested) + final IValidationRequestDelegate<INonAbstractEntityAdapter> validationRequested) { super(evaluator); // wrap the request validation with argument checking, so that the implementators of the // interface can focus on logic - IValidationRequestDelegate wrappedValidationRequestedDelegate = - new IValidationRequestDelegate() + IValidationRequestDelegate<Object> wrappedValidationRequestedDelegate = + new IValidationRequestDelegate<Object>() { @Override public void requestValidation(Object entity) @@ -80,13 +79,14 @@ public class EntityValidationCalculator extends AbstractCalculator return; } - if (false == entity instanceof IEntityInformationWithPropertiesHolder) + if (false == entity instanceof INonAbstractEntityAdapter) { throw new IllegalArgumentException( "Trying to force the validation of an object of invalid type " + entity.getClass()); } - validationRequested.requestValidation(entity); + validationRequested + .requestValidation((INonAbstractEntityAdapter) entity); } }; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExperimentAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExperimentAdaptor.java index 39ad7d0ee2f256b008614e7167009c3c000e398d..b4c34377140989ba6214c5e03b6d3bb745043ee3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExperimentAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExperimentAdaptor.java @@ -42,6 +42,7 @@ public class ExperimentAdaptor extends AbstractEntityAdaptor implements IExperim return experimentPE; } + @Override public ExperimentPE entityPE() { return experimentPE(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExternalDataAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExternalDataAdaptor.java index 8aada43b25f8250b0c77c32707083399faf66e3c..4282d37362338edcdd664650672ee3fe152437d8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExternalDataAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/ExternalDataAdaptor.java @@ -48,6 +48,7 @@ public class ExternalDataAdaptor extends AbstractEntityAdaptor implements IDataA return externalDataPE; } + @Override public DataPE entityPE() { return externalDataPE(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/INonAbstractEntityAdapter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/INonAbstractEntityAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..fe073e53b3831a2984e1bf00590a7c4dcf3065ce --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/INonAbstractEntityAdapter.java @@ -0,0 +1,27 @@ +/* + * Copyright 2012 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.dataaccess.dynamic_property.calculator; + +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; + +/** + * @author Jakub Straszewski + */ +public interface INonAbstractEntityAdapter +{ + public IEntityInformationWithPropertiesHolder entityPE(); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/MaterialAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/MaterialAdaptor.java index 25c235a2f535dc7bcd383899ec4fd7bab3f5b161..80a0f4461792603b4546cc278052c2574a55f4cd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/MaterialAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/MaterialAdaptor.java @@ -42,6 +42,7 @@ public class MaterialAdaptor extends AbstractEntityAdaptor implements IMaterialA return MaterialPE; } + @Override public MaterialPE entityPE() { return materialPE(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/SampleAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/SampleAdaptor.java index c907c9badfd1d4fa9a6a39cc87a216784e0587f2..c49b4ea483e18fe72e3ebc6aac1b457e85a00015 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/SampleAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/SampleAdaptor.java @@ -47,6 +47,7 @@ public class SampleAdaptor extends AbstractEntityAdaptor implements ISampleAdapt return samplePE; } + @Override public SamplePE entityPE() { return samplePE(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IDataAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IDataAdaptor.java index afa771005deb0894bddb1fb276b2be5c1bb6022a..818905f13defc578ddecaf065679f2a5b17426ef 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IDataAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IDataAdaptor.java @@ -18,10 +18,12 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calc import java.util.List; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; + /** * @author Jakub Straszewski */ -public interface IDataAdaptor +public interface IDataAdaptor extends INonAbstractEntityAdapter { /** * Returns the experiment of this data set, or null if not exists. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IExperimentAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IExperimentAdaptor.java index 5e5b26d4c0b019699be1666a97a8715fec85fba5..b6fa496c0a9440ce7bbf396b8041b1c78eb5e114 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IExperimentAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IExperimentAdaptor.java @@ -16,12 +16,12 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; + /** - * - * * @author Jakub Straszewski */ -public interface IExperimentAdaptor +public interface IExperimentAdaptor extends INonAbstractEntityAdapter { } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IMaterialAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IMaterialAdaptor.java index d2a247f2869518029fc654975035acad2a8f4bed..d065423b6f12ce5d4184cf59c49cb549bb62fb95 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IMaterialAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/IMaterialAdaptor.java @@ -16,12 +16,12 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.api; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; + /** - * - * * @author Jakub Straszewski */ -public interface IMaterialAdaptor +public interface IMaterialAdaptor extends INonAbstractEntityAdapter { } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/ISampleAdaptor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/ISampleAdaptor.java index ed64afe8b136cb572429671fde5d740fa5c2b02f..d5abf3f54e1fc43a9eeb9a6bc2ec55b6b1a25eed 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/ISampleAdaptor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/api/ISampleAdaptor.java @@ -18,10 +18,12 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calc import java.util.List; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.INonAbstractEntityAdapter; + /** * @author Jakub Straszewski */ -public interface ISampleAdaptor extends IEntityAdaptor +public interface ISampleAdaptor extends IEntityAdaptor, INonAbstractEntityAdapter { /** * Returns the experiment of this sample, or null if not exists. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java index a95d90aa52b2eceb658f741af20407975be35da0..3a99377113f59ac130c229ea16d46cb1548e4997 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/identifier/IdentifierHelper.java @@ -61,7 +61,7 @@ public final class IdentifierHelper } /** - * Creates a {@link GroupIdentifier} from given <var>groupPE</var>. + * Creates a {@link DatabaseInstanceIdentifier} from given <var>groupPE</var>. */ public final static DatabaseInstanceIdentifier createDatabaseInstanceIdentifier( final DatabaseInstancePE databaseInstancePE) diff --git a/openbis/sourceTest/sql/postgresql/120/057=scripts.tsv b/openbis/sourceTest/sql/postgresql/120/057=scripts.tsv index f5337aa5e81fabbab1ae6dea35b88b6c11130637..c50c5101ac626cf10ebe6b22a641b407251619ab 100644 --- a/openbis/sourceTest/sql/postgresql/120/057=scripts.tsv +++ b/openbis/sourceTest/sql/postgresql/120/057=scripts.tsv @@ -5,6 +5,6 @@ 5 1 validateOK \N def validate(entity, isNew):\n pass\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION 6 1 validateFAIL \N def validate(entity, isNew):\n return "This check always fail"\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION 7 1 validateUpdateFAIL \N def validate(entity, isNew):\n if (not isNew):\n return "Cannot update this entity"\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION -8 1 validateChildren \N def validate(entity, isNew):\n for childRelation in entity.entityPE().getChildRelationships():\n requestValidation(childRelation.getChildSample()) 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION +8 1 validateChildren \N def validate(entity, isNew):\n for child in entity.children():\n requestValidation(child) 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION 9 1 code_date \N "%s %s" % (entity.code(), str(currentDate().getTime())) 2010-10-27 15:16:48.994831+02 2 \N DYNAMIC_PROPERTY 10 1 waitOK \N import time;\ndef validate(entity, isNew):\n time.sleep(1);\n 2010-10-27 15:16:48.994831+02 2 \N ENTITY_VALIDATION