Skip to content
Snippets Groups Projects
Commit b29e489a authored by jakubs's avatar jakubs
Browse files

SSDM-3555 add check for an early fail in transaction if two samples with the same code are created

SVN: 36451
parent 115d4822
No related branches found
No related tags found
No related merge requests found
...@@ -20,13 +20,12 @@ import java.io.File; ...@@ -20,13 +20,12 @@ import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Queue; import java.util.Queue;
import net.lemnik.eodsql.DynamicTransactionQuery;
import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
import ch.systemsx.cisd.base.exceptions.InterruptedExceptionUnchecked; import ch.systemsx.cisd.base.exceptions.InterruptedExceptionUnchecked;
...@@ -96,6 +95,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; ...@@ -96,6 +95,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifierFactory;
import net.lemnik.eodsql.DynamicTransactionQuery;
/** /**
* Abstract superclass for the states a DataSetRegistrationTransaction can be in. * Abstract superclass for the states a DataSetRegistrationTransaction can be in.
* *
...@@ -183,6 +184,8 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> ...@@ -183,6 +184,8 @@ public abstract class AbstractTransactionState<T extends DataSetInformation>
private final List<ExperimentUpdatable> experimentsToBeUpdated = private final List<ExperimentUpdatable> experimentsToBeUpdated =
new ArrayList<ExperimentUpdatable>(); new ArrayList<ExperimentUpdatable>();
private HashSet<String> registeredIdentifiers = new HashSet<>();
private final List<Space> spacesToBeRegistered = new ArrayList<Space>(); private final List<Space> spacesToBeRegistered = new ArrayList<Space>();
private final List<Project> projectsToBeRegistered = new ArrayList<Project>(); private final List<Project> projectsToBeRegistered = new ArrayList<Project>();
...@@ -571,6 +574,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> ...@@ -571,6 +574,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation>
Sample sample = new Sample(sampleIdentifierString, permId); Sample sample = new Sample(sampleIdentifierString, permId);
sample.setSampleType(sampleTypeCode); sample.setSampleType(sampleTypeCode);
samplesToBeRegistered.add(sample); samplesToBeRegistered.add(sample);
addIdentifier(sampleIdentifierString, "Sample");
return sample; return sample;
} }
...@@ -612,9 +616,19 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> ...@@ -612,9 +616,19 @@ public abstract class AbstractTransactionState<T extends DataSetInformation>
Sample sample = new Sample(sampleIdentifierString, permId); Sample sample = new Sample(sampleIdentifierString, permId);
sample.setSampleType(sampleTypeCode); sample.setSampleType(sampleTypeCode);
samplesToBeRegistered.add(sample); samplesToBeRegistered.add(sample);
addIdentifier(sampleIdentifierString, "Sample");
return sample; return sample;
} }
/// Asserts that given entity hasn't been yet created within this transaction
private void addIdentifier(String identifier, String entityKind)
{
String updatedId = entityKind + identifier.trim().toUpperCase();
if (registeredIdentifiers.contains(updatedId))
throw new IllegalArgumentException(entityKind + " with identifier " + identifier + " has already been created in this transaction");
registeredIdentifiers.add(updatedId);
}
public IExperimentUpdatable getExperimentForUpdate(String experimentIdentifierString) public IExperimentUpdatable getExperimentForUpdate(String experimentIdentifierString)
{ {
ExperimentIdentifier identifier = ExperimentIdentifier identifier =
...@@ -696,6 +710,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> ...@@ -696,6 +710,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation>
Experiment experiment = new Experiment(experimentIdentifierString, permId); Experiment experiment = new Experiment(experimentIdentifierString, permId);
experiment.setExperimentType(experimentTypeCode); experiment.setExperimentType(experimentTypeCode);
experimentsToBeRegistered.add(experiment); experimentsToBeRegistered.add(experiment);
addIdentifier(experimentIdentifierString, "Experiment");
return experiment; return experiment;
} }
...@@ -703,6 +718,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> ...@@ -703,6 +718,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation>
{ {
Space space = new Space(spaceCode, spaceAdminUserIdOrNull); Space space = new Space(spaceCode, spaceAdminUserIdOrNull);
spacesToBeRegistered.add(space); spacesToBeRegistered.add(space);
addIdentifier(spaceCode, "Space");
return space; return space;
} }
...@@ -710,6 +726,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> ...@@ -710,6 +726,7 @@ public abstract class AbstractTransactionState<T extends DataSetInformation>
{ {
Project project = new Project(projectIdentifier); Project project = new Project(projectIdentifier);
projectsToBeRegistered.add(project); projectsToBeRegistered.add(project);
addIdentifier(projectIdentifier, "Project");
return project; return project;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment