package uk.ac.cam.echo.client.data; import org.apache.commons.beanutils.BeanUtils; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import uk.ac.cam.echo.client.ClientApi; import uk.ac.cam.echo.data.resources.RestResource; import java.util.Map; public abstract class BaseData { private Long id = null; private ClientApi api; private RestResource resource; public void save() { if (hasId()) { getResource().update(this); } else { Map<String, Object> result = (Map) getResource().create(this); for (String key: result.keySet()) { try { BeanUtils.setProperty(this, key, result.get(key)); } catch (Exception e) { // Just Ignore } } } } public void delete() { resource.delete(getId()); } @JsonIgnore public ClientApi getApi() { return api; } public void setApi(ClientApi api) { this.api = api; configureResource(); } @JsonIgnore public RestResource getResource() { return resource; } public void setResource(RestResource resource) { this.resource = resource; } protected abstract void configureResource(); @JsonProperty("id") public Long getID() { return id; } @JsonIgnore public long getId() { return id; } public boolean hasId() { return id != null; } @JsonProperty public void setId(long id) { this.id = id; } }