diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java index f4624b9391dd7ccb6b8c94959882e74c5f79c7eb..d539da7d2fbb53dacf23a0da141f5be7116aaabb 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/PropertiesBatchManager.java @@ -149,9 +149,9 @@ public class PropertiesBatchManager implements IPropertiesBatchManager { List<IEntityProperty> newProperties = new ArrayList<IEntityProperty>(); - List<KeyValue<Map<String, String>>> subColumnBindings = + Map<String, Map<String, String>> subColumnBindings = createColumnBindingsMap(propertiesBean.getProperties(), contexts); - for (KeyValue<Map<String, String>> entry : subColumnBindings) + for (Entry<String, Map<String, String>> entry : subColumnBindings.entrySet()) { String code = entry.getKey(); EvaluationContext evalContext = contexts.get(code); @@ -206,45 +206,19 @@ public class PropertiesBatchManager implements IPropertiesBatchManager return entityProperty; } - private static final class KeyValue<T> - { - private final String key; - - private final T value; - - KeyValue(String key, T value) - { - this.key = key; - this.value = value; - - } - - public String getKey() - { - return key; - } - - public T getValue() - { - return value; - } - - } - - private List<KeyValue<Map<String, String>>> createColumnBindingsMap( - IEntityProperty[] properties, + private Map<String, Map<String, String>> createColumnBindingsMap(IEntityProperty[] properties, Map<String, EvaluationContext> contexts) { - List<KeyValue<Map<String, String>>> subColumnBindings = - new ArrayList<KeyValue<Map<String, String>>>(); + Map<String, Map<String, String>> subColumnBindings = + new HashMap<String, Map<String, String>>(); - List<KeyValue<String>> originalColumnBindings = new ArrayList<KeyValue<String>>(); + Map<String, String> originalColumnBindings = new HashMap<String, String>(); for (IEntityProperty property : properties) { final String code = property.getPropertyType().getCode().toUpperCase(); final String value = property.getStringValue(); - originalColumnBindings.add(new KeyValue<String>( - ManagedPropertyFunctions.originalColumnNameBindingKey(code), value)); + originalColumnBindings.put(ManagedPropertyFunctions.originalColumnNameBindingKey(code), + value); int indexOfColon = code.indexOf(':'); String propertyCode = code; @@ -254,36 +228,30 @@ public class PropertiesBatchManager implements IPropertiesBatchManager propertyCode = code.substring(0, indexOfColon); subColumn = code.substring(indexOfColon + 1); } - - final Map<String, String> bindings = new HashMap<String, String>(); - subColumnBindings.add(new KeyValue<Map<String, String>>(propertyCode, bindings)); + Map<String, String> bindings = subColumnBindings.get(propertyCode); + if (bindings == null) + { + bindings = new HashMap<String, String>(); + subColumnBindings.put(propertyCode, bindings); + } bindings.put(subColumn, value); } // add original column bindings to all bindings - for (KeyValue<Map<String, String>> bindings : subColumnBindings) + for (Map<String, String> bindings : subColumnBindings.values()) { - for (KeyValue<String> originalColumnEntry : originalColumnBindings) + for (Entry<String, String> originalColumnEntry : originalColumnBindings.entrySet()) { - bindings.getValue() - .put(originalColumnEntry.getKey(), originalColumnEntry.getValue()); + bindings.put(originalColumnEntry.getKey(), originalColumnEntry.getValue()); } } for (Entry<String, EvaluationContext> entry : contexts.entrySet()) { String code = entry.getKey().toUpperCase(); - List<KeyValue<Map<String, String>>> tmpSubColumnBindings = - new ArrayList<KeyValue<Map<String, String>>>(); - boolean hasKey = subColumnBindings.stream().anyMatch(x -> x.getKey().equals(code)); - if(!hasKey) { - Map<String, String> map2 = new HashMap<String, String>(); - for (KeyValue<String> kv2 : originalColumnBindings) - { - map2.put(kv2.getKey(), kv2.getValue()); - } - tmpSubColumnBindings.add(new KeyValue<Map<String, String>>(code, map2)); + if (false == subColumnBindings.containsKey(code)) + { + subColumnBindings.put(code, new HashMap<String, String>(originalColumnBindings)); } - subColumnBindings.addAll(tmpSubColumnBindings); } return subColumnBindings; }