/* * Copyright (c) 2006, 2007 Borland Software Corporation. * 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: * Richard Gronback (Borland) - initial API and implementation */ package org.eclipse.gmf.examples.mindmap.rcp.edit.policies; import org.eclipse.emf.common.command.CompoundCommand; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.UnexecutableCommand; import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy; import org.eclipse.gef.requests.CreateConnectionRequest; import org.eclipse.gef.requests.ReconnectRequest; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateRelationship4002Command; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateRelationship4002StartCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateRelationship4003Command; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateRelationship4003StartCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateRelationship4004Command; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateRelationship4004StartCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateTopic_Subtopics4001Command; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.CreateTopic_Subtopics4001StartCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectRelationship4002SourceCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectRelationship4002TargetCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectRelationship4003SourceCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectRelationship4003TargetCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectRelationship4004SourceCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectRelationship4004TargetCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectTopic_Subtopics4001SourceCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.commands.ReconnectTopic_Subtopics4001TargetCommand; import org.eclipse.gmf.examples.mindmap.rcp.edit.parts.MapEditPart; import org.eclipse.gmf.examples.mindmap.rcp.edit.parts.Relationship2EditPart; import org.eclipse.gmf.examples.mindmap.rcp.edit.parts.Relationship3EditPart; import org.eclipse.gmf.examples.mindmap.rcp.edit.parts.RelationshipEditPart; import org.eclipse.gmf.examples.mindmap.rcp.edit.parts.TopicSubtopicsEditPart; import org.eclipse.gmf.examples.mindmap.rcp.part.MindmapVisualIDRegistry; import org.eclipse.gmf.runtime.lite.commands.WrappingCommand; import org.eclipse.gmf.runtime.lite.requests.CreateConnectionRequestEx; import org.eclipse.gmf.runtime.notation.Edge; import org.eclipse.gmf.runtime.notation.Node; /** * @generated */ public class TopicGraphicalNodeEditPolicy extends GraphicalNodeEditPolicy { /** * @generated */ protected Command getConnectionCreateCommand(CreateConnectionRequest request) { if (request instanceof CreateConnectionRequestEx) { CreateConnectionRequestEx requestEx = (CreateConnectionRequestEx) request; if (!MapEditPart.MODEL_ID.equals(requestEx.getModelID())) { return null; } int[] visualIds = requestEx.getVisualIds(); CompoundCommand result = new CompoundCommand(); for (int i = 0; i < visualIds.length; i++) { int nextVisualId = visualIds[i]; switch (nextVisualId) { case TopicSubtopicsEditPart.VISUAL_ID: result .appendIfCanExecute(new CreateTopic_Subtopics4001StartCommand( requestEx)); break; case RelationshipEditPart.VISUAL_ID: result .appendIfCanExecute(new CreateRelationship4002StartCommand( requestEx)); break; case Relationship2EditPart.VISUAL_ID: result .appendIfCanExecute(new CreateRelationship4003StartCommand( requestEx)); break; case Relationship3EditPart.VISUAL_ID: result .appendIfCanExecute(new CreateRelationship4004StartCommand( requestEx)); break; } } if (!result.canExecute()) { return null; } Command wrappedResult = new WrappingCommand(TransactionUtil .getEditingDomain(((Node) getHost().getModel()) .getDiagram().getElement()), result); request.setStartCommand(wrappedResult); return wrappedResult; } return null; } /** * @generated */ protected Command getConnectionCompleteCommand( CreateConnectionRequest request) { if (request instanceof CreateConnectionRequestEx) { if (request.getStartCommand() == null || !request.getStartCommand().canExecute()) { return UnexecutableCommand.INSTANCE; } CreateConnectionRequestEx requestEx = (CreateConnectionRequestEx) request; if (!MapEditPart.MODEL_ID.equals(requestEx.getModelID())) { return null; } int[] visualIds = requestEx.getVisualIds(); CompoundCommand result = new CompoundCommand(); for (int i = 0; i < visualIds.length; i++) { int nextVisualId = visualIds[i]; switch (nextVisualId) { case TopicSubtopicsEditPart.VISUAL_ID: result .appendIfCanExecute(new CreateTopic_Subtopics4001Command( requestEx)); break; case RelationshipEditPart.VISUAL_ID: result .appendIfCanExecute(new CreateRelationship4002Command( requestEx)); break; case Relationship2EditPart.VISUAL_ID: result .appendIfCanExecute(new CreateRelationship4003Command( requestEx)); break; case Relationship3EditPart.VISUAL_ID: result .appendIfCanExecute(new CreateRelationship4004Command( requestEx)); break; } } if (result.getCommandList().size() != 1 || !result.canExecute()) { //Cannot create several connections at once. return UnexecutableCommand.INSTANCE; } return request.getStartCommand().chain( new WrappingCommand(TransactionUtil .getEditingDomain(((Node) getHost().getModel()) .getDiagram().getElement()), result)); } return null; } /** * @generated */ protected Command getReconnectSourceCommand(ReconnectRequest request) { ConnectionEditPart connection = request.getConnectionEditPart(); if (connection.getModel() instanceof Edge == false) { return null; } Edge edge = (Edge) connection.getModel(); String modelID = MindmapVisualIDRegistry.getModelID(edge); if (!MapEditPart.MODEL_ID.equals(modelID)) { return null; } org.eclipse.emf.common.command.Command result = null; int visualID = MindmapVisualIDRegistry.getVisualID(edge); switch (visualID) { case TopicSubtopicsEditPart.VISUAL_ID: result = new ReconnectTopic_Subtopics4001SourceCommand(request); break; case RelationshipEditPart.VISUAL_ID: result = new ReconnectRelationship4002SourceCommand(request); break; case Relationship2EditPart.VISUAL_ID: result = new ReconnectRelationship4003SourceCommand(request); break; case Relationship3EditPart.VISUAL_ID: result = new ReconnectRelationship4004SourceCommand(request); break; } if (result == null || !result.canExecute()) { return null; } return new WrappingCommand(TransactionUtil .getEditingDomain(((Node) getHost().getModel()).getDiagram() .getElement()), result); } /** * @generated */ protected Command getReconnectTargetCommand(ReconnectRequest request) { ConnectionEditPart connection = request.getConnectionEditPart(); if (connection.getModel() instanceof Edge == false) { return null; } Edge edge = (Edge) connection.getModel(); String modelID = MindmapVisualIDRegistry.getModelID(edge); if (!MapEditPart.MODEL_ID.equals(modelID)) { return null; } org.eclipse.emf.common.command.Command result = null; int visualID = MindmapVisualIDRegistry.getVisualID(edge); switch (visualID) { case TopicSubtopicsEditPart.VISUAL_ID: result = new ReconnectTopic_Subtopics4001TargetCommand(request); break; case RelationshipEditPart.VISUAL_ID: result = new ReconnectRelationship4002TargetCommand(request); break; case Relationship2EditPart.VISUAL_ID: result = new ReconnectRelationship4003TargetCommand(request); break; case Relationship3EditPart.VISUAL_ID: result = new ReconnectRelationship4004TargetCommand(request); break; } if (result == null || !result.canExecute()) { return null; } return new WrappingCommand(TransactionUtil .getEditingDomain(((Node) getHost().getModel()).getDiagram() .getElement()), result); } }