package org.aplikator.client.shared.data; import java.io.Serializable; import org.jboss.errai.common.client.api.annotations.Portable; @SuppressWarnings("serial") @Portable public class ContainerNodeDTO implements Serializable { //private ViewDTO view; private String viewId; private RecordDTO original; private RecordDTO edited; private Operation operation; @SuppressWarnings("unused") public ContainerNodeDTO() {//TODO custom marshaller } public ContainerNodeDTO(String viewId, RecordDTO original, RecordDTO edited, Operation operation) { this.viewId = viewId; this.original = original; this.edited = edited; this.operation = operation; } // public ViewDTO getView() { // return view; // } public String getViewId() { return viewId; } public void setViewId(String viewId) { this.viewId = viewId; } public RecordDTO getOriginal() { return original; } public RecordDTO getEdited() { return edited; } public Operation getOperation() { return operation; } // public void setView(ViewDTO view) { // this.view = view; // } public void setOriginal(RecordDTO original) { this.original = original; } public void setEdited(RecordDTO edited) { this.edited = edited; } public void setOperation(Operation operation) { this.operation = operation; } /** * Returns a record, which contains summary of properties from edited and original. * If property exists in both, the merged record contains the edited one * * @return */ public RecordDTO getMerged() { // if edited and original is null then return null if ((this.getOriginal() == null) && (this.getEdited() == null)) { return null; } // if edited is null then returns cloned original if (this.getEdited() == null) { return this.getOriginal().clone(); } // if original is null then returns cloned edited if (this.getOriginal() == null) { return this.getEdited().clone(); } // initially creates a merged record as a clone of edited RecordDTO mergedRec = this.getEdited().clone(); for (String property : this.getOriginal().data.keySet()) { // adds properties from original if property is not yet present if (!mergedRec.data.containsKey(property)) { mergedRec.data.put(property, this.getOriginal().data.get(property)); } } // adds annotations from original for (String annotKey : this.getOriginal().dataAnnotation.keySet()) { if (!mergedRec.hasAnnotation(annotKey)) { mergedRec.putAnnotation(annotKey, this.getOriginal().dataAnnotation.get(annotKey)); } } return mergedRec; } }