blob: 0d1b6ddce829e1299436e6d7ac332c9eb0b70f1f [file] [log] [blame]
/*******************************************************************************
* <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;
}
}
}