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