public boolean needsChange(DynamicType newType) { if (!hasType(newType)) { return false; } DynamicTypeImpl type = getType(); if (!newType.getKey().equals(type.getKey())) return true; for (String key : data.keySet()) { Attribute attribute = getType().getAttribute(key); if (attribute == null) { return true; } String attributeId = attribute.getId(); if (type.hasAttributeChanged((DynamicTypeImpl) newType, attributeId)) return true; } return false; }
public void commitChange(DynamicType type) { if (!hasType(type)) { return; } Collection<String> removedKeys = new ArrayList<String>(); Map<Attribute, Attribute> attributeMapping = new HashMap<Attribute, Attribute>(); for (String key : data.keySet()) { Attribute attribute = getType().getAttribute(key); Attribute attribute2 = type.getAttribute(key); // key now longer availabe so remove it if (attribute2 == null) { removedKeys.add(key); } if (attribute == null) { continue; } String attId = attribute.getId(); Attribute newAtt = findAttributeById(type, attId); if (newAtt != null) { attributeMapping.put(attribute, newAtt); } } for (Attribute attribute : attributeMapping.keySet()) { Collection<Object> convertedValues = new ArrayList<Object>(); Collection<?> valueCollection = getValues(attribute); Attribute newAttribute = attributeMapping.get(attribute); for (Object oldValue : valueCollection) { Object newValue = newAttribute.convertValue(oldValue); if (newValue != null) { convertedValues.add(newValue); } } setValues(newAttribute, convertedValues); } for (String key : removedKeys) { data.remove(key); } this.type = type.getKey(); name = null; }
AttributeFunction(Attribute attribute) { super("attribute:" + attribute.getKey()); id = attribute.getId(); }