package foundation.data.object; import foundation.dao.Filter; import foundation.data.entity.Entity; import foundation.data.meta.field.FieldsRuntime; import foundation.util.Util; import foundation.variant.provider.DataEvent; public class EntitySaver { private DataObject dataObject; private String id; private Entity original; private Entity target; public EntitySaver(DataObject dataObject, Entity original) throws Exception { this.dataObject = dataObject; this.original = original; this.target = dataObject.createTableEmptyEntity(); } public EntitySaver(DataObject dataObject, String id) throws Exception { this.dataObject = dataObject; this.target = dataObject.createTableEmptyEntity(); this.target.setId(id); this.id = id; } public EntitySaver(DataObject dataObject) throws Exception { this.dataObject = dataObject; this.target = dataObject.createTableEmptyEntity(); } public void set(int i, Object value) { target.set(i, value); } public EntitySaver set(String name, Object value) { if (value == null) { return this; } target.set(name, value); return this; } public EntitySaver setNotEquals(String name, Object value) { if (value == null) { return this; } Object originalValue = getOriginalValue(name); if (Util.equals(originalValue, value)) { return this; } target.set(name, value); return this; } public void set(Entity entity) { FieldsRuntime fields = entity.getFieldsMeta(); String[] names = fields.getFieldNames(); for (String name: names) { Object value = entity.getValue(name); set(name, value); } } public void setNotEquals(Entity entity) { FieldsRuntime fields = entity.getFieldsMeta(); String[] names = fields.getFieldNames(); for (String name: names) { Object value = entity.getValue(name); setNotEquals(name, value); } } public void update() throws Exception { update(DataEvent.Update); } public void update(DataEvent dataEvent) throws Exception { if (target.isEmpty()) { return; } if (original != null) { if (Util.isEmpty(id)) { id = original.getId(); } if (Util.isEmpty(id)) { throw new Exception("can not update package entity, for empty id"); } target.set("id", id); dataObject.updateEntity(target, dataEvent, null, null); original.copyFrom(target); } else { dataObject.updateEntity(target); } } public void insert() throws Exception { if (target.isEmpty()) { return; } if (Util.isEmpty(id) && original != null) { id = original.getId(); } if (!Util.isEmpty(id) && target.isEmptyValue("id")) { target.set("id", id); } dataObject.insertEntity(target); } public void update(Filter filter) throws Exception { if (target.isEmpty()) { return; } if (original != null) { if (Util.isEmpty(filter)) { throw new Exception("can not update package entity, for empty filter"); } dataObject.updateEntity(target, filter); } else { dataObject.updateEntity(target, filter); } } public Object getOriginalValue(String name) { if (original == null) { return null; } return original.getValue(name); } }