package org.activityinfo.legacy.shared.adapter.bindings; import org.activityinfo.legacy.shared.model.EntityDTO; import org.activityinfo.legacy.shared.model.PartnerDTO; import org.activityinfo.model.form.FormInstance; import org.activityinfo.model.legacy.CuidAdapter; import org.activityinfo.model.resource.ResourceId; import java.util.Map; import static org.activityinfo.model.legacy.CuidAdapter.getLegacyIdFromCuid; /** * Created by alex on 2/22/14. */ public class NestedFieldBinding implements FieldBinding<EntityDTO> { private final ResourceId fieldId; private final char domain; private final String propertyName; public NestedFieldBinding(ResourceId fieldId, char domain, String propertyName) { this.fieldId = fieldId; this.domain = domain; this.propertyName = propertyName; } @Override public void updateInstanceFromModel(FormInstance instance, EntityDTO model) { Object value = model.get(propertyName); if (value instanceof EntityDTO) { instance.set(fieldId, CuidAdapter.cuid(domain, ((EntityDTO) value).getId())); } else if (value instanceof PartnerDTO) { // todo: why PartnerDTO doesn't implement EntityDTO interface? instance.set(fieldId, CuidAdapter.cuid(domain, ((PartnerDTO) value).getId())); } else if (value instanceof Integer) { // todo: ready to go id instance.set(fieldId, CuidAdapter.cuid(domain, (Integer) value)); } } @Override public void populateChangeMap(FormInstance instance, Map<String, Object> changeMap) { ResourceId resourceId = instance.getInstanceId(fieldId); if (resourceId != null) { changeMap.put(propertyName + "Id", getLegacyIdFromCuid(resourceId)); } } }