blob: 706a44a14e3e03d590751fd3a6b927d0fbd6f052 [file] [log] [blame]
/*
* Copyright (c) 2011-2013, 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.diagram;
import org.eclipse.emf.cdo.dawn.examples.acore.AClass;
import org.eclipse.emf.cdo.dawn.examples.acore.AInterface;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddAClassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddAInterfaceFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddAggregationFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddAssociationFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddCompositionFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddImplementationFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreAddSubClassesFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCopyAClassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateAClassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateAInterfaceFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateAggregationFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateAssociationFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateCompositionsFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateImplementationFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreCreateSubclassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreDirectEditAClassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcorePasteAClassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreReconnectionFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreRenameAClassFeature;
import org.eclipse.emf.cdo.dawn.examples.acore.graphiti.features.AcoreUpdateAClassFeature;
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.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.ICopyFeature;
import org.eclipse.graphiti.features.ICreateConnectionFeature;
import org.eclipse.graphiti.features.ICreateFeature;
import org.eclipse.graphiti.features.IDirectEditingFeature;
import org.eclipse.graphiti.features.IFeature;
import org.eclipse.graphiti.features.IPasteFeature;
import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
import org.eclipse.graphiti.features.context.IAddConnectionContext;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.ICopyContext;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.features.context.IDirectEditingContext;
import org.eclipse.graphiti.features.context.IPasteContext;
import org.eclipse.graphiti.features.context.IPictogramElementContext;
import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.features.custom.ICustomFeature;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.ui.features.DefaultFeatureProvider;
/**
* @author Martin Fluegge
*/
public class AcoreFeatureProvider extends DefaultFeatureProvider
{
public AcoreFeatureProvider(IDiagramTypeProvider dtp)
{
super(dtp);
}
@Override
public ICreateFeature[] getCreateFeatures()
{
return new ICreateFeature[] { new AcoreCreateAClassFeature(this), new AcoreCreateAInterfaceFeature(this) };
}
@Override
public ICreateConnectionFeature[] getCreateConnectionFeatures()
{
return new ICreateConnectionFeature[] { new AcoreCreateSubclassFeature(this),
new AcoreCreateImplementationFeature(this), new AcoreCreateAssociationFeature(this),
new AcoreCreateAggregationFeature(this), new AcoreCreateCompositionsFeature(this) };
}
@Override
public IAddFeature getAddFeature(IAddContext context)
{
if (context instanceof IAddConnectionContext)
{
ConnectionType connectionType = (ConnectionType)context.getProperty(AcoreGraphitiContextUtil.CONNECTTION_TYPE);
switch (connectionType)
{
case SUBCLASSES:
{
return new AcoreAddSubClassesFeature(this);
}
case IMPLEMENTATIONS:
{
return new AcoreAddImplementationFeature(this);
}
case AGGREGATIONS:
{
return new AcoreAddAggregationFeature(this);
}
case ASSOCIATIONS:
{
return new AcoreAddAssociationFeature(this);
}
case COMPOSITIONS:
{
return new AcoreAddCompositionFeature(this);
}
default:
break;
}
}
else
{
if (context.getNewObject() instanceof AClass)
{
return new AcoreAddAClassFeature(this);
}
else if (context.getNewObject() instanceof AInterface)
{
return new AcoreAddAInterfaceFeature(this);
}
}
return super.getAddFeature(context);
}
@Override
public IUpdateFeature getUpdateFeature(IUpdateContext context)
{
PictogramElement pictogramElement = context.getPictogramElement();
if (pictogramElement instanceof ContainerShape)
{
Object bo = getBusinessObjectForPictogramElement(pictogramElement);
if (bo instanceof AClass)
{
return new AcoreUpdateAClassFeature(this);
}
}
return super.getUpdateFeature(context);
}
@Override
public IFeature[] getDragAndDropFeatures(IPictogramElementContext context)
{
// simply return all create connection features
return getCreateConnectionFeatures();
}
@Override
public IReconnectionFeature getReconnectionFeature(IReconnectionContext context)
{
return new AcoreReconnectionFeature(this);
}
@Override
public IDirectEditingFeature getDirectEditingFeature(IDirectEditingContext context)
{
PictogramElement pe = context.getPictogramElement();
Object bo = getBusinessObjectForPictogramElement(pe);
if (bo instanceof AClass)
{
return new AcoreDirectEditAClassFeature(this);
}
return super.getDirectEditingFeature(context);
}
@Override
public ICopyFeature getCopyFeature(ICopyContext context)
{
return new AcoreCopyAClassFeature(this);
}
@Override
public IPasteFeature getPasteFeature(IPasteContext context)
{
return new AcorePasteAClassFeature(this);
}
@Override
public ICustomFeature[] getCustomFeatures(ICustomContext context)
{
return new ICustomFeature[] { new AcoreRenameAClassFeature(this) };
}
}