diff --git a/microscopy-migration-tool/src/ethz/ch/Main.java b/microscopy-migration-tool/src/ethz/ch/Main.java index ebfdf38bc65c0baad9e61730bc73afb39847c165..12ef35dffccc0da8eddb91138d6eb02e8e1fb94f 100644 --- a/microscopy-migration-tool/src/ethz/ch/Main.java +++ b/microscopy-migration-tool/src/ethz/ch/Main.java @@ -1,9 +1,6 @@ package ethz.ch; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult; @@ -21,13 +18,16 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.fetchoptions.SpaceFetchOpt import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.search.SpaceSearchCriteria; import ch.ethz.sis.openbis.generic.dssapi.v3.IDataStoreServerApi; import ch.systemsx.cisd.common.spring.HttpInvokerUtils; +import ethz.ch.dataset.DataSetPropertyCopy; import ethz.ch.dataset.DatasetCreationHelper; import ethz.ch.experiment.Experiment2Sample; import ethz.ch.experiment.Experiment2SampleTranslator; import ethz.ch.experiment.ExperimentType2SampleType; import ethz.ch.property.Property2Sample; import ethz.ch.property.Property2SampleTranslator; +import ethz.ch.property.EntityPropertyCopy; import ethz.ch.property.PropertyType2SampleType; +import ethz.ch.sample.SamplePropertyCopy; import ethz.ch.ssl.SslCertificateHelper; import ethz.ch.tag.Tag2SampleTranslator; @@ -56,6 +56,9 @@ public class Main doTheWork(true, AS_URL, DSS_URL, user, pass, true, true, true); } else { + String AS_URL = OPENBIS_LOCAL_DEV + "/openbis/openbis" + IApplicationServerApi.SERVICE_URL; + String DSS_URL = DSS_LOCAL_DEV + "/datastore_server" + IDataStoreServerApi.SERVICE_URL; + doTheWork(true, AS_URL, DSS_URL, "pontia", "a", true, true, true); System.out.println("Example: java -jar microscopy_migration_tool.jar https://openbis-as-domain.ethz.ch https://openbis-dss-domain.ethz.ch user password"); } } @@ -90,23 +93,23 @@ public class Main } private static void migrate(String sessionToken, IApplicationServerApi v3, IDataStoreServerApi v3dss,boolean COMMIT_CHANGES_TO_OPENBIS) throws Exception { - + // // Experiment types to migrate as samples // - + ExperimentType2SampleType MICROSCOPY_EXPERIMENT = new ExperimentType2SampleType("MICROSCOPY_EXPERIMENT", "MICROSCOPY_EXPERIMENTS_COLLECTION", "MICROSCOPY_EXPERIMENT_NAME"); ExperimentType2SampleType FACS_ARIA_EXPERIMENT = new ExperimentType2SampleType("FACS_ARIA_EXPERIMENT", "FLOW_SORTERS_EXPERIMENTS_COLLECTION", "FACS_ARIA_EXPERIMENT_NAME"); ExperimentType2SampleType INFLUX_EXPERIMENT = new ExperimentType2SampleType("INFLUX_EXPERIMENT", "FLOW_SORTERS_EXPERIMENTS_COLLECTION", "INFLUX_EXPERIMENT_NAME"); ExperimentType2SampleType LSR_FORTESSA_EXPERIMENT = new ExperimentType2SampleType("LSR_FORTESSA_EXPERIMENT","FLOW_ANALYZERS_EXPERIMENTS_COLLECTION", "LSR_FORTESSA_EXPERIMENT_NAME"); ExperimentType2SampleType MOFLO_XDP_EXPERIMENT = new ExperimentType2SampleType("MOFLO_XDP_EXPERIMENT", "FLOW_SORTERS_EXPERIMENTS_COLLECTION", "MOFLO_XDP_EXPERIMENT_NAME"); ExperimentType2SampleType S3E_EXPERIMENT = new ExperimentType2SampleType("S3E_EXPERIMENT", "FLOW_SORTERS_EXPERIMENTS_COLLECTION", "S3E_EXPERIMENT_NAME"); - + // // 1. Installing new sample types // System.out.println("1. Installing types"); - + // Install Sample Types for Experiment Types List<ExperimentType2SampleType> experimentMigrationConfigs = Arrays.asList(MICROSCOPY_EXPERIMENT, FACS_ARIA_EXPERIMENT, @@ -114,7 +117,7 @@ public class Main LSR_FORTESSA_EXPERIMENT, MOFLO_XDP_EXPERIMENT, S3E_EXPERIMENT); - + for(ExperimentType2SampleType experimentMigrationConfig:experimentMigrationConfigs) { if(COMMIT_CHANGES_TO_OPENBIS && !MasterdataHelper.doSampleTypeExist(sessionToken, v3, experimentMigrationConfig.getTypeCode())) { MasterdataHelper.createSampleTypesFromExperimentTypes(sessionToken, v3, Arrays.asList(experimentMigrationConfig.getTypeCode())); @@ -123,38 +126,38 @@ public class Main System.out.println(experimentMigrationConfig.getTypeCode() + " Sample Type installation skipped."); } } - + // Install Sample Type ORGANIZATION_UNIT if(COMMIT_CHANGES_TO_OPENBIS && !MasterdataHelper.doSampleTypeExist(sessionToken, v3, "ORGANIZATION_UNIT")) { v3.createSampleTypes(sessionToken, Collections.singletonList(MasterdataHelper.getSampleTypeORGANIZATION_UNIT())); } System.out.println("ORGANIZATION_UNIT Sample Type installed."); - + if(COMMIT_CHANGES_TO_OPENBIS && !MasterdataHelper.doDataSetTypeExist(sessionToken, v3, "ATTACHMENT")) { v3.createDataSetTypes(sessionToken, Collections.singletonList(MasterdataHelper.getDataSetTypeATTACHMENT())); } - + System.out.println("ATTACHMENT DataSet Type installed."); - + // // 2. Creating new ORGANIZATION_UNITS_COLLECTION and MICROSCOPY_EXPERIMENTS_COLLECTION // System.out.println("2. Creating new ORGANIZATION_UNITS_COLLECTION and MICROSCOPY_EXPERIMENTS_COLLECTION"); - + // Create General ORGANIZATION_UNIT Collection for every PROJECT following the pattern /SPACE/PROJECT/ORGANIZATION_UNIT_COLLECTION // Create General ORGANIZATION_UNIT Collection for every SPACE following the pattern /SPACE/COMMON_ORGANIZATION_UNITS/ORGANIZATION_UNIT_COLLECTION SpaceFetchOptions spaceFetchOptions = new SpaceFetchOptions(); spaceFetchOptions.withProjects(); - + SearchResult<Space> spaces = v3.searchSpaces(sessionToken, new SpaceSearchCriteria(), spaceFetchOptions); - + for(Space space:spaces.getObjects()) { String spaceCode = space.getCode(); if(!EXCLUDE_SPACES.contains(spaceCode)) { // Install Project level collection ProjectSearchCriteria projectSearchCriteria = new ProjectSearchCriteria(); projectSearchCriteria.withSpace().withCode().equals(spaceCode); - + for(Project project:space.getProjects()) { String experimentIdentifierOU = "/" + spaceCode + "/" + project.getCode() + "/ORGANIZATION_UNITS_COLLECTION"; if(COMMIT_CHANGES_TO_OPENBIS && !MetadataHelper.doExperimentExist(v3, sessionToken, experimentIdentifierOU)) { @@ -162,14 +165,14 @@ public class Main } System.out.println("Project Experiment Created: " + experimentIdentifierOU); } - + // Install Space level project and collection String projectIdentifier = "/" + spaceCode + "/COMMON_ORGANIZATION_UNITS"; if(COMMIT_CHANGES_TO_OPENBIS && !MetadataHelper.doProjectExist(v3, sessionToken, projectIdentifier)) { v3.createProjects(sessionToken, Collections.singletonList(MetadataHelper.getProjectCreation(spaceCode, "COMMON_ORGANIZATION_UNITS", "Folder to share common organization units collections."))); } System.out.println("Space Project Created: " + projectIdentifier); - + String experimentIdentifier = "/" + spaceCode + "/COMMON_ORGANIZATION_UNITS/ORGANIZATION_UNITS_COLLECTION"; if(COMMIT_CHANGES_TO_OPENBIS && !MetadataHelper.doExperimentExist(v3, sessionToken, experimentIdentifier)) { v3.createExperiments(sessionToken, Collections.singletonList(MetadataHelper.getOrganizationUnitCollectionCreation(new ProjectIdentifier("/" + spaceCode + "/COMMON_ORGANIZATION_UNITS"), "ORGANIZATION_UNITS_COLLECTION"))); @@ -177,9 +180,9 @@ public class Main System.out.println("Space Experiment Created: " + experimentIdentifier); } } - + System.out.println("3. Translate Experiment to Samples"); - + for(ExperimentType2SampleType config:experimentMigrationConfigs) { int total = 0; ExperimentSearchCriteria experimentSearchCriteria = new ExperimentSearchCriteria(); @@ -192,7 +195,7 @@ public class Main System.out.println("[DONE] " + config.getTypeCode() + "\t" + total + "/" + experiments.getTotalCount()); } } - + System.out.println("4. Translate Properties to Samples"); PropertyType2SampleType FACS_ARIA_TUBE = new PropertyType2SampleType( "FACS_ARIA_TUBE", "FACS_ARIA_SPECIMEN", "FACS_ARIA_SPECIMEN", "$NAME"); @@ -201,16 +204,16 @@ public class Main PropertyType2SampleType LSR_FORTESSA_TUBE = new PropertyType2SampleType( "LSR_FORTESSA_TUBE","LSR_FORTESSA_SPECIMEN","LSR_FORTESSA_SPECIMEN","$NAME"); PropertyType2SampleType LSR_FORTESSA_WELL = new PropertyType2SampleType( "LSR_FORTESSA_WELL","LSR_FORTESSA_SPECIMEN","LSR_FORTESSA_SPECIMEN","$NAME"); PropertyType2SampleType MOFLO_XDP_TUBE = new PropertyType2SampleType( "MOFLO_XDP_TUBE", "MOFLO_XDP_SPECIMEN", "MOFLO_XDP_SPECIMEN", "$NAME"); - PropertyType2SampleType SE3_TUBE = new PropertyType2SampleType( "SE3_TUBE", "SE3_SPECIMEN", "SE3_SPECIMEN", "$NAME"); - + PropertyType2SampleType S3E_TUBE = new PropertyType2SampleType( "S3E_TUBE", "S3E_SPECIMEN", "S3E_SPECIMEN", "$NAME"); + List<PropertyType2SampleType> propertiesMigrationConfigs = Arrays.asList(FACS_ARIA_TUBE, FACS_ARIA_WELL, INFLUX_TUBE, LSR_FORTESSA_TUBE, LSR_FORTESSA_WELL, MOFLO_XDP_TUBE, - SE3_TUBE); - + S3E_TUBE); + for(PropertyType2SampleType propertyMigrationConfigs:propertiesMigrationConfigs) { if(COMMIT_CHANGES_TO_OPENBIS && !MasterdataHelper.doSampleTypeExist(sessionToken, v3, propertyMigrationConfigs.getNewSampleTypeCode())) { MasterdataHelper.createDefaultSampleType(sessionToken, v3, propertyMigrationConfigs.getNewSampleTypeCode()); @@ -219,7 +222,7 @@ public class Main System.out.println(propertyMigrationConfigs.getNewSampleTypeCode() + " Sample Type installation skipped."); } } - + for(PropertyType2SampleType config:propertiesMigrationConfigs) { int total = 0; SampleSearchCriteria sampleSearchCriteria = new SampleSearchCriteria(); @@ -232,5 +235,30 @@ public class Main System.out.println("[DONE] " + config.getOldSampleTypeCode() + "\t" + total + "/" + samples.getTotalCount()); } } + + System.out.println("5. Copy Property A to Property B on Samples and DataSets"); + EntityPropertyCopy LSR_FORTESSA_PLATE_p = new SamplePropertyCopy( "LSR_FORTESSA_PLATE", "LSR_FORTESSA_PLATE_NAME", "$NAME"); + EntityPropertyCopy LSR_FORTESSA_TUBE_p = new SamplePropertyCopy( "LSR_FORTESSA_TUBE", "LSR_FORTESSA_TUBE_NAME", "$NAME"); + EntityPropertyCopy LSR_FORTESSA_WELL_p = new SamplePropertyCopy( "LSR_FORTESSA_WELL", "LSR_FORTESSA_WELL_NAME", "$NAME"); + EntityPropertyCopy FACS_ARIA_TUBE_p = new SamplePropertyCopy( "FACS_ARIA_TUBE", "FACS_ARIA_TUBE_NAME", "$NAME"); + EntityPropertyCopy INFLUX_TUBE_p = new SamplePropertyCopy( "INFLUX_TUBE", "INFLUX_TUBE_NAME", "$NAME"); + EntityPropertyCopy MOFLO_XDP_TUBE_p = new SamplePropertyCopy( "MOFLO_XDP_TUBE", "MOFLO_XDP_TUBE_NAME", "$NAME"); + EntityPropertyCopy S3E_TUBE_p = new SamplePropertyCopy( "S3E_TUBE", "S3E_NAME", "$NAME"); + EntityPropertyCopy MICROSCOPY_SAMPLE_TYPE_p = new SamplePropertyCopy( "MICROSCOPY_SAMPLE_TYPE", "MICROSCOPY_SAMPLE_NAME", "$NAME"); + EntityPropertyCopy MICROSCOPY_ACCESSORY_FILE_p = new DataSetPropertyCopy("MICROSCOPY_ACCESSORY_FILE","MICROSCOPY_ACCESSORY_FILE_NAME", "$NAME"); + + List<EntityPropertyCopy> propertyCopiesMigrationConfig = Arrays.asList(LSR_FORTESSA_PLATE_p, + LSR_FORTESSA_TUBE_p, + LSR_FORTESSA_WELL_p, + FACS_ARIA_TUBE_p, + INFLUX_TUBE_p, + MOFLO_XDP_TUBE_p, + S3E_TUBE_p, + MICROSCOPY_SAMPLE_TYPE_p, + MICROSCOPY_ACCESSORY_FILE_p); + + for (EntityPropertyCopy config:propertyCopiesMigrationConfig) { + config.copy(sessionToken, v3); + } } } diff --git a/microscopy-migration-tool/src/ethz/ch/MasterdataHelper.java b/microscopy-migration-tool/src/ethz/ch/MasterdataHelper.java index 3f8e1f580d9187e0cb617f3d7b418874c0e4021d..03bc5663b0d4a345b64626401246beec491fd9e4 100644 --- a/microscopy-migration-tool/src/ethz/ch/MasterdataHelper.java +++ b/microscopy-migration-tool/src/ethz/ch/MasterdataHelper.java @@ -1,15 +1,15 @@ package ethz.ch; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import java.util.*; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.update.ListUpdateValue; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetTypeCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetTypeFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update.DataSetTypeUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentTypeCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentTypeFetchOptions; @@ -25,6 +25,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.search.PropertyTypeSear import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleTypeCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleTypeUpdate; public class MasterdataHelper { @@ -158,7 +159,55 @@ public class MasterdataHelper createExperimentTypeIfMissing(sessionToken, v3, creation); } - + + // + // Get + // + + public static SampleType getSampleType(String sessionToken, IApplicationServerApi v3, String typeCode) { + EntityTypePermId id = new EntityTypePermId(typeCode); + SampleTypeFetchOptions fetchOptions = new SampleTypeFetchOptions(); + fetchOptions.withPropertyAssignments().withPropertyType(); + Map<IEntityTypeId, SampleType> types = v3.getSampleTypes(sessionToken, Arrays.asList(id), fetchOptions); + return types.get(id); + } + + public static DataSetType getDataSetType(String sessionToken, IApplicationServerApi v3, String typeCode) { + EntityTypePermId id = new EntityTypePermId(typeCode); + DataSetTypeFetchOptions fetchOptions = new DataSetTypeFetchOptions(); + fetchOptions.withPropertyAssignments().withPropertyType(); + Map<IEntityTypeId, DataSetType> types = v3.getDataSetTypes(sessionToken, Arrays.asList(id), fetchOptions); + return types.get(id); + } + + // + // Update + // + + public static void updateSampleType(String sessionToken, IApplicationServerApi v3, String typeCode, int addOrder, String addPropertyTypeCode) { + SampleTypeUpdate update = new SampleTypeUpdate(); + update.setTypeId(new EntityTypePermId(typeCode)); + ListUpdateValue.ListUpdateActionAdd add = new ListUpdateValue.ListUpdateActionAdd(); + PropertyAssignmentCreation propertyAssignmentCreation = new PropertyAssignmentCreation(); + propertyAssignmentCreation.setOrdinal(addOrder); + propertyAssignmentCreation.setPropertyTypeId(new PropertyTypePermId(addPropertyTypeCode)); + add.setItems(Arrays.asList(propertyAssignmentCreation)); + update.setPropertyAssignmentActions(Arrays.asList(add)); + v3.updateSampleTypes(sessionToken, Arrays.asList(update)); + } + + public static void updateDataSetType(String sessionToken, IApplicationServerApi v3, String typeCode, int addOrder, String addPropertyTypeCode) { + DataSetTypeUpdate update = new DataSetTypeUpdate(); + update.setTypeId(new EntityTypePermId(typeCode)); + ListUpdateValue.ListUpdateActionAdd add = new ListUpdateValue.ListUpdateActionAdd(); + PropertyAssignmentCreation propertyAssignmentCreation = new PropertyAssignmentCreation(); + propertyAssignmentCreation.setOrdinal(addOrder); + propertyAssignmentCreation.setPropertyTypeId(new PropertyTypePermId(addPropertyTypeCode)); + add.setItems(Arrays.asList(propertyAssignmentCreation)); + update.setPropertyAssignmentActions(Arrays.asList(add)); + v3.updateDataSetTypes(sessionToken, Arrays.asList(update)); + } + // // Type to translate Attachments to DataSets // diff --git a/microscopy-migration-tool/src/ethz/ch/MetadataHelper.java b/microscopy-migration-tool/src/ethz/ch/MetadataHelper.java index cb01dfd1f6aaf6a10c6cd50e97549f1115628d72..aacbf6f9754b0250ec1113d57b2ba51c938e5144 100644 --- a/microscopy-migration-tool/src/ethz/ch/MetadataHelper.java +++ b/microscopy-migration-tool/src/ethz/ch/MetadataHelper.java @@ -9,6 +9,10 @@ import java.util.List; import java.util.Map; import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.DataSetSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update.DataSetUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; @@ -27,6 +31,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SampleIdentifier; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId; @@ -133,7 +139,23 @@ public class MetadataHelper // // Gets // - + + public static List<Sample> getSamples(String sessionToken, IApplicationServerApi v3, String typeCode) { + SampleSearchCriteria sampleSearchCriteria = new SampleSearchCriteria(); + sampleSearchCriteria.withType().withCode().thatEquals(typeCode); + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withProperties(); + return v3.searchSamples(sessionToken, sampleSearchCriteria, fetchOptions).getObjects(); + } + + public static List<DataSet> getDataSets(String sessionToken, IApplicationServerApi v3, String typeCode) { + DataSetSearchCriteria searchCriteria = new DataSetSearchCriteria(); + searchCriteria.withType().withCode().thatEquals(typeCode); + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + return v3.searchDataSets(sessionToken, searchCriteria, fetchOptions).getObjects(); + } + public static Sample getSample(String sessionToken, IApplicationServerApi v3, ISampleId sampleId) { SampleFetchOptions fo = new SampleFetchOptions(); fo.withProperties(); @@ -166,5 +188,22 @@ public class MetadataHelper throw new RuntimeException("Experiment with PermId not found: " + permId.getPermId()); } } - + + // + // Update + // + + public static void updateSampleProperty(String sessionToken, IApplicationServerApi v3, String permId, String propertyCode, String propertyValue) { + SampleUpdate update = new SampleUpdate(); + update.setSampleId(new SamplePermId(permId)); + update.setProperty(propertyCode, propertyValue); + v3.updateSamples(sessionToken, Arrays.asList(update)); + } + + public static void updateDataSetProperty(String sessionToken, IApplicationServerApi v3, String permId, String propertyCode, String propertyValue) { + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(new DataSetPermId(permId)); + update.setProperty(propertyCode, propertyValue); + v3.updateDataSets(sessionToken, Arrays.asList(update)); + } } diff --git a/microscopy-migration-tool/src/ethz/ch/dataset/DataSetPropertyCopy.java b/microscopy-migration-tool/src/ethz/ch/dataset/DataSetPropertyCopy.java new file mode 100644 index 0000000000000000000000000000000000000000..03b180618f530228f5c54c5901e57b6fa81d0eb3 --- /dev/null +++ b/microscopy-migration-tool/src/ethz/ch/dataset/DataSetPropertyCopy.java @@ -0,0 +1,37 @@ +package ethz.ch.dataset; + +import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPropertyAssignmentsHolder; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet; +import ethz.ch.MasterdataHelper; +import ethz.ch.MetadataHelper; +import ethz.ch.property.EntityPropertyCopy; + +import java.util.List; + +public class DataSetPropertyCopy extends EntityPropertyCopy<DataSet> { + + public DataSetPropertyCopy(String typeCode, String oldPropertyCode, String newPropertyCode) { + super(typeCode, oldPropertyCode, newPropertyCode); + } + + @Override + public IPropertyAssignmentsHolder getPropertyAssignmentsHolder(String sessionToken, IApplicationServerApi v3) { + return MasterdataHelper.getDataSetType(sessionToken, v3, typeCode); + } + + @Override + public void updatePropertyAssignmentsHolder(String sessionToken, IApplicationServerApi v3) { + MasterdataHelper.updateDataSetType(sessionToken, v3, typeCode, 1, newPropertyCode); + } + + @Override + public List<DataSet> getEntities(String sessionToken, IApplicationServerApi v3) { + return MetadataHelper.getDataSets(sessionToken, v3, typeCode); + } + + @Override + public void updateEntityProperty(String sessionToken, IApplicationServerApi v3, DataSet entity) { + MetadataHelper.updateDataSetProperty(sessionToken, v3, entity.getPermId().getPermId(), newPropertyCode, entity.getProperty(oldPropertyCode)); + } +} diff --git a/microscopy-migration-tool/src/ethz/ch/property/EntityPropertyCopy.java b/microscopy-migration-tool/src/ethz/ch/property/EntityPropertyCopy.java new file mode 100644 index 0000000000000000000000000000000000000000..b4232ed199837fab316cc33c60d6435bf92b75b4 --- /dev/null +++ b/microscopy-migration-tool/src/ethz/ch/property/EntityPropertyCopy.java @@ -0,0 +1,64 @@ +package ethz.ch.property; + +import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPermIdHolder; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPropertiesHolder; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPropertyAssignmentsHolder; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment; +import java.util.List; + +public abstract class EntityPropertyCopy<ENTITY extends IPermIdHolder & IPropertiesHolder> { + protected String typeCode; + protected String oldPropertyCode; + protected String newPropertyCode; + + public EntityPropertyCopy(String typeCode, String oldPropertyCode, String newPropertyCode) { + this.typeCode = typeCode; + this.oldPropertyCode = oldPropertyCode; + this.newPropertyCode = newPropertyCode; + } + + public abstract IPropertyAssignmentsHolder getPropertyAssignmentsHolder(String sessionToken, IApplicationServerApi v3); + + public abstract void updatePropertyAssignmentsHolder(String sessionToken, IApplicationServerApi v3); + + public abstract List<ENTITY> getEntities(String sessionToken, IApplicationServerApi v3); + + public abstract void updateEntityProperty(String sessionToken, IApplicationServerApi v3, ENTITY entity); + + public void copy(String sessionToken, IApplicationServerApi v3) { + // Is Property B assigned to the type? If not Do + System.out.println("5. Copy Property " + oldPropertyCode + " to Property " + newPropertyCode + " on " + typeCode); + IPropertyAssignmentsHolder propertyAssignmentsHolder = getPropertyAssignmentsHolder(sessionToken, v3); + boolean found = false; + for (PropertyAssignment propertyAssignment:propertyAssignmentsHolder.getPropertyAssignments()) { + found = propertyAssignment.getPropertyType().getCode().equals(newPropertyCode); + if (found) { + break; + } + } + if (!found) { + System.out.println("Property Type " + newPropertyCode + " not found on " + typeCode); + updatePropertyAssignmentsHolder(sessionToken, v3); + System.out.println("Property Type " + newPropertyCode + " created on " + typeCode); + } + + // Copy + int total = 0; + List<ENTITY> entities = getEntities(sessionToken, v3); + + for(ENTITY entity:entities) { + if (entity.getProperty(oldPropertyCode) != null) { + if(!entity.getProperty(oldPropertyCode).equals(entity.getProperty(newPropertyCode))) { + updateEntityProperty(sessionToken, v3, entity); + System.out.println("[PREPARING] " + entity.getPermId() + "\t" + entity.getProperty(oldPropertyCode) + "\t" + total + "/" + entities.size()); + } else { + System.out.println("[SKIP] " + entity.getPermId() + "\t" + entity.getProperty(oldPropertyCode) + "\t" + total + "/" + entities.size()); + } + } + total++; + } + System.out.println("[DONE] " + total + "/" + entities.size()); + + } +} diff --git a/microscopy-migration-tool/src/ethz/ch/sample/SamplePropertyCopy.java b/microscopy-migration-tool/src/ethz/ch/sample/SamplePropertyCopy.java new file mode 100644 index 0000000000000000000000000000000000000000..76dbc7b2f7c3648f92ab8740232224af78ca498e --- /dev/null +++ b/microscopy-migration-tool/src/ethz/ch/sample/SamplePropertyCopy.java @@ -0,0 +1,37 @@ +package ethz.ch.sample; + +import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPropertyAssignmentsHolder; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; +import ethz.ch.MasterdataHelper; +import ethz.ch.MetadataHelper; +import ethz.ch.property.EntityPropertyCopy; + +import java.util.List; + +public class SamplePropertyCopy extends EntityPropertyCopy<Sample> { + + public SamplePropertyCopy(String typeCode, String oldPropertyCode, String newPropertyCode) { + super(typeCode, oldPropertyCode, newPropertyCode); + } + + @Override + public IPropertyAssignmentsHolder getPropertyAssignmentsHolder(String sessionToken, IApplicationServerApi v3) { + return MasterdataHelper.getSampleType(sessionToken, v3, typeCode); + } + + @Override + public void updatePropertyAssignmentsHolder(String sessionToken, IApplicationServerApi v3) { + MasterdataHelper.updateSampleType(sessionToken, v3, typeCode, 1, newPropertyCode); + } + + @Override + public List<Sample> getEntities(String sessionToken, IApplicationServerApi v3) { + return MetadataHelper.getSamples(sessionToken, v3, typeCode); + } + + @Override + public void updateEntityProperty(String sessionToken, IApplicationServerApi v3, Sample entity) { + MetadataHelper.updateSampleProperty(sessionToken, v3, entity.getPermId().getPermId(), newPropertyCode, entity.getProperty(oldPropertyCode)); + } +} diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/error.png b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/error.png deleted file mode 100644 index 5c832c00dc0500c8e7a14961aa0088bcceabc6a1..0000000000000000000000000000000000000000 Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/error.png and /dev/null differ diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/wait.png b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/wait.png deleted file mode 100644 index 0fe45f49527805aa459580082564916ce59934d4..0000000000000000000000000000000000000000 Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/wait.png and /dev/null differ diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/MicroscopyTechnology.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/MicroscopyTechnology.js index d0d3d304695147ff5716ba69fbf0b767dc535f28..6d3ba47ce6d3e13eda32d40fdbd8c53b9b37833b 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/MicroscopyTechnology.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/MicroscopyTechnology.js @@ -193,7 +193,7 @@ $.extend(MicroscopyTechnology.prototype, ELNLIMSPlugin.prototype, { // we will replace it asynchronously. var thumbnailImage = $("<img />", { - src: "./img/wait.png", + src: "./img/image_loading.gif", class: "img-responsive", display: "inline", "text-align": "center", @@ -296,7 +296,7 @@ $.extend(MicroscopyTechnology.prototype, ELNLIMSPlugin.prototype, { if (result.getTotalCount() == 0) { // Thumbnail not found! - imD.attr("src", "./img/error.png"); + imD.attr("src", "./img/image_unavailable.png"); imD.attr("title", "Could not find a thumbnail for this dataset!"); return;