/****************************************************************************** * Copyright (c) 2016 Oracle * 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 * * Contributors: * Ling Hao - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.sapphire.ui.swt.gef.parts; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartFactory; import org.eclipse.sapphire.ui.swt.gef.DiagramConfigurationManager; import org.eclipse.sapphire.ui.swt.gef.model.DiagramConnectionLabelModel; import org.eclipse.sapphire.ui.swt.gef.model.DiagramConnectionModel; import org.eclipse.sapphire.ui.swt.gef.model.DiagramModel; import org.eclipse.sapphire.ui.swt.gef.model.DiagramNodeModel; import org.eclipse.sapphire.ui.swt.gef.model.ImageModel; import org.eclipse.sapphire.ui.swt.gef.model.LineShapeModel; import org.eclipse.sapphire.ui.swt.gef.model.RectangleModel; import org.eclipse.sapphire.ui.swt.gef.model.ShapeFactoryModel; import org.eclipse.sapphire.ui.swt.gef.model.SpacerModel; import org.eclipse.sapphire.ui.swt.gef.model.TextModel; import org.eclipse.sapphire.ui.swt.gef.model.ValidationMarkerModel; /** * @author <a href="mailto:ling.hao@oracle.com">Ling Hao</a> */ public class SapphireDiagramEditorEditPartFactory implements EditPartFactory { private DiagramConfigurationManager configManager; public SapphireDiagramEditorEditPartFactory(DiagramConfigurationManager configManager) { this.configManager = configManager; } /* * (non-Javadoc) * * @see * org.eclipse.gef.EditPartFactory#createEditPart(org.eclipse.gef.EditPart, * java.lang.Object) */ public EditPart createEditPart(EditPart context, Object modelElement) { // get EditPart for model element EditPart part = getPartForElement(modelElement); // store model element in EditPart part.setModel(modelElement); return part; } /** * Maps an object to an EditPart. * * @throws RuntimeException * if no match was found (programming error) */ private EditPart getPartForElement(Object model) { if (model instanceof DiagramModel) { return new SapphireDiagramEditorPageEditPart(this.configManager); } if (model instanceof DiagramNodeModel) { return new DiagramNodeEditPart(this.configManager); } if (model instanceof TextModel) { return new TextEditPart(this.configManager); } if (model instanceof ImageModel) { return new ImageEditPart(this.configManager); } if (model instanceof LineShapeModel) { return new LineShapeEditPart(this.configManager); } if (model instanceof ValidationMarkerModel) { return new ValidationMarkerEditPart(this.configManager); } if (model instanceof RectangleModel) { return new ContainerShapeEditPart(this.configManager); } if (model instanceof ShapeFactoryModel) { return new ShapeFactoryEditPart(this.configManager); } if (model instanceof SpacerModel) { return new SpacerEditPart(this.configManager); } if (model instanceof DiagramConnectionModel) { return new DiagramConnectionEditPart(this.configManager); } if (model instanceof DiagramConnectionLabelModel) { return new DiagramConnectionLabelEditPart(this.configManager); } throw new RuntimeException("Can't create part for model: " + ((model != null) ? model.getClass().getName() : "null")); } }