Skip to content
Snippets Groups Projects
Commit ed3a1310 authored by juanf's avatar juanf
Browse files

SSDM-14137: make storage positions be inside a collection

parent f2cf8ce1
No related branches found
No related tags found
1 merge request!40SSDM-13578 : 2PT : Database and V3 Implementation - include the new AFS "free"...
...@@ -18,8 +18,25 @@ package ch.systemsx.cisd.openbis.generic.server.hotfix; ...@@ -18,8 +18,25 @@ package ch.systemsx.cisd.openbis.generic.server.hotfix;
import static ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME; import static ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
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.experiment.fetchoptions.ExperimentFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentIdentifier;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.IExperimentId;
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;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.IProjectId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
...@@ -43,6 +60,7 @@ public class ELNFixes { ...@@ -43,6 +60,7 @@ public class ELNFixes {
public static void beforeUpgrade(String sessionToken) throws Exception { public static void beforeUpgrade(String sessionToken) throws Exception {
operationLog.info("ELNFixes beforeUpgrade START"); operationLog.info("ELNFixes beforeUpgrade START");
IApplicationServerInternalApi api = CommonServiceProvider.getApplicationServerApi(); IApplicationServerInternalApi api = CommonServiceProvider.getApplicationServerApi();
storageCollectionIntroduction(sessionToken, api);
storageValidationLevelFix(sessionToken, api); storageValidationLevelFix(sessionToken, api);
nameNoRTFFix(sessionToken, api); nameNoRTFFix(sessionToken, api);
// TODO(alaskowski): SSDM-13831: Do migration here!!! // TODO(alaskowski): SSDM-13831: Do migration here!!!
...@@ -155,4 +173,126 @@ public class ELNFixes { ...@@ -155,4 +173,126 @@ public class ELNFixes {
operationLog.info(String.format("ELNFixes fixProperties for propertiesTable %s", propertiesTable)); operationLog.info(String.format("ELNFixes fixProperties for propertiesTable %s", propertiesTable));
} }
private static void storageCollectionIntroduction(String sessionToken,
IApplicationServerInternalApi api)
{
SampleSearchCriteria criteria = new SampleSearchCriteria();
criteria.withType().withCode().thatEquals("STORAGE_POSITION");
SampleFetchOptions options = new SampleFetchOptions();
options.withSpace();
options.withExperiment();
options.withProject();
SearchResult<Sample> storagePositionResults = api.searchSamples(sessionToken, criteria, options);
Set<ProjectIdentifier> createdProjects = new HashSet<>();
Set<ExperimentIdentifier> createdExperiments = new HashSet<>();
List<SampleUpdate> storagePositionUpdates = new ArrayList<>();
for (Sample storagePosition:storagePositionResults.getObjects()) {
Space space = storagePosition.getSpace();
String spaceCode = space.getCode();
String postFix = "";
if (spaceCode.startsWith("STORAGE") && spaceCode.length() > "STORAGE".length())
{
int start = spaceCode.indexOf("_");
postFix = spaceCode.substring(start + 1);
}
ProjectIdentifier projectIdentifier = null;
if (storagePosition.getProject() == null)
{
String projectCode = "STORAGE_POSITIONS";
if (!postFix.isBlank()) {
projectCode += "_" + postFix;
}
projectIdentifier = new ProjectIdentifier(spaceCode, projectCode);
if (createdProjects.contains(projectIdentifier) == false)
{
Map<IProjectId, Project> projects =
api.getProjects(sessionToken, Arrays.asList(projectIdentifier),
new ProjectFetchOptions());
System.out.println("PROJECT [FETCH]: " + projectIdentifier + " " + projects.size() + " " + Thread.currentThread().getName());
if (projects.size() == 1) {
createdProjects.add(projectIdentifier);
}
}
if (createdProjects.contains(projectIdentifier) == false)
{
ProjectCreation creation = new ProjectCreation();
creation.setSpaceId(space.getPermId());
creation.setCode(projectCode);
System.out.println("PROJECT [CREATION]: " + creation.getSpaceId() + " " + projectCode + " " + Thread.currentThread().getName());
api.createProjects(sessionToken, Arrays.asList(creation));
createdProjects.add(projectIdentifier);
}
} else {
projectIdentifier = storagePosition.getProject().getIdentifier();
}
ExperimentIdentifier experimentIdentifier;
if (storagePosition.getExperiment() == null)
{
String experimentCode = "STORAGE_POSITIONS_COLLECTION";
if (!postFix.isBlank()) {
experimentCode += "_" + postFix;
}
String experimentType = "COLLECTION";
experimentIdentifier = new ExperimentIdentifier(spaceCode, projectIdentifier.getIdentifier().substring(projectIdentifier.getIdentifier().lastIndexOf('/') + 1), experimentCode);
if (createdExperiments.contains(experimentIdentifier) == false)
{
Map<IExperimentId, Experiment> experiments =
api.getExperiments(sessionToken, Arrays.asList(experimentIdentifier),
new ExperimentFetchOptions());
System.out.println("EXPERIMENT [FETCH]: " + experimentIdentifier + " " + experiments.size() + " " + Thread.currentThread().getName());
if (experiments.size() == 1) {
createdExperiments.add(experimentIdentifier);
}
}
if (createdExperiments.contains(experimentIdentifier) == false)
{
ExperimentCreation creation = new ExperimentCreation();
creation.setProjectId(projectIdentifier);
creation.setCode(experimentCode);
creation.setTypeId(new EntityTypePermId(experimentType, EntityKind.EXPERIMENT));
System.out.println("EXPERIMENT [CREATION]: " + creation.getProjectId() + " " + experimentCode + " " + Thread.currentThread().getName());
api.createExperiments(sessionToken, Arrays.asList(creation));
createdExperiments.add(experimentIdentifier);
}
} else {
experimentIdentifier = storagePosition.getExperiment().getIdentifier();
}
SampleUpdate sampleUpdate = new SampleUpdate();
sampleUpdate.setSampleId(storagePosition.getPermId());
sampleUpdate.setExperimentId(experimentIdentifier);
storagePositionUpdates.add(sampleUpdate);
if (storagePositionUpdates.size() > 1000) {
api.updateSamples(sessionToken, storagePositionUpdates);
storagePositionUpdates.clear();
}
}
if (storagePositionUpdates.isEmpty() == false) {
api.updateSamples(sessionToken, storagePositionUpdates);
storagePositionUpdates.clear();
}
}
} }
No preview for this file type
...@@ -166,6 +166,7 @@ function StorageListView(storageListController, storageListModel) { ...@@ -166,6 +166,7 @@ function StorageListView(storageListController, storageListModel) {
code : uuid, code : uuid,
identifier : null, identifier : null,
sampleTypeCode : "STORAGE_POSITION", sampleTypeCode : "STORAGE_POSITION",
experimentIdentifier: null,
properties : {} properties : {}
}; };
_this._storageListModel.sample.children.push(newChildSample); _this._storageListModel.sample.children.push(newChildSample);
...@@ -244,6 +245,11 @@ function StorageListView(storageListController, storageListModel) { ...@@ -244,6 +245,11 @@ function StorageListView(storageListController, storageListModel) {
if(sampleChild.newSampleJustCreated) { if(sampleChild.newSampleJustCreated) {
sampleChild.identifier = IdentifierUtil.getSampleIdentifier(storageSpaceCode, null, sampleChild.code); sampleChild.identifier = IdentifierUtil.getSampleIdentifier(storageSpaceCode, null, sampleChild.code);
delete sampleChild.newSampleJustCreated; delete sampleChild.newSampleJustCreated;
var postFix = "";
if(storageSpaceCode.length > "STORAGE".length) {
postFix = storageSpaceCode.substring("STORAGE".length + 1);
}
sampleChild.experimentIdentifier = "/" + storageSpaceCode + "/STORAGE_POSITIONS" + postFix + "/STORAGE_POSITIONS_COLLECTION" + postFix;
} else { } else {
// On update the identifier should be set, fail if not // On update the identifier should be set, fail if not
} }
......
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