package org.eclipse.xtext.example.fowlerdsl.diagram.providers; import org.eclipse.graphiti.dt.IDiagramTypeProvider; import org.eclipse.graphiti.features.IAddFeature; import org.eclipse.graphiti.features.ICreateConnectionFeature; import org.eclipse.graphiti.features.ICreateFeature; import org.eclipse.graphiti.features.IUpdateFeature; import org.eclipse.graphiti.features.context.IAddContext; import org.eclipse.graphiti.features.context.IUpdateContext; import org.eclipse.graphiti.ui.features.DefaultFeatureProvider; import org.eclipse.xtext.example.fowlerdsl.diagram.features.add.AddStateFeature; import org.eclipse.xtext.example.fowlerdsl.diagram.features.add.AddTransitionFeature; import org.eclipse.xtext.example.fowlerdsl.diagram.features.create.CreateStateFeature; import org.eclipse.xtext.example.fowlerdsl.diagram.features.create.CreateTransitionFeature; import org.eclipse.xtext.example.fowlerdsl.diagram.features.update.UpdateStateFeature; import org.eclipse.xtext.example.fowlerdsl.diagram.features.update.UpdateTransitionFeature; import org.eclipse.xtext.example.fowlerdsl.statemachine.State; import org.eclipse.xtext.example.fowlerdsl.statemachine.Transition; public class FowlerDslFeatureProvider extends DefaultFeatureProvider { public FowlerDslFeatureProvider(IDiagramTypeProvider dtp) { super(dtp); } @Override public IAddFeature getAddFeature(IAddContext context) { if (context.getNewObject() instanceof State) { return new AddStateFeature(this); } else if (context.getNewObject() instanceof Transition) { return new AddTransitionFeature(this); } return super.getAddFeature(context); } @Override public IUpdateFeature getUpdateFeature(IUpdateContext context) { UpdateStateFeature us = new UpdateStateFeature(this); if(us.canUpdate(context)) { return us; } else { UpdateTransitionFeature ts = new UpdateTransitionFeature(this); if(ts.canUpdate(context)) { return ts; } } return super.getUpdateFeature(context); } @Override public ICreateFeature[] getCreateFeatures() { return new ICreateFeature[] { new CreateStateFeature(this) }; } @Override public ICreateConnectionFeature[] getCreateConnectionFeatures() { return new ICreateConnectionFeature[] { new CreateTransitionFeature( this) }; } }