/* * 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.AClass; 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.mm.pictograms.Anchor; /** * @author Martin Fluegge */ public class AcoreCreateAggregationFeature extends AcoreBasicCreateConnectionFeature { public AcoreCreateAggregationFeature(IFeatureProvider fp) { // provide name and description for the UI, e.g. the palette super(fp, "aggregation", "aggregation"); } @Override public boolean canCreate(ICreateConnectionContext context) { // return true if both anchors belong to an AClass // and those AClasses are not identical AClass source = getAClass(context.getSourceAnchor()); AClass target = getAClass(context.getTargetAnchor()); if (source != null && target != null && source != target) { return true; } return false; } @Override public boolean canStartConnection(ICreateConnectionContext context) { if (getAClass(context.getSourceAnchor()) != null) { return true; } return false; } /** * Creates a EReference between two AClasses. */ @Override protected void createConnection(EObject source, EObject target) { ((AClass)source).getAssociations().add((AClass)target); } @Override protected EObject getTarget(Anchor targetAnchor) { return getAClass(targetAnchor); } @Override protected EObject getSource(Anchor anchor) { return getAClass(anchor); } @Override protected ConnectionType getConnectionType() { return ConnectionType.AGGREGATIONS; } /** * Returns the AClass belonging to the anchor, or null if not available. */ private AClass getAClass(Anchor anchor) { if (anchor != null) { Object object = getBusinessObjectForPictogramElement(anchor.getParent()); if (object instanceof AClass) { return (AClass)object; } } return null; } }