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);
|
}
|
}
|