From 820f52d97cc8e081bd3cb019676f6e127112d4cd Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Tue, 31 Jul 2012 12:59:08 +0000 Subject: [PATCH] SP-146 BIS-102 make experiments and materials mutable SVN: 26295 --- .../v1/IDataSetRegistrationTransaction.java | 14 ++++ .../api/v1/impl/AbstractTransactionState.java | 72 +++++++++++++++++++ .../impl/DataSetRegistrationTransaction.java | 12 ++++ ...aSetRegistrationTransactionV2Delegate.java | 12 ++++ .../v2/IDataSetRegistrationTransactionV2.java | 14 ++++ 5 files changed, 124 insertions(+) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java index c6bfe9300c0..34e9361a187 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSetRegistrationTransaction.java @@ -127,6 +127,13 @@ public interface IDataSetRegistrationTransaction */ IExperimentUpdatable getExperimentForUpdate(String experimentIdentifierString); + /** + * Given an immutable experiment, make it mutable. + * + * @return An experiment + */ + IExperimentUpdatable makeExperimentMutable(IExperimentImmutable experiment); + /** * Create a new experiment to register with the openBIS AS. The experiment will have a permId. * @@ -180,6 +187,13 @@ public interface IDataSetRegistrationTransaction */ IMaterial getMaterialForUpdate(String materialCode, String materialType); + /** + * Given an immutable material, make it mutable. + * + * @return A material + */ + IMaterial makeMaterialMutable(IMaterialImmutable material); + /** * Create a new material to register with the openBIS AS. * diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java index 298aa16be4a..783a49a5c1e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java @@ -50,6 +50,7 @@ import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.RollbackStack.IRollbac import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IMaterialImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.AtomicEntityOperationDetails; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; @@ -565,6 +566,42 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> return result; } + public IExperimentUpdatable makeExperimentMutable(IExperimentImmutable experiment) + { + if (experiment == null) + { + return null; + } + // Check if we already have an updatable experiment for this one + ExperimentUpdatable result = findExperimentLocally(experiment); + if (result != null) + { + return result; + } + + if (experiment instanceof ExperimentImmutable) + { + result = + new ExperimentUpdatable(((ExperimentImmutable) experiment).getExperiment()); + experimentsToBeUpdated.add(result); + return result; + } + + return null; + } + + private ExperimentUpdatable findExperimentLocally(IExperimentImmutable experimentToFind) + { + for (ExperimentUpdatable experiment : experimentsToBeUpdated) + { + if (experiment.equals(experimentToFind)) + { + return experiment; + } + } + return null; + } + public IExperiment createNewExperiment(String experimentIdentifierString, String experimentTypeCode) { @@ -614,6 +651,41 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> return result; } + public IMaterial makeMaterialMutable(IMaterialImmutable material) + { + if (material == null) + { + return null; + } + // Check if we already have an updatable material for this one + Material result = findMaterialLocally(material); + if (result != null) + { + return result; + } + + if (material instanceof MaterialImmutable) + { + result = new Material(((MaterialImmutable) material).getMaterial()); + materialsToBeUpdated.add(result); + return result; + } + + return null; + } + + private Material findMaterialLocally(IMaterialImmutable materialToFind) + { + for (Material material : materialsToBeUpdated) + { + if (material.equals(materialToFind)) + { + return material; + } + } + return null; + } + public String moveFile(String src, IDataSet dst) { File srcFile = new File(src); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java index 790be226001..1cfa30c57d9 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java @@ -318,6 +318,12 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem return getStateAsLiveState().getExperimentForUpdate(experimentIdentifierString); } + @Override + public IExperimentUpdatable makeExperimentMutable(IExperimentImmutable experiment) + { + return getStateAsLiveState().makeExperimentMutable(experiment); + } + @Override public ISample createNewSample(String sampleIdentifierString, String sampleTypeCode) { @@ -388,6 +394,12 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem return getStateAsLiveState().getMaterialForUpdate(materialCode, materialType); } + @Override + public IMaterial makeMaterialMutable(IMaterialImmutable material) + { + return getStateAsLiveState().makeMaterialMutable(material); + } + @Override public IMaterial createNewMaterial(String materialCode, String materialType) { diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/DataSetRegistrationTransactionV2Delegate.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/DataSetRegistrationTransactionV2Delegate.java index 0513d8e6d5a..004ea32cf2f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/DataSetRegistrationTransactionV2Delegate.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/DataSetRegistrationTransactionV2Delegate.java @@ -125,6 +125,12 @@ public class DataSetRegistrationTransactionV2Delegate implements IDataSetRegistr return transaction.getExperimentForUpdate(experimentIdentifierString); } + @Override + public IExperimentUpdatable makeExperimentMutable(IExperimentImmutable experiment) + { + return transaction.makeExperimentMutable(experiment); + } + @Override public IExperiment createNewExperiment(String experimentIdentifierString, String experimentTypeCode) @@ -168,6 +174,12 @@ public class DataSetRegistrationTransactionV2Delegate implements IDataSetRegistr return transaction.getMaterialForUpdate(materialCode, materialType); } + @Override + public IMaterial makeMaterialMutable(IMaterialImmutable material) + { + return transaction.makeMaterialMutable(material); + } + @Override public IMaterial createNewMaterial(String materialCode, String materialType) { diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java index 129d065abff..3607b9be167 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java @@ -124,6 +124,13 @@ public interface IDataSetRegistrationTransactionV2 */ IExperimentUpdatable getExperimentForUpdate(String experimentIdentifierString); + /** + * Given an immutable experiment, make it mutable. + * + * @return An experiment + */ + IExperimentUpdatable makeExperimentMutable(IExperimentImmutable experiment); + /** * Create a new experiment to register with the openBIS AS. The experiment will have a permId. * @@ -176,6 +183,13 @@ public interface IDataSetRegistrationTransactionV2 */ IMaterial getMaterialForUpdate(String materialCode, String materialType); + /** + * Given an immutable material, make it mutable. + * + * @return A material + */ + IMaterial makeMaterialMutable(IMaterialImmutable material); + /** * Create a new material to register with the openBIS AS. * -- GitLab