blob: 513914793c0bed0dc07a63f88318daf4dd3950d6 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2011, 2019 SAP SE
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* SAP SE - initial API, implementation and documentation
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.graphiti.examples.chess.diagram;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.examples.chess.MoveUtil;
import org.eclipse.graphiti.examples.chess.features.AddChessBoardFeature;
import org.eclipse.graphiti.examples.chess.features.AddChessMoveFeature;
import org.eclipse.graphiti.examples.chess.features.AddChessPieceFeature;
import org.eclipse.graphiti.examples.chess.features.CreateAllInitialChessPiecesFeature;
import org.eclipse.graphiti.examples.chess.features.CreateChessBoardFeature;
import org.eclipse.graphiti.examples.chess.features.CreateChessMoveFeature;
import org.eclipse.graphiti.examples.chess.features.MoveChessPieceFeature;
import org.eclipse.graphiti.examples.mm.chess.Board;
import org.eclipse.graphiti.examples.mm.chess.Piece;
import org.eclipse.graphiti.examples.mm.chess.Square;
import org.eclipse.graphiti.features.IAddBendpointFeature;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.ICreateConnectionFeature;
import org.eclipse.graphiti.features.ICreateFeature;
import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.IMoveBendpointFeature;
import org.eclipse.graphiti.features.IMoveShapeFeature;
import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IResizeShapeFeature;
import org.eclipse.graphiti.features.context.IAddBendpointContext;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.IDeleteContext;
import org.eclipse.graphiti.features.context.IMoveBendpointContext;
import org.eclipse.graphiti.features.context.IMoveShapeContext;
import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IResizeShapeContext;
import org.eclipse.graphiti.ui.features.DefaultFeatureProvider;
public class ChessFeatureProvider extends DefaultFeatureProvider {
private boolean programmaticFeatureCallActive = false;
public ChessFeatureProvider(IDiagramTypeProvider dtp) {
super(dtp);
}
public boolean isProgrammaticFeatureCallActive() {
return programmaticFeatureCallActive;
}
public void setProgrammaticFeatureCallActive(boolean programmaticFeatureCallActive) {
this.programmaticFeatureCallActive = programmaticFeatureCallActive;
}
@Override
public ICreateFeature[] getCreateFeatures() {
return new ICreateFeature[] { new CreateChessBoardFeature(this), new CreateAllInitialChessPiecesFeature(this) };
}
@Override
public ICreateConnectionFeature[] getCreateConnectionFeatures() {
return new ICreateConnectionFeature[] { new CreateChessMoveFeature(this) };
}
@Override
public IAddFeature getAddFeature(IAddContext context) {
Object newObject = context.getNewObject();
if (newObject instanceof Board) {
return new AddChessBoardFeature(this);
} else if (newObject instanceof Piece) {
return new AddChessPieceFeature(this);
} else if (newObject == null) {
if (context.getProperty(MoveUtil.PROPERTY_MOVE) == Boolean.TRUE) {
return new AddChessMoveFeature(this);
}
}
return super.getAddFeature(context);
}
@Override
public IRemoveFeature getRemoveFeature(IRemoveContext context) {
Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement());
if (bo instanceof Board) {
// No removal allowed for the board
return null;
}
if (bo instanceof Square) {
// No removal allowed for squares
return null;
}
if (bo instanceof Piece && !programmaticFeatureCallActive) {
// No removal allowed for pieces unless it is triggered by a tool
// call
return null;
}
return super.getRemoveFeature(context);
}
@Override
public IDeleteFeature getDeleteFeature(IDeleteContext context) {
Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement());
if (bo instanceof Board) {
// No deletion allowed for the board
return null;
}
if (bo instanceof Square) {
// No deletion allowed for squares
return null;
}
if (bo instanceof Piece && !programmaticFeatureCallActive) {
// No deletion allowed for pieces unless it is triggered by a tool
// call
return null;
}
return super.getDeleteFeature(context);
}
@Override
public IResizeShapeFeature getResizeShapeFeature(IResizeShapeContext context) {
Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement());
if (bo instanceof Board) {
// No resize allowed for the board
return null;
}
if (bo instanceof Square) {
// No resize allowed for squares
return null;
}
if (bo instanceof Piece) {
// No resize allowed for pieces
return null;
}
return super.getResizeShapeFeature(context);
}
@Override
public IMoveShapeFeature getMoveShapeFeature(IMoveShapeContext context) {
Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement());
if (bo instanceof Square) {
// No move allowed for squares
return null;
} else if (bo instanceof Piece) {
return new MoveChessPieceFeature(this);
}
return super.getMoveShapeFeature(context);
}
@Override
public IReconnectionFeature getReconnectionFeature(IReconnectionContext context) {
// We only have move connections which we don't want to be reconnected
return null;
}
@Override
public IAddBendpointFeature getAddBendpointFeature(IAddBendpointContext context) {
// We only have move connections; for all these connections the used
// free form connection shall behave like a direct connection
return null;
}
@Override
public IMoveBendpointFeature getMoveBendpointFeature(IMoveBendpointContext context) {
// We only have move connections; for all these connections the used
// free form connection shall behave like a direct connection
return null;
}
}