| /* |
| * 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.cdo.dawn.examples.acore.graphiti.util.AcoreGraphitiContextUtil; |
| import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.util.AcoreGraphitiContextUtil.ConnectionType; |
| |
| import org.eclipse.emf.ecore.EObject; |
| |
| import org.eclipse.graphiti.features.IFeatureProvider; |
| import org.eclipse.graphiti.features.context.ICreateConnectionContext; |
| import org.eclipse.graphiti.features.context.impl.AddConnectionContext; |
| import org.eclipse.graphiti.features.impl.AbstractCreateConnectionFeature; |
| import org.eclipse.graphiti.mm.pictograms.Anchor; |
| import org.eclipse.graphiti.mm.pictograms.Connection; |
| |
| /** |
| * @author Martin Fluegge |
| */ |
| public abstract class AcoreBasicCreateConnectionFeature extends AbstractCreateConnectionFeature |
| { |
| public AcoreBasicCreateConnectionFeature(IFeatureProvider fp, String name, String description) |
| { |
| super(fp, name, description); |
| } |
| |
| public boolean canCreate(ICreateConnectionContext context) |
| { |
| EObject source = getSource(context.getSourceAnchor()); |
| EObject target = getTarget(context.getTargetAnchor()); |
| if (source != null && target != null && source != target) |
| { |
| return true; |
| } |
| return false; |
| } |
| |
| public abstract boolean canStartConnection(ICreateConnectionContext context); |
| |
| public Connection create(ICreateConnectionContext context) |
| { |
| Connection newConnection = null; |
| |
| // get AClasses which should be connected |
| EObject source = getSource(context.getSourceAnchor()); |
| EObject target = getTarget(context.getTargetAnchor()); |
| |
| if (source != null && target != null) |
| { |
| // create new business object |
| createConnection(source, target); |
| // add connection for business object |
| AddConnectionContext addContext = new AddConnectionContext(context.getSourceAnchor(), context.getTargetAnchor()); |
| |
| addContext.putProperty(AcoreGraphitiContextUtil.CONNECTTION_TYPE, getConnectionType()); |
| |
| addContext.setNewObject(source); |
| newConnection = (Connection)getFeatureProvider().addIfPossible(addContext); |
| } |
| |
| return newConnection; |
| } |
| |
| protected abstract ConnectionType getConnectionType(); |
| |
| protected abstract EObject getTarget(Anchor targetAnchor); |
| |
| /** |
| * Returns the AClass belonging to the anchor, or null if not available. |
| */ |
| protected abstract EObject getSource(Anchor anchor); |
| |
| /** |
| * Creates a EReference between two AClasses. |
| */ |
| protected abstract void createConnection(EObject source, EObject target); |
| } |