/* * Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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 * * Contributors: * Martin Fluegge - initial API and implementation * */ package org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features; import org.eclipse.emf.ecore.EObject; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.context.IAddConnectionContext; import org.eclipse.graphiti.features.context.IAddContext; import org.eclipse.graphiti.features.impl.AbstractAddFeature; import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer; import org.eclipse.graphiti.mm.algorithms.Polyline; import org.eclipse.graphiti.mm.algorithms.Text; import org.eclipse.graphiti.mm.pictograms.Connection; import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.services.IGaService; import org.eclipse.graphiti.services.IPeCreateService; import org.eclipse.graphiti.util.IColorConstant; /** * @author Martin Fluegge */ public abstract class AcoreBasicAddConnectionFeature extends AbstractAddFeature { public AcoreBasicAddConnectionFeature(IFeatureProvider fp) { super(fp); } public PictogramElement add(IAddContext context) { IAddConnectionContext addConContext = (IAddConnectionContext)context; // EReference addedEReference = (EReference)context.getNewObject(); EObject addedObject = (EObject)context.getNewObject(); IPeCreateService peCreateService = Graphiti.getPeCreateService(); // CONNECTION WITH POLYLINE Connection connection = peCreateService.createFreeFormConnection(getDiagram()); connection.setStart(addConContext.getSourceAnchor()); connection.setEnd(addConContext.getTargetAnchor()); IGaService gaService = Graphiti.getGaService(); Polyline polyline = gaService.createPolyline(connection); polyline.setLineWidth(2); polyline.setForeground(manageColor(IColorConstant.BLACK)); // we need to put in an object, otherwise the line will be marked dotted // link(connection, addedObject); ConnectionDecorator textDecorator = peCreateService.createConnectionDecorator(connection, true, 0.5, true); Text text = gaService.createDefaultText(getDiagram(), textDecorator); text.setForeground(manageColor(IColorConstant.BLACK)); gaService.setLocation(text, 10, 0); text.setValue(getConnectionLabel()); ConnectionDecorator cd; cd = peCreateService.createConnectionDecorator(connection, false, 1.0, true); createTargetDecoration(cd); return connection; } protected abstract String getConnectionLabel(); public abstract boolean canAdd(IAddContext context); protected abstract Polyline createTargetDecoration(GraphicsAlgorithmContainer gaContainer); }