@Override public void run() { JsonElement element = parser.parse(line); DynamicModelObject object = DynamicModelUtils.getObjectByAdress( element.getAsJsonObject().get("@src").getAsString(), model); String propertyName = element.getAsJsonObject().get("@prop").getAsString(); JsonElement nv = element.getAsJsonObject().get("@nv"); JsonElement ov = element.getAsJsonObject().get("@ov"); Object value = null; boolean isList = object.getCollection().getAsListProperties().contains(propertyName); if (nv != null) { String raw = nv.getAsString(); if (OBJECT_ADDRESS_PATTERN.matcher(raw).matches()) { value = DynamicModelUtils.getObjectByAdress(nv.getAsString(), model); } else if (DOUBLE_VALUE_PATTERN.matcher(raw).matches()) { value = nv.getAsDouble(); } else if (INTEGER_VALUE_PATTERN.matcher(raw).matches()) { value = nv.getAsInt(); } else if (BOOLEAN_VALUE_PATTERN.matcher(raw).matches()) { value = nv.getAsBoolean(); } else { value = raw; } } else if (ov != null) { // is a deletion value = null; if (isList) { value = model.getObject(ov.getAsString()); } } if (!isList) { Property<Object> prop = (Property<Object>) object.getProperties().get(propertyName); if (prop != null) { if (prop.getValue() != null && (value == null || prop.getValue().getClass().isAssignableFrom(value.getClass()))) { prop.setValue(value); } else { SettlersApplication.NET.warning( "Received invalid property update - types don't match."); } } else { if (value == null) { return; } ((Property<Object>) object.getProperty(propertyName, value.getClass())).setValue(value); } } else { ListProperty<DynamicModelObject> list = (ListProperty<DynamicModelObject>) object.getProperty(propertyName, List.class); if (nv != null) { list.add((DynamicModelObject) value); } else if (ov != null) { list.remove(value); } } }
public boolean addValidator(Validator validator) { return validators.add(validator); }