From 8485c6ddb10c14e243e4c93d902c47b8cd219857 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Wed, 19 Sep 2012 14:58:09 +0000 Subject: [PATCH] BIS-195 modify the api of entity validation requests to accept only adaptor classes - not the pe objects SVN: 26682 --- .../openbis/generic/server/CommonServer.java | 15 +++++++---- .../db/EntityValidationInterceptor.java | 11 ++++---- .../EntityValidationCalculator.java | 18 ++++++------- .../calculator/ExperimentAdaptor.java | 1 + .../calculator/ExternalDataAdaptor.java | 1 + .../calculator/INonAbstractEntityAdapter.java | 27 +++++++++++++++++++ .../calculator/MaterialAdaptor.java | 1 + .../calculator/SampleAdaptor.java | 1 + .../calculator/api/IDataAdaptor.java | 4 ++- .../calculator/api/IExperimentAdaptor.java | 6 ++--- .../calculator/api/IMaterialAdaptor.java | 6 ++--- .../calculator/api/ISampleAdaptor.java | 4 ++- .../dto/identifier/IdentifierHelper.java | 2 +- .../sql/postgresql/120/057=scripts.tsv | 2 +- 14 files changed, 69 insertions(+), 30 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/calculator/INonAbstractEntityAdapter.java 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 8c4abfb3c56..5471b45a67b 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 570d3627bdd..21b88564987 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 908e39f1ecd..d5584fa6cf0 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 39ad7d0ee2f..b4c34377140 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 8aada43b25f..4282d373623 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 00000000000..fe073e53b38 --- /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 25c235a2f53..80a0f446179 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 c907c9badfd..c49b4ea483e 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 afa771005de..818905f13de 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 5e5b26d4c0b..b6fa496c0a9 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 d2a247f2869..d065423b6f1 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 ed64afe8b13..d5abf3f54e1 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 a95d90aa52b..3a99377113f 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 f5337aa5e81..c50c5101ac6 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 -- GitLab