| /******************************************************************************* |
| * <copyright> |
| * |
| * Copyright (c) 2005, 2010 SAP AG. |
| * 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: |
| * SAP AG - initial API, implementation and documentation |
| * |
| * </copyright> |
| * |
| *******************************************************************************/ |
| /** |
| * |
| */ |
| package org.eclipse.graphiti.features; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.graphiti.features.context.IAddBendpointContext; |
| import org.eclipse.graphiti.features.context.IAddContext; |
| import org.eclipse.graphiti.features.context.IContext; |
| import org.eclipse.graphiti.features.context.ICustomContext; |
| import org.eclipse.graphiti.features.context.IDeleteContext; |
| import org.eclipse.graphiti.features.context.IDirectEditingContext; |
| import org.eclipse.graphiti.features.context.ILayoutContext; |
| import org.eclipse.graphiti.features.context.IMoveAnchorContext; |
| import org.eclipse.graphiti.features.context.IMoveBendpointContext; |
| import org.eclipse.graphiti.features.context.IMoveConnectionDecoratorContext; |
| import org.eclipse.graphiti.features.context.IMoveShapeContext; |
| 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.IRemoveBendpointContext; |
| import org.eclipse.graphiti.features.context.IRemoveContext; |
| import org.eclipse.graphiti.features.context.IResizeShapeContext; |
| import org.eclipse.graphiti.features.context.IUpdateContext; |
| import org.eclipse.graphiti.features.custom.ICustomFeature; |
| import org.eclipse.graphiti.features.impl.Reason; |
| import org.eclipse.graphiti.tb.IToolBehaviorProvider; |
| |
| /** |
| * The Class ConfigurableFeatureProviderWrapper. |
| */ |
| public class ConfigurableFeatureProviderWrapper extends DefaultFeatureProviderWrapper { |
| |
| /** |
| * Creates a new {@link ConfigurableFeatureProviderWrapper}. |
| * |
| * @param innerFeatureProvider |
| * the inner feature provider |
| */ |
| public ConfigurableFeatureProviderWrapper(IFeatureProvider innerFeatureProvider) { |
| super(innerFeatureProvider); |
| } |
| |
| @Override |
| public IReason canAdd(IAddContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowAdd(context)) { |
| return super.canAdd(context); |
| } else { |
| return Reason.createFalseReason(); |
| } |
| } |
| |
| @Override |
| public IReason canLayout(ILayoutContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowLayout(context)) { |
| return super.canLayout(context); |
| } else { |
| return Reason.createFalseReason(); |
| } |
| } |
| |
| @Override |
| public IReason canUpdate(IUpdateContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowUpdate(context)) { |
| return super.canUpdate(context); |
| } else { |
| return Reason.createFalseReason(); |
| } |
| } |
| |
| @Override |
| public IAddBendpointFeature getAddBendpointFeature(IAddBendpointContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowAdd(context)) { |
| return super.getAddBendpointFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IAddFeature getAddFeature(IAddContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowAdd(context)) { |
| return super.getAddFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public ICreateConnectionFeature[] getCreateConnectionFeatures() { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowCreate()) { |
| return super.getCreateConnectionFeatures(); |
| } else { |
| return new ICreateConnectionFeature[0]; |
| } |
| } |
| |
| @Override |
| public ICreateFeature[] getCreateFeatures() { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowCreate()) { |
| return super.getCreateFeatures(); |
| } else { |
| return new ICreateFeature[0]; |
| } |
| } |
| |
| @Override |
| public ICustomFeature[] getCustomFeatures(ICustomContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null) { |
| return super.getCustomFeatures(context); |
| } else if (featureChecker.allowCustomFeatures(context)) { |
| ICustomFeature[] customFeatures = super.getCustomFeatures(context); |
| return filterAllowedCustomFeatures(customFeatures, context); |
| } else { |
| return new ICustomFeature[0]; |
| } |
| } |
| |
| private ICustomFeature[] filterAllowedCustomFeatures(ICustomFeature[] features, IContext context) { |
| List<ICustomFeature> retList = new ArrayList<ICustomFeature>(); |
| for (int i = 0; i < features.length; i++) { |
| ICustomFeature feature = features[i]; |
| if (getFeatureChecker().allow(feature, context)) { |
| retList.add(feature); |
| } |
| } |
| return retList.toArray(new ICustomFeature[0]); |
| } |
| |
| @Override |
| public IDeleteFeature getDeleteFeature(IDeleteContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowDelete(context)) { |
| return super.getDeleteFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IDirectEditingFeature getDirectEditingFeature(IDirectEditingContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowAdd(context)) { |
| return super.getDirectEditingFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IFeature[] getDragAndDropFeatures(IPictogramElementContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowDragAndDrop(context)) { |
| return super.getDragAndDropFeatures(context); |
| } else { |
| return new IFeature[0]; |
| } |
| } |
| |
| protected IFeatureChecker getFeatureChecker() { |
| IToolBehaviorProvider currentToolBehaviorProvider = getDiagramTypeProvider().getCurrentToolBehaviorProvider(); |
| if (currentToolBehaviorProvider instanceof IFeatureCheckerHolder) { |
| IFeatureCheckerHolder holder = (IFeatureCheckerHolder) currentToolBehaviorProvider; |
| IFeatureChecker featureChecker = holder.getFeatureChecker(); |
| return featureChecker; |
| } |
| return null; |
| } |
| |
| @Override |
| public ILayoutFeature getLayoutFeature(ILayoutContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowAdd(context)) { |
| return super.getLayoutFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IMoveAnchorFeature getMoveAnchorFeature(IMoveAnchorContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowMove(context)) { |
| return super.getMoveAnchorFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IMoveBendpointFeature getMoveBendpointFeature(IMoveBendpointContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowMove(context)) { |
| return super.getMoveBendpointFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IMoveConnectionDecoratorFeature getMoveConnectionDecoratorFeature(IMoveConnectionDecoratorContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowMove(context)) { |
| return super.getMoveConnectionDecoratorFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IMoveShapeFeature getMoveShapeFeature(IMoveShapeContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowMove(context)) { |
| return super.getMoveShapeFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IPasteFeature getPasteFeature(IPasteContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowPaste(context)) { |
| return super.getPasteFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IReconnectionFeature getReconnectionFeature(IReconnectionContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowReconnect(context)) { |
| return super.getReconnectionFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IRemoveBendpointFeature getRemoveBendpointFeature(IRemoveBendpointContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowRemove(context)) { |
| return super.getRemoveBendpointFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IRemoveFeature getRemoveFeature(IRemoveContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowRemove(context)) { |
| return super.getRemoveFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IResizeShapeFeature getResizeShapeFeature(IResizeShapeContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowResize(context)) { |
| return super.getResizeShapeFeature(context); |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public IUpdateFeature getUpdateFeature(IUpdateContext context) { |
| IFeatureChecker featureChecker = getFeatureChecker(); |
| if (featureChecker == null || featureChecker.allowUpdate(context)) { |
| return super.getUpdateFeature(context); |
| } else { |
| return null; |
| } |
| } |
| } |