diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetExecutor.java index af47bf3c78e15f87530721745a5e5f24cceb66a6..8ed29fcec5d3a8fb0d666df864e3a443f6a336e6 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/UpdateDataSetExecutor.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; @@ -121,9 +123,31 @@ public class UpdateDataSetExecutor extends AbstractUpdateEntityExecutor<DataSetU PersonPE person = context.getSession().tryGetPerson(); Date timeStamp = daoFactory.getTransactionTimestamp(); - for (DataPE entity : batch.getObjects().values()) + for (Entry<DataSetUpdate, DataPE> entry : batch.getObjects().entrySet()) { + DataSetUpdate update = entry.getKey();; + DataPE entity = entry.getValue(); RelationshipUtils.updateModificationDateAndModifier(entity, person, timeStamp); + if (update.shouldBeFrozen()) + { + entity.setFrozen(true); + } + if (update.shouldBeFrozenForChildren()) + { + entity.setFrozenForChildren(true); + } + if (update.shouldBeFrozenForParents()) + { + entity.setFrozenForParents(true); + } + if (update.shouldBeFrozenForComponents()) + { + entity.setFrozenForComponents(true); + } + if (update.shouldBeFrozenForContainers()) + { + entity.setFrozenForContainers(true); + } } } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/UpdateExperimentExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/UpdateExperimentExecutor.java index 90d8b76ed56081bd823b0fb34bc79142bec352f1..7cedba975367a53f38b69830f1ae490f0ede20f5 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/UpdateExperimentExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/UpdateExperimentExecutor.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; @@ -110,9 +111,23 @@ public class UpdateExperimentExecutor extends AbstractUpdateEntityExecutor<Exper PersonPE person = context.getSession().tryGetPerson(); Date timeStamp = daoFactory.getTransactionTimestamp(); - for (ExperimentPE entity : batch.getObjects().values()) + for (Entry<ExperimentUpdate, ExperimentPE> entry : batch.getObjects().entrySet()) { - RelationshipUtils.updateModificationDateAndModifier(entity, person, timeStamp); + ExperimentUpdate update = entry.getKey(); + ExperimentPE experiment = entry.getValue(); + RelationshipUtils.updateModificationDateAndModifier(experiment, person, timeStamp); + if (update.shouldBeFrozen()) + { + experiment.setFrozen(true); + } + if (update.shouldBeFrozenForDataSets()) + { + experiment.setFrozenForDataSet(true); + } + if (update.shouldBeFrozenForSamples()) + { + experiment.setFrozenForSample(true); + } } } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/UpdateProjectExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/UpdateProjectExecutor.java index e9a4078f4f9e9b49587ffd487ac65565a77e14d1..9d8bf937bc3fcf68ff95bbe46cb2b07fd29d1722 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/UpdateProjectExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/UpdateProjectExecutor.java @@ -110,6 +110,18 @@ public class UpdateProjectExecutor extends AbstractUpdateEntityExecutor<ProjectU { project.setDescription(update.getDescription().getValue()); } + if (update.shouldBeFrozen()) + { + project.setFrozen(true); + } + if (update.shouldBeFrozenForExperiments()) + { + project.setFrozenForExperiment(true); + } + if (update.shouldBeFrozenForSamples()) + { + project.setFrozenForSample(true); + } } } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExecutor.java index 7a0a071c8847b84e275b21d93b463e4eb4cfb218..86008dc50f06826410fc1e61640503c0a9d51394 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleExecutor.java @@ -21,6 +21,8 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; @@ -118,12 +120,34 @@ public class UpdateSampleExecutor extends AbstractUpdateEntityExecutor<SampleUpd { Collection<SamplePE> experimentOrProjectSamples = new ArrayList<SamplePE>(); - for (SamplePE entity : batch.getObjects().values()) + for (Entry<SampleUpdate, SamplePE> entry : batch.getObjects().entrySet()) { + SampleUpdate update = entry.getKey(); + SamplePE entity = entry.getValue();; if (entity.getExperiment() != null || entity.getProject() != null) { experimentOrProjectSamples.add(entity); } + if (update.shouldBeFrozen()) + { + entity.setFrozen(true); + } + if (update.shouldBeFrozenForComponents()) + { + entity.setFrozenForComponent(true); + } + if (update.shouldBeFrozenForChildren()) + { + entity.setFrozenForChildren(true); + } + if (update.shouldBeFrozenForParents()) + { + entity.setFrozenForParents(true); + } + if (update.shouldBeFrozenForDataSets()) + { + entity.setFrozenForDataSet(true); + } } updateSampleSpaceExecutor.update(context, batch); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/UpdateSpaceExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/UpdateSpaceExecutor.java index b4bdd5c78c5ddd903ac406234f18b41c9ec702ed..1e329b7219dbe278831169bfa9dd4f3d16754107 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/UpdateSpaceExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/UpdateSpaceExecutor.java @@ -91,6 +91,18 @@ public class UpdateSpaceExecutor extends AbstractUpdateEntityExecutor<SpaceUpdat { space.setDescription(update.getDescription().getValue()); } + if (update.shouldBeFrozen()) + { + space.setFrozen(true); + } + if (update.shouldBeFrozenForProjects()) + { + space.setFrozenForProject(true); + } + if (update.shouldBeFrozenForSamples()) + { + space.setFrozenForSample(true); + } } } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetBaseRecord.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetBaseRecord.java index 062756af097d9146011f41211da14acddd1bf5a5..be8021319e28ad83f5ab75c8f86034e142b85f22 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetBaseRecord.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetBaseRecord.java @@ -41,4 +41,14 @@ public class DataSetBaseRecord extends ObjectBaseRecord public Date registrationDate; public String dataSetKind; + + public boolean frozen; + + public boolean frozenForChildren; + + public boolean frozenForParents; + + public boolean frozenForComponents; + + public boolean frozenForContainers; } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetQuery.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetQuery.java index 7c97fc33f2d1699554c2932dc3a1984b4c6fa1d2..b080e28226c94e7b1d7e959110b8a95c0d9261d1 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetQuery.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetQuery.java @@ -36,7 +36,12 @@ import net.lemnik.eodsql.Select; public interface DataSetQuery extends ObjectQuery { - @Select(sql = "select d.id, d.code, d.is_derived as isDerived, d.data_producer_code as dataProducer, d.production_timestamp as dataProductionDate, d.access_timestamp as accessDate, d.modification_timestamp as modificationDate, d.registration_timestamp as registrationDate, d.data_set_kind as dataSetKind " + @Select(sql = "select d.id, d.code, d.is_derived as isDerived, d.data_producer_code as dataProducer, " + + "d.production_timestamp as dataProductionDate, d.access_timestamp as accessDate, " + + "d.modification_timestamp as modificationDate, d.registration_timestamp as registrationDate, " + + "d.data_set_kind as dataSetKind, d.frozen as frozen, d.frozen_for_children as frozenForChildren, " + + "d.frozen_for_parents as frozenForParents, d.frozen_for_comps as frozenForComponents, " + + "d.frozen_for_conts as frozenForContainers " + "from data d where d.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) public List<DataSetBaseRecord> getDataSets(LongSet dataSetIds); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetTranslator.java index 681f2b785ef169ae7e33f2175ba4e6587360f6ad..74831da5fc3bdd96eb3ee71d7038c2fb212e4b3a 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetTranslator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/dataset/DataSetTranslator.java @@ -221,6 +221,11 @@ public class DataSetTranslator extends AbstractCachingTranslator<Long, DataSet, result.setRegistrationDate(baseRecord.registrationDate); result.setPostRegistered(relations.get(IDataSetPostRegisteredTranslator.class, dataSetId)); result.setKind(DataSetKind.valueOf(baseRecord.dataSetKind)); + result.setFrozen(baseRecord.frozen); + result.setFrozenForChildren(baseRecord.frozenForChildren); + result.setFrozenForParents(baseRecord.frozenForParents); + result.setFrozenForComponents(baseRecord.frozenForComponents); + result.setFrozenForContainers(baseRecord.frozenForContainers); if (fetchOptions.hasType()) { diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentBaseRecord.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentBaseRecord.java index 73697e86227565f4e450b51011dec58d4bc2f99d..241951fabf9557ca6cf9be750f658ab177c9fc9a 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentBaseRecord.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentBaseRecord.java @@ -34,6 +34,12 @@ public class ExperimentBaseRecord extends ObjectBaseRecord public String spaceCode; + public boolean frozen; + + public boolean frozenForDataSets; + + public boolean frozenForSamples; + public Date registrationDate; public Date modificationDate; diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentQuery.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentQuery.java index ed8598f5cdb57ef57543e7c1e08cb23b9a0544ec..f263c49ea4f6d4382d117858d177aa0ff50731f2 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentQuery.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentQuery.java @@ -36,7 +36,9 @@ import ch.systemsx.cisd.common.db.mapper.LongSetMapper; public interface ExperimentQuery extends ObjectQuery { - @Select(sql = "select e.id, e.code, e.perm_id as permId, p.code as projectCode, sp.code as spaceCode, e.registration_timestamp as registrationDate, e.modification_timestamp as modificationDate " + @Select(sql = "select e.id, e.code, e.perm_id as permId, p.code as projectCode, sp.code as spaceCode, " + + "e.registration_timestamp as registrationDate, e.modification_timestamp as modificationDate, " + + "e.frozen as frozen, e.frozen_for_data as frozenForDataSets, e.frozen_for_samp as frozenForSamples " + "from experiments e join projects p on e.proj_id = p.id " + "join spaces sp on p.space_id = sp.id " + "where e.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentTranslator.java index fda8c6a711ef3906eff53babab9a1cca46741044..c5052f6054181fa24b5e84cd19e9cd8ce5c95b0d 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentTranslator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/experiment/ExperimentTranslator.java @@ -175,6 +175,9 @@ public class ExperimentTranslator extends AbstractCachingTranslator<Long, Experi result.setCode(baseRecord.code); result.setPermId(new ExperimentPermId(baseRecord.permId)); result.setIdentifier(new ExperimentIdentifier(baseRecord.spaceCode, baseRecord.projectCode, baseRecord.code)); + result.setFrozen(baseRecord.frozen); + result.setFrozenForDataSets(baseRecord.frozenForDataSets); + result.setFrozenForSamples(baseRecord.frozenForSamples); result.setRegistrationDate(baseRecord.registrationDate); result.setModificationDate(baseRecord.modificationDate); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectBaseRecord.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectBaseRecord.java index 853186ed5af7ecafa4ebd53b40b9d23261f803bc..d5204d6df87b663307d65334da352e66c9b9bdc3 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectBaseRecord.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectBaseRecord.java @@ -34,6 +34,12 @@ public class ProjectBaseRecord extends ObjectBaseRecord public String description; + public boolean frozen; + + public boolean frozenForExperiments; + + public boolean frozenForSamples; + public Date registrationDate; public Date modificationDate; diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectQuery.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectQuery.java index 61cd6aba848d0f0239b9bb34a6ebd2e23e295417..18481a5957e088d2e958e71348d159df2fc9688f 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectQuery.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectQuery.java @@ -37,7 +37,9 @@ public interface ProjectQuery extends ObjectQuery + "where p.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) public List<ProjectAuthorizationRecord> getAuthorizations(LongSet longSet); - @Select(sql = "select p.id, p.code, p.perm_id as permId, sp.code as spaceCode, p.description, p.registration_timestamp as registrationDate, p.modification_timestamp as modificationDate " + @Select(sql = "select p.id, p.code, p.perm_id as permId, sp.code as spaceCode, p.description, " + + "p.registration_timestamp as registrationDate, p.modification_timestamp as modificationDate, " + + "p.frozen as frozen, p.frozen_for_exp as frozenForExperiments, p.frozen_for_samp as frozenForSamples " + "from projects p left outer join spaces sp on p.space_id = sp.id " + "where p.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) public List<ProjectBaseRecord> getProjects(LongSet projectIds); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectTranslator.java index 4d2468ad84047972dcce73c38a0d3e847ddddbba..9e99bd5ceb56943ac972f3a62cc1fbed29b7fcf5 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectTranslator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/project/ProjectTranslator.java @@ -146,6 +146,9 @@ public class ProjectTranslator extends AbstractCachingTranslator<Long, Project, result.setPermId(new ProjectPermId(baseRecord.permId)); result.setIdentifier(new ProjectIdentifier(baseRecord.spaceCode, baseRecord.code)); result.setDescription(baseRecord.description); + result.setFrozen(baseRecord.frozen); + result.setFrozenForExperiments(baseRecord.frozenForExperiments); + result.setFrozenForSamples(baseRecord.frozenForSamples); result.setRegistrationDate(baseRecord.registrationDate); result.setModificationDate(baseRecord.modificationDate); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleBaseRecord.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleBaseRecord.java index 7af80650649ee9b572d326e0f493c219914f79ff..6fd387f73db29838affac0340c45f8d50cdc60d0 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleBaseRecord.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleBaseRecord.java @@ -36,6 +36,16 @@ public class SampleBaseRecord extends ObjectBaseRecord public String permId; + public boolean frozen; + + public boolean frozenForComponents; + + public boolean frozenForChildren; + + public boolean frozenForParents; + + public boolean frozenForDataSets; + public Date registrationDate; public Date modificationDate; diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleQuery.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleQuery.java index e331c0eb5cd1722eeb8a5bf39a95c540e0d72ebd..a25d3c0db823b932fe44febd57d6437dc5556a28 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleQuery.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleQuery.java @@ -37,7 +37,9 @@ public interface SampleQuery extends ObjectQuery @Select(sql = "select s.id, s.code, s.perm_id as permId, sp.code as spaceCode, p.code as projectCode, " + "sc.code as containerCode, s.registration_timestamp as registrationDate, " - + "s.modification_timestamp as modificationDate " + + "s.modification_timestamp as modificationDate, s.frozen as frozen, s.frozen_for_comp as frozenForComponents, " + + "s.frozen_for_children as frozenForChildren, s.frozen_for_parents as frozenForParents, " + + "s.frozen_for_data as frozenForDatasets " + "from samples s left join spaces sp on s.space_id = sp.id " + "left join projects p on s.proj_id = p.id " + "left join samples sc on s.samp_id_part_of = sc.id " diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleTranslator.java index 1cee6d3163a45867a640ef250c3710403140d66f..7ef6e113bf640734a8a654f154c49e82da88ba89 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleTranslator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/sample/SampleTranslator.java @@ -210,6 +210,11 @@ public class SampleTranslator extends AbstractCachingTranslator<Long, Sample, Sa result.setCode(baseRecord.code); result.setIdentifier(new SampleIdentifier(baseRecord.spaceCode, baseRecord.projectCode, baseRecord.containerCode, baseRecord.code)); + result.setFrozen(baseRecord.frozen); + result.setFrozenForComponents(baseRecord.frozenForComponents); + result.setFrozenForChildren(baseRecord.frozenForChildren); + result.setFrozenForParents(baseRecord.frozenForParents); + result.setFrozenForDataSets(baseRecord.frozenForDataSets); result.setModificationDate(baseRecord.modificationDate); result.setRegistrationDate(baseRecord.registrationDate); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceBaseRecord.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceBaseRecord.java index f0f2ef496c015fea11b374c9594f5e4bc74eaf87..d4e2781d4ab7fbb831255b22b12dee1ff369e33b 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceBaseRecord.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceBaseRecord.java @@ -30,6 +30,12 @@ public class SpaceBaseRecord extends ObjectBaseRecord public String description; + public boolean frozen; + + public boolean frozenForProjects; + + public boolean frozenForSamples; + public Date registrationDate; } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceQuery.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceQuery.java index 79347bbff28cc9001b583ac267b72fc4b1550853..385df7850ece95f23760de323465ae2b7804b00b 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceQuery.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceQuery.java @@ -35,7 +35,9 @@ public interface SpaceQuery extends ObjectQuery @Select(sql = "select s.id, s.code from spaces s where s.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) public List<SpaceAuthorizationRecord> getAuthorizations(LongSet spaceIds); - @Select(sql = "select s.id, s.code, s.description, s.registration_timestamp as registrationDate from spaces s where s.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) + @Select(sql = "select s.id, s.code, s.description, s.registration_timestamp as registrationDate, frozen, " + + "frozen_for_proj as frozenForProjects, frozen_for_samp as frozenForSamples " + + "from spaces s where s.id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) public List<SpaceBaseRecord> getSpaces(LongSet spaceIds); @Select(sql = "select s.space_id as objectId, s.id as relatedId from samples s where s.space_id = any(?{1})", parameterBindings = { LongSetMapper.class }, fetchSize = FETCH_SIZE) diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceTranslator.java index d4d3b959125bb7a09b60d9c736fd493162d52f15..47edac28fcd37bf805d0befc73db247a570904b6 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceTranslator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/space/SpaceTranslator.java @@ -102,6 +102,9 @@ public class SpaceTranslator extends AbstractCachingTranslator<Long, Space, Spac result.setCode(baseRecord.code); result.setPermId(new SpacePermId(baseRecord.code)); result.setDescription(baseRecord.description); + result.setFrozen(baseRecord.frozen); + result.setFrozenForProjects(baseRecord.frozenForProjects); + result.setFrozenForSamples(baseRecord.frozenForSamples); // TODO: add modification date to spaces table result.setModificationDate(baseRecord.registrationDate); result.setRegistrationDate(baseRecord.registrationDate); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java index 8c9fb277e506b7cbc45d088156731e3b0ddc6e42..e40fc725a482e2fe4b1b6a30a4c51bcef50609df 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java @@ -262,10 +262,12 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements if (assignmentUpdates.isDynamic() != assignment.isDynamic()) { throw new UserFailureException(String.format( - "Changing assignment from '%s' to '%s' is not allowed. " + "Changing assignment from '%s' to '%s' for %s.%s is not allowed. " + "Please create a new assignment.", describeDynamic(assignment.isDynamic()), - describeDynamic(assignmentUpdates.isDynamic()))); + describeDynamic(assignmentUpdates.isDynamic()), + assignmentUpdates.getEntityTypeCode(), + assignmentUpdates.getPropertyTypeCode())); } boolean scriptChanged = false; if ((assignment.isDynamic() || assignment.isManaged()) diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java index 8026515372d4ace2ee343c23e2469941fa84f9a0..817efc5d9babfd33a4ae4c4eacc2f848f883daee 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java @@ -772,6 +772,174 @@ public class UpdateDataSetTest extends AbstractSampleTest "update-data-sets DATA_SET_UPDATES('[DataSetUpdate[dataSetId=20081105092159111-1], DataSetUpdate[dataSetId=20110509092359990-10]]')"); } + @Test + public void testFreeze() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + DataSetPermId dsId1 = new DataSetPermId("20081105092159111-1"); + DataSetUpdate update1 = new DataSetUpdate(); + update1.setDataSetId(dsId1); + update1.freeze(); + DataSetPermId dsId2 = new DataSetPermId("20081105092159222-2"); + DataSetUpdate update2 = new DataSetUpdate(); + update2.setDataSetId(dsId2); + update2.freezeForChildren(); + DataSetPermId dsId3 = new DataSetPermId("20081105092159333-3"); + DataSetUpdate update3 = new DataSetUpdate(); + update3.setDataSetId(dsId3); + update3.freezeForParents(); + DataSetPermId dsId4 = new DataSetPermId("20081105092259000-8"); + DataSetUpdate update4 = new DataSetUpdate(); + update4.setDataSetId(dsId4); + update4.freezeForComponents(); + DataSetPermId dsId5 = new DataSetPermId("20081105092259000-20"); + DataSetUpdate update5 = new DataSetUpdate(); + update5.setDataSetId(dsId5); + update5.freezeForContainers(); + + // When + v3api.updateDataSets(sessionToken, Arrays.asList(update1, update2, update3, update4, update5)); + + // Then + Map<IDataSetId, DataSet> dataSets = + v3api.getDataSets(sessionToken, Arrays.asList(dsId1, dsId2, dsId3, dsId4, dsId5), new DataSetFetchOptions()); + DataSet ds1 = dataSets.get(dsId1); + assertEquals(ds1.isFrozen(), true); + assertEquals(ds1.isFrozenForChildren(), false); + assertEquals(ds1.isFrozenForParents(), false); + assertEquals(ds1.isFrozenForComponents(), false); + assertEquals(ds1.isFrozenForContainers(), false); + DataSet ds2 = dataSets.get(dsId2); + assertEquals(ds2.isFrozen(), true); + assertEquals(ds2.isFrozenForChildren(), true); + assertEquals(ds2.isFrozenForParents(), false); + assertEquals(ds2.isFrozenForComponents(), false); + assertEquals(ds2.isFrozenForContainers(), false); + DataSet ds3 = dataSets.get(dsId3); + assertEquals(ds3.isFrozen(), true); + assertEquals(ds3.isFrozenForChildren(), false); + assertEquals(ds3.isFrozenForParents(), true); + assertEquals(ds3.isFrozenForComponents(), false); + assertEquals(ds3.isFrozenForContainers(), false); + DataSet ds4 = dataSets.get(dsId4); + assertEquals(ds4.isFrozen(), true); + assertEquals(ds4.isFrozenForChildren(), false); + assertEquals(ds4.isFrozenForParents(), false); + assertEquals(ds4.isFrozenForComponents(), true); + assertEquals(ds4.isFrozenForContainers(), false); + DataSet ds5 = dataSets.get(dsId5); + assertEquals(ds5.isFrozen(), true); + assertEquals(ds5.isFrozenForChildren(), false); + assertEquals(ds5.isFrozenForParents(), false); + assertEquals(ds5.isFrozenForComponents(), false); + assertEquals(ds5.isFrozenForContainers(), true); + } + + @Test + public void testFreezing() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + DataSetPermId dsId = new DataSetPermId("20081105092159111-1"); + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(dsId); + update.freeze(); + v3api.updateDataSets(sessionToken, Arrays.asList(update)); + DataSetUpdate dataSetUpdate = new DataSetUpdate(); + dataSetUpdate.setDataSetId(dsId); + dataSetUpdate.setProperty("COMMENT", "test comment"); + + // When + assertUserFailureException(Void -> v3api.updateDataSets(sessionToken, Arrays.asList(dataSetUpdate)), + // Then + "ERROR: Operation UPDATE PROPERTY is not allowed because data set 20081105092159111-1 is frozen."); + } + + @Test + public void testFreezingForChildren() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + DataSetPermId dsId = new DataSetPermId("20081105092159111-1"); + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(dsId); + update.freezeForChildren(); + v3api.updateDataSets(sessionToken, Arrays.asList(update)); + DataSetUpdate dataSetUpdate = new DataSetUpdate(); + dataSetUpdate.setDataSetId(dsId); + dataSetUpdate.getChildIds().add(new DataSetPermId("20081105092259000-20")); + + // When + assertUserFailureException(Void -> v3api.updateDataSets(sessionToken, Arrays.asList(dataSetUpdate)), + // Then + "ERROR: Operation INSERT PARENT_CHILD is not allowed because data set 20081105092159111-1 " + + "or 20081105092259000-20 is frozen."); + } + + @Test + public void testFreezingForParents() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + DataSetPermId dsId = new DataSetPermId("20081105092159111-1"); + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(dsId); + update.freezeForParents(); + v3api.updateDataSets(sessionToken, Arrays.asList(update)); + DataSetUpdate dataSetUpdate = new DataSetUpdate(); + dataSetUpdate.setDataSetId(dsId); + dataSetUpdate.getParentIds().add(new DataSetPermId("20081105092259000-20")); + + // When + assertUserFailureException(Void -> v3api.updateDataSets(sessionToken, Arrays.asList(dataSetUpdate)), + // Then + "ERROR: Operation INSERT PARENT_CHILD is not allowed because data set 20081105092259000-20 " + + "or 20081105092159111-1 is frozen."); + } + + @Test + public void testFreezingForComponents() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + DataSetPermId dsId = new DataSetPermId("CONTAINER_1"); + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(dsId); + update.freezeForComponents(); + v3api.updateDataSets(sessionToken, Arrays.asList(update)); + DataSetUpdate dataSetUpdate = new DataSetUpdate(); + dataSetUpdate.setDataSetId(dsId); + dataSetUpdate.getComponentIds().add(new DataSetPermId("20081105092259000-20")); + + // When + assertUserFailureException(Void -> v3api.updateDataSets(sessionToken, Arrays.asList(dataSetUpdate)), + // Then + "ERROR: Operation INSERT CONTAINER_COMPONENT is not allowed because data set CONTAINER_1 " + + "or 20081105092259000-20 is frozen."); + } + + @Test + public void testFreezingForContainers() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + DataSetPermId dsId = new DataSetPermId("20081105092259000-20"); + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(dsId); + update.freezeForContainers(); + v3api.updateDataSets(sessionToken, Arrays.asList(update)); + DataSetUpdate dataSetUpdate = new DataSetUpdate(); + dataSetUpdate.setDataSetId(dsId); + dataSetUpdate.getContainerIds().add(new DataSetPermId("CONTAINER_1")); + + // When + assertUserFailureException(Void -> v3api.updateDataSets(sessionToken, Arrays.asList(dataSetUpdate)), + // Then + "ERROR: Operation INSERT CONTAINER_COMPONENT is not allowed because data set CONTAINER_1 " + + "or 20081105092259000-20 is frozen."); + } + private Collection<String> dataSetCodes(Collection<? extends DataSet> list) { LinkedList<String> result = new LinkedList<String>(); diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java index 46f2a1159b0cf9d259f378d2d7ec6a88e3a2f0f8..4fd97b410d2ab43e5c3beea5acc8879fda2b68aa 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java @@ -30,6 +30,10 @@ import org.testng.annotations.Test; import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.Attachment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.create.AttachmentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.id.AttachmentFileName; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetKind; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.datastore.id.DataStorePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation; @@ -59,6 +63,7 @@ import ch.systemsx.cisd.openbis.systemtest.authorization.ProjectAuthorizationUse */ public class UpdateExperimentTest extends AbstractExperimentTest { + private static final String PREFIX = "UET-"; @Test public void testUpdateWithIndexCheck() @@ -755,6 +760,132 @@ public class UpdateExperimentTest extends AbstractExperimentTest } } + @Test + public void testFreezeForSamples() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + ExperimentIdentifier expId1 = new ExperimentIdentifier("/CISD/NEMO/EXP10"); + ExperimentIdentifier expId2 = new ExperimentIdentifier("/CISD/NEMO/EXP11"); + ExperimentUpdate update1 = new ExperimentUpdate(); + update1.setExperimentId(expId1); + update1.freeze(); + ExperimentUpdate update2 = new ExperimentUpdate(); + update2.setExperimentId(expId2); + update2.freezeForSamples(); + + // When + v3api.updateExperiments(sessionToken, Arrays.asList(update1, update2)); + + // Then + Map<IExperimentId, Experiment> experiments = v3api.getExperiments(sessionToken, Arrays.asList(expId1, expId2), new ExperimentFetchOptions()); + Experiment experiment1 = experiments.get(expId1); + assertEquals(experiment1.getIdentifier().getIdentifier(), expId1.getIdentifier()); + assertEquals(experiment1.isFrozen(), true); + assertEquals(experiment1.isFrozenForDataSets(), false); + assertEquals(experiment1.isFrozenForSamples(), false); + Experiment experiment2 = experiments.get(expId2); + assertEquals(experiment2.getIdentifier().getIdentifier(), expId2.getIdentifier()); + assertEquals(experiment2.isFrozen(), true); + assertEquals(experiment2.isFrozenForDataSets(), false); + assertEquals(experiment2.isFrozenForSamples(), true); + } + + @Test + public void testFreezeForDataSets() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + ExperimentIdentifier expId1 = new ExperimentIdentifier("/CISD/NEMO/EXP10"); + ExperimentIdentifier expId2 = new ExperimentIdentifier("/CISD/NEMO/EXP11"); + ExperimentUpdate update1 = new ExperimentUpdate(); + update1.setExperimentId(expId1); + update1.freeze(); + ExperimentUpdate update2 = new ExperimentUpdate(); + update2.setExperimentId(expId2); + update2.freezeForDataSets(); + + // When + v3api.updateExperiments(sessionToken, Arrays.asList(update1, update2)); + + // Then + Map<IExperimentId, Experiment> experiments = v3api.getExperiments(sessionToken, Arrays.asList(expId1, expId2), new ExperimentFetchOptions()); + Experiment experiment1 = experiments.get(expId1); + assertEquals(experiment1.getIdentifier().getIdentifier(), expId1.getIdentifier()); + assertEquals(experiment1.isFrozen(), true); + assertEquals(experiment1.isFrozenForDataSets(), false); + assertEquals(experiment1.isFrozenForSamples(), false); + Experiment experiment2 = experiments.get(expId2); + assertEquals(experiment2.getIdentifier().getIdentifier(), expId2.getIdentifier()); + assertEquals(experiment2.isFrozen(), true); + assertEquals(experiment2.isFrozenForDataSets(), true); + assertEquals(experiment2.isFrozenForSamples(), false); + } + + @Test + public void testFreezing() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + ExperimentIdentifier expId = new ExperimentIdentifier("/CISD/NEMO/EXP10"); + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(expId); + update.freeze(); + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + ExperimentUpdate update2 = new ExperimentUpdate(); + update2.setExperimentId(expId); + update2.setProperty("DESCRIPTION", "new description"); + + // When + assertUserFailureException(Void -> v3api.updateExperiments(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation UPDATE PROPERTY is not allowed because experiment EXP10 is frozen."); + } + + @Test + public void testFreezingForSample() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + ExperimentIdentifier expId = new ExperimentIdentifier("/CISD/NEMO/EXP10"); + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(expId); + update.freezeForSamples(); + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + SampleCreation sampleCreation = new SampleCreation(); + sampleCreation.setExperimentId(expId); + sampleCreation.setTypeId(new EntityTypePermId("NORMAL", EntityKind.SAMPLE)); + sampleCreation.setCode(PREFIX + "S1"); + + // When + assertUserFailureException(Void -> v3api.createSamples(sessionToken, Arrays.asList(sampleCreation)), + // Then + "ERROR: Operation SET EXPERIMENT is not allowed because experiment EXP10 is frozen for sample UET-S1."); + } + + @Test + public void testFreezingForDataSets() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + ExperimentIdentifier expId = new ExperimentIdentifier("/CISD/NEMO/EXP10"); + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(expId); + update.freezeForDataSets(); + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + DataSetCreation dataSetCreation = new DataSetCreation(); + dataSetCreation.setCode(PREFIX + "D1"); + dataSetCreation.setTypeId(new EntityTypePermId("DELETION_TEST_CONTAINER", EntityKind.DATA_SET)); + dataSetCreation.setDataStoreId(new DataStorePermId("STANDARD")); + dataSetCreation.setDataSetKind(DataSetKind.CONTAINER); + dataSetCreation.setExperimentId(expId); + + // When + assertUserFailureException(Void -> v3api.createDataSets(sessionToken, Arrays.asList(dataSetCreation)), + // Then + "ERROR: Operation SET EXPERIMENT is not allowed because experiment EXP10 is frozen for data set UET-D1."); + } + @Test public void testLogging() { diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java index 08aecc05696ef8db1faea6fe4f13f538a9d31e8b..5a6784fe325004ce67410ef935dbbf811bcff328 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java @@ -30,7 +30,10 @@ import org.testng.Assert; import org.testng.annotations.Test; import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.create.AttachmentCreation; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.create.ProjectCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions.ProjectFetchOptions; @@ -50,6 +53,7 @@ import ch.systemsx.cisd.openbis.systemtest.authorization.ProjectAuthorizationUse */ public class UpdateProjectTest extends AbstractTest { + private static final String PREFIX = "UPT-"; @Test public void testUpdateWithProjectNull() @@ -368,4 +372,107 @@ public class UpdateProjectTest extends AbstractTest "update-projects PROJECT_UPDATES('[ProjectUpdate[projectId=/TEST-SPACE/TEST-PROJECT], ProjectUpdate[projectId=20120814110011738-101]]')"); } + @Test + public void testFreezeForExperiments() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final IProjectId projectId1 = new ProjectIdentifier("/CISD/NEMO"); + ProjectUpdate update1 = new ProjectUpdate(); + update1.setProjectId(projectId1); + update1.freeze(); + final IProjectId projectId2 = new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT"); + ProjectUpdate update2 = new ProjectUpdate(); + update2.setProjectId(projectId2); + update2.freezeForExperiments(); + + // When + v3api.updateProjects(sessionToken, Arrays.asList(update1, update2)); + + // Then + Map<IProjectId, Project> projects = v3api.getProjects(sessionToken, Arrays.asList(projectId1, projectId2), new ProjectFetchOptions()); + Project project1 = projects.get(projectId1); + assertEquals(project1.getIdentifier().getIdentifier(), projectId1.toString()); + assertEquals(project1.isFrozen(), true); + assertEquals(project1.isFrozenForExperiments(), false); + assertEquals(project1.isFrozenForSamples(), false); + Project project2 = projects.get(projectId2); + assertEquals(project2.getIdentifier().getIdentifier(), projectId2.toString()); + assertEquals(project2.isFrozen(), true); + assertEquals(project2.isFrozenForExperiments(), true); + assertEquals(project2.isFrozenForSamples(), false); + } + + @Test + public void testFreezeForSamples() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final IProjectId projectId1 = new ProjectIdentifier("/CISD/NEMO"); + ProjectUpdate update1 = new ProjectUpdate(); + update1.setProjectId(projectId1); + update1.freeze(); + final IProjectId projectId2 = new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT"); + ProjectUpdate update2 = new ProjectUpdate(); + update2.setProjectId(projectId2); + update2.freezeForSamples(); + + // When + v3api.updateProjects(sessionToken, Arrays.asList(update1, update2)); + + // Then + Map<IProjectId, Project> projects = v3api.getProjects(sessionToken, Arrays.asList(projectId1, projectId2), new ProjectFetchOptions()); + Project project1 = projects.get(projectId1); + assertEquals(project1.getIdentifier().getIdentifier(), projectId1.toString()); + assertEquals(project1.isFrozen(), true); + assertEquals(project1.isFrozenForExperiments(), false); + assertEquals(project1.isFrozenForSamples(), false); + Project project2 = projects.get(projectId2); + assertEquals(project2.getIdentifier().getIdentifier(), projectId2.toString()); + assertEquals(project2.isFrozen(), true); + assertEquals(project2.isFrozenForExperiments(), false); + assertEquals(project2.isFrozenForSamples(), true); + } + + @Test + public void testFreezing() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final IProjectId projectId = new ProjectIdentifier("/CISD/NEMO"); + ProjectUpdate update = new ProjectUpdate(); + update.setProjectId(projectId); + update.freeze(); + v3api.updateProjects(sessionToken, Arrays.asList(update)); + ProjectUpdate update2 = new ProjectUpdate(); + update2.setProjectId(projectId); + update2.setDescription("new description"); + + // When + assertUserFailureException(Void -> v3api.updateProjects(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation UPDATE is not allowed because project NEMO is frozen."); + } + + @Test + public void testFreezingForExperiments() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final IProjectId projectId = new ProjectIdentifier("/CISD/NEMO"); + ProjectUpdate update = new ProjectUpdate(); + update.setProjectId(projectId); + update.freezeForExperiments(); + v3api.updateProjects(sessionToken, Arrays.asList(update)); + ExperimentCreation experimentCreation = new ExperimentCreation(); + experimentCreation.setProjectId(projectId); + experimentCreation.setTypeId(new EntityTypePermId("DELETION_TEST", EntityKind.EXPERIMENT)); + experimentCreation.setCode(PREFIX + "E1"); + + // When + assertUserFailureException(Void -> v3api.createExperiments(sessionToken, Arrays.asList(experimentCreation)), + // Then + "ERROR: Operation SET PROJECT is not allowed because project NEMO is frozen for experiment UPT-E1."); + } + } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java index 98bb2fc3607c4359622e424cbffa0896d2e3347f..d32d42480ac579eca49508ba889131bd01ec319a 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java @@ -34,6 +34,10 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.create.AttachmentCrea import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.id.AttachmentFileName; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.CreationId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetKind; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.datastore.id.DataStorePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentIdentifier; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId; @@ -55,7 +59,6 @@ import ch.ethz.sis.openbis.systemtest.asapi.v3.index.ReindexingState; import ch.systemsx.cisd.common.action.IDelegatedAction; import ch.systemsx.cisd.common.test.AssertionUtil; import ch.systemsx.cisd.openbis.systemtest.authorization.ProjectAuthorizationUser; - import junit.framework.Assert; /** @@ -63,6 +66,8 @@ import junit.framework.Assert; */ public class UpdateSampleTest extends AbstractSampleTest { + private static final String PREFIX = "UST-"; + @Test public void testUpdateSharedSampleWithHomelessPowerUser() { @@ -1514,4 +1519,175 @@ public class UpdateSampleTest extends AbstractSampleTest "update-samples SAMPLE_UPDATES('[SampleUpdate[sampleId=/CISD/CP-TEST-1], SampleUpdate[sampleId=201206191219327-1055]]')"); } + @Test + public void testFreeze() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + SampleIdentifier sampleId1 = new SampleIdentifier("/CISD/MP002-1:B11"); + SampleUpdate update1 = new SampleUpdate(); + update1.setSampleId(sampleId1); + update1.freeze(); + SampleIdentifier sampleId2 = new SampleIdentifier("/CISD/MP002-1:B12"); + SampleUpdate update2 = new SampleUpdate(); + update2.setSampleId(sampleId2); + update2.freezeForComponents(); + SampleIdentifier sampleId3 = new SampleIdentifier("/CISD/MP002-1:B13"); + SampleUpdate update3 = new SampleUpdate(); + update3.setSampleId(sampleId3); + update3.freezeForChildren(); + SampleIdentifier sampleId4 = new SampleIdentifier("/CISD/MP002-1:B14"); + SampleUpdate update4 = new SampleUpdate(); + update4.setSampleId(sampleId4); + update4.freezeForParents(); + SampleIdentifier sampleId5 = new SampleIdentifier("/CISD/MP002-1:B15"); + SampleUpdate update5 = new SampleUpdate(); + update5.setSampleId(sampleId5); + update5.freezeForDataSets(); + + // When + v3api.updateSamples(sessionToken, Arrays.asList(update1, update2, update3, update4, update5)); + + // Then + Map<ISampleId, Sample> samples = v3api.getSamples(sessionToken, + Arrays.asList(sampleId1, sampleId2, sampleId3, sampleId4, sampleId5), new SampleFetchOptions()); + Sample sample1 = samples.get(sampleId1); + assertEquals(sample1.getIdentifier().getIdentifier(), sampleId1.getIdentifier()); + assertEquals(sample1.isFrozen(), true); + assertEquals(sample1.isFrozenForComponents(), false); + assertEquals(sample1.isFrozenForChildren(), false); + assertEquals(sample1.isFrozenForParents(), false); + assertEquals(sample1.isFrozenForDataSets(), false); + Sample sample2 = samples.get(sampleId2); + assertEquals(sample2.getIdentifier().getIdentifier(), sampleId2.getIdentifier()); + assertEquals(sample2.isFrozen(), true); + assertEquals(sample2.isFrozenForComponents(), true); + assertEquals(sample2.isFrozenForChildren(), false); + assertEquals(sample2.isFrozenForParents(), false); + assertEquals(sample2.isFrozenForDataSets(), false); + Sample sample3 = samples.get(sampleId3); + assertEquals(sample3.getIdentifier().getIdentifier(), sampleId3.getIdentifier()); + assertEquals(sample3.isFrozen(), true); + assertEquals(sample3.isFrozenForComponents(), false); + assertEquals(sample3.isFrozenForChildren(), true); + assertEquals(sample3.isFrozenForParents(), false); + assertEquals(sample3.isFrozenForDataSets(), false); + Sample sample4 = samples.get(sampleId4); + assertEquals(sample4.getIdentifier().getIdentifier(), sampleId4.getIdentifier()); + assertEquals(sample4.isFrozen(), true); + assertEquals(sample4.isFrozenForComponents(), false); + assertEquals(sample4.isFrozenForChildren(), false); + assertEquals(sample4.isFrozenForParents(), true); + assertEquals(sample4.isFrozenForDataSets(), false); + Sample sample5 = samples.get(sampleId5); + assertEquals(sample5.getIdentifier().getIdentifier(), sampleId5.getIdentifier()); + assertEquals(sample5.isFrozen(), true); + assertEquals(sample5.isFrozenForComponents(), false); + assertEquals(sample5.isFrozenForChildren(), false); + assertEquals(sample5.isFrozenForParents(), false); + assertEquals(sample5.isFrozenForDataSets(), true); + } + + @Test + public void testFreezing() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + SampleIdentifier sampleId = new SampleIdentifier("/CISD/C1"); + SampleUpdate update = new SampleUpdate(); + update.setSampleId(sampleId); + update.freeze(); + v3api.updateSamples(sessionToken, Arrays.asList(update)); + SampleUpdate update2 = new SampleUpdate(); + update2.setSampleId(sampleId); + update2.setProperty("DESCRIPTION", "a test"); + + // When + assertUserFailureException(Void -> v3api.updateSamples(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation INSERT PROPERTY is not allowed because sample C1 is frozen."); + } + + @Test + public void testFreezingForComponents() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + SampleIdentifier sampleId = new SampleIdentifier("/CISD/C1"); + SampleUpdate update = new SampleUpdate(); + update.setSampleId(sampleId); + update.freezeForComponents(); + v3api.updateSamples(sessionToken, Arrays.asList(update)); + SampleUpdate update2 = new SampleUpdate(); + update2.setSampleId(sampleId); + update2.getComponentIds().remove(new SampleIdentifier("/CISD/C1:C01")); + + // When + assertUserFailureException(Void -> v3api.updateSamples(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation REMOVE CONTAINER is not allowed because sample C1 is frozen for sample C01."); + } + + @Test + public void testFreezingForChildren() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + SampleIdentifier sampleId = new SampleIdentifier("/CISD/C1"); + SampleUpdate update = new SampleUpdate(); + update.setSampleId(sampleId); + update.freezeForChildren(); + v3api.updateSamples(sessionToken, Arrays.asList(update)); + SampleUpdate update2 = new SampleUpdate(); + update2.setSampleId(sampleId); + update2.getChildIds().add(new SampleIdentifier("/CISD/C2")); + + // When + assertUserFailureException(Void -> v3api.updateSamples(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation INSERT is not allowed because sample C1 or C2 is frozen."); + } + + @Test + public void testFreezingForParents() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + SampleIdentifier sampleId = new SampleIdentifier("/CISD/C1"); + SampleUpdate update = new SampleUpdate(); + update.setSampleId(sampleId); + update.freezeForParents(); + v3api.updateSamples(sessionToken, Arrays.asList(update)); + SampleUpdate update2 = new SampleUpdate(); + update2.setSampleId(sampleId); + update2.getParentIds().add(new SampleIdentifier("/CISD/C2")); + + // When + assertUserFailureException(Void -> v3api.updateSamples(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation INSERT is not allowed because sample C2 or C1 is frozen."); + } + + @Test + public void testFreezingForDataSets() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + SampleIdentifier sampleId = new SampleIdentifier("/CISD/C1"); + SampleUpdate update = new SampleUpdate(); + update.setSampleId(sampleId); + update.freezeForDataSets(); + v3api.updateSamples(sessionToken, Arrays.asList(update)); + DataSetCreation dataSetCreation = new DataSetCreation(); + dataSetCreation.setCode(PREFIX + "D1"); + dataSetCreation.setTypeId(new EntityTypePermId("DELETION_TEST_CONTAINER", EntityKind.DATA_SET)); + dataSetCreation.setDataStoreId(new DataStorePermId("STANDARD")); + dataSetCreation.setDataSetKind(DataSetKind.CONTAINER); + dataSetCreation.setSampleId(sampleId); + + // When + assertUserFailureException(Void -> v3api.createDataSets(sessionToken, Arrays.asList(dataSetCreation)), + // Then + "ERROR: Operation SET SAMPLE is not allowed because sample C1 is frozen for data set UST-D1."); + } } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSpaceTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSpaceTest.java index b412e04469234e303e113bcccee2be64da68958a..5c6d6b52514258b47a1bf630b7237066509e24cb 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSpaceTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSpaceTest.java @@ -23,6 +23,10 @@ import java.util.Map; import org.testng.annotations.Test; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.create.ProjectCreation; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.fetchoptions.SpaceFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.ISpaceId; @@ -35,6 +39,7 @@ import ch.systemsx.cisd.common.action.IDelegatedAction; */ public class UpdateSpaceTest extends AbstractTest { + private static final String PREFIX = "UST-"; @Test public void testUpdateWithSpaceUnauthorized() @@ -134,6 +139,146 @@ public class UpdateSpaceTest extends AbstractTest assertEquals(space2.getDescription(), update2.getDescription().getValue()); } + @Test + public void testFreezeForProjects() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final String spaceCode1 = "CISD"; + final String spaceCode2 = "TEST-SPACE"; + final ISpaceId spaceId1 = new SpacePermId(spaceCode1); + final ISpaceId spaceId2 = new SpacePermId(spaceCode2); + Map<ISpaceId, Space> map = v3api.getSpaces(sessionToken, Arrays.asList(spaceId1, spaceId2), new SpaceFetchOptions()); + Space space1 = map.get(spaceId1); + Space space2 = map.get(spaceId2); + assertEquals(space1.getCode(), spaceCode1); + assertEquals(space2.getCode(), spaceCode2); + + final SpaceUpdate update1 = new SpaceUpdate(); + update1.setSpaceId(spaceId1); + update1.freeze(); + final SpaceUpdate update2 = new SpaceUpdate(); + update2.setSpaceId(spaceId2); + update2.freezeForProjects(); + + // When + v3api.updateSpaces(sessionToken, Arrays.asList(update1, update2)); + + // Then + map = v3api.getSpaces(sessionToken, Arrays.asList(spaceId1, spaceId2), new SpaceFetchOptions()); + space1 = map.get(spaceId1); + space2 = map.get(spaceId2); + assertEquals(space1.getCode(), spaceCode1); + assertEquals(space1.isFrozen(), true); + assertEquals(space1.isFrozenForProjects(), false); + assertEquals(space1.isFrozenForSamples(), false); + assertEquals(space2.getCode(), spaceCode2); + assertEquals(space2.isFrozen(), true); + assertEquals(space2.isFrozenForProjects(), true); + assertEquals(space2.isFrozenForSamples(), false); + } + + @Test + public void testFreezeForSamples() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final String spaceCode1 = "CISD"; + final String spaceCode2 = "TEST-SPACE"; + final ISpaceId spaceId1 = new SpacePermId(spaceCode1); + final ISpaceId spaceId2 = new SpacePermId(spaceCode2); + Map<ISpaceId, Space> map = v3api.getSpaces(sessionToken, Arrays.asList(spaceId1, spaceId2), new SpaceFetchOptions()); + Space space1 = map.get(spaceId1); + Space space2 = map.get(spaceId2); + assertEquals(space1.getCode(), spaceCode1); + assertEquals(space2.getCode(), spaceCode2); + + final SpaceUpdate update1 = new SpaceUpdate(); + update1.setSpaceId(spaceId1); + update1.freeze(); + final SpaceUpdate update2 = new SpaceUpdate(); + update2.setSpaceId(spaceId2); + update2.freezeForSamples(); + + // When + v3api.updateSpaces(sessionToken, Arrays.asList(update1, update2)); + + // Then + map = v3api.getSpaces(sessionToken, Arrays.asList(spaceId1, spaceId2), new SpaceFetchOptions()); + space1 = map.get(spaceId1); + space2 = map.get(spaceId2); + assertEquals(space1.getCode(), spaceCode1); + assertEquals(space1.isFrozen(), true); + assertEquals(space1.isFrozenForProjects(), false); + assertEquals(space1.isFrozenForSamples(), false); + assertEquals(space2.getCode(), spaceCode2); + assertEquals(space2.isFrozen(), true); + assertEquals(space2.isFrozenForProjects(), false); + assertEquals(space2.isFrozenForSamples(), true); + } + + @Test + public void testFreezing() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + final String spaceCode1 = "CISD"; + final ISpaceId spaceId1 = new SpacePermId(spaceCode1); + final SpaceUpdate update1 = new SpaceUpdate(); + update1.setSpaceId(spaceId1); + update1.freeze(); + v3api.updateSpaces(sessionToken, Arrays.asList(update1)); + SpaceUpdate update2 = new SpaceUpdate(); + update2.setSpaceId(spaceId1); + update2.setDescription("new description"); + + // When + assertUserFailureException(Void -> v3api.updateSpaces(sessionToken, Arrays.asList(update2)), + // Then + "ERROR: Operation UPDATE is not allowed because space CISD is frozen."); + } + + @Test + public void testFreezingForProjects() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + SpacePermId spaceId = new SpacePermId("CISD"); + SpaceUpdate spaceUpdate = new SpaceUpdate(); + spaceUpdate.setSpaceId(spaceId); + spaceUpdate.freezeForProjects(); + v3api.updateSpaces(sessionToken, Arrays.asList(spaceUpdate)); + ProjectCreation projectCreation = new ProjectCreation(); + projectCreation.setCode(PREFIX + "P1"); + projectCreation.setSpaceId(spaceId); + + // When + assertUserFailureException(Void -> v3api.createProjects(sessionToken, Arrays.asList(projectCreation)), + "ERROR: Operation SET SPACE is not allowed because space CISD is frozen for project " + + projectCreation.getCode() + "."); + } + + @Test + public void testFreezingForSamples() + { + // Given + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + SpacePermId spaceId = new SpacePermId("CISD"); + SpaceUpdate spaceUpdate = new SpaceUpdate(); + spaceUpdate.setSpaceId(spaceId); + spaceUpdate.freezeForSamples(); + v3api.updateSpaces(sessionToken, Arrays.asList(spaceUpdate)); + SampleCreation sampleCreation = new SampleCreation(); + sampleCreation.setSpaceId(spaceId); + sampleCreation.setTypeId(new EntityTypePermId("NORMAL", EntityKind.SAMPLE)); + sampleCreation.setCode(PREFIX + "S1"); + + // When + assertUserFailureException(Void -> v3api.createSamples(sessionToken, Arrays.asList(sampleCreation)), + // Then + "ERROR: Operation SET SPACE is not allowed because space CISD is frozen for sample UST-S1."); + } + @Test public void testLogging() { diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java index bd03cba89d659e1884fd55252f8965665121e4e8..31932395ed6174478ffb2d0dff8abdfbf54fa893 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java @@ -55,7 +55,9 @@ import java.util.Set; * Class automatically generated with DtoGenerator */ @JsonObject("as.dto.dataset.DataSet") -public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IExperimentHolder, IMaterialPropertiesHolder, IModificationDateHolder, IModifierHolder, IParentChildrenHolder<DataSet>, IPermIdHolder, IPropertiesHolder, IRegistrationDateHolder, IRegistratorHolder, ISampleHolder, ITagsHolder +public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IExperimentHolder, IMaterialPropertiesHolder, IModificationDateHolder, + IModifierHolder, IParentChildrenHolder<DataSet>, IPermIdHolder, IPropertiesHolder, IRegistrationDateHolder, IRegistratorHolder, ISampleHolder, + ITagsHolder { private static final long serialVersionUID = 1L; @@ -68,6 +70,21 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE @JsonProperty private String code; + @JsonProperty + private boolean frozen; + + @JsonProperty + private boolean frozenForChildren; + + @JsonProperty + private boolean frozenForParents; + + @JsonProperty + private boolean frozenForComponents; + + @JsonProperty + private boolean frozenForContainers; + @JsonProperty private DataSetType type; @@ -181,6 +198,56 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE this.code = code; } + public boolean isFrozen() + { + return frozen; + } + + public void setFrozen(boolean frozen) + { + this.frozen = frozen; + } + + public boolean isFrozenForChildren() + { + return frozenForChildren; + } + + public void setFrozenForChildren(boolean frozenForChildren) + { + this.frozenForChildren = frozenForChildren; + } + + public boolean isFrozenForParents() + { + return frozenForParents; + } + + public void setFrozenForParents(boolean frozenForParents) + { + this.frozenForParents = frozenForParents; + } + + public boolean isFrozenForComponents() + { + return frozenForComponents; + } + + public void setFrozenForComponents(boolean frozenForComponents) + { + this.frozenForComponents = frozenForComponents; + } + + public boolean isFrozenForContainers() + { + return frozenForContainers; + } + + public void setFrozenForContainers(boolean frozenForContainers) + { + this.frozenForContainers = frozenForContainers; + } + // Method automatically generated with DtoGenerator @JsonIgnore @Override @@ -189,8 +256,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasType()) { return type; - } - else + } else { throw new NotFetchedException("Data Set type has not been fetched."); } @@ -204,24 +270,23 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE @JsonIgnore public DataSetKind getKind() - { - return kind; - } + { + return kind; + } - public void setKind(DataSetKind kind) - { - this.kind = kind; - } + public void setKind(DataSetKind kind) + { + this.kind = kind; + } - // Method automatically generated with DtoGenerator + // Method automatically generated with DtoGenerator @JsonIgnore public DataStore getDataStore() { if (getFetchOptions() != null && getFetchOptions().hasDataStore()) { return dataStore; - } - else + } else { throw new NotFetchedException("Data store has not been fetched."); } @@ -266,8 +331,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasPhysicalData()) { return physicalData; - } - else + } else { throw new NotFetchedException("Physical data has not been fetched."); } @@ -286,8 +350,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasLinkedData()) { return linkedData; - } - else + } else { throw new NotFetchedException("Linked data has not been fetched."); } @@ -307,8 +370,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasExperiment()) { return experiment; - } - else + } else { throw new NotFetchedException("Experiment has not been fetched."); } @@ -328,8 +390,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasSample()) { return sample; - } - else + } else { throw new NotFetchedException("Sample has not been fetched."); } @@ -349,8 +410,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasProperties()) { return properties; - } - else + } else { throw new NotFetchedException("Properties have not been fetched."); } @@ -371,8 +431,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasMaterialProperties()) { return materialProperties; - } - else + } else { throw new NotFetchedException("Material Properties have not been fetched."); } @@ -393,8 +452,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasParents()) { return parents; - } - else + } else { throw new NotFetchedException("Parents have not been fetched."); } @@ -414,8 +472,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasChildren()) { return children; - } - else + } else { throw new NotFetchedException("Children have not been fetched."); } @@ -434,8 +491,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasContainers()) { return containers; - } - else + } else { throw new NotFetchedException("Container data sets have not been fetched."); } @@ -454,8 +510,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasComponents()) { return components; - } - else + } else { throw new NotFetchedException("Component data sets have not been fetched."); } @@ -475,8 +530,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasTags()) { return tags; - } - else + } else { throw new NotFetchedException("Tags have not been fetched."); } @@ -495,8 +549,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasHistory()) { return history; - } - else + } else { throw new NotFetchedException("History have not been fetched."); } @@ -530,8 +583,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasModifier()) { return modifier; - } - else + } else { throw new NotFetchedException("Modifier has not been fetched."); } @@ -565,8 +617,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE if (getFetchOptions() != null && getFetchOptions().hasRegistrator()) { return registrator; - } - else + } else { throw new NotFetchedException("Registrator has not been fetched."); } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java index 83f24d4b01d392ae5340fd7afc9f7ec8633e23a8..eb15859c6137404a1789772bced09929ba4ec8e5 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java @@ -47,6 +47,21 @@ public class DataSetUpdate implements IUpdate, IObjectUpdate<IDataSetId>, IPrope @JsonProperty private IDataSetId dataSetId; + @JsonProperty + private boolean freeze; + + @JsonProperty + private boolean freezeForChildren; + + @JsonProperty + private boolean freezeForParents; + + @JsonProperty + private boolean freezeForComponents; + + @JsonProperty + private boolean freezeForContainers; + @JsonProperty private FieldUpdateValue<IExperimentId> experimentId = new FieldUpdateValue<IExperimentId>(); @@ -95,6 +110,65 @@ public class DataSetUpdate implements IUpdate, IObjectUpdate<IDataSetId>, IPrope this.dataSetId = dataSetId; } + @JsonIgnore + public boolean shouldBeFrozen() + { + return freeze; + } + + public void freeze() + { + this.freeze = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForChildren() + { + return freezeForChildren; + } + + public void freezeForChildren() + { + this.freeze = true; + this.freezeForChildren = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForParents() + { + return freezeForParents; + } + + public void freezeForParents() + { + this.freeze = true; + this.freezeForParents = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForComponents() + { + return freezeForComponents; + } + + public void freezeForComponents() + { + this.freeze = true; + this.freezeForComponents = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForContainers() + { + return freezeForContainers; + } + + public void freezeForContainers() + { + this.freeze = true; + this.freezeForContainers = true; + } + @JsonIgnore public FieldUpdateValue<IExperimentId> getExperimentId() { diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java index a387d4219e3c77aa4689e0cf18e6cfb7884a12bb..67051d73648120ac76d4a70c2824b513cf85a467 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java @@ -57,7 +57,9 @@ import java.util.Set; * Class automatically generated with DtoGenerator */ @JsonObject("as.dto.experiment.Experiment") -public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder, IDataSetsHolder, IEntityTypeHolder, IIdentifierHolder, IMaterialPropertiesHolder, IModificationDateHolder, IModifierHolder, IPermIdHolder, IProjectHolder, IPropertiesHolder, IRegistrationDateHolder, IRegistratorHolder, ISamplesHolder, ITagsHolder +public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder, IDataSetsHolder, IEntityTypeHolder, IIdentifierHolder, + IMaterialPropertiesHolder, IModificationDateHolder, IModifierHolder, IPermIdHolder, IProjectHolder, IPropertiesHolder, + IRegistrationDateHolder, IRegistratorHolder, ISamplesHolder, ITagsHolder { private static final long serialVersionUID = 1L; @@ -73,6 +75,15 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder @JsonProperty private String code; + @JsonProperty + private boolean frozen; + + @JsonProperty + private boolean frozenForDataSets; + + @JsonProperty + private boolean frozenForSamples; + @JsonProperty private Date registrationDate; @@ -167,6 +178,36 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder this.code = code; } + public boolean isFrozen() + { + return frozen; + } + + public void setFrozen(boolean frozen) + { + this.frozen = frozen; + } + + public boolean isFrozenForDataSets() + { + return frozenForDataSets; + } + + public void setFrozenForDataSets(boolean frozenForDataSets) + { + this.frozenForDataSets = frozenForDataSets; + } + + public boolean isFrozenForSamples() + { + return frozenForSamples; + } + + public void setFrozenForSamples(boolean frozenForSamples) + { + this.frozenForSamples = frozenForSamples; + } + // Method automatically generated with DtoGenerator @JsonIgnore @Override @@ -203,8 +244,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasType()) { return type; - } - else + } else { throw new NotFetchedException("Experiment type has not been fetched."); } @@ -224,8 +264,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasProject()) { return project; - } - else + } else { throw new NotFetchedException("Project has not been fetched."); } @@ -245,8 +284,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasDataSets()) { return dataSets; - } - else + } else { throw new NotFetchedException("Data sets have not been fetched."); } @@ -266,8 +304,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasSamples()) { return samples; - } - else + } else { throw new NotFetchedException("Samples have not been fetched."); } @@ -286,8 +323,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasHistory()) { return history; - } - else + } else { throw new NotFetchedException("History have not been fetched."); } @@ -307,8 +343,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasProperties()) { return properties; - } - else + } else { throw new NotFetchedException("Properties have not been fetched."); } @@ -329,8 +364,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasMaterialProperties()) { return materialProperties; - } - else + } else { throw new NotFetchedException("Material Properties have not been fetched."); } @@ -351,8 +385,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasTags()) { return tags; - } - else + } else { throw new NotFetchedException("Tags have not been fetched."); } @@ -372,8 +405,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasRegistrator()) { return registrator; - } - else + } else { throw new NotFetchedException("Registrator has not been fetched."); } @@ -393,8 +425,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasModifier()) { return modifier; - } - else + } else { throw new NotFetchedException("Modifier has not been fetched."); } @@ -414,8 +445,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder if (getFetchOptions() != null && getFetchOptions().hasAttachments()) { return attachments; - } - else + } else { throw new NotFetchedException("Attachments have not been fetched."); } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java index 556a025c89c05a0bef779cdba3a86e580d81f016..c5dbf86ac364260d0c3d07f50fd81096f0aa1c9b 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java @@ -48,6 +48,15 @@ public class ExperimentUpdate implements IUpdate, IObjectUpdate<IExperimentId>, @JsonProperty private IExperimentId experimentId; + @JsonProperty + private boolean freeze; + + @JsonProperty + private boolean freezeForDataSets; + + @JsonProperty + private boolean freezeForSamples; + @JsonProperty private Map<String, String> properties = new HashMap<String, String>(); @@ -79,6 +88,41 @@ public class ExperimentUpdate implements IUpdate, IObjectUpdate<IExperimentId>, this.experimentId = experimentId; } + @JsonIgnore + public boolean shouldBeFrozen() + { + return freeze; + } + + public void freeze() + { + this.freeze = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForDataSets() + { + return freezeForDataSets; + } + + public void freezeForDataSets() + { + this.freeze = true; + this.freezeForDataSets = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForSamples() + { + return freezeForSamples; + } + + public void freezeForSamples() + { + this.freeze = true; + this.freezeForSamples = true; + } + @Override @JsonIgnore public void setProperty(String propertyName, String propertyValue) diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/Project.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/Project.java index 07908cfe782d39532c9ab6b46bb815e133c0bffe..ea83dc41ee2b56b5cdec1d008feff7dee4fe014d 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/Project.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/Project.java @@ -47,7 +47,8 @@ import java.util.List; * Class automatically generated with DtoGenerator */ @JsonObject("as.dto.project.Project") -public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, IDescriptionHolder, IExperimentsHolder, IIdentifierHolder, IModificationDateHolder, IModifierHolder, IPermIdHolder, IRegistrationDateHolder, IRegistratorHolder, ISpaceHolder +public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, IDescriptionHolder, IExperimentsHolder, IIdentifierHolder, + IModificationDateHolder, IModifierHolder, IPermIdHolder, IRegistrationDateHolder, IRegistratorHolder, ISpaceHolder { private static final long serialVersionUID = 1L; @@ -66,6 +67,15 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I @JsonProperty private String description; + @JsonProperty + private boolean frozen; + + @JsonProperty + private boolean frozenForExperiments; + + @JsonProperty + private boolean frozenForSamples; + @JsonProperty private Date registrationDate; @@ -165,6 +175,36 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I this.description = description; } + public boolean isFrozen() + { + return frozen; + } + + public void setFrozen(boolean frozen) + { + this.frozen = frozen; + } + + public boolean isFrozenForExperiments() + { + return frozenForExperiments; + } + + public void setFrozenForExperiments(boolean frozenForExperiments) + { + this.frozenForExperiments = frozenForExperiments; + } + + public boolean isFrozenForSamples() + { + return frozenForSamples; + } + + public void setFrozenForSamples(boolean frozenForSamples) + { + this.frozenForSamples = frozenForSamples; + } + // Method automatically generated with DtoGenerator @JsonIgnore @Override @@ -201,8 +241,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasExperiments()) { return experiments; - } - else + } else { throw new NotFetchedException("Experiments have not been fetched."); } @@ -221,8 +260,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasSamples()) { return samples; - } - else + } else { throw new NotFetchedException("Samples have not been fetched."); } @@ -241,8 +279,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasHistory()) { return history; - } - else + } else { throw new NotFetchedException("History have not been fetched."); } @@ -262,8 +299,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasSpace()) { return space; - } - else + } else { throw new NotFetchedException("Space has not been fetched."); } @@ -283,8 +319,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasRegistrator()) { return registrator; - } - else + } else { throw new NotFetchedException("Registrator has not been fetched."); } @@ -304,8 +339,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasModifier()) { return modifier; - } - else + } else { throw new NotFetchedException("Modifier has not been fetched."); } @@ -324,8 +358,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasLeader()) { return leader; - } - else + } else { throw new NotFetchedException("Leader has not been fetched."); } @@ -345,8 +378,7 @@ public class Project implements Serializable, IAttachmentsHolder, ICodeHolder, I if (getFetchOptions() != null && getFetchOptions().hasAttachments()) { return attachments; - } - else + } else { throw new NotFetchedException("Attachments have not been fetched."); } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/update/ProjectUpdate.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/update/ProjectUpdate.java index 64c9183dd38aeb46453c4b33556a1f99f1fdf293..5a941a533cf796f76f1851663eed4f62a9badea5 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/update/ProjectUpdate.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/project/update/ProjectUpdate.java @@ -42,6 +42,15 @@ public class ProjectUpdate implements IUpdate, IObjectUpdate<IProjectId> @JsonProperty private IProjectId projectId; + @JsonProperty + private boolean freeze; + + @JsonProperty + private boolean freezeForExperiments; + + @JsonProperty + private boolean freezeForSamples; + @JsonProperty private FieldUpdateValue<ISpaceId> spaceId = new FieldUpdateValue<ISpaceId>(); @@ -95,6 +104,41 @@ public class ProjectUpdate implements IUpdate, IObjectUpdate<IProjectId> return description; } + @JsonIgnore + public boolean shouldBeFrozen() + { + return freeze; + } + + public void freeze() + { + this.freeze = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForExperiments() + { + return freezeForExperiments; + } + + public void freezeForExperiments() + { + this.freeze = true; + this.freezeForExperiments = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForSamples() + { + return freezeForSamples; + } + + public void freezeForSamples() + { + this.freeze = true; + this.freezeForSamples = true; + } + @JsonIgnore public AttachmentListUpdateValue getAttachments() { diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java index 134a4500a4f011bd85a31e61ace6fcff34db5e68..f4fed624d8ab62fe562e023adedc58d971d1b9c2 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java @@ -61,7 +61,9 @@ import java.util.Set; * Class automatically generated with DtoGenerator */ @JsonObject("as.dto.sample.Sample") -public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, IDataSetsHolder, IEntityTypeHolder, IExperimentHolder, IIdentifierHolder, IMaterialPropertiesHolder, IModificationDateHolder, IModifierHolder, IParentChildrenHolder<Sample>, IPermIdHolder, IProjectHolder, IPropertiesHolder, IRegistrationDateHolder, IRegistratorHolder, ISpaceHolder, ITagsHolder +public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, IDataSetsHolder, IEntityTypeHolder, IExperimentHolder, + IIdentifierHolder, IMaterialPropertiesHolder, IModificationDateHolder, IModifierHolder, IParentChildrenHolder<Sample>, IPermIdHolder, + IProjectHolder, IPropertiesHolder, IRegistrationDateHolder, IRegistratorHolder, ISpaceHolder, ITagsHolder { private static final long serialVersionUID = 1L; @@ -77,6 +79,21 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID @JsonProperty private String code; + @JsonProperty + private boolean frozen; + + @JsonProperty + private boolean frozenForComponents; + + @JsonProperty + private boolean frozenForChildren; + + @JsonProperty + private boolean frozenForParents; + + @JsonProperty + private boolean frozenForDataSets; + @JsonProperty private Date registrationDate; @@ -186,6 +203,56 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID this.code = code; } + public boolean isFrozen() + { + return frozen; + } + + public void setFrozen(boolean frozen) + { + this.frozen = frozen; + } + + public boolean isFrozenForComponents() + { + return frozenForComponents; + } + + public void setFrozenForComponents(boolean frozenForComponents) + { + this.frozenForComponents = frozenForComponents; + } + + public boolean isFrozenForChildren() + { + return frozenForChildren; + } + + public void setFrozenForChildren(boolean frozenForChildren) + { + this.frozenForChildren = frozenForChildren; + } + + public boolean isFrozenForParents() + { + return frozenForParents; + } + + public void setFrozenForParents(boolean frozenForParents) + { + this.frozenForParents = frozenForParents; + } + + public boolean isFrozenForDataSets() + { + return frozenForDataSets; + } + + public void setFrozenForDataSets(boolean frozenForDataSets) + { + this.frozenForDataSets = frozenForDataSets; + } + // Method automatically generated with DtoGenerator @JsonIgnore @Override @@ -222,8 +289,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasType()) { return type; - } - else + } else { throw new NotFetchedException("Sample type has not been fetched."); } @@ -243,8 +309,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasProject()) { return project; - } - else + } else { throw new NotFetchedException("Project has not been fetched."); } @@ -264,8 +329,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasSpace()) { return space; - } - else + } else { throw new NotFetchedException("Space has not been fetched."); } @@ -285,8 +349,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasExperiment()) { return experiment; - } - else + } else { throw new NotFetchedException("Experiment has not been fetched."); } @@ -306,8 +369,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasProperties()) { return properties; - } - else + } else { throw new NotFetchedException("Properties have not been fetched."); } @@ -328,8 +390,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasMaterialProperties()) { return materialProperties; - } - else + } else { throw new NotFetchedException("Material Properties have not been fetched."); } @@ -350,8 +411,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasParents()) { return parents; - } - else + } else { throw new NotFetchedException("Parents have not been fetched."); } @@ -371,8 +431,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasChildren()) { return children; - } - else + } else { throw new NotFetchedException("Children have not been fetched."); } @@ -391,8 +450,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasContainer()) { return container; - } - else + } else { throw new NotFetchedException("Container sample has not been fetched."); } @@ -411,8 +469,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasComponents()) { return components; - } - else + } else { throw new NotFetchedException("Component samples have not been fetched."); } @@ -432,8 +489,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasDataSets()) { return dataSets; - } - else + } else { throw new NotFetchedException("Data sets have not been fetched."); } @@ -452,8 +508,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasHistory()) { return history; - } - else + } else { throw new NotFetchedException("History have not been fetched."); } @@ -473,8 +528,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasTags()) { return tags; - } - else + } else { throw new NotFetchedException("Tags have not been fetched."); } @@ -494,8 +548,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasRegistrator()) { return registrator; - } - else + } else { throw new NotFetchedException("Registrator has not been fetched."); } @@ -515,8 +568,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasModifier()) { return modifier; - } - else + } else { throw new NotFetchedException("Modifier has not been fetched."); } @@ -536,8 +588,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID if (getFetchOptions() != null && getFetchOptions().hasAttachments()) { return attachments; - } - else + } else { throw new NotFetchedException("Attachments have not been fetched."); } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java index 82ae187c07275461a174d8cee2d91d5b5bf00abd..e9890d3447ba0e2738b45454b50acf13023bc008 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java @@ -49,6 +49,21 @@ public class SampleUpdate implements IUpdate, IPropertiesHolder, IObjectUpdate<I @JsonProperty private ISampleId sampleId; + @JsonProperty + private boolean freeze; + + @JsonProperty + private boolean freezeForComponents; + + @JsonProperty + private boolean freezeForChildren; + + @JsonProperty + private boolean freezeForParents; + + @JsonProperty + private boolean freezeForDataSets; + @JsonProperty private FieldUpdateValue<IExperimentId> experimentId = new FieldUpdateValue<IExperimentId>(); @@ -97,6 +112,65 @@ public class SampleUpdate implements IUpdate, IPropertiesHolder, IObjectUpdate<I this.sampleId = sampleId; } + @JsonIgnore + public boolean shouldBeFrozen() + { + return freeze; + } + + public void freeze() + { + this.freeze = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForComponents() + { + return freezeForComponents; + } + + public void freezeForComponents() + { + this.freeze = true; + this.freezeForComponents = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForChildren() + { + return freezeForChildren; + } + + public void freezeForChildren() + { + this.freeze = true; + this.freezeForChildren = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForParents() + { + return freezeForParents; + } + + public void freezeForParents() + { + this.freeze = true; + this.freezeForParents = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForDataSets() + { + return freezeForDataSets; + } + + public void freezeForDataSets() + { + this.freeze = true; + this.freezeForDataSets = true; + } + @JsonIgnore public FieldUpdateValue<IExperimentId> getExperimentId() { diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/Space.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/Space.java index 99a054519b29f3a09a3cac45aaaefaea79ab1028..fb8bbb3800b4090845212cffc8f58a3d1728e572 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/Space.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/Space.java @@ -40,7 +40,8 @@ import java.util.List; * Class automatically generated with DtoGenerator */ @JsonObject("as.dto.space.Space") -public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IModificationDateHolder, IPermIdHolder, IProjectsHolder, IRegistrationDateHolder, IRegistratorHolder, ISamplesHolder +public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IModificationDateHolder, IPermIdHolder, IProjectsHolder, + IRegistrationDateHolder, IRegistratorHolder, ISamplesHolder { private static final long serialVersionUID = 1L; @@ -56,6 +57,15 @@ public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IMo @JsonProperty private String description; + @JsonProperty + private boolean frozen; + + @JsonProperty + private boolean frozenForProjects; + + @JsonProperty + private boolean frozenForSamples; + @JsonProperty private Date registrationDate; @@ -126,6 +136,36 @@ public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IMo this.description = description; } + public boolean isFrozen() + { + return frozen; + } + + public void setFrozen(boolean frozen) + { + this.frozen = frozen; + } + + public boolean isFrozenForProjects() + { + return frozenForProjects; + } + + public void setFrozenForProjects(boolean frozenForProjects) + { + this.frozenForProjects = frozenForProjects; + } + + public boolean isFrozenForSamples() + { + return frozenForSamples; + } + + public void setFrozenForSamples(boolean frozenForSamples) + { + this.frozenForSamples = frozenForSamples; + } + // Method automatically generated with DtoGenerator @JsonIgnore @Override @@ -162,8 +202,7 @@ public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IMo if (getFetchOptions() != null && getFetchOptions().hasRegistrator()) { return registrator; - } - else + } else { throw new NotFetchedException("Registrator has not been fetched."); } @@ -183,8 +222,7 @@ public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IMo if (getFetchOptions() != null && getFetchOptions().hasSamples()) { return samples; - } - else + } else { throw new NotFetchedException("Samples have not been fetched."); } @@ -204,8 +242,7 @@ public class Space implements Serializable, ICodeHolder, IDescriptionHolder, IMo if (getFetchOptions() != null && getFetchOptions().hasProjects()) { return projects; - } - else + } else { throw new NotFetchedException("Projects have not been fetched."); } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/update/SpaceUpdate.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/update/SpaceUpdate.java index 3b7e38e01a489e464c1cb150e4bc914bb10b84a9..b12ef307d4b22c2da7155be5fcc25488368018a0 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/update/SpaceUpdate.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/space/update/SpaceUpdate.java @@ -41,6 +41,15 @@ public class SpaceUpdate implements IUpdate, IObjectUpdate<ISpaceId> @JsonProperty private FieldUpdateValue<String> description = new FieldUpdateValue<String>(); + @JsonProperty + private boolean freeze; + + @JsonProperty + private boolean freezeForProjects; + + @JsonProperty + private boolean freezeForSamples; + @Override @JsonIgnore public ISpaceId getObjectId() @@ -72,6 +81,41 @@ public class SpaceUpdate implements IUpdate, IObjectUpdate<ISpaceId> return description; } + @JsonIgnore + public boolean shouldBeFrozen() + { + return freeze; + } + + public void freeze() + { + this.freeze = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForProjects() + { + return freezeForProjects; + } + + public void freezeForProjects() + { + this.freeze = true; + this.freezeForProjects = true; + } + + @JsonIgnore + public boolean shouldBeFrozenForSamples() + { + return freezeForSamples; + } + + public void freezeForSamples() + { + this.freeze = true; + this.freezeForSamples = true; + } + @Override public String toString() { diff --git a/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt b/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt index 7fd792f5b5086483b2b17fafbb4dfd58005a4f35..40f6ce7afc930559aa7a781fff95e431dc1d546b 100644 --- a/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt +++ b/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt @@ -2238,3 +2238,39 @@ set Plugin with Plugin with Plugin Using +freeze +freeze For Children +freeze For Components +freeze For Containers +freeze For DataSets +freeze For Experiments +freeze For Parents +freeze For Projects +freeze For Samples +is Frozen +is Frozen For Children +is Frozen For Components +is Frozen For Containers +is Frozen For DataSets +is Frozen For Experiments +is Frozen For Parents +is Frozen For Projects +is Frozen For Samples +set Frozen +set Frozen For Children +set Frozen For Components +set Frozen For Containers +set Frozen For DataSets +set Frozen For Experiments +set Frozen For Parents +set Frozen For Projects +set Frozen For Samples +should Be Frozen +should Be Frozen For Children +should Be Frozen For Components +should Be Frozen For Containers +should Be Frozen For DataSets +should Be Frozen For Experiments +should Be Frozen For Parents +should Be Frozen For Projects +should Be Frozen For Samples