/*******************************************************************************
* Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package com.cisco.yangide.ext.model.editor.util;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.services.Graphiti;
import com.cisco.yangide.ext.model.ContainingNode;
import com.cisco.yangide.ext.model.ModelFactory;
import com.cisco.yangide.ext.model.Module;
import com.cisco.yangide.ext.model.Node;
public class DiagramImportSupport {
public static void importDiagram(Diagram diagram, IFeatureProvider fp) {
EObject obj = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(diagram);
if (null == obj) {
obj = ModelFactory.eINSTANCE.createModule();
fp.link(diagram, obj);
}
if (YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getModule(), obj)) {
drawShapes(((Module) obj).getChildren(), diagram, fp);
drawLines(((Module) obj).getChildren(), fp);
// YangModelUIUtil.layoutPictogramElement(diagram, fp);
}
}
public static void drawShapes(List<Node> list, ContainerShape cs, IFeatureProvider fp) {
for (Node n : list) {
int pos = cs.getGraphicsAlgorithm().getHeight();
if (cs instanceof Diagram) {
pos = 0;
}
PictogramElement pe = YangModelUIUtil.drawObject(n, cs, fp, 0, pos);
if (YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getContainingNode(), n) && null != pe
&& pe instanceof ContainerShape) {
drawShapes(((ContainingNode) n).getChildren(), (ContainerShape) pe, fp);
}
}
}
public static void drawLines(List<Node> list, IFeatureProvider fp) {
for (Node n : list) {
YangModelUIUtil.updateConnections(n, fp);
if (YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getContainingNode(), n)) {
drawLines(((ContainingNode) n).getChildren(), fp);
}
}
}
}