package org.flowerplatform.codesync.code.javascript.config.changes_processor;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.change.FeatureChange;
import org.flowerplatform.editor.model.changes_processor.Changes;
import org.flowerplatform.editor.model.changes_processor.IChangesProcessor;
import com.crispico.flower.mp.model.codesync.CodeSyncElement;
import com.crispico.flower.mp.model.codesync.CodeSyncPackage;
import com.crispico.flower.mp.model.codesync.Relation;
/**
* @author Cristian Spiescu
*/
public abstract class AbstractDependencyProcessor implements IChangesProcessor {
@Override
public void processChanges(Map<String, Object> context, EObject object, Changes changes) {
if (changes.getRemovedFromContainer() != null) {
// relation deleted; don't do anything
return;
}
for (FeatureChange featureChange : changes.getFeatureChanges()) {
if (CodeSyncPackage.eINSTANCE.getRelation_Target().equals(featureChange.getFeature())) {
// either freshly added, or target changed
Relation relation = (Relation) object;
// TODO CS/JS: on create and change relation end: we need to verify that the source/targets
// are cf. descriptors; maybe have extensions that do additional checks (and validation messages?)
updateSource(relation, relation.getSource(), relation.getTarget());
}
}
}
protected abstract void updateSource(Relation relation, CodeSyncElement source, CodeSyncElement target);
}