diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java index 6fa9b718229921b3042cd9e63f2d0bd856fe230d..83379ae11e430a30c5623544f3ffc5c13e81e613 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java @@ -23,10 +23,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import org.apache.log4j.Logger; @@ -139,14 +141,32 @@ class DataSetRegistrationIngestionService extends IngestionService<DataSetInform dataSetForUpdate.setSample(sample); dataSetForUpdate.setExperiment(experiment); dataSetForUpdate.setParentDatasets(dataSet.getParentDataSetCodes()); + List<String> existingPropertyCodes = dataSetForUpdate.getAllPropertyCodes(); + Set<String> newPropertyCodes = extractPropertyNames(dataSetProperties); for (NewProperty newProperty : dataSetProperties) { dataSetForUpdate.setPropertyValue(newProperty.getPropertyCode(), newProperty.getValue()); } + // set the properties that are in the harvester but not in the data source anymore, to "" + existingPropertyCodes.removeAll(newPropertyCodes); + for (String propCode : existingPropertyCodes) + { + dataSetForUpdate.setPropertyValue(propCode, ""); + } } return null; } + private Set<String> extractPropertyNames(List<NewProperty> dataSetProperties) + { + Set<String> existingPropertyNames = new HashSet<String>(); + for (NewProperty prop : dataSetProperties) + { + existingPropertyNames.add(prop.getPropertyCode()); + } + return existingPropertyNames; + } + class FileDetails { final int crc32checksum;