package org.flowerplatform.editor.model.changes_processor; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; /** * @author Cristi */ public abstract class AbstractCriterionDispatcherProcessor<T> implements IChangesProcessor { protected Map<T, List<IChangesProcessor>> processors = new HashMap<T, List<IChangesProcessor>>(); public AbstractCriterionDispatcherProcessor<T> addProcessor(T key, IChangesProcessor processor) { List<IChangesProcessor> list = processors.get(key); if (list == null) { list = new ArrayList<IChangesProcessor>(); processors.put(key, list); } list.add(processor); return this; } @Override public void processChanges(Map<String, Object> context, EObject object, Changes changes) { List<IChangesProcessor> procesorsThatMeetCriterion = getProcessorsThatMeetCriterion(context, object, changes); if (procesorsThatMeetCriterion == null) { return; } for (IChangesProcessor processor : procesorsThatMeetCriterion) { processor.processChanges(context, object, changes); } } protected abstract List<IChangesProcessor> getProcessorsThatMeetCriterion(Map<String, Object> context, EObject object, Changes changes); /** * Add the possibility to clear the internal state * * @author Mircea Negreanu */ public void clear() { processors.clear(); } }