package org.activityinfo.legacy.shared.adapter.bindings;
import com.bedatadriven.rebar.time.calendar.LocalDate;
import org.activityinfo.model.form.FormInstance;
import org.activityinfo.legacy.shared.model.EntityDTO;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.type.NarrativeValue;
import org.activityinfo.model.type.barcode.BarcodeType;
import org.activityinfo.model.type.barcode.BarcodeValue;
import org.activityinfo.model.type.number.Quantity;
import org.activityinfo.model.type.number.QuantityType;
import org.activityinfo.model.type.primitive.TextValue;
import java.util.Map;
/**
* Created by alex on 2/22/14.
*/
public class SimpleFieldBinding implements FieldBinding<EntityDTO> {
private final ResourceId fieldId;
private final String propertyName;
public SimpleFieldBinding(ResourceId fieldId, String propertyName) {
this.fieldId = fieldId;
this.propertyName = propertyName;
}
@Override
public void updateInstanceFromModel(FormInstance instance, EntityDTO model) {
Object value = model.get(propertyName);
if (value != null) {
instance.set(fieldId, value);
}
}
@Override
public void populateChangeMap(FormInstance instance, Map<String, Object> changeMap) {
Object value = instance.get(fieldId);
if(value != null) {
if (value instanceof org.activityinfo.model.type.time.LocalDate) {
value = ((org.activityinfo.model.type.time.LocalDate) value).atMidnightInMyTimezone();
} else if (value instanceof NarrativeValue) {
value = ((NarrativeValue) value).getText();
} else if (value instanceof TextValue) {
value = ((TextValue) value).asString();
} else if (value instanceof BarcodeValue) {
value = ((BarcodeValue) value).asString();
} else if (value instanceof Quantity) {
value = ((Quantity) value).getValue();
} else {
throw new UnsupportedOperationException(fieldId + " = " + value.getClass().getSimpleName());
}
}
changeMap.put(propertyName, value);
}
}