package org.flowerplatform.editor.model.changes_processor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.change.FeatureChange;
import org.flowerplatform.common.util.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Cristi
*/
public class Changes {
private static final Logger logger = LoggerFactory.getLogger(Changes.class);
private List<FeatureChange> featureChanges;
private List<Pair<EObject, EReference>> addedTo;
private List<Pair<EObject, EReference>> removedFrom;
public List<FeatureChange> getFeatureChanges() {
return featureChanges;
}
public void setFeatureChanges(List<FeatureChange> featureChanges) {
this.featureChanges = featureChanges;
}
public List<Pair<EObject, EReference>> getAddedTo() {
return addedTo;
}
public EObject getAddedToContainer() {
if (addedTo == null) {
return null;
}
for (Pair<EObject, EReference> pair : addedTo) {
if (pair.b.isContainment()) {
return pair.a;
}
}
return null;
}
public void addAndLogAddedTo(EObject who, EObject where, EStructuralFeature reference) {
if (logger.isTraceEnabled()) {
logger.trace("Pass1: {} was added to {} on feature {}", new Object[] { who, where, reference} );
}
if (addedTo == null) {
addedTo = new ArrayList<Pair<EObject, EReference>>();
}
addedTo.add(new Pair<EObject, EReference>(where, (EReference) reference));
}
public List<Pair<EObject, EReference>> getRemovedFrom() {
return removedFrom;
}
public EObject getRemovedFromContainer() {
if (removedFrom == null) {
return null;
}
for (Pair<EObject, EReference> pair : removedFrom) {
if (pair.b.isContainment()) {
return pair.a;
}
}
return null;
}
public void addAndLogRemovedFrom(EObject who, EObject where, EStructuralFeature reference) {
if (logger.isTraceEnabled()) {
logger.trace("Pass1: {} was removed from {} on feature {}", new Object[] { who, where, reference} );
}
if (removedFrom == null) {
removedFrom = new ArrayList<Pair<EObject, EReference>>();
}
removedFrom.add(new Pair<EObject, EReference>(where, (EReference) reference));
}
public static String printFeatureChanges(List<FeatureChange> list) {
if (list == null) {
return "null";
}
StringBuffer sb = new StringBuffer("[");
for (FeatureChange fc : list) {
sb.append("(");
sb.append(fc.getFeatureName());
sb.append("),");
}
sb.append("]");
return sb.toString();
}
@Override
public String toString() {
return "{featureChanges:" + printFeatureChanges(featureChanges) +
", addedTo:" + addedTo + ", removedFrom:" + removedFrom + "}";
}
}