/* license-start * * Copyright (C) 2008 - 2013 Crispico, <http://www.crispico.com/>. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details, at <http://www.gnu.org/licenses/>. * * Contributors: * Crispico - Initial API and implementation * * license-end */ package org.flowerplatform.editor.mindmap.processor; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.change.FeatureChange; import org.flowerplatform.codesync.processor.AbstractChildrenUpdaterDiagramProcessor; import org.flowerplatform.emf_model.notation.MindMapNode; import org.flowerplatform.emf_model.notation.Node; import org.flowerplatform.emf_model.notation.NotationFactory; import org.flowerplatform.emf_model.notation.View; import com.crispico.flower.mp.model.codesync.CodeSyncElement; import com.crispico.flower.mp.model.codesync.CodeSyncPackage; import com.crispico.flower.mp.model.codesync.MindMapElement; /** * @author Cristina Constantinescu */ public class MindMapChildrenChangeProcessor extends AbstractChildrenUpdaterDiagramProcessor { @Override protected void processFeatureChange(EObject object, FeatureChange featureChange, View associatedViewOnOpenDiagram, Map<String, Object> context) { super.processFeatureChange(object, featureChange, associatedViewOnOpenDiagram, context); if (featureChange != null && CodeSyncPackage.eINSTANCE.getMindMapElement_Expanded().equals(featureChange.getFeature())) { processChildren(object, getChildrenForCodeSyncElement(object), associatedViewOnOpenDiagram, getChildrenForView(associatedViewOnOpenDiagram), context); } } @Override protected int getNewViewsIndex(EObject object, List<EObject> childModelElements, View associatedViewOnOpenDiagram) { if (!((MindMapElement) object).isExpanded()) { return -1; } return 0; } @Override protected boolean canAddChildView(View view, EObject candidate) { boolean canAdd = super.canAddChildView(view, candidate); if (canAdd) { return ((MindMapElement) view.getDiagrammableElement()).isExpanded(); } return canAdd; } @Override protected Node createChildView(View associatedViewOnOpenDiagram, EObject child, Map<String, Object> context) { MindMapNode node = NotationFactory.eINSTANCE.createMindMapNode(); node.setViewType(getCodeSyncElement(child).getType()); return node; } @Override protected Node addChildView(View associatedViewOnOpenDiagram, EObject child, int newViewsIndex, Map<String, Object> context) { Node node = super.addChildView(associatedViewOnOpenDiagram, child, newViewsIndex, context); if (((MindMapElement) child).isExpanded()) { // process children recursive if expanded processChildren(child, getChildrenForCodeSyncElement(child), node, new ArrayList<Node>(), context); } return node; } @Override protected void removeChildView(View associatedViewOnOpenDiagram, EObject child, Map<String, Object> context) { super.removeChildView(associatedViewOnOpenDiagram, child, context); // remove children recursive for (Iterator<Node> it = getChildrenForView(associatedViewOnOpenDiagram).iterator(); it.hasNext();) { View view = it.next(); removeChildView(view, view.getDiagrammableElement(), context); } } @Override protected CodeSyncElement createModelElementChild(EObject object, View child) { return null; } }