From 3d69e40a5c8f23e40d6e548a0d8707af1fb428f1 Mon Sep 17 00:00:00 2001
From: Cezary Czernecki <ccezary@ethz.ch>
Date: Wed, 6 Mar 2019 14:45:09 +0100
Subject: [PATCH] SSDM-7271 update strategies

---
 .../as/services/xls-import-api/entrypoint.py  |  38 ++-
 .../xls-import-api/parsers/__init__.py        |   4 +-
 .../parsers/creation_to_operation/__init__.py |   2 +-
 .../creation_to_operation.py                  |  40 +++-
 .../parsers/creation_to_update/__init__.py    |   5 +
 .../creation_to_update/creation_to_update.py  |  36 +++
 .../creation_to_update/update_parsers.py      | 221 ++++++++++++++++++
 .../creation_parsers.py                       |  42 ++--
 .../processors/openbis_duplicates_handler.py  |  90 +++++--
 .../processors/representation_unifier.py      |   6 +-
 .../search_engines/search_criteria_factory.py |   6 +-
 .../search_engines/search_engine.py           |  16 +-
 .../xls-import-api/utils/openbis_utils.py     |   4 +-
 .../excelimport/ImportDatasetTypesTest.java   |  69 +++++-
 .../ImportExperimentTypesTest.java            |  62 ++++-
 .../excelimport/ImportExperimentsTest.java    |  43 ++--
 .../plugin/excelimport/TestUtils.java         |  30 +++
 .../plugin/excelimport/UpdateMode.java        |   8 +
 .../dataset_types/normal_dataset.xls          | Bin 40960 -> 40960 bytes
 .../dataset_types/normal_dataset_update.xls   | Bin 0 -> 40960 bytes
 .../dataset_types/with_validation.xls         | Bin 40448 -> 40448 bytes
 .../experiment_types/normal_experiment.xls    | Bin 40960 -> 40960 bytes
 .../normal_experiment_update.xls              | Bin 0 -> 40960 bytes
 .../test_files/experiments/all_elsewhere.xls  | Bin 32768 -> 32768 bytes
 .../test_files/experiments/all_inside.xls     | Bin 44032 -> 44032 bytes
 .../experiments/experiment_type.xls           | Bin 40960 -> 40960 bytes
 .../test_files/experiments/update.xls         | Bin 0 -> 32768 bytes
 .../test_files/projects/update.xls            | Bin 0 -> 32768 bytes
 .../test_files/projects/with_spaces.xls       | Bin 33280 -> 33280 bytes
 .../normal_property_type_update.xls           | Bin 0 -> 40960 bytes
 .../sample_types/normal_samples.xls           | Bin 40960 -> 40960 bytes
 .../sample_types/normal_samples_update.xls    | Bin 0 -> 40960 bytes
 .../excelimport/test_files/samples/all_in.xls | Bin 46592 -> 46592 bytes
 .../excelimport/test_files/samples/update.xls | Bin 0 -> 33280 bytes
 .../spaces/normal_spaces_update.xls           | Bin 0 -> 32768 bytes
 .../vocabularies/normal_vocab_update.xls      | Bin 0 -> 40960 bytes
 36 files changed, 640 insertions(+), 82 deletions(-)
 create mode 100644 openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/__init__.py
 create mode 100644 openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/creation_to_update.py
 create mode 100644 openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/update_parsers.py
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/UpdateMode.java
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/normal_dataset_update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiment_types/normal_experiment_update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/projects/update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/property_types/normal_property_type_update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/normal_samples_update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/samples/update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/spaces/normal_spaces_update.xls
 create mode 100644 openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/vocabularies/normal_vocab_update.xls

diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/entrypoint.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/entrypoint.py
index 12b5fa31ac5..42465136221 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/entrypoint.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/entrypoint.py
@@ -1,26 +1,50 @@
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.operation import SynchronousOperationExecutionOptions
-from parsers import get_creations_from, CreationToOperationParser
+from parsers import get_creations_from, CreationOrUpdateToOperationParser
 from processors import OpenbisDuplicatesHandler, PropertiesLabelHandler, DuplicatesHandler, unify_properties_representation_of
 from search_engines import SearchEngine
 from utils import FileHandler
+from ch.systemsx.cisd.common.exceptions import UserFailureException
 
 
 def process(context, parameters):
-    xls_byte_arrays = parameters.get('xls')
-    scripts = parameters.get('scripts')
+    """
+        Excel import AS service.
+        For extensive documentation of usage and Excel layout, 
+        please visit https://wiki-bsse.ethz.ch/display/openBISDoc/Excel+import+service
+        
+        :param context: Standard Openbis AS Service context object
+        :param parameters: Contains two elemens
+                        {
+                            'xls' : excel byte blob,    - mandatory
+                            'scripts': {                - optional
+                                file path: loaded file
+                            },
+                            update_mode: [IGNORE_EXISTING|FAIL_IF_EXISTS|UPDATE_IF_EXISTS] - optional, default FAIL_IF_EXISTS
+                                                                                             This only takes duplicates that are ON THE SERVER
+                        }
+        :return: Openbis's execute operations result string. It should contain report on what was created.
+    """
+    xls_byte_arrays = parameters.get('xls', None)
+    scripts = parameters.get('scripts', {})
+    update_mode = parameters.get('update_mode', None)
+    if xls_byte_arrays is None:
+        raise UserFailureException('Excel sheet has not been provided. "xls" parameter is None')
+    if update_mode not in ['IGNORE_EXISTING', 'FAIL_IF_EXISTS', 'UPDATE_IF_EXISTS']:
+        raise UserFailureException('Update mode has to be one of following: IGNORE_EXISTING FAIL_IF_EXISTS UPDATE_IF_EXISTS but was ' + (str(update_mode) if update_mode else 'None'))
     creations = get_creations_from(xls_byte_arrays, FileHandler(scripts))
     distinct_creations = DuplicatesHandler.get_distinct_creations(creations)
     sessionToken = context.sessionToken
     api = context.applicationService
     search_engine = SearchEngine(api, sessionToken)
     existing_elements = search_engine.find_all_existing_elements(distinct_creations)
-    server_duplicates_handler = OpenbisDuplicatesHandler(distinct_creations, existing_elements)
-    creations = server_duplicates_handler.remove_existing_elements_from_creations()
-    creations = server_duplicates_handler.rewrite_parentchild_creationid_to_permid()
     entity_kinds = search_engine.find_existing_entity_kind_definitions_for(creations)
     existing_vocabularies = search_engine.find_all_existing_vocabularies()
     existing_unified_kinds = unify_properties_representation_of(creations, entity_kinds, existing_vocabularies, existing_elements)
     creations = PropertiesLabelHandler.rewrite_property_labels_to_codes(creations, existing_unified_kinds)
-    operations = CreationToOperationParser.parse(creations)
+    server_duplicates_handler = OpenbisDuplicatesHandler(distinct_creations, existing_elements, update_mode)
+    creations = server_duplicates_handler.rewrite_parentchild_creationid_to_permid()
+    creations = server_duplicates_handler.handle_existing_elements_in_creations()
+    operations = CreationOrUpdateToOperationParser.parse(creations)
     res = str(api.executeOperations(sessionToken, operations, SynchronousOperationExecutionOptions()).getResults())
     return res
+
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/__init__.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/__init__.py
index 8bd51a73523..68c228b00d1 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/__init__.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/__init__.py
@@ -1,4 +1,4 @@
-from .creation_to_operation import CreationToOperationParser
+from .creation_to_operation import CreationOrUpdateToOperationParser
 from .definition_to_creation import DefinitionToCreationParser
 from .definition_to_creation import VocabularyDefinitionToCreationParser, \
                     PropertyTypeDefinitionToCreationParser, SampleTypeDefinitionToCreationParser, ExperimentTypeDefinitionToCreationParser, \
@@ -7,4 +7,4 @@ from .definition_to_creation import VocabularyDefinitionToCreationParser, \
 from .excel_to_poi import ExcelToPoiParser
 from .excels_to_creations_parser import get_creations_from
 from .poi_to_definition import PoiToDefinitionParser
-
+from .creation_to_update import CreationToUpdateParser
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/__init__.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/__init__.py
index da17c96a534..468cbe77063 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/__init__.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/__init__.py
@@ -1 +1 @@
-from .creation_to_operation import CreationToOperationParser
\ No newline at end of file
+from .creation_to_operation import CreationOrUpdateToOperationParser
\ No newline at end of file
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/creation_to_operation.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/creation_to_operation.py
index 3baf8f307b8..a97ddef851e 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/creation_to_operation.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_operation/creation_to_operation.py
@@ -9,9 +9,24 @@ from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.create import CreateVoc
 from ..definition_to_creation import VocabularyDefinitionToCreationParser, PropertyTypeDefinitionToCreationParser, SampleTypeDefinitionToCreationParser, \
                     ExperimentTypeDefinitionToCreationParser, DatasetTypeDefinitionToCreationParser, SpaceDefinitionToCreationParser, \
                     ProjectDefinitionToCreationParser, ExperimentDefinitionToCreationParser, ScriptDefinitionToCreationParser, SampleDefinitionToCreationParser
+from ..creation_to_update import VocabularyCreationToUpdateParser, VocabularyTermCreationToUpdateParser, \
+                        PropertyTypeCreationToUpdateParser, SampleTypeCreationToUpdateParser, ExperimentTypeCreationToUpdateParser, \
+                        DatasetTypeCreationToUpdateParser, SpaceCreationToUpdateParser, ProjectCreationToUpdateParser, ExperimentCreationToUpdateParser, \
+                        SampleCreationToUpdateParser, ScriptCreationToUpdateParser
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.update import UpdateVocabulariesOperation, \
+    UpdateVocabularyTermsOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.property.update import UpdatePropertyTypesOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update import UpdateSampleTypesOperation, \
+    UpdateSamplesOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.update import UpdateExperimentTypesOperation, \
+    UpdateExperimentsOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update import UpdateDataSetTypesOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.space.update import UpdateSpacesOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.update import UpdateProjectsOperation
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.update import UpdatePluginsOperation
 
 
-class CreationToOperationParser(object):
+class CreationOrUpdateToOperationParser(object):
 
     @staticmethod
     def parse(creations):
@@ -36,4 +51,27 @@ class CreationToOperationParser(object):
             creation_operations.append(CreateSamplesOperation(creations[SampleDefinitionToCreationParser.type]))
         if ScriptDefinitionToCreationParser.type in creations:
             creation_operations.append(CreatePluginsOperation(creations[ScriptDefinitionToCreationParser.type]))
+        if VocabularyCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateVocabulariesOperation(creations[VocabularyCreationToUpdateParser.type]))
+        if VocabularyTermCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateVocabularyTermsOperation(creations[VocabularyTermCreationToUpdateParser.type]))
+        if PropertyTypeCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdatePropertyTypesOperation(creations[PropertyTypeCreationToUpdateParser.type]))
+        if SampleTypeCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateSampleTypesOperation(creations[SampleTypeCreationToUpdateParser.type]))
+        if ExperimentTypeCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateExperimentTypesOperation(creations[ExperimentTypeCreationToUpdateParser.type]))
+        if DatasetTypeCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateDataSetTypesOperation(creations[DatasetTypeCreationToUpdateParser.type]))
+        if SpaceCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateSpacesOperation(creations[SpaceCreationToUpdateParser.type]))
+        if ProjectCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateProjectsOperation(creations[ProjectCreationToUpdateParser.type]))
+        if ExperimentCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateExperimentsOperation(creations[ExperimentCreationToUpdateParser.type]))
+        if SampleCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdateSamplesOperation(creations[SampleCreationToUpdateParser.type]))
+        if ScriptCreationToUpdateParser.type in creations:
+            creation_operations.append(UpdatePluginsOperation(creations[ScriptCreationToUpdateParser.type]))
+
         return creation_operations
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/__init__.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/__init__.py
new file mode 100644
index 00000000000..5f9b15609c7
--- /dev/null
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/__init__.py
@@ -0,0 +1,5 @@
+from .update_parsers import VocabularyCreationToUpdateParser, VocabularyTermCreationToUpdateParser, \
+                        PropertyTypeCreationToUpdateParser, SampleTypeCreationToUpdateParser, ExperimentTypeCreationToUpdateParser, \
+                        DatasetTypeCreationToUpdateParser, SpaceCreationToUpdateParser, ProjectCreationToUpdateParser, ExperimentCreationToUpdateParser, \
+                        SampleCreationToUpdateParser, ScriptCreationToUpdateParser
+from .creation_to_update import CreationToUpdateParser
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/creation_to_update.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/creation_to_update.py
new file mode 100644
index 00000000000..29e055982b9
--- /dev/null
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/creation_to_update.py
@@ -0,0 +1,36 @@
+from utils.openbis_utils import create_sample_identifier_string
+from .update_parsers import CreationToUpdateParserFactory
+from ..definition_to_creation import SampleDefinitionToCreationParser, ScriptDefinitionToCreationParser
+
+
+class CreationToUpdateParser(object):
+
+    @staticmethod
+    def parse(creations_that_exist, existing_elements):
+        updates = {}
+        for creation_type, creations in creations_that_exist.items():
+            parsers = CreationToUpdateParserFactory.get_parsers(creation_type)
+            for creation in creations:
+                existing_element = get_existing_element_based_on(creation_type, creation, existing_elements[creation_type])
+                if existing_element:
+                    for parser in parsers:
+                        update = parser.parse(creation, existing_element)
+                        update_type = parser.get_type()
+                        if update_type not in updates:
+                            updates[update_type] = []
+                        updates[update_type].extend(update if type(update) == list else [update])
+
+        return updates
+
+
+def get_existing_element_based_on(creation_type, creation, existing_elements):
+    if creation_type == SampleDefinitionToCreationParser.type:
+        existing_element = list(filter(lambda existing_element: creation.code is not None and create_sample_identifier_string(creation) == existing_element.identifier.identifier, existing_elements))
+    else:
+        if creation_type == ScriptDefinitionToCreationParser.type:
+            attr = 'name'
+        else:
+            attr = 'code'
+        existing_element = list(filter(lambda existing_element: getattr(creation, attr) == getattr(existing_element, attr), existing_elements))
+    return None if len(existing_element) == 0 else existing_element[0]
+
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/update_parsers.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/update_parsers.py
new file mode 100644
index 00000000000..401c2552fc2
--- /dev/null
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/creation_to_update/update_parsers.py
@@ -0,0 +1,221 @@
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.update import VocabularyUpdate, VocabularyTermUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.property.update import PropertyTypeUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update import SampleTypeUpdate, SampleUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.common.update import ListUpdateValue
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.update import ExperimentTypeUpdate, ExperimentUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update import DataSetTypeUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.space.update import SpaceUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.project.update import ProjectUpdate
+from ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.update import PluginUpdate
+from java.lang import UnsupportedOperationException
+from ..definition_to_creation import VocabularyDefinitionToCreationParser, PropertyTypeDefinitionToCreationParser, SampleTypeDefinitionToCreationParser, \
+                    ExperimentTypeDefinitionToCreationParser, DatasetTypeDefinitionToCreationParser, SpaceDefinitionToCreationParser, \
+                    ProjectDefinitionToCreationParser, ExperimentDefinitionToCreationParser, ScriptDefinitionToCreationParser, SampleDefinitionToCreationParser
+
+
+class CreationToUpdateParserFactory(object):
+
+    @staticmethod
+    def get_parsers(creation_type):
+        if creation_type == VocabularyDefinitionToCreationParser.type:
+            return [VocabularyCreationToUpdateParser(), VocabularyTermCreationToUpdateParser()]
+        elif creation_type == PropertyTypeDefinitionToCreationParser.type:
+            return [PropertyTypeCreationToUpdateParser()]
+        elif creation_type == SampleTypeDefinitionToCreationParser.type:
+            return [SampleTypeCreationToUpdateParser()]
+        elif creation_type == ExperimentTypeDefinitionToCreationParser.type:
+            return [ExperimentTypeCreationToUpdateParser()]
+        elif creation_type == DatasetTypeDefinitionToCreationParser.type:
+            return [DatasetTypeCreationToUpdateParser()]
+        elif creation_type == SpaceDefinitionToCreationParser.type:
+            return [SpaceCreationToUpdateParser()]
+        elif creation_type == ProjectDefinitionToCreationParser.type:
+            return [ProjectCreationToUpdateParser()]
+        elif creation_type == ExperimentDefinitionToCreationParser.type:
+            return [ExperimentCreationToUpdateParser()]
+        elif creation_type == SampleDefinitionToCreationParser.type:
+            return [SampleCreationToUpdateParser()]
+        elif creation_type == ScriptDefinitionToCreationParser.type:
+            return [ScriptCreationToUpdateParser()]
+        else:
+            raise UnsupportedOperationException(
+                "Creation type of " + creation_type + " is not supported.")
+
+
+class VocabularyCreationToUpdateParser(object):
+    type = "VocabularyUpdate"
+
+    def parse(self, creation, existing_vocabulary):
+        vocabulary_update = VocabularyUpdate()
+        vocabulary_update.vocabularyId = existing_vocabulary.permId
+        vocabulary_update.setDescription(creation.description)
+        return vocabulary_update
+
+    def get_type(self):
+        return VocabularyCreationToUpdateParser.type
+
+
+class VocabularyTermCreationToUpdateParser(object):
+    type = "VocabularyTermUpdate"
+
+    def parse(self, creation, existing_vocabulary):
+        vocabulary_term_updates = []
+        for term in creation.terms:
+            existing_term = next((existing_term for existing_term in existing_vocabulary.terms if existing_term.code == term.code), None)
+            if existing_term:
+                vocabulary_term_update = VocabularyTermUpdate()
+                vocabulary_term_update.vocabularyTermId = existing_term.permId
+                vocabulary_term_update.setLabel(term.label)
+                vocabulary_term_update.setDescription(term.description)
+                vocabulary_term_updates.append(vocabulary_term_update)
+        return vocabulary_term_updates
+
+    def get_type(self):
+        return VocabularyTermCreationToUpdateParser.type
+
+
+class PropertyTypeCreationToUpdateParser(object):
+    type = "PropertyTypeUpdate"
+
+    def parse(self, creation, existing_property_type):
+        property_type_update = PropertyTypeUpdate()
+        property_type_update.typeId = existing_property_type.permId
+        property_type_update.setLabel(creation.label)
+        property_type_update.setDescription(creation.description)
+        return property_type_update
+
+    def get_type(self):
+        return PropertyTypeCreationToUpdateParser.type
+
+
+class EntityTypeCreationToUpdateParser(object):
+
+    def parseAssignments(self, creation, existing_entity_type):
+        assignments_update = ListUpdateValue()
+        for property_assignment in existing_entity_type.propertyAssignments:
+            assignments_update.remove(property_assignment.permId)
+        for property_assignment in creation.propertyAssignments:
+            assignments_update.add(property_assignment)
+        return assignments_update.getActions()
+
+
+class SampleTypeCreationToUpdateParser(EntityTypeCreationToUpdateParser):
+    type = "SampleTypeUpdate"
+
+    def parse(self, creation, existing_sample_type):
+        sample_type_update = SampleTypeUpdate()
+        sample_type_update.typeId = existing_sample_type.permId
+        sample_type_update.setAutoGeneratedCode(creation.autoGeneratedCode)
+        sample_type_update.setGeneratedCodePrefix(creation.generatedCodePrefix)
+        sample_type_update.setDescription(creation.description)
+        sample_type_update.setValidationPluginId(creation.validationPluginId)
+        sample_type_update.setPropertyAssignmentActions(self.parseAssignments(creation, existing_sample_type))
+
+        return sample_type_update
+
+    def get_type(self):
+        return SampleTypeCreationToUpdateParser.type
+
+
+class ExperimentTypeCreationToUpdateParser(EntityTypeCreationToUpdateParser):
+    type = "ExperimentTypeUpdate"
+
+    def parse(self, creation, existing_experiment_type):
+        experiment_type_update = ExperimentTypeUpdate()
+        experiment_type_update.typeId = existing_experiment_type.permId
+        experiment_type_update.setDescription(creation.description)
+        experiment_type_update.setValidationPluginId(creation.validationPluginId)
+        assignments_update = ListUpdateValue()
+        experiment_type_update.setPropertyAssignmentActions(self.parseAssignments(creation, existing_experiment_type))
+        return experiment_type_update
+
+    def get_type(self):
+        return ExperimentTypeCreationToUpdateParser.type
+
+
+class DatasetTypeCreationToUpdateParser(EntityTypeCreationToUpdateParser):
+    type = "DatasetTypeUpdate"
+
+    def parse(self, creation, existing_dataset_type):
+        dataset_type_update = DataSetTypeUpdate()
+        dataset_type_update.typeId = existing_dataset_type.permId
+        dataset_type_update.setValidationPluginId(creation.validationPluginId)
+        assignments_update = ListUpdateValue()
+        dataset_type_update.setPropertyAssignmentActions(self.parseAssignments(creation, existing_dataset_type))
+        return dataset_type_update
+
+    def get_type(self):
+        return DatasetTypeCreationToUpdateParser.type
+
+
+class SpaceCreationToUpdateParser(object):
+    type = "SpaceUpdate"
+
+    def parse(self, creation, existing_space):
+        space_update = SpaceUpdate()
+        space_update.spaceId = existing_space.permId
+        space_update.setDescription(creation.description)
+        return space_update
+
+    def get_type(self):
+        return SpaceCreationToUpdateParser.type
+
+
+class ProjectCreationToUpdateParser(object):
+    type = "ProjectUpdate"
+
+    def parse(self, creation, existing_project):
+        project_update = ProjectUpdate()
+        project_update.projectId = existing_project.permId
+        project_update.setDescription(creation.description)
+        project_update.setSpaceId(creation.spaceId)
+        return project_update
+
+    def get_type(self):
+        return ProjectCreationToUpdateParser.type
+
+
+class ExperimentCreationToUpdateParser(object):
+    type = "ExperimentUpdate"
+
+    def parse(self, creation, existing_experiment):
+        experiment_update = ExperimentUpdate()
+        experiment_update.experimentId = existing_experiment.permId
+        experiment_update.setProjectId(creation.projectId)
+        experiment_update.setProperties(creation.properties)
+        return experiment_update
+
+    def get_type(self):
+        return ExperimentCreationToUpdateParser.type
+
+
+class SampleCreationToUpdateParser(object):
+    type = "SampleUpdate"
+
+    def parse(self, creation, existing_sample):
+        sample_update = SampleUpdate()
+        sample_update.sampleId = existing_sample.permId
+        sample_update.setExperimentId(creation.experimentId)
+        sample_update.setProjectId(creation.projectId)
+        sample_update.setSpaceId(creation.spaceId)
+        sample_update.setProperties(creation.properties)
+        sample_update.sampleId = creatiuon.parentIds
+        sample_update.sampleId = creatiuon.childIds
+        return sample_update
+
+    def get_type(self):
+        return SampleCreationToUpdateParser.type
+
+
+class ScriptCreationToUpdateParser(object):
+    type = "ScriptUpdate"
+
+    def parse(self, creation, existing_plugin):
+        script_update = PluginUpdate()
+        script_update.pluginId = existing_plugin.permId
+        script_update.setScript(creation.script)
+        return script_update
+
+    def get_type(self):
+        return ScriptCreationToUpdateParser.type
+
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/definition_to_creation/creation_parsers.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/definition_to_creation/creation_parsers.py
index 897f5c31fdc..50dfb21a8e7 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/definition_to_creation/creation_parsers.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/parsers/definition_to_creation/creation_parsers.py
@@ -16,9 +16,12 @@ from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.create import Vocabular
 from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.id import VocabularyPermId
 from java.lang import UnsupportedOperationException
 from utils.openbis_utils import is_internal_namespace, get_script_name_for
+from ch.systemsx.cisd.common.exceptions import UserFailureException
 
 
 def get_boolean_from_string(text):
+    if text.lower() not in [u'true', u'false']:
+        raise UserFailureException("Boolean field should either be 'true' or 'false' (case insensitive) but was " + text)
     return True if text and text.lower() == u'true' else False
 
 
@@ -49,14 +52,10 @@ class DefinitionToCreationParserFactory(object):
             return [PropertyTypeDefinitionToCreationParser()]
         else:
             raise UnsupportedOperationException(
-                "Definition of " + str(definition.type) + " is not supported (probably yet).")
+                "Definition of " + str(definition.type) + " is not supported.")
 
 
-class DefinitionToCreationParser(object):
-    pass
-
-
-class PropertyTypeDefinitionToCreationParser(DefinitionToCreationParser):
+class PropertyTypeDefinitionToCreationParser(object):
     type = "PropertyTypeCreation"
 
     def parse(self, definition):
@@ -78,7 +77,7 @@ class PropertyTypeDefinitionToCreationParser(DefinitionToCreationParser):
         return PropertyTypeDefinitionToCreationParser.type
 
 
-class VocabularyDefinitionToCreationParser(DefinitionToCreationParser):
+class VocabularyDefinitionToCreationParser(object):
     type = "VocabularyCreation"
 
     def parse(self, definition):
@@ -104,7 +103,7 @@ class VocabularyDefinitionToCreationParser(DefinitionToCreationParser):
         return VocabularyDefinitionToCreationParser.type
 
 
-class PropertyAssignmentDefinitionToCreationParser(DefinitionToCreationParser):
+class PropertyAssignmentDefinitionToCreationParser(object):
     type = "PropertyAssignmentCreation"
 
     def parse(self, prop):
@@ -126,7 +125,7 @@ class PropertyAssignmentDefinitionToCreationParser(DefinitionToCreationParser):
         return PropertyAssignmentDefinitionToCreationParser.type
 
 
-class SampleTypeDefinitionToCreationParser(DefinitionToCreationParser):
+class SampleTypeDefinitionToCreationParser(object):
     type = "SampleTypeCreation"
 
     def parse(self, definition):
@@ -135,6 +134,7 @@ class SampleTypeDefinitionToCreationParser(DefinitionToCreationParser):
         sample_creation.code = code
         should_auto_generate_codes = get_boolean_from_string(definition.attributes.get(u'auto generate codes'))
         sample_creation.autoGeneratedCode = should_auto_generate_codes
+        sample_creation.description = definition.attributes.get(u'description')
         generatedCodePrefix = definition.attributes.get(u'generated code prefix')
         if generatedCodePrefix is not None:
             sample_creation.generatedCodePrefix = generatedCodePrefix
@@ -155,13 +155,14 @@ class SampleTypeDefinitionToCreationParser(DefinitionToCreationParser):
         return SampleTypeDefinitionToCreationParser.type
 
 
-class ExperimentTypeDefinitionToCreationParser(DefinitionToCreationParser):
+class ExperimentTypeDefinitionToCreationParser(object):
     type = "ExperimentTypeCreation"
 
     def parse(self, definition):
         code = definition.attributes.get(u'code')
         experiment_type_creation = ExperimentTypeCreation()
         experiment_type_creation.code = code
+        experiment_type_creation.description = definition.attributes.get(u'description')
         if u'validation script' in definition.attributes and definition.attributes.get(u'validation script') is not None:
             validation_script_path = definition.attributes.get(u'validation script')
             experiment_type_creation.validationPluginId = PluginPermId(get_script_name_for(code, validation_script_path))
@@ -179,13 +180,14 @@ class ExperimentTypeDefinitionToCreationParser(DefinitionToCreationParser):
         return ExperimentTypeDefinitionToCreationParser.type
 
 
-class DatasetTypeDefinitionToCreationParser(DefinitionToCreationParser):
+class DatasetTypeDefinitionToCreationParser(object):
     type = "DatasetTypeCreation"
 
     def parse(self, definition):
         dataset_type_creation = DataSetTypeCreation()
         code = definition.attributes.get(u'code')
         dataset_type_creation.code = code
+        dataset_type_creation.description = definition.attributes.get(u'description')
         if u'validation script' in definition.attributes and definition.attributes.get(u'validation script') is not None:
             validation_script_path = definition.attributes.get(u'validation script')
             dataset_type_creation.validationPluginId = PluginPermId(get_script_name_for(code, validation_script_path))
@@ -203,7 +205,7 @@ class DatasetTypeDefinitionToCreationParser(DefinitionToCreationParser):
         return DatasetTypeDefinitionToCreationParser.type
 
 
-class SpaceDefinitionToCreationParser(DefinitionToCreationParser):
+class SpaceDefinitionToCreationParser(object):
     type = "SpaceCreation"
 
     def parse(self, definition):
@@ -221,7 +223,7 @@ class SpaceDefinitionToCreationParser(DefinitionToCreationParser):
         return SpaceDefinitionToCreationParser.type
 
 
-class ProjectDefinitionToCreationParser(DefinitionToCreationParser):
+class ProjectDefinitionToCreationParser(object):
     type = "ProjectCreation"
 
     def parse(self, definition):
@@ -240,12 +242,12 @@ class ProjectDefinitionToCreationParser(DefinitionToCreationParser):
         return ProjectDefinitionToCreationParser.type
 
 
-class ExperimentDefinitionToCreationParser(DefinitionToCreationParser):
+class ExperimentDefinitionToCreationParser(object):
     type = "ExperimentCreation"
 
     def parse(self, definition):
         experiments = []
-        mandatory_attributes = [u'code', u'project']
+        project_attributes = [u'code', u'project']
         for experiment_properties in definition.properties:
             experiment_creation = ExperimentCreation()
             experiment_creation.typeId = EntityTypePermId(definition.attributes.get(u'experiment type'))
@@ -254,7 +256,7 @@ class ExperimentDefinitionToCreationParser(DefinitionToCreationParser):
             creation_id = experiment_properties.get(u'code')
             experiment_creation.creationId = CreationId(creation_id)
             for prop, value in experiment_properties.items():
-                if prop not in mandatory_attributes:
+                if prop not in project_attributes:
                     experiment_creation.setProperty(prop, value)
             experiments.append(experiment_creation)
         return experiments
@@ -263,12 +265,12 @@ class ExperimentDefinitionToCreationParser(DefinitionToCreationParser):
         return ExperimentDefinitionToCreationParser.type
 
 
-class SampleDefinitionToCreationParser(DefinitionToCreationParser):
+class SampleDefinitionToCreationParser(object):
     type = "SampleCreation"
 
     def parse(self, definition):
         samples = []
-        mandatory_attributes = [u'$', u'code', u'space', u'project', u'experiment', u'auto generate code', u'parents',
+        sample_attributes = [u'$', u'code', u'space', u'project', u'experiment', u'auto generate code', u'parents',
                                 u'children']
         for sample_properties in definition.properties:
             sample_creation = SampleCreation()
@@ -303,7 +305,7 @@ class SampleDefinitionToCreationParser(DefinitionToCreationParser):
                 sample_creation.childIds = child_creationids
 
             for prop, value in sample_properties.items():
-                if prop not in mandatory_attributes:
+                if prop not in sample_attributes:
                     sample_creation.setProperty(prop, value)
             samples.append(sample_creation)
         return samples
@@ -312,7 +314,7 @@ class SampleDefinitionToCreationParser(DefinitionToCreationParser):
         return SampleDefinitionToCreationParser.type
 
 
-class ScriptDefinitionToCreationParser(DefinitionToCreationParser):
+class ScriptDefinitionToCreationParser(object):
     type = "ScriptCreation"
 
     def __init__(self, context=None):
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/openbis_duplicates_handler.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/openbis_duplicates_handler.py
index 4b04c23a42c..1674b636e0e 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/openbis_duplicates_handler.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/openbis_duplicates_handler.py
@@ -1,26 +1,31 @@
 from parsers import SpaceDefinitionToCreationParser, ProjectDefinitionToCreationParser, \
-    ExperimentDefinitionToCreationParser, ScriptDefinitionToCreationParser, SampleDefinitionToCreationParser
+    ExperimentDefinitionToCreationParser, ScriptDefinitionToCreationParser, SampleDefinitionToCreationParser, CreationToUpdateParser
 
 from utils.openbis_utils import create_sample_identifier_string
 
+FAIL_IF_EXISTS = "FAIL_IF_EXISTS"
+IGNORE_EXISTING = "IGNORE_EXISTING"
+UPDATE_IF_EXISTS = "UPDATE_IF_EXISTS"
+
 
 class OpenbisDuplicatesHandler(object):
 
-    def __init__(self, creations, existing_elements):
+    def __init__(self, creations, existing_elements, duplicates_strategy=FAIL_IF_EXISTS):
         self.creations = creations
         self.existing_elements = existing_elements
+        self.duplicates_strategy = duplicates_strategy
 
     def rewrite_parentchild_creationid_to_permid(self):
         if ProjectDefinitionToCreationParser.type in self.creations:
             for creation in self.creations[ProjectDefinitionToCreationParser.type]:
                 for existing_element in self.existing_elements[SpaceDefinitionToCreationParser.type]:
-                    if existing_element.code == creation.spaceId.creationId:
+                    if existing_element.code == str(creation.spaceId):
                         creation.spaceId = existing_element.permId
                         break
         if ExperimentDefinitionToCreationParser.type in self.creations:
             for creation in self.creations[ExperimentDefinitionToCreationParser.type]:
                 for existing_element in self.existing_elements[ProjectDefinitionToCreationParser.type]:
-                    if existing_element.code == creation.projectId.creationId:
+                    if existing_element.code == str(creation.projectId):
                         creation.projectId = existing_element.permId
                         break
         if SampleDefinitionToCreationParser.type in self.creations:
@@ -79,20 +84,64 @@ class OpenbisDuplicatesHandler(object):
 
         return self.creations
 
-    def remove_existing_elements_from_creations(self):
-        for creations_type, existing_elements in self.existing_elements.items():
-            if not creations_type in self.creations:
-                continue
-            if creations_type == SampleDefinitionToCreationParser.type:
-                existing_object_codes = [obj.identifier.identifier for obj in existing_elements]
-                self.creations[creations_type] = list(filter(
-                    lambda creation: creation.code is None or create_sample_identifier_string(
-                        creation) not in existing_object_codes, self.creations[creations_type]))
-            else:
-                distinct_property_name = self._get_distinct_property_name(creations_type)
-                self.creations[creations_type] = self._filter_creations_from_existing_objects(creations_type,
-                                                                                              existing_elements,
-                                                                                              distinct_property_name)
+    def handle_existing_elements_in_creations(self):
+
+        if self.duplicates_strategy == UPDATE_IF_EXISTS:
+            duplicates_list = {}
+            for creations_type, existing_elements in self.existing_elements.items():
+                if not creations_type in self.creations:
+                    continue
+                if creations_type == SampleDefinitionToCreationParser.type:
+                    existing_object_codes = [obj.identifier.identifier for obj in existing_elements]
+                    duplicates_list[creations_type] = list(filter(
+                        lambda creation: creation.code is not None or create_sample_identifier_string(
+                            creation) in existing_object_codes, self.creations[creations_type]))
+                    self.creations[creations_type] = list(filter(
+                        lambda creation: creation.code is None or create_sample_identifier_string(
+                            creation) not in existing_object_codes, self.creations[creations_type]))
+                else:
+                    distinct_property_name = self._get_distinct_property_name(creations_type)
+                    duplicates_list[creations_type] = self.get_creations_for_existing_objects(creations_type, existing_elements, distinct_property_name)
+                    self.creations[creations_type] = self._filter_creations_from_existing_objects(creations_type,
+                                                                                                  existing_elements,
+                                                                                                  distinct_property_name)
+
+                updates = CreationToUpdateParser.parse(duplicates_list, self.existing_elements)
+                for update_type, update in updates.items():
+                    self.creations[update_type] = update
+
+        if self.duplicates_strategy == FAIL_IF_EXISTS:
+            duplicates_list = {}
+            for creations_type, existing_elements in self.existing_elements.items():
+                if not creations_type in self.creations:
+                    continue
+                if creations_type == SampleDefinitionToCreationParser.type:
+                    existing_object_codes = [obj.identifier.identifier for obj in existing_elements]
+                    duplicates = list(filter(lambda creation: creation.code is not None and create_sample_identifier_string(creation) in existing_object_codes, self.creations[creations_type]))
+                    if duplicates:
+                        duplicates_list[creations_type] = duplicates
+                else:
+                    distinct_property_name = self._get_distinct_property_name(creations_type)
+                    duplicates = self.get_creations_for_existing_objects(creations_type, existing_elements, distinct_property_name)
+                    if duplicates:
+                        duplicates_list[creations_type] = duplicates
+            if duplicates_list:
+                raise Exception("Some of the objects you are trying to create already exist on the server. An error is being thrown when FAIL_IF_EXISTS flag is on. Existing elements are: " + str(duplicates_list))
+
+        if self.duplicates_strategy == IGNORE_EXISTING:
+            for creations_type, existing_elements in self.existing_elements.items():
+                if not creations_type in self.creations:
+                    continue
+                if creations_type == SampleDefinitionToCreationParser.type:
+                    existing_object_codes = [obj.identifier.identifier for obj in existing_elements]
+                    self.creations[creations_type] = list(filter(
+                        lambda creation: creation.code is None or create_sample_identifier_string(
+                            creation) not in existing_object_codes, self.creations[creations_type]))
+                else:
+                    distinct_property_name = self._get_distinct_property_name(creations_type)
+                    self.creations[creations_type] = self._filter_creations_from_existing_objects(creations_type,
+                                                                                                  existing_elements,
+                                                                                                  distinct_property_name)
         return self.creations
 
     def _get_distinct_property_name(self, creation_type):
@@ -105,3 +154,8 @@ class OpenbisDuplicatesHandler(object):
         existing_object_codes = [getattr(obj, attr) for obj in existing_objects]
         return list(filter(lambda creation: getattr(creation, attr) not in existing_object_codes,
                            self.creations[creations_type]))
+
+    def get_creations_for_existing_objects(self, creations_type, existing_objects, attr):
+        existing_object_codes = [getattr(obj, attr) for obj in existing_objects]
+        return list(filter(lambda creation: getattr(creation, attr) in existing_object_codes,
+                           self.creations[creations_type]))
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/representation_unifier.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/representation_unifier.py
index c11a1fa124b..212990fe3ac 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/representation_unifier.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/processors/representation_unifier.py
@@ -34,7 +34,7 @@ def _extract_creations_with_properties(creations_map):
     return dict((key, value) for (key, value) in creations_map.iteritems() if key in property_types_with_properties)
 
 
-def getValue(dictionary, key):
+def get_value(dictionary, key):
     if not key in dictionary:
         dictionary[key] = {}
     return dictionary[key]
@@ -45,7 +45,7 @@ def _fill_properties_from_existing_entity_types(properties, entity_types_map):
         for entity_type in entity_types:
             entity_kind = entity_and_type_uniform_mapping[creation_type]
             new_key = entity_kind, entity_type.code
-            props = getValue(properties, new_key)
+            props = get_value(properties, new_key)
             for property_assignment in entity_type.propertyAssignments:
                 property_type = property_assignment.propertyType
                 props[property_type.label.lower()] = property_type
@@ -90,7 +90,7 @@ def _fill_properties_from_creations(properties, creations, existing_vocabularies
         for creation in creationsList:
             entity_kind = entity_and_type_uniform_mapping[creations_type]
             new_key = entity_kind, creation.code
-            props = getValue(properties, new_key)
+            props = get_value(properties, new_key)
             if creations_type == PropertyTypeDefinitionToCreationParser.type:
                 props[creation.label.lower()] = creation
                 props[creation.code.lower()] = creation
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_criteria_factory.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_criteria_factory.py
index 5a9a7693376..dbe9c3ff628 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_criteria_factory.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_criteria_factory.py
@@ -66,17 +66,17 @@ class SampleCreationSampleSearchCriteria(object):
             if creation.code is not None:
                 search_criteria.withCode().thatEquals(creation.code)
                 if creation.experimentId is not None:
-                    search_criteria.withExperiment().withCode().thatEquals(creation.experimentId.creationId)
+                    search_criteria.withExperiment().withCode().thatEquals(str(creation.experimentId))
                 else:
                     search_criteria.withoutExperiment()
 
                 if creation.projectId is not None:
-                    search_criteria.withProject().withCode().thatEquals(creation.projectId.creationId)
+                    search_criteria.withProject().withCode().thatEquals(str(creation.projectId))
                 else:
                     search_criteria.withoutProject()
 
                 if creation.spaceId is not None:
-                    search_criteria.withSpace().withCode().thatEquals(creation.spaceId.creationId)
+                    search_criteria.withSpace().withCode().thatEquals(str(creation.spaceId))
                 else:
                     search_criteria.withoutSpace()
                 search_criterias.append(search_criteria)
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_engine.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_engine.py
index 89c180acf4e..f578bdc50ac 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_engine.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/search_engines/search_engine.py
@@ -100,13 +100,21 @@ class SearchEngine():
     def find_all_existing_elements(self, creations):
         property_type_fetch_options = PropertyTypeFetchOptions()
         property_type_fetch_options.withVocabulary().withTerms()
+        vocabulary_fetch_options = VocabularyFetchOptions()
+        vocabulary_fetch_options.withTerms()
+        sample_type_fetch_options = SampleTypeFetchOptions()
+        sample_type_fetch_options.withPropertyAssignments().withPropertyType()
+        experiment_type_fetch_options = ExperimentTypeFetchOptions()
+        experiment_type_fetch_options.withPropertyAssignments().withPropertyType()
+        dataset_type_fetch_options = DataSetTypeFetchOptions()
+        dataset_type_fetch_options.withPropertyAssignments().withPropertyType()
         search_strategy = [
             {
             'creations_type': VocabularyDefinitionToCreationParser.type,
             'search_criteria_build_strategy' : DefaultCreationElementSearchCriteria,
             'search_criteria_class' : VocabularySearchCriteria,
             'search_operation':SearchVocabulariesOperation,
-            'fetch_options':VocabularyFetchOptions()
+            'fetch_options':vocabulary_fetch_options
             },
             {
             'creations_type': SampleDefinitionToCreationParser.type,
@@ -127,21 +135,21 @@ class SearchEngine():
             'search_criteria_build_strategy' : DefaultCreationElementSearchCriteria,
             'search_criteria_class' : SampleTypeSearchCriteria,
             'search_operation': SearchSampleTypesOperation,
-            'fetch_options': SampleTypeFetchOptions()
+            'fetch_options': sample_type_fetch_options
             },
             {
             'creations_type': ExperimentTypeDefinitionToCreationParser.type,
             'search_criteria_build_strategy' : DefaultCreationElementSearchCriteria,
             'search_criteria_class' : ExperimentTypeSearchCriteria,
             'search_operation': SearchExperimentTypesOperation,
-            'fetch_options': ExperimentTypeFetchOptions()
+            'fetch_options': experiment_type_fetch_options
             },
             {
             'creations_type': DatasetTypeDefinitionToCreationParser.type,
             'search_criteria_build_strategy' : DefaultCreationElementSearchCriteria,
             'search_criteria_class' : DataSetTypeSearchCriteria,
             'search_operation': SearchDataSetTypesOperation,
-            'fetch_options': DataSetTypeFetchOptions()
+            'fetch_options': dataset_type_fetch_options
             },
             {
             'creations_type': SpaceDefinitionToCreationParser.type,
diff --git a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/utils/openbis_utils.py b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/utils/openbis_utils.py
index 32a0b334c8f..b6ea48327c7 100644
--- a/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/utils/openbis_utils.py
+++ b/openbis_standard_technologies/dist/core-plugins/xls-import/1/as/services/xls-import-api/utils/openbis_utils.py
@@ -11,8 +11,8 @@ def get_script_name_for(owner_code, script_path):
 
 
 def create_sample_identifier_string(sample_creation):
-    spaceId = sample_creation.spaceId.creationId if sample_creation.spaceId is not None else None
-    projectId = sample_creation.projectId.creationId if sample_creation.projectId is not None else None
+    spaceId = str(sample_creation.spaceId) if sample_creation.spaceId is not None else None
+    projectId = str(sample_creation.projectId) if sample_creation.projectId is not None else None
     code = sample_creation.code
     sample_identifier = SampleIdentifier(spaceId, projectId, None, code)
     return sample_identifier.identifier
diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java
index f5436657b69..cb757b07a82 100644
--- a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java
+++ b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportDatasetTypesTest.java
@@ -1,9 +1,13 @@
 package ch.ethz.sis.openbis.systemtest.plugin.excelimport;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import java.io.IOException;
 import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
 
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +20,8 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.DataType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.IApplicationServerInternalApi;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 
@@ -40,6 +46,8 @@ public class ImportDatasetTypesTest extends AbstractImportTest
 
     private static final String DATASET_WITHOUT_PROPERTIES = "dataset_types/no_properties.xls";
 
+    private static final String DATASET_TYPES_UPDATE = "dataset_types/normal_dataset_update.xls";
+
     private static String FILES_DIR;
 
     private String sessionToken;
@@ -49,8 +57,6 @@ public class ImportDatasetTypesTest extends AbstractImportTest
     {
         String f = ImportDatasetTypesTest.class.getName().replace(".", "/");
         FILES_DIR = f.substring(0, f.length() - ImportDatasetTypesTest.class.getSimpleName().length()) + "/test_files/";
-        System.out.println(FILES_DIR);
-        System.out.println("SEE ME MY DEAR FRIEND");
     }
 
     @BeforeMethod
@@ -61,20 +67,38 @@ public class ImportDatasetTypesTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testNormalDatasetsTypesAreCreated() throws IOException
+    public void testNormalDatasetTypesAreCreated() throws Exception
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, DATASET_TYPES_XLS)));
         // WHEN
         DataSetType rawData = TestUtils.getDatasetType(v3api, sessionToken, "RAW_DATA");
+        List<String> propertyNames = Arrays.asList("$NAME", "NOTES");
+        List<PropertyAssignment> propertyAssignments = TestUtils.extractAndSortPropertyAssignmentsPerGivenPropertyName(rawData, propertyNames);
+        PropertyAssignment nameProperty = propertyAssignments.get(0);
+        PropertyAssignment notesProperty = propertyAssignments.get(1);
         // THEN
         assertEquals(rawData.getCode(), "RAW_DATA");
         assertEquals(rawData.getPropertyAssignments().size(), 2);
+        assertFalse(nameProperty.isMandatory());
+        assertTrue(nameProperty.isShowInEditView());
+        assertEquals(nameProperty.getSection(), "General information");
+        assertEquals(nameProperty.getPropertyType().getLabel(), "Name");
+        assertEquals(nameProperty.getPropertyType().getDataType(), DataType.VARCHAR);
+        assertEquals(nameProperty.getPropertyType().getDescription(), "Name");
+        assertEquals(nameProperty.getPlugin(), null);
+        assertFalse(notesProperty.isMandatory());
+        assertTrue(notesProperty.isShowInEditView());
+        assertEquals(notesProperty.getSection(), "Comments");
+        assertEquals(notesProperty.getPropertyType().getLabel(), "Notes");
+        assertEquals(notesProperty.getPropertyType().getDataType(), DataType.MULTILINE_VARCHAR);
+        assertEquals(notesProperty.getPropertyType().getDescription(), "Notes");
+        assertEquals(notesProperty.getPlugin(), null);
     }
 
     @Test
     @DirtiesContext
-    public void testDatasetsWithoutPropertiesTypesAreCreated() throws IOException
+    public void testDatasetTypesWithoutPropertiesTypesAreCreated() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, DATASET_WITHOUT_PROPERTIES)));
@@ -87,15 +111,46 @@ public class ImportDatasetTypesTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testSampleTypesWithValidationScript() throws IOException
+    public void testDatasetTypesWithValidationScript() throws Exception
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, TestUtils.getValidationPluginMap(),
                 Paths.get(FilenameUtils.concat(FILES_DIR, DATASET_WITH_VALIDATION_SCRIPT)));
         // WHEN
-        DataSetType collection = TestUtils.getDatasetType(v3api, sessionToken, "RAW_DATA");
+        DataSetType rawData = TestUtils.getDatasetType(v3api, sessionToken, "RAW_DATA");
+        // THEN
+        assertEquals(rawData.getValidationPlugin().getName().toUpperCase(), "RAW_DATA.VALID");
+    }
+
+    @Test
+    @DirtiesContext
+    public void testDatasetTypesUpdate() throws Exception
+    {
+        // GIVEN
+        TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, DATASET_TYPES_XLS)));
+        // WHEN
+        TestUtils.createFrom(v3api, sessionToken, TestUtils.getDynamicPluginMap(), UpdateMode.UPDATE_IF_EXISTS,
+                Paths.get(FilenameUtils.concat(FILES_DIR, DATASET_TYPES_UPDATE)));
+        DataSetType rawData = TestUtils.getDatasetType(v3api, sessionToken, "RAW_DATA");
+        List<String> propertyNames = Arrays.asList("$NAME", "NOTES");
+        List<PropertyAssignment> propertyAssignments = TestUtils.extractAndSortPropertyAssignmentsPerGivenPropertyName(rawData, propertyNames);
+        PropertyAssignment nameProperty = propertyAssignments.get(0);
+        PropertyAssignment notesProperty = propertyAssignments.get(1);
         // THEN
-        assertEquals(collection.getValidationPlugin().getName().toUpperCase(), "RAW_DATA.VALID");
+        assertTrue(nameProperty.isMandatory());
+        assertFalse(nameProperty.isShowInEditView());
+        assertEquals(nameProperty.getSection(), "Comments");
+        assertEquals(nameProperty.getPropertyType().getLabel(), "NameUpdate");
+        assertEquals(nameProperty.getPropertyType().getDataType(), DataType.VARCHAR);
+        assertEquals(nameProperty.getPropertyType().getDescription(), "NameDescriptionUpdate");
+        assertEquals(nameProperty.getPlugin().getName().toUpperCase(), "$NAME.DYNAMIC");
+        assertFalse(notesProperty.isMandatory());
+        assertTrue(notesProperty.isShowInEditView());
+        assertEquals(notesProperty.getSection(), "Comments");
+        assertEquals(notesProperty.getPropertyType().getLabel(), "Notes");
+        assertEquals(notesProperty.getPropertyType().getDataType(), DataType.MULTILINE_VARCHAR);
+        assertEquals(notesProperty.getPropertyType().getDescription(), "Notes");
+        assertEquals(notesProperty.getPlugin(), null);
     }
 
     @Test(expectedExceptions = UserFailureException.class)
diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java
index 99010317951..72694de3994 100644
--- a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java
+++ b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentTypesTest.java
@@ -1,9 +1,13 @@
 package ch.ethz.sis.openbis.systemtest.plugin.excelimport;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import java.io.IOException;
 import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
 
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +20,8 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.ExperimentType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.DataType;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.IApplicationServerInternalApi;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 
@@ -33,6 +39,8 @@ public class ImportExperimentTypesTest extends AbstractImportTest
 
     private static final String EXPERIMENT_TYPES_XLS = "experiment_types/normal_experiment.xls";
 
+    private static final String EXPERIMENT_TYPES_UPDATE = "experiment_types/normal_experiment_update.xls";
+
     private static final String EXPERIMENT_NO_CODE = "experiment_types/no_code.xls";
 
     private static final String EXPERIMENT_WITH_VALIDATION_SCRIPT = "experiment_types/with_validation_script.xls";
@@ -56,14 +64,66 @@ public class ImportExperimentTypesTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testNormalExperimentTypesAreCreated() throws IOException
+    public void testNormalExperimentTypesAreCreated() throws Exception
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPES_XLS)));
         // WHEN
         ExperimentType collection = TestUtils.getExperimentType(v3api, sessionToken, "COLLECTION");
+        List<String> propertyNames = Arrays.asList("$NAME", "DEFAULT_OBJECT_TYPE");
+        List<PropertyAssignment> propertyAssignments = TestUtils.extractAndSortPropertyAssignmentsPerGivenPropertyName(collection, propertyNames);
+        PropertyAssignment nameProperty = propertyAssignments.get(0);
+        PropertyAssignment defaultObjectTypeProperty = propertyAssignments.get(1);
         // THEN
         assertEquals(collection.getCode(), "COLLECTION");
+        assertEquals(collection.getPropertyAssignments().size(), 2);
+        assertFalse(nameProperty.isMandatory());
+        assertTrue(nameProperty.isShowInEditView());
+        assertEquals(nameProperty.getSection(), "General information");
+        assertEquals(nameProperty.getPropertyType().getLabel(), "Name");
+        assertEquals(nameProperty.getPropertyType().getDataType(), DataType.VARCHAR);
+        assertEquals(nameProperty.getPropertyType().getDescription(), "Name");
+        assertEquals(nameProperty.getPlugin(), null);
+        assertFalse(defaultObjectTypeProperty.isMandatory());
+        assertTrue(defaultObjectTypeProperty.isShowInEditView());
+        assertEquals(defaultObjectTypeProperty.getSection(), "General information");
+        assertEquals(defaultObjectTypeProperty.getPropertyType().getLabel(), "Default");
+        assertEquals(defaultObjectTypeProperty.getPropertyType().getDataType(), DataType.VARCHAR);
+        assertEquals(defaultObjectTypeProperty.getPropertyType().getDescription(),
+                "Enter the code of the object type for which the collection is used");
+        assertEquals(defaultObjectTypeProperty.getPlugin(), null);
+    }
+
+    @Test
+    @DirtiesContext
+    public void testExperimentTypesUpdate() throws Exception
+    {
+        // GIVEN
+        TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPES_XLS)));
+        // WHEN
+        TestUtils.createFrom(v3api, sessionToken, TestUtils.getDynamicPluginMap(), UpdateMode.UPDATE_IF_EXISTS,
+                Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPES_UPDATE)));
+        ExperimentType collection = TestUtils.getExperimentType(v3api, sessionToken, "COLLECTION");
+        List<String> propertyNames = Arrays.asList("$NAME", "DEFAULT_OBJECT_TYPE");
+        List<PropertyAssignment> propertyAssignments = TestUtils.extractAndSortPropertyAssignmentsPerGivenPropertyName(collection, propertyNames);
+        PropertyAssignment nameProperty = propertyAssignments.get(0);
+        PropertyAssignment defaultObjectTypeProperty = propertyAssignments.get(1);
+        // THEN
+        assertTrue(nameProperty.isMandatory());
+        assertFalse(nameProperty.isShowInEditView());
+        assertEquals(nameProperty.getSection(), "Comments");
+        assertEquals(nameProperty.getPropertyType().getLabel(), "NameUpdate");
+        assertEquals(nameProperty.getPropertyType().getDataType(), DataType.VARCHAR);
+        assertEquals(nameProperty.getPropertyType().getDescription(), "NameUpdateDescription");
+        assertEquals(nameProperty.getPlugin().getName().toUpperCase(), "$NAME.DYNAMIC");
+        assertFalse(defaultObjectTypeProperty.isMandatory());
+        assertTrue(defaultObjectTypeProperty.isShowInEditView());
+        assertEquals(defaultObjectTypeProperty.getSection(), "General information");
+        assertEquals(defaultObjectTypeProperty.getPropertyType().getLabel(), "Default");
+        assertEquals(defaultObjectTypeProperty.getPropertyType().getDataType(), DataType.VARCHAR);
+        assertEquals(defaultObjectTypeProperty.getPropertyType().getDescription(),
+                "Enter the code of the object type for which the collection is used");
+        assertEquals(defaultObjectTypeProperty.getPlugin(), null);
     }
 
     @Test
diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentsTest.java b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentsTest.java
index cbf5a4114bb..55f21af7fac 100644
--- a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentsTest.java
+++ b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/ImportExperimentsTest.java
@@ -63,6 +63,8 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     private static final String EXPERIMENT_TYPE = "experiments/experiment_type.xls";
 
+    private static final String EXPERIMENT_UPDATE = "experiments/update.xls";
+
     private static String FILES_DIR;
 
     private String sessionToken;
@@ -82,7 +84,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreated() throws IOException
+    public void testExperimentsAreCreated() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_XLS)));
@@ -97,7 +99,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedSecondExperiment() throws IOException
+    public void testExperimentsAreCreatedSecondExperiment() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_XLS)));
@@ -112,7 +114,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithEverythingOnServer() throws IOException
+    public void testExperimentsAreCreatedWithEverythingOnServer() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPE)));
@@ -130,7 +132,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithEverythingOnServerAndInXls() throws IOException
+    public void testExperimentsAreCreatedWithEverythingOnServerAndInXls() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPE)));
@@ -164,7 +166,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithTypeOnServer() throws IOException
+    public void testExperimentsAreCreatedWithTypeOnServer() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPE)));
@@ -180,7 +182,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithTypeOnServerAndInXls() throws IOException
+    public void testExperimentsAreCreatedWithTypeOnServerAndInXls() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPE)));
@@ -204,7 +206,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWhenNonMandatoryPropertiesAreNotProvided() throws IOException
+    public void testExperimentsAreCreatedWhenNonMandatoryPropertiesAreNotProvided() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENTS_WITH_NON_MANDATORY_PROPERTY_MISSING)));
@@ -225,7 +227,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithSpaceAndProjectOnServer() throws IOException
+    public void testExperimentsAreCreatedWithSpaceAndProjectOnServer() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, SPACE)));
@@ -242,7 +244,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithSpaceOnServer() throws IOException
+    public void testExperimentsAreCreatedWithSpaceOnServer() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, SPACE)));
@@ -258,7 +260,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWithTypeAndSpaceOnServer() throws IOException
+    public void testExperimentsAreCreatedWithTypeAndSpaceOnServer() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPE)));
@@ -281,7 +283,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedIfMandatoryPropertyArePresent() throws IOException
+    public void testExperimentsAreCreatedIfMandatoryPropertyArePresent() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENTS_WITH_MANDATORY_PROPERTY_PRESENT)));
@@ -296,7 +298,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWhenPropertiesAreAddressedByLabelsWithTypeInXls() throws IOException
+    public void testExperimentsAreCreatedWhenPropertiesAreAddressedByLabelsWithTypeInXls() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENTS_PROPERTIES_COLUMNS_AS_LABELS)));
@@ -311,7 +313,7 @@ public class ImportExperimentsTest extends AbstractImportTest
 
     @Test
     @DirtiesContext
-    public void testProjectsAreCreatedWhenPropertiesAreAddressedByLabelsWithTypeOnServer() throws IOException
+    public void testExperimentsAreCreatedWhenPropertiesAreAddressedByLabelsWithTypeOnServer() throws IOException
     {
         // GIVEN
         TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_TYPE)));
@@ -326,4 +328,19 @@ public class ImportExperimentsTest extends AbstractImportTest
         assertEquals(experiment.getProperties().get("DEFAULT_OBJECT_TYPE"), "OBJECT_TYPE");
     }
 
+//    @Test
+//    @DirtiesContext
+//    public void testExperimentsUpdate() throws Exception
+//    {
+//        // GIVEN
+//        TestUtils.createFrom(v3api, sessionToken, Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_XLS)));
+//        // WHEN
+//        TestUtils.createFrom(v3api, sessionToken, TestUtils.getDynamicPluginMap(), UpdateMode.UPDATE_IF_EXISTS,
+//                Paths.get(FilenameUtils.concat(FILES_DIR, EXPERIMENT_UPDATE)));
+//        Experiment experiment = TestUtils.getExperiment(v3api, sessionToken, "TEST_EXPERIMENT", "TEST_PROJECT", "TEST_SPACE");
+//        // THEN
+//        assertEquals(experiment.getProperties().get("$NAME"), "NameUpdate");
+//        assertEquals(experiment.getProperties().get("DEFAULT_OBJECT_TYPE"), "DefaultObjectTypeUpdate");
+//    }
+
 }
diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/TestUtils.java b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/TestUtils.java
index cd10c5cf551..4d772ca22b9 100644
--- a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/TestUtils.java
+++ b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/TestUtils.java
@@ -5,6 +5,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Path;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -13,6 +14,7 @@ import java.util.stream.Collectors;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSetType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetTypeFetchOptions;
@@ -27,6 +29,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.search.ExperimentType
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.fetchoptions.ProjectFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search.ProjectSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyType;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.fetchoptions.PropertyAssignmentFetchOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.fetchoptions.PropertyTypeFetchOptions;
@@ -52,6 +55,7 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.IApplicationServerInternalApi
 
 public class TestUtils
 {
+    private static final String UPDATE_MODE = "update_mode";
 
     public static final String XLS_PARAM = "xls";
 
@@ -291,11 +295,18 @@ public class TestUtils
         }
         CustomASServiceExecutionOptions options = new CustomASServiceExecutionOptions();
         options.withParameter(XLS_PARAM, excels);
+        options.withParameter(UPDATE_MODE, UpdateMode.IGNORE_EXISTING.name());
         return (String) v3api.executeCustomASService(sessionToken, new CustomASServiceCode(XLS_IMPORT_API), options);
     }
 
     static String createFrom(IApplicationServerInternalApi v3api, String sessionToken, Map<String, String> scripts, Path... xls_paths)
             throws IOException
+    {
+        return TestUtils.createFrom(v3api, sessionToken, scripts, UpdateMode.IGNORE_EXISTING, xls_paths);
+    }
+
+    static String createFrom(IApplicationServerInternalApi v3api, String sessionToken, Map<String, String> scripts, UpdateMode updateMode,
+            Path... xls_paths) throws IOException
     {
         List<byte[]> excels = new ArrayList<>();
         for (Path xls_path : xls_paths)
@@ -306,6 +317,7 @@ public class TestUtils
         CustomASServiceExecutionOptions options = new CustomASServiceExecutionOptions();
         options.withParameter(XLS_PARAM, excels);
         options.withParameter(SCRIPTS_PARAM, scripts);
+        options.withParameter(UPDATE_MODE, updateMode.name());
         return (String) v3api.executeCustomASService(sessionToken, new CustomASServiceCode(XLS_IMPORT_API), options);
     }
 
@@ -345,6 +357,24 @@ public class TestUtils
         return permId;
     }
 
+    static List<PropertyAssignment> extractAndSortPropertyAssignmentsPerGivenPropertyName(IEntityType rawData, List<String> propertyNames)
+            throws Exception
+    {
+        List<PropertyAssignment> propertyAssignments = rawData.getPropertyAssignments();
+        List<PropertyAssignment> sortedPropertyAssignments = propertyNames.stream().map(propertyName -> {
+            return propertyAssignments.stream().filter(prop -> prop.getPropertyType().getPermId().toString().equals(propertyName)).findFirst().get();
+        }).collect(Collectors.toList());
+
+        if (sortedPropertyAssignments.stream().anyMatch(property -> property == null))
+        {
+            throw new Exception("Some properties are missing"
+                    + "\nFollowing properties are expected " + Arrays.toString(propertyNames.toArray())
+                    + "\n Available properties are: " + Arrays.toString(propertyAssignments.toArray()));
+        }
+
+        return sortedPropertyAssignments;
+    }
+
     private static byte[] readData(Path xls_path) throws IOException
     {
         String path = xls_path.toString();
diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/UpdateMode.java b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/UpdateMode.java
new file mode 100644
index 00000000000..21a3953f253
--- /dev/null
+++ b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/UpdateMode.java
@@ -0,0 +1,8 @@
+package ch.ethz.sis.openbis.systemtest.plugin.excelimport;
+
+public enum UpdateMode
+{
+    IGNORE_EXISTING,
+    FAIL_IF_EXISTS,
+    UPDATE_IF_EXISTS
+}
diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/normal_dataset.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/normal_dataset.xls
index d72039c8ae394e9954c07af64559e7d34a812961..f8e3a5bbe47105e81cda8862e43ada1d25fc6e24 100644
GIT binary patch
delta 21
dcmZoTz|?SnX+sVRTfmjX#}ZdI7qRrs1^{C+2~hw5

delta 21
dcmZoTz|?SnX+sVR+k{zSAH7pI7qRrs1^{422;Kky

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/normal_dataset_update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/normal_dataset_update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..50a97ff6953cd07c43e40c726e438f5e7741d5b5
GIT binary patch
literal 40960
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
BHAw&f

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/with_validation.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/dataset_types/with_validation.xls
index cdee2cb18599a074ff8c34a4666c7a46027d080c..dc995c0ebc3b57dbc16e91b6a81eb3a8d0ef62bb 100644
GIT binary patch
delta 20
ccmZqJ!_=^cX+tgxtA*W>FPAqLvGmOZ09if=^Z)<=

delta 20
bcmZqJ!_=^cX+tgxYmLk#@6^pjEPXQpQSk@O

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiment_types/normal_experiment.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiment_types/normal_experiment.xls
index d3c3dda61bd16fa12d7ab9bbaf65cba6ba70caa2..166c329684354e9de6cd843ebb64be76e7d42dd3 100644
GIT binary patch
delta 170
zcmZoTz|?SnX+tgxD`zJw&y~$ZEW#{|e4E=ilo&Z1*75*_t}rrBF60ma3LfK>W8`~K
zoeCEGFuNK^PyWPJgeJ7Ph}(#1@>CX?%?Ef@(A97L#8-qNRwR(Z#PPrW4C4Yvn}E&t
Zgo@MnxEUB37=V}?2pJhS$5$>?0|31ZIz#{f

delta 175
zcmZoTz|?SnX+tgx>ukw7gVfDMEW#{|yqnuNlo&Y~F7?+Mq+VfUo?OTw0u(&PDaXjy
zu$lv??h4}tBViyt`4d+Wn$YGVZX+fZS63IO$%-rzn-B1+pljOviLVGltVke*iDL`b
h8O9&=6``B&2^FXD$uoceBZEAH0Rscq=J?8mY5;ieH)a3;

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiment_types/normal_experiment_update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiment_types/normal_experiment_update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..0003395592d9e7a8b9028261c5b751f941133ad9
GIT binary patch
literal 40960
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

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/all_elsewhere.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/all_elsewhere.xls
index fa502e8210ac48b660a275973dd373cabdbc351a..e77ea3d64d128a9d68fffd1b1c5bb263509a635a 100644
GIT binary patch
delta 21
ccmZo@U}|V!+K|J-rZ6v%<J0BMMJ#>Q08}mrIRF3v

delta 21
ccmZo@U}|V!+K|J-_QBRv?|RziB9^{t09HK+DgXcg

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/all_inside.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/all_inside.xls
index 48fe7da35a0f258b912a5449d61a69dab46ebc64..2cdc04fa337cb059283d37111cefeb6a58df0a4f 100644
GIT binary patch
delta 21
dcmZp;!PIbrX+sVR+lHBj=F(R-7qRp$2LNG>2-yGt

delta 21
ccmZp;!PIbrX+sVRo4`RSiHh{iMJ#>G0a|ki8vp<R

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/experiment_type.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/experiment_type.xls
index 79d7b595f514ef121fb09f982c5e9ec1f50efe05..7e0e081f622fd8364a6aac0f5ec97637867b69cc 100644
GIT binary patch
delta 21
dcmZoTz|?SnX+sVRn}Ya9JLxN%i&*+*0{~gQ2vPt5

delta 21
dcmZoTz|?SnX+sVR+k{n%n^vT4E@J7M4FF{H32FcU

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/experiments/update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..ee288657dcd346e5ca8fcabab7d1d5cf78ebf366
GIT binary patch
literal 32768
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
PCSY-c*Wbs_t%3goh9I}<

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/projects/update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/projects/update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..7a765adc13bca5255e056d87d5e6b3691c5f288b
GIT binary patch
literal 32768
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

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/projects/with_spaces.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/projects/with_spaces.xls
index 124040d0a40c49d88cec4de77dab2616c88e355f..013883b578b58cccd9ea0608cf0da8cd59a6afe7 100644
GIT binary patch
delta 21
ccmZo@VQOe$+K|J-w!wv6`_tvkMJ#=_09Eb?QUCw|

delta 21
ccmZo@VQOe$+K|J-77*vVZfV-)B9^{d093aK8vp<R

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/property_types/normal_property_type_update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/property_types/normal_property_type_update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..ab44836f66a09cca10ebc7673b198bc0c3aa3b9e
GIT binary patch
literal 40960
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

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/normal_samples.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/normal_samples.xls
index 26f1ce1b3d41182ad5ee0b16def5a35afd8ced4a..70dd4fda799214430d0e0db047b8883e1aa40e7c 100644
GIT binary patch
delta 21
dcmZoTz|?SnX+sVR+kpa}m!B?gE@J7M4FG373FiO+

delta 21
dcmZoTz|?SnX+sVRTf&1CMTV)Hi&*+*0{~%W2<-p>

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/normal_samples_update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/sample_types/normal_samples_update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..efcc3f96d5d86b5c61899ba67585348e7962f5d1
GIT binary patch
literal 40960
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

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/samples/all_in.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/samples/all_in.xls
index dd6d161dee473e898ceb5a6e6bf0c54127cb3cb9..dffff5e4c4410802f6916b91d1dc60bd69143c83 100644
GIT binary patch
delta 2039
zcmZux-D_KA7=O;m_eb;9WKB-8Ewf9v*=f|Mtb!O1###rXW7D;()~!iuB6Xcv1TUuP
zja9sv@S=hUQ!l)83db8kir|GHdNuz6nK!~f-58=!^!Gd`Ij5)CK$G9|`Fq~?`Mn!A
z^^KeQmuvpux9>f+c>B8Q`8T!it-t+W_=EJ**23-U*0spPTB6*o!uzv!@sAmfx)ts1
zGFiP?&$rulE79AXYV}g9dhFl9j~X4XKYNVGx{=Wz%FN9X{sMG*alUctO-j(`>aW=s
zL;HeX!@Oj*pSlw`I7W2-!g{~c?v>Zhue8_FME&-qe!11Y)a>=U7yI4y3)a~azsILO
zd75bQ4ACzOL<gQDYMvwdpha|}Lo|4q=+9S(Dt&8xsi&(u&zmPNYv@9xB`K_@D2AVL
zs(Wm4u^si;zz1=5?uJ&E+=OjYZ!cdRc%vuaiPC9Lg}m6j-3wy#<{JMKR}`C<Woc)w
z_1OzG?f4sd6vs+r5|!8L+n^92jgmAEn~ij!MF;tS&JIxs-wnD4|F<YlA@$F>;vfw4
z1RWekgi)(b_c}<2@34b>@Ku1eC_`cL1G%3FF|!D~ro${E%=q{NdKf;PeaPmxsN}{5
zLOKewOCsta5k*>^rVzp7MTtoqauAc?Kid}o;tR1+5a<~Pg@AMig@JrPF*`H@=vVKo
z6q8jLnQctiYU-<%$_$?y$Hgd!(>&s!Fg;G}<H>oUOlR^qXqfbf$~0^H_YC9Xl0EI9
zFlxc4E;kF>8TEd%b`skyea0m6ZU==BnQ{>4aW_p5(il!MDgAj--Tn#bpH}f!O`A~l
zR&i|KFeAYyua;W{Eu&s*Rc3?3x=HL&5?f(2NP4(JM)2*2k0)g&Zl{!V8dtxzYBRj*
zd`>CPIi)1KJj{m3cVwp}JFDi~wY@9~&Q5!>(~^BaecUc;IrUAuGR-pOxQsAn+1P03
z-SB=U=`IytEoupMc(ryaIgA_kOg1iY?BmI@_;x4D3b*@U<9)~ux7YsdL!73rtri9>
zQSP6Wx<?(v{U?FAZVumW-JI0DA2zO)+fg@%l|-D>%Ryfz>W&cK&Rz%ctkP?Mkem#`
zPF{&UQjjU}3)P?phV}`^&X?S9B%cSJh9mhrqHK{falTNOcma{TCU&2K)EjUkzByOE
z2EyDo#E^m``5GSi8uEr9Std46+Lf<?^K|8FKxeLe4Ge6{cbi`X10rDgp6C>OCRNo-
zoymcTbh~U()?_5%qFmER!bKEvCCpc8(&$+&$+Y}D@->xY+R<;hej#1L2rL%6S4n!!
z5W@LfN^m^sycZ?8CcKd9hfa0eqz~~hF6eoBkdE0O74KH9N4vk3w4ge)c_a})Pn<Ps
j;+L+LH|K)iy-GCwx>{fQ$eMd=JEW1Cy>jK#cc=aX_<JY}

delta 2052
zcmZuxU1%It6h3$MclKvyce6D+n>1~$8*Lhmx<-;hVY@c16;VSIwWw9vY@0$Vbc@A@
zm<@`H_|o8gQBee63tBo*@g=Xm_~3(7@JaB|f~8>V4}#x0vvVgCy8}D(opZkLoO|y%
zcm1Zde$%?Tl1$%99O!i}>29*GKKK7hew|FOU%9r{x#WLkKdGFJixcqvsBZ0<=BV4b
z?lzO(&36;qZMU87cB<bkow4#)7rs~3LvJt6kn(@6SkslpF~ToJ3nyNfJN`a7^q#(Z
z^lawu)ODCo_?@T!Ncn5e{azS<=NY2AFA{z8GTyHc&Avf&eu?PYWunFNMBiN?`sbql
zssEWj_390kNrPXYRsH8{&(F6M0FiPjYn3Q3p2?W4AhuPpt*e&A6}Q+zt`l(e$0xt&
zEyNUt;mJ{;5JuO;7SH6}Bd#vCc$Fjf;EryIYx&n-Z>ruVlBQs8lS_*J1>%Lz(Zl%P
zq#BT-*8d(`A~T3NOb_6nc^Qd(#2^d4hYU(UqXD!@6+|XO#h!fFv}WZf3wN7n_ezW9
zvXFCSuTxeQ$YLMp?8yl$FKKO9qay5B5jI#Y8b<^x+QdaXXb>0C0~$C}fP5lBXc}nI
zpbU^@P!=d*kPVas;w9wpZkr|Kpx34;*mwy!S%MmTC*Z+;pM*IFdRw-gQ}c1S*rK2i
zJ`R`m8I+|%;^So8hf%V;Bs(xjmJjwzzk8}Nd*6Va7p?sUWueSI*5dw+v<jm2lK$mX
za~|U&TT&4Agh3gwO9rtPYbYy?w++OqJOPnvQB=$N+0)IZxZ8QP#aK;6oUKb^1DzuL
zEz#kriF6#%spub0H+S)bu#OYcaYSbqk)B-g)Q~>1)HuquaHK2y%TpAft^14lhJQDF
zTs^NY%36}FRef!#Im`3L?2=>+Pp2g8Jp*<*#x4tchaT%Rck*O1yBuSeg?+z%vooR`
z{b8rEpPPx}DpIj)5LX<YVntZ4{u!)C^_@=hIL|n<hD3eRAYR#CAYNG&?`UOJsqHb?
zxJ|1;=M28NO-Zkw@uqhUl&Ue^s^n)MpZpHta(3>kIeJ`=ogMCl7sN2~%u#qj3?nwU
z61XBh$EczjBKe#G)tXV|Q;TNZLsZM?d7>B2x);rQ59N4r<A5z&<3T!_bq@=QX5GVh
zMYHZ<dC{zUXzXa#xe3}7URQM#6U};EN)9&kU>&u{u%nQAY}V^?vf-@PWBpJ^YRtMG
zUG@^_OFgr^_n?c2U<o6_oHZy-N6alTB4@()BHxzW4|2KdJIhl;hv_3+8!J|go}d|d
z96fVx%I}=}ZB&t-@9%SXys+^YDSRpYLH}6lleb{-Z}dOSs<ggv`Lf<9PkgyC{vX^t
B8u<VK

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/samples/update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/samples/update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..a67f52a107c781417c43a750d1c57b8308704e2c
GIT binary patch
literal 33280
zcmeHw349aP*7&4rS_-r*wQMDXvePC_N?S@x_d=nYrEId4G?})6G$~n1d4N<FWfOr4
zA|T2pi;BpO?4n||C_A!)EDs(iit-di`afruWHMQr6yJOQ@B7~HyUpA?_bm6EbI(2Z
z%);?+g08LlsP%P%cl0GZiKlgbgb$}(0Owe!Bak3G-~{VW>+0(0MuLFT{~rH?B=9Hj
z>c!~L8-7vWaZr4jHb40Fhtdd20F=g1nm}m^1x$blg3=61b0{sKw1g52<vA!JP+CE0
z4W$i~wouwZ35C)giU>*vC}Jobp@c!{1f?^SE>OBc=?0}clpaueLP1-LfL{p|DU?Vk
zGAME=QBZn8iG~sbB^F9=C<xOBe&eAeK<Nu55el~dUqA8*9sDzbF474t{OXB`AQ{(>
zV8Yux=g}94gy<Cr;t=(h$e@4dzkx*oLw`PXTHp!QDl{TEh5~gxF^(vr_!vhwy79Le
z;UPeZh!b_`3aAh|#bwex1w<-PE+fi`T;O4>E8tdrfWCSBuF^*YB!k797(|$Wei@;l
zWS<FID5hkBEk;5O=UOX@)|IX>ew?>Bhh3$Q@`^=e!GS+G4^V!HgY^N}hH`Q=|M7Z5
z=Rd-7=Rel%&3|nFtL8tT`tM;!0s_#!CpdV##GkvUqinTOuQTY1jiU5QC8-g~q*A$P
zs7^o5P)d?U=s+(A)WwKF*cK5>{L*{tc<NI9f1bjO^>4x$Bd0sIT$}m!!^gR$f$uF8
z5<R+XJCFWe2p4cI!s}z8pe>g|LHk8^(1xp^pdHVHg6r8*C}_)Tq2OBeDHL4G?m)ry
z>=!7wej!rC7YK_Fu2F~!kA|G%+GmknZgH_%Ns0y=NIioO*FwwnY=u&-HR=qdw3Ojm
z5)|Ul<i;J(e=flDD!)fVSl@}4*u#<ha2y_Ij-6Q%(I&9^4Uk{Y$D7lj&70TeO{9T`
zQBppLq*eg;{84NJ{2#^^H&KCbWD^FUpGNsQ1^7ZE<@;FgNcVB}w>2n@HEZ-$_Kq=c
zJ*H$g=A<{Z{&4$5!4h?uI0x&{5aK-X8Ic3);03S{8Sxcx^C|ErB~B8<p&W<U0iy@&
zL&l+x<Fa=+qn`;QCc*nR^zaA&kK;%C#$Q+PghQtY49wt2Lp?yj`GBW5m(X^~q2Lld
z84AXFv!GxM_c|1e?cRZc^Kb(cTnDy5!8x=W3dVnjpy1s40t({32&JKO3+FacL3(&N
z`V9p}a15x2^qhjsg5g8}G$C1>!U$&eTn5TxU~hUX>|E~(b!;651p&uELHZgfSjU2L
zDa^}EE6mEw8JLnhD4ptot*JV#k<=OsCYF<#DylE~l4J%BekewI!mqSa8VUcT@@RQ_
zdb&I%N-C50l13%>j!uzfNTta!(bA~&^t2R&adyNfR+ec*6{Oyv)@c*Okr7g{h}0@|
zDz&yGK|Hu1BRp0tG8h$Fl|rM_k_lq1PMp}cv46bE5T{ZY6?qVK=s?>f{9?30!hCe+
z2!>Ij-LZ!&uxL*kX{Eya`WEKhA&BF@hVxHBR-Y1QVLql2$6(gw6KCN3Bt-Vdp^t<4
zCqN&MHir8Yd&j?H{-JT94D8Y8x1llOe8A&BA%8K@&81DBs3lHA<a-7D-BIv^pAr3_
z{t4)$KWHEdB>z0f{ZsgN!m<3#`p5Zh@A!AfA7`Jd^2a$YX2$=YkU#q0B*y;j$;;g~
zcJ8@4elC7LA$Uk1Z{mgAW4<*omwki;aUFiQcpZkn1o0h|k>DR-UvCLlIN^-wUv#8U
zJSeEW-67Cb0-SjgE1)$9atg>9?!0i#!M`6;{q|9R6EMabSSug~CJl*&Yv|91c_dN&
zUZwtuslQF&uYlM^!CatPBEdUfg8o8c0a^zj_7$W;WTFATSOor24PGjg`0?M;<FDew
zuimk=sHcYj{J=gGvO{?YV3+8;hX=$A&SZKCV(nH`4^)REsRud5(NiFRjE^%uyz1?7
z2`s`n4&*enUQYWu<rFO_s@@*)_4E)x4$IkSOTmU?c{s`#J6153EC5?~h66eE=i#uP
z4Iv;?=QvR6&U>KLo%cW-{!TeXKAiXP0(m%|*`Zz{*fT<eD^Bg7As#8}*t26tX&<IC
zGMuW0dUb;Rq=?sNL_Vn+#qZb|g3u1u9V4WCe9#i=)dQI7Y}?ZgR;qg{WJCKx_$gv2
zcBeTl6!qaWG5lILio?ZJLsFqA)GGoKtB_hL6mj9Zi@1Q@MOF|4A^n<ROBk54Cc~hx
zX$NG9i53Q;A)^bqTQdV}e=`r31|DQf*vG?~B_2*1#C@2*IXZEuS8HM&E>q$Hy@`Y?
z%uj|wV<6#b3*uee$cS^baE<;`Tnz1_i1jcs!3fAczb^`hIA|2CcOu9~_k_|Bc7G92
zq(mWzs}C^(B2to2QGL2X%{k0SfVoCx#R=k39oUWeI3&V$%u)Qe{jZY)idTU1lRZ3W
zIr~7JlJj=vg4f%W{B7GmaL~TVLHlM0?aLjsf9Rn7eFyDtIcT5jpxqHaj__}DfM=zH
zc6a$%>j2M34%)X<?Y=hpI^dvvj)V3+4%%scZ1L0l*tYMW@IXk+vme?{FyBPk)$2h)
zZ!~(N5#hCj>W}+Sy1lsgVEcpZ39nsLyEphes{J?UKpm_f=;olkr-SzHcH40eO5w+Z
zCUwyGac^v|9rtTgyLn#Fc8+@~s{J%<PpMmVG#=cybJ~F%-45QEZ5P2QbmO)2_`!RI
z_V~fvEY)t7Cp}*<uf)(D1E+91k;dPGZ8!7(9wTR_|B9fX;6}lqmt|Bt-kW6c(|V!x
z<qh#G)y~rk=CP=D9{-sCV)#+O-9$)})BJ?6?Y#cb41NiAohT?g7{7$40t^#)?U<UQ
z+7TfhOn<zOO8GZ5NIaN!%*#3M5BPa_5LAG7Zh3SuCv6Wu-m|rbpT+}W1P>49H|*g-
zx!J=*w~Oc`JtBp1O%}EwCbQ$jHpmVg*fwe86k#|q#i|{zc|fkQ1(k&pV3k?0o4^X|
zVGDp=+ybCCKW<RKy}er$F#G5h0EP~30pMEa7J#q20H_qVD4_dv3jqD9TL9<~-2y;Q
z=@tOGP`3ckx4H#@PS+_wGH*WMWb|}AAH1lELKdURu>tH9As-34Xcv&689GLS{@ev5
zXqt|Zp!0VD37V^8B)C$zfCNq0F%n!pTtI?m?HCEJDfJ?$&2p|CbeJw6ajqR)6kI^!
zTsyc_xq!sEc5q#D0f}?%;3DV(66e~%6|i0;GP!f@;Bx5#66e~%HPi(p&b0%Pi7QB)
zYe(c766e~1AjB0;oNGsHg#;?rD?RPm=-c*=Ctyd{kT};)m}^L!Yp0WINSte@vujA4
zYp08ANSte@s~HK#ODhPUI;%JgwSyPxj(%Nd(au8N;?)g$_)?1(_WgYdVIRrEhY!t2
zd>O=3r%r{Zi0F)skkck&4nIyC;HD0LJ8e^he5SfXUz#cNO&e~6$&PH@x^*^8B_<}?
zFokV=rm&6S3DTIfq_}OiQEU(B?ldmo$H{ot*)0IPP30Cqgu4I|GXQEE6=-ELwu6?M
z0Z<bd-thqVaSWsw8NY)R;9ib31y*&RKj0cAABoJ21gTOsz|}t*8#X#$738iUsY`T@
zB+3;e{Pl@%2)zJ_MXxr)v6VVLPiq07?y_^oZ#!XP0KhVf6B8@!OTDi4O`8ex*Ue(S
z7Guq_v+G(|mr++GFf(Nv7x%V8vSO$Md#by)f`f$bPvXqtLE+o%SXra2tE)95VV&I8
zty^vU3AXY53AO=l>R|l|x6M{(eV{K_XW);xN@kg|=Xw8iPA(ppvRIytq-;$UAJDP@
z@NHW#ML3wZ;K02Un79u2_9%D$+~&@AcEPdbB+<+Xnj0v?TAsE5NoD}MR$&W}>@Glx
zy8x-~0;IVMknS!(hPwd$%m6Oxp})HTnPvbN6*s_LfPwA;WH|?@_Gkt<JIGzgq@6_J
zqGY8K9$JfBB+MojVW7wy0<X}z#&APS3NK}dh;S&$@Svy?Zh+y70`$r%fCsO9y~yHA
zw|}bh#&c?p5_O$0^@e1E_+(_ZWW-L$&}%P6#+xjDc<G{jGR^p8<hEowJ0U}_&J-CR
zviROlSL~B%&L<OPOQyRMGW7aQk?|#qZ(hA`pG*rrnO?SJBAk%H72XpT7SM-~EWYr=
z&-Tf*<dccEB_ne}2IB&Tj2~J2=iT%6$pj;rDCd^e9>_$wU}?2kyK8USC-WSij2%ns
z=!6W{(rUAA@7`sfObDNh9ZT!tgbdfxYO}t*xz9eCR(vvcEUkwVGF(fm&8j_g!9JPR
zd@^<{P2z+M*V1aUc3rt+pG+G*89SCHcS441X|-8T&TO|&rY(|*c5Z1RAQSC^rOD)r
zx1F<3rX8P*9ZL&yLWXN;GWmriuiGaR$|qyT(z-e!!?iS-{L^#G?UQNGCu7IbdO9J)
zwKSRhqj!$lCnMsMv14gcCuF#mCX+8ZcF8`O4tz3pEG^0j8Lp+t<i8($%^sNmLJYAo
zVO}?rdFy7oI$wutB|Lij(ta8#xKDg!lUXYRAa`L#3Kqpj+JT3ZYejGeGB4Xc(l85B
zupd6sPCTSsn<0qhdxzUc+R1_xtc8!X8xJYhLI|Qtwc0*Xd}fM~DcA-dX*drl*B;<`
z&-XvKkF<*gDOds@X(SIRSNjC<>yiw6NQH1K7b3kBg=&$ox3%U4ZQw<^6i73u%uAy;
zhW?QA!srOkF)_wyJP@7_f*eMwLZdWk6h?S}f06JdYlI%bb&cQ+MSKPo-_g;)ndO~8
zUuua*q_`_%31HHUBH#lrD&R%jQVT!~+?vp;=4Vx__Gk(ZnZY(cwUktj6Qz<G%_8Ac
z9$(MZ`2%025DY5e?M)G!lfaz@hHc>r6Jk_Q$Tf79E8H~tn7N{BELU`m<%+IVdw3B&
zsyyo!2}RbdczXg7`Xx?$WfBkU+q23C`gY~@^?_H~Eqz6Bqeco3bFnbtRbBwonFr$q
zFW01k@b&NyV_zlniY!uzsPYAf2p)uQU4RXQHLaHL0yEsGORp@~D6|TrPCrppKvo(T
z3Hw>2^5_L`S*8<}@B}vMUQ6j8-<X{UGA{sjD#0Fb%gbsXmCcx!7a^_k1MUX$Q2Nz1
zgD3fPl)7}p1VEw!Wc>jp{Tc{9;Hd?rvS@w5M&FbdvuOPw^oJ}}Kb;QjzmGL;L2G!K
zydU7!@n!%f*jN@}3@olDu)Tn+a(_~R@2iMl3&I<}XCNr7Kd^{X3fU?FR_Uz=Wmzx}
z+h<Op(V>O=0%x>;t@daFFNJfEgG=Qj53+-tcB>AM*Cnn$h+6|h9>qltu9c6xnH}V`
zdv$=EjyOCh<h{7a!Nv0YjAwH@$kENxhTzK;3z}(kl@JVphr~ljA#td7@BqU6C9JCa
z;gx#0DUzuzH-VX&to82E0)&FEE|<eRL4&k70Zj6-n#WAwGrFcgc%~WbF-xr-N2(a#
z#5eE|@R?bR5!1$P@lKxRnPT>ntY^f`pASes06rQ3D^U(<GU^rJ`gn_mpe-yKIbf1F
zQau<ZIz4(DMEQD1{juZ4{GfR<5>*7~KyEEKczMwWkl~C*=Y^;k6$;=KRt^T-4?fBO
zrk$fRl8b~z);K);VbUQEe3OuX@!`ggVg(Y2th>eJpJfrCYplDaYplDaYt<f&;CWZL
zft71AQW~GYBia&B=Tb7T)j4-LLho&*b8N71Lf2SM=o-rjT|@hgukr@jg;}%U?G1{^
zgE8yPNeL8LwTC~vDF&umpf+kiT9MXJo=rhL1z;UUkT%N8cFG74MPCYq&WIMk%Zqrn
zqEMi~X_a|VMrD=zK)JKdh#oClLlX;vXZHi(ZA67$i++!G{fX9$dNhJnWGGP3!@Oc$
zpFNk40R|=E`NCnud`<#q0gNsP{uKa{B5Jhwe(gl+EE~p-9u>bmAOk6?i3-Ys?DyzR
zjG^9>nF*t+z%(LQ2K|QRGGPd@j6;()TRN+~2Hq`N!?}iV^T3P+@Nct#`t^Da9)D+H
z4hw|DVW=o3dk|0H4Ydx?A8+deiez}5GbJ}|IH(opfC1)bra@<f_blP!AX9m{MosF$
zFC^=Y5uzMZSrMsk4i}6%2w;>tE#|lMRD=bSC{?E-LHJ?Ava?civ$J6wgPK7#IVUH#
zAh{qjH)l}cAUH_}%o(})g+u!%7r;Cil$@QHl@30!Abn6l;h?<a)O28GP`N@$0yBAf
z-B?m-gv+p`lX`U-5CnDxDay(<qzL&063Hf`PE<l_NnnKpwp0|PLJxfnKrFRXtx-V*
z;sT0B`mnt8{7mFe2L3!bIT=I~2K^?K0yw<!2}98;%1G#L(3O#*3Y}6>B+@8~NDb_Q
z6<VFKl+@F809Pm!b+Bs@5^G_ZfYB2^5I}3;R}H@>;P(^w?G6-_!eA)Sz#PHMuLrS2
z*d|~J=L%lP8|Vp7*88A}hz`WvD@_lAH4<$h)e7P#MlkQg7UB!BhEWmls_Od-zsflx
z4NU*F|C8yr!UwF_nk4LWciPeUM^{fi^u?QD!8PA*T|fAbU$agYq-+ocYkHoS|GKiz
z4gLQ1zB`UAU9o<^hYwSFgxzb?Z`8W0F}deI7&7~%)*<nVbxoK4^6`OvU1MIU%ACC{
zf8C_p<t15L6Xq|_w_mXK<nOT_U-hc!T=i#FlVhgmFNNHjy)gDhP3pN@o;$a+8<z0H
zt;b8lzFV;U<HYEk_Xng3r*Av7==A*!k27k5QzE|H)8$db+8(o49UJ~h!Q)n2?u;gT
zo#?gUis)gZdCiV&37B2@O^K*g`0ayzR?fbE@$7KTzRUBs&Yv7Tx;E!<U5hb~67MuW
zRXcUWRFDXMWW!os>&~wK`yr51G{_ySg(%dM8iOPP|IT>ro3Tfv0k1rmxqteJDbJrg
z64I$cvTi}DWX%-fde^C?;x-rC+`E{2)W?6XaK_pPziv!;x_R#7>#zS^6ufMc&ynv^
z6Td3GUXgHc>a?1fYu9%Yj;JhudCjDYI|}#ZomdlpEV9kI{yU|Mn>C$vK6hXK<`mV5
zn!u9-(l168g-u<*aD3sp_Dff`x)z;v>QQk1xtKAVU)xYqx9y0uc4hA2sUP;dmF}gD
zc|A*gvuM=@$&Eq#7i=Imoen*|WB22;f5K2~2Rd%zlHlnuz&TLx85=OoGE&0%n+;KL
z38_a538>BXKOzcDx;|yqgazkglzY3T7j6A&^WJ|FsViD1AARTK+ZWH>x-mWG>#Hr!
zEFai-c+VBSjpvZZB4+LSadOY~Z8lu!-}bYfn(Ief-o9HIQnUTl=2tVnFg!n{<Cz6B
zKiF|ubaqFNGaVlEygYhO*w}=*{f6E-^=r59((m=??C%k4pLw4Hs#ewD0oH>r!r8!K
zn;t?WvVDJeuC7gbi-R41YL_udr#w2fbwAUlZ$D~NdMe|i5vOldCj2u;zIWTQR$U%7
z-q9~CEG>EDg5BejlGY9RF28T~JHk1qKRmSj&C8Fn_Py)(YEsga{uL!J{`~Y{jIQ{@
z(USt@#<Ur0<JG=rzFJHy47;gZmUZ#)TZ+1q8C7dPsR@y<Tu>qHBHO+5(GPuw{`Bsg
z{#k+V=icnB^<9{M_x6Ql0g8~XzKZYUSDU?i)<@HZMviLJXmWs2xpU{}jZx={vZ{$r
zu|8XOb!pzZS=8yU=^w19eC_bK)oVkAZ-$hf{B(q3%Z($OGQQYzU-r^`={Vm*CAF`;
za`Pqsz$5vG)B0>!TDWDW$<$a^Ja_2}ADtb3F6N+S)Xp)JcWW!>+}$wdh40Ue7+T@~
zyU(H1vd!o2nI@f?wo-6S>XrRL&xm7xo4V#gjXF;B$L_4XBh&@|=zC>V;fO_h&fGP&
z{va!O;OVOS$|-&apI4vVbuM9_VEAOEU*QAIguU5KbxFZjM}G3_hufE#+Ut^n*3?{Y
z_VLye!*sXqc*w46cD1-N_RQF0Z4V?RN3}SyZg^JZ>LH)KFz<okgm0CP?ETVdr{g;{
zZ=2F$!ua@REyk7o)cNq&^V<2}I=SHXOjXy?O&1RT(e34V!;VjS^yK2uZ{A)FWkvkt
ziibbGQr+*hoX{6_>WPgejF*|7JMiT9>Z=Ez1pfKYU*3D;wZtAr2R>K#^Mv+){&Hje
zt)wsBnVBZ(JN4mL+qy^&{Px>9UFaK!c6o>H`LV;Rv(t8c5gB(a@=kHUje$8C-%alE
za?rb1{M!n?Z+0@F<-|iH47FdDxBITmgUwanJ@2!x@7@PBakD<nI??RwnAP8U{xJUQ
zxRI~7zV`C%Tf-`22fll&_Osg0+Kri9@cG`k&A-{Pf4Ki(dD8*k{PXgx%Az0SE4qT(
zpYQ+8PpK&bw(sq?vE*DrYyXJHX{#o+FiFFE)hw95FX@Gz7uH4oMvi`0zWc(qV^>C<
zzW#pJy>|MW9XoW8_6T~h|I(7r?^V8AJ~Bf;OL@EXlg>k)e{;d~J;G5VbG!fe%j?ql
ze^ZLd^UE%J{9;=1qG#&<?xsINmmlq$-}P_9GJfuS`%?N3KOWJ}xUoH;&pVkni>_9`
z61Y0#d&6L#t2bVJ`ObtNJ#&V9{6|Emm3s>dg+CnM*yW@+>6hB9*MEB$cYXAeCbu=y
zW^a_`o!md5-Km@3d>OqaZ&&y$yU4xmG)FoQSrWf@{hUYLFCE;H_Tbv^t+}EeOLlG8
z)$;eUnN6Pl-12XOBMK*v8vT0FhLaz6_-OymyZde|e)ZQGvgkZRhIYWINdv#F`g}^r
z>3g-Ss$2Me6g92iTQ!Fc9m)2N9=G7yKRh?BPM$I7&c*j$>MUE_>h8w0Zf}&2jyke#
zd#}*HO(k=eH=eR(`{LB19Y>E=?7qD+rjaaT)5hMXZqFOL?9lKx&ure;YTKs8W7nOZ
zd}dQd)Swm#XZ#oMn0;(d+pN(We5TLrwQ5`P@un{=US59x+}0x#edV&V6}$R=dAVp`
z`ND`rL7~;P{a$!Lwjcaz^}}Jq^V9ArrYnxjdb)myVfT)x^D);dg1hXw|BoKu-nufW
zxujLX_I~njLL_hJ^josKrly(kQj-^6eUwp^vSR0SzqX67N9G*9mmgETH2eC2ZUvvb
z{O7pp^C2%@KQ?4@NZQ-g;|K5lb4x{G{<rUWZd@?d_p2{ne)-KWQ>r>Gt6n^Hzo2-3
zSMLFvPMlx6p)5)IM44aJZpyhuH8W;>Y1%1YT~<=KE&t1sIkS?Z`et;DZtfd$>BH2P
zzqA_U7Zduf_|9{?SDrc>J?O>pU;D3_)UCL@qV2Y*PloR~(`{MF)|t!m!c|h;{K|Jm
zY`mYb=jZo|@}EvC7=PrqsqfCYl6%d6b@bU#;q{7PW7f*owJTpGZZf#*tEJyQcRY6K
z1;GiAq5Gtblf5ULzI{;C@ArepdJjCZw%3ZVGlI9o$%@4Mg(6k^FBi=|a4zt@;z@6G
zs*$C1Ufp&)Irg*Ag&jY6`D35xM^{4M5vE)&sD3{n<kH>We!jXbpmnyX`o`_$Lu=;j
zKX?1k)yt2+Rr#!Y5~pds?9$Vjvp#>}#lI`hEx+~n%DwKZy9AdFN%+Qp%x#VL2R*;9
zTP^(irLkq7y>PN}|H4MTqeq?%@tON_*O_y}*47<*+AsZ!`@T*0uWIsGaC(T>RY_E&
zu+6N04BYus(#J^`4hKc$R2=uI?o4Kn&>Ww8?DuJXE>C;VO*yXS>+c>ITJJ6WdUD0+
zh|z05k~f;PbEmRLcH@-^Z>^R_)ijlT9(jA<n}0;keeH+oYbIRVc6eSl^)$b}gZ%;$
zemQhg5O(lZ=@PB|Wvuau1#j<!<*N;>&|P@T7#(;}3ma!8W&)9H|4*bXX8byBf>5VB
z^>N_B&X;E$|KPOejGMh0M<<3ofB*Z&n|lf)UQrx)Q@!_%w`!UzWmh6gH?<bV-CaC>
z+2OL?_va_&2j|Q_-$%7&%(VHsnD1MbEF9Q1yK`86*NDia`X*flRIfNbr{Hnb=GZl_
z4Y?^^^KSANdyn`3)imXupOy<Ie-^gCC~(plqScbTWp&&BjBP!;MAANZ)YIpa4d-Wi
zcU}E??X`}}H)VN!IpX7wKfMYAqr(q@M>ssY;V3eNZk)qToSHY#8Ua64vp`Eho}9pq
z56BOFEP$;bCbWqqIO6AH;>RHtOlR$3qM{N$4!#jsaJ&VnGA=hxOd@ZfH-tl&Y49dS
z!RVL5wg+w&z;16jXL|q_h<VU9kJE<zurvMDi9oBbPBijpftRTRW5ju>1o3`<{E85M
zry&6Ts^HZ!JP(4u_|lP(c(U=Qli5XiiG@^qcdESy^>-T8Qblb{Xq=rOj{x706ubmi
z4#TE}{#NC5s`m`)Z)fOTOdYoqyKv6Cnz7tT?8Z4?1sf_)z=-=<0j6i*kW<I0ME1Ao
z!4;5DUcr+A)s^`Zk4Zu57z|wa6H{QUUhr>IAdZ%x>L}^KEiH9FOb-TG>iz&XxCLD&
zAUBBz%8>rvna~6Fh}3xjDg`#@O$ltnN;6`zRU1-l24li*Y(LmO+VsQGHY2R@!G0Lp
zG>C#oVrZbD@cY4j8QQFApn&-OV2n0xXgz#b+&b}Laf{3E2iszsHk1{=Uoc3<gU8=<
zcG^Phw6(I+hTkaT<7>lf`;(d%kOZK91s*6j0o+8S&xCM>Jy0#F)c3d!KqdyQt{?TU
zKiCUiN73U8LjVgHJfJm$YDW#GQr~99UYM**$J`!s%>%BXyy$D5P(w-4H7}^4jOdy-
z+}uK2qH8`-3o_Syp$16~=9-WgNPQ=a?&$|L)Fxf?2Ojb56S{`ETI8Fq1wakCrE86$
zhL%Rxnm`S0jIK3>8p?yN1rlkPv}I~RP(zEtYnW$BhNXb5c>r~^7?h9~(4r-aGcK7*
zT6lX1;oKW)Y#$#YiNWMc44}4vG+rTK!gp8bnx9n-$A~Y-(AOFP220NXtDcRmYE7(a
zO&K`k74y2u!~qx)dV^$0xBF0Iz_(YEsCLxo0JtJxYS=58>E%Q9LOht7r}3bKQknh%
zlzvhvYx1Dr(b^CmYfUJLr9*Elp44@;7`zTv2v`FsNg{V>JC^pwR6F)SdxhR`hVzR)
z!&yb2;asB6a0bz5IB)1PoGr=lC9nwM3owTT0x=;13wi=ymlMOsGyDN}Ae3g%76LWP
zzrOGU+D;S;NQgdgcFcuUX|9z=_J{8hHzhp1fmxh(C}2;|65(@138xz@J$Sp`GtKdr
z#uy_1gMOTUKh9(<hVREE_KjB>;~<U7e%o%467n|+5i}Mih{d8Zh547$DF<?s3F0)J
z(uB!Ssu$;KW?F*S)o<YOVTZ6^yMu4t0c{S}G}55dtIP3LdV)ArPhy@`A<~i)L@I`l
z2tLRlrLG+Kq?(z}=pk>a;^LwhWn`?PC^k|S*{e8K85<*4NsGy1g)}Bc6)6@$&PQvA
zQyLS*rAA|UoJ3-vq+*CDV?UW1q12U0bkwImCGg$UXh|7qRNzPVBpjAmL}iMGAS%}b
z_j;q6G*HNsjYhq?$OH*;F@EE((x8f?xe^%_`V!KJIx%3%`q^kv!qV$>Fm@w;Yz4JY
ztR^)o1B$MQjOra3+q+2GyEsyzBIOFHtXGU&s*H;49obtcH;WFqGqW*a!i0zk@(7*2
z1SJ(If!sW8WUP294X*bsH+OYIB^F7VMMr8NOQ|)AFw34Gw$lOh3+eqz%x;^-O^!Fg
z_ZQ7|YaFZ<(osG&FIYf3xD*<V1TRZakG$(t8-v{3$G{=(IuK>HEE_JG3s{{NCP1-H
zU#2h`D7}GMje{Jnjiu|!aE|Ci49^(=nFf=|qyZxuZ&GN~U_dIdNWogLRR@!n)1^oQ
zcXiCL9YIQrk=Urc;at*_+f55qn;CFu&f#h;evDHIbA~3NQksFvO?nL_NtIH<NXa0H
zjEIz2`Wi`nnPnny0jMkHo;olzGhX|X0KPX&>a_}uL|3FTTfDlgT&JfE-r7xYN%452
z(PzQkC)({Y-cV&K(x~A>q<WGX6T^fAMs1LchY{k3q$ScQiBu+0DI-AAV#?Oh)Lr6&
z9q?a4p2B6#12afw?&C1>%&t~U-Oz&trl62_!8`=cY-Lc`c4ns>7%+RvQq_~iummaN
zl(>ZH^x$CC+FYg5qzC0wi(VyLi?oQ12TTo$#()#60T|-cDsX=|G2P^Vc9>R+oD=el
zG*R;gSiZC+)Ow=Us>n)av~eo60Unf^NQV@ubRZ%^x9f29aYnrR?{wI>YB5xzD3VrG
zsHX=Uqc@m}@P@Bb0%mLAX(mo(2~*rdKnr#pIdOtcuQE7=wUw$vcHj}T5)-&?r}%83
z86`uARRWK%IfZqB7aAKAfc-Vd^kjt^zl!W8Hg+y5v~UZZ@@Z@fyLz*YA_qr7soEf_
zP-sk~2<%G@j*&EoAh#ycQV%AGbj2crq5|4<dJ)T{AwpCDJrwvP1MNvgfJ6_`noes_
z7r{dWu-1x9<q$sN6C*|o2}Lo?bP=ggmYR`8H1@a08XZXRM?tq*kCq=@;M`=5nAVg=
zVK8RHSEg~*PI+eSGyaZtS!E1br+RZ_j<jzW1d1~?Xns&5XFRgQ5Q<)NXtQ{x09&ms
z)|D%arMMc#Nb(eVBRm{}{!Opb0Q-!{twJGAAml=<L<bq=^#udWCZ!&B*r3Q9SvU-H
zn1F(3GkLIYgXze~jk83ulH`Q1l?F2~WgO+oxHQWmz%z}$Xv1uO1{rIvEHpf<uQO?l
znf#^D4OnWyv0g}Rppg+?7;YzYcfcz>wXDWzghehvj7aIF(T1R9;7p*w8EAun>5;k*
zo|2ZDY%u7QYH)d~bch{{6C12<z{Oy&7C9{2=IF<yEdr&gAilAY3ttf+C-Zy(M+xy2
zm=sMQhusx3Sj_zxQ!>}>z_|=EXrjSLmSr;GKazAAloctgWscx*w7dyrJ0&dRpbd>b
zdh;@EZER*R8*%W_uz@k(T<gPNM>Y-Qg)b@>(Xh^f9+1WIm=W_Ni^Fs7s%XhtO=PP8
z*v47`CCh`gZL$WFPZpE#Y#?qN8;S{&Rt<)gJp-)#8DKFo=k9&nkesSleXx8V;nFN(
z^~5!PD^0uaHfeLQqv{5uLR~i;7?j;`V9<8MfkE932L^q+4_tsLl?E?T2%QN*9M94k
zxJEU={>%(C)KwvZ99)gupJx>9dgH0TV3JvQY?yvA=&Ki!;?tZ9mDs!EfgcO`Uv?NE
zy+me0WFmt95J-&?3S{sn_39lH(<>t;Haxmluk`S!ba_;Ga#V~gJS8eQN*<Y<+B-Hi
zWr{g1X~{@3S-uE6iC21yk;dGHp|iwF6Ob<(R;Gba2*}gWu+kZ<tH_#3Z^^E*RNTDL
zBKga(TJqWayDs(6aJ*rv2hfcnTbP6Fm6cc>$<dCsTubKHgWqw|*bP7<`e%u&L$Njq
zs~mSdG@VM=`NkM9OL*psb-dGOo?ebzM|@(LK^M+RmBP(d-0v5VaBGQ598tS&^OoB_
zn}$+&i=<o!<CRp%*}IGA@g$Hn!sRWViBS5o6EI6%q*v%CBB^)@doey;r8e5{LS2c^
zAt%_sj2Gf1R*X9uv9$wre*d}t|G&&EU@QL>ogOWXO_$5VW#GHQqtc|{x?-g1;c3y4
zk!dk8slC%vW&gkVuljWOELLVMb8gMK{LT0O%i}C=g}HO}tan)%G?fO6V|VBt!}+((
z{+f&yxJPC^vfPkGF>^;-j~P3cUqkITMwXHuB~OvV`WurG9u*sz5}pzpnHnySNs&d#
zq`hTPsnP#A`{nv|m9h+yJm6^R^UxgK!p(h2WbfXw65K*j_ZjO0X1(6OYNcZFTQ48n
zM>p&k3J%*)ALm?IJ<C$&Qik?fmN@GNR4lXIodGgiW9F{)zs6y4o!5WQpIHL`4-m)+
Av;Y7A

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/spaces/normal_spaces_update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/spaces/normal_spaces_update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..5b8856014351f19ad564a6b9b04521cac2ea38f3
GIT binary patch
literal 32768
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
S*ZS`XSlr<C&+#j3;Qs-HO{Zo6

literal 0
HcmV?d00001

diff --git a/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/vocabularies/normal_vocab_update.xls b/openbis_standard_technologies/sourceTest/java/ch/ethz/sis/openbis/systemtest/plugin/excelimport/test_files/vocabularies/normal_vocab_update.xls
new file mode 100644
index 0000000000000000000000000000000000000000..9a321de1c61d450714968700314bc69197eb16ec
GIT binary patch
literal 40960
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

literal 0
HcmV?d00001

-- 
GitLab