/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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.
*/
package gov.redhawk.core.graphiti.sad.ui.diagram.providers;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.ILayoutFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
import org.eclipse.graphiti.features.context.IContext;
import org.eclipse.graphiti.features.context.IDeleteContext;
import org.eclipse.graphiti.features.context.ILayoutContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.mm.pictograms.Connection;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import gov.redhawk.core.graphiti.sad.ui.diagram.feature.FastRemoveFeature;
import gov.redhawk.core.graphiti.sad.ui.internal.diagram.feature.WaveformUpdateDiagramFeature;
import gov.redhawk.core.graphiti.sad.ui.internal.diagram.feature.SADConnectionInterfaceDeleteFeature;
import gov.redhawk.core.graphiti.sad.ui.internal.diagram.feature.SADConnectionInterfaceUpdateFeature;
import gov.redhawk.core.graphiti.sad.ui.internal.diagram.patterns.ComponentPattern;
import gov.redhawk.core.graphiti.sad.ui.internal.diagram.patterns.SADConnectInterfacePattern;
import gov.redhawk.core.graphiti.ui.diagram.providers.AbstractGraphitiFeatureProvider;
public abstract class SADGraphitiFeatureProvider extends AbstractGraphitiFeatureProvider {
public SADGraphitiFeatureProvider(IDiagramTypeProvider diagramTypeProvider) {
super(diagramTypeProvider);
// Add component and connections
addPattern(new ComponentPattern());
addConnectionPattern(new SADConnectInterfacePattern());
}
@Override
public IUpdateFeature getUpdateFeature(IUpdateContext context) {
if (context.getPictogramElement() instanceof Diagram) {
return new WaveformUpdateDiagramFeature(this);
} else if (context.getPictogramElement() instanceof Connection) {
return new SADConnectionInterfaceUpdateFeature(this);
}
return super.getUpdateFeature(context);
}
@Override
public IDeleteFeature getDeleteFeature(IDeleteContext context) {
// If the element to be deleted is a connection, return the proper feature
final PictogramElement pe = context.getPictogramElement();
if (pe instanceof Connection) {
return new SADConnectionInterfaceDeleteFeature(this);
}
return super.getDeleteFeature(context);
}
@Override
public IRemoveFeature getRemoveFeature(IRemoveContext context) {
return new FastRemoveFeature(this) {
// overriding the method below causes Remove to NOT show up in context menus but still allows
// us to getRemoveFeature and execute it.
public boolean isAvailable(IContext context) {
return false;
}
};
}
@Override
public ILayoutFeature getLayoutFeature(ILayoutContext context) {
if (context == null) {
throw new IllegalArgumentException("Argument context must not be null."); //$NON-NLS-1$
}
return super.getLayoutFeature(context);
}
}