| /******************************************************************************* |
| * <copyright> |
| * |
| * Copyright (c) 2005, 2012 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 |
| * mgorning - Bug 329517 - state call backs during creation of a connection |
| * mwenz - Bug 325084 - Provide documentation for Patterns |
| * cbrand - Bug 376585 - Clean-up deprecations in Graphiti |
| * |
| * </copyright> |
| * |
| *******************************************************************************/ |
| package org.eclipse.graphiti.pattern; |
| |
| import org.eclipse.graphiti.features.context.IConnectionContext; |
| import org.eclipse.graphiti.features.context.ICreateConnectionContext; |
| import org.eclipse.graphiti.features.context.impl.AddConnectionContext; |
| import org.eclipse.graphiti.features.context.impl.LayoutContext; |
| import org.eclipse.graphiti.features.context.impl.UpdateContext; |
| import org.eclipse.graphiti.features.impl.AbstractCreateConnectionFeature; |
| import org.eclipse.graphiti.features.impl.AbstractLayoutFeature; |
| import org.eclipse.graphiti.features.impl.AbstractUpdateFeature; |
| import org.eclipse.graphiti.mm.pictograms.Connection; |
| import org.eclipse.graphiti.mm.pictograms.PictogramElement; |
| |
| /** |
| * This is the base class AbstractConnectionPattern that clients writing a |
| * pattern for a connection domain object should subclass. |
| */ |
| public abstract class AbstractConnectionPattern extends AbstractBasePattern implements IConnectionPattern { |
| |
| /** |
| * Creates a new {@link AbstractConnectionPattern}. |
| */ |
| public AbstractConnectionPattern() { |
| super(); |
| } |
| |
| /** |
| * Creates a new {@link AddConnectionContext} suitable for adding a |
| * connection for this pattern. The default implementation simply takes the |
| * source and target anchors of the provided |
| * {@link ICreateConnectionContext} and adds them to a newly created |
| * {@link AddConnectionContext} object. |
| * |
| * @param context |
| * The create connection context to be used as a basis for adding |
| * a connection. |
| * |
| * @return The {@link AddConnectionContext}. |
| */ |
| protected static AddConnectionContext getAddConnectionContext(ICreateConnectionContext context) { |
| AddConnectionContext result = new AddConnectionContext(context.getSourceAnchor(), context.getTargetAnchor()); |
| return result; |
| } |
| |
| /** |
| * Clients must override this method to indicate that the pattern can be |
| * used to create domain objects as defined in the given |
| * {@link ICreateConnectionContext}. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#canCreate(ICreateConnectionContext)} |
| * . The default implementation simply returns <code>false</code>. |
| * |
| * @param context |
| * The context holding information on the connection domain |
| * object to be created. |
| * @return <code>true</code> in case this pattern can create such a |
| * connection domain object, <code>false</code> otherwise. |
| */ |
| public boolean canCreate(ICreateConnectionContext context) { |
| return false; |
| } |
| |
| /** |
| * Clients must override this method to indicate that the pattern can be |
| * used to create domain objects <b>starting</b> from what is defined in the |
| * given {@link ICreateConnectionContext}. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#canStartConnection(ICreateConnectionContext)} |
| * . The default implementation simply returns <code>false</code>. |
| * |
| * @param context |
| * The context holding information on the connection domain |
| * object to be created. |
| * @return <code>true</code> in case this pattern can create such a |
| * connection domain object, <code>false</code> otherwise. |
| */ |
| public boolean canStartConnection(ICreateConnectionContext context) { |
| return false; |
| } |
| |
| /** |
| * Clients must override this method to implement the functionality to |
| * create a new connection domain object as defined in the given |
| * {@link ICreateConnectionContext}. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#create(ICreateConnectionContext)}. |
| * The default implementation simply does nothing and returns |
| * <code>null</code>. |
| * |
| * @param context |
| * The context holding information on the connection domain |
| * object to be created. |
| * @return The newly create {@link Connection} pictogram element. |
| */ |
| public Connection create(ICreateConnectionContext context) { |
| return null; |
| } |
| |
| /** |
| * Adds the graphical representation of the given new {@link Object} with |
| * the information in the given {@link IConnectionContext}. |
| * |
| * @param context |
| * The connection context for the new object |
| * @param newObject |
| * The new object instance itself |
| * |
| * @return The {@link Connection} prictogram element instance created for |
| * the connection domain object. |
| */ |
| protected Connection addGraphicalRepresentation(IConnectionContext context, Object newObject) { |
| AddConnectionContext newContext = new AddConnectionContext(context.getSourceAnchor(), context.getTargetAnchor()); |
| newContext.setNewObject(newObject); |
| return (Connection) getFeatureProvider().addIfPossible(newContext); |
| } |
| |
| /** |
| * Helper method that triggers a layout of the given |
| * {@link PictogramElement}. The default implementation queries the feature |
| * provider and tries to find a functionality either in the pattern of an |
| * additional {@link AbstractLayoutFeature} that can handle the request and |
| * triggers the operation. |
| * |
| * @param pe |
| * The pictogram element to layout |
| */ |
| protected void layoutPictogramElement(PictogramElement pe) { |
| LayoutContext context = new LayoutContext(pe); |
| getFeatureProvider().layoutIfPossible(context); |
| } |
| |
| /** |
| * Helper method that triggers an update of the given |
| * {@link PictogramElement}. The default implementation queries the feature |
| * provider and tries to find a functionality either in the pattern of an |
| * additional {@link AbstractUpdateFeature} that can handle the request and |
| * triggers the operation. |
| * |
| * @param pe |
| * The pictogram element to update |
| */ |
| protected void updatePictogramElement(PictogramElement pe) { |
| UpdateContext context = new UpdateContext(pe); |
| getFeatureProvider().updateIfPossible(context); |
| layoutPictogramElement(pe); |
| } |
| |
| /** |
| * Client should override to return a string description of the type of |
| * domain object that is created with this pattern. The Graphiti framework |
| * uses this information to fill a tooltip for the creation tool entry in |
| * the palette. The default implementation simply returns <code>null</code> |
| * which indicates that no tooltip shall be displayed. |
| * |
| * @return A {@link String} holding the tooltip |
| */ |
| public String getCreateDescription() { |
| return null; |
| } |
| |
| /** |
| * Client should override to return a string id of the the image icon for |
| * the domain object that is created with this pattern. The Graphiti |
| * framework uses this information to add an icon to the creation tool entry |
| * in the palette. The default implementation simply returns |
| * <code>null</code> which indicates that no icon shall be displayed. |
| * |
| * @return A {@link String} holding the id of the icon as defined in the |
| * AbstractImageProvider. |
| */ |
| public String getCreateImageId() { |
| return null; |
| } |
| |
| /** |
| * Client should override to return a string id of the the large image icon |
| * for the domain object that is created with this pattern. The Graphiti |
| * framework uses this information to add a large icon to the creation tool |
| * entry in the palette. The default implementation simply returns |
| * <code>null</code> which indicates that no icon shall be displayed. |
| * |
| * @return A {@link String} holding the id of the large icon as defined in |
| * the AbstractImageProvider. |
| */ |
| public String getCreateLargeImageId() { |
| return getCreateImageId(); |
| } |
| |
| /** |
| * Client should override to return the name of the domain object that is |
| * created with this pattern. The Graphiti framework uses this information |
| * to fill the text for the creation tool entry in the palette. The default |
| * implementation simply returns <code>null</code> which results in an empty |
| * entry in the palette. |
| * |
| * @return A {@link String} holding the name of the domain object. |
| */ |
| public String getCreateName() { |
| return null; |
| } |
| |
| /** |
| * Hook that is called by the Graphiti framework as soon as a new connection |
| * is started. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#startConnecting()}. The default |
| * implementation simply does nothing. |
| * |
| * @since 0.9 |
| */ |
| public void startConnecting() { |
| } |
| |
| /** |
| * Hook that is called by the Graphiti framework as soon as a new connection |
| * is ended. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#endConnecting()}. The default |
| * implementation simply does nothing. |
| * |
| * @since 0.9 |
| */ |
| public void endConnecting() { |
| } |
| |
| /** |
| * Hook that is called by the Graphiti framework as soon as a new connection |
| * is attached to its source anchor. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#attachedToSource(ICreateConnectionContext)} |
| * . The default implementation simply does nothing. |
| * |
| * @since 0.9 |
| */ |
| public void attachedToSource(ICreateConnectionContext context) { |
| } |
| |
| /** |
| * Hook that is called by the Graphiti framework as soon as a connection |
| * creation is cancelled. Corresponds to the method |
| * {@link AbstractCreateConnectionFeature#canceledAttaching(ICreateConnectionContext)} |
| * . The default implementation simply does nothing. |
| * |
| * @since 0.9 |
| */ |
| public void canceledAttaching(ICreateConnectionContext context) { |
| } |
| } |