blob: 44f4dce7182ea6517376adfabe2d1950e8c482b6 [file] [log] [blame]
/*******************************************************************************
* <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
* Felix Velasco (mwenz) - Bug 349416 - Support drag&drop operations on FixPointAnchors
* the same way as for BoxRelativeAnchors
* Benjamin Schmeling - mwenz - Bug 367483 - Support composite connections
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.ui.internal.partfactory;
import java.util.Map;
import org.eclipse.gef.EditPart;
import org.eclipse.graphiti.internal.util.T;
import org.eclipse.graphiti.mm.pictograms.AdvancedAnchor;
import org.eclipse.graphiti.mm.pictograms.CompositeConnection;
import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
import org.eclipse.graphiti.mm.pictograms.ManhattanConnection;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.ui.internal.config.AbstractConfigurationProviderHolder;
import org.eclipse.graphiti.ui.internal.config.IConfigurationProviderInternal;
import org.eclipse.graphiti.ui.internal.config.IEditPartFactory;
import org.eclipse.graphiti.ui.internal.parts.AdvancedAnchorEditPart;
import org.eclipse.graphiti.ui.internal.parts.CompositeConnectionEditPart;
import org.eclipse.graphiti.ui.internal.parts.ConnectionDecoratorEditPart;
import org.eclipse.graphiti.ui.internal.parts.ContainerShapeEditPart;
import org.eclipse.graphiti.ui.internal.parts.CurvedConnectionEditPart;
import org.eclipse.graphiti.ui.internal.parts.DiagramEditPart;
import org.eclipse.graphiti.ui.internal.parts.FreeFormConnectionEditPart;
import org.eclipse.graphiti.ui.internal.parts.ManhattanConnectionEditPart;
import org.eclipse.graphiti.ui.internal.parts.ShapeEditPart;
/**
* A concrete implementation of the interface IEditPartFactory, which works on a
* pictogram model.
*
* @noinstantiate This class is not intended to be instantiated by clients.
* @noextend This class is not intended to be subclassed by clients.
*/
public class PictogramsEditPartFactory extends AbstractConfigurationProviderHolder implements IEditPartFactory {
/**
* Creates a new PictogramsEditPartFactory.
*/
public PictogramsEditPartFactory(IConfigurationProviderInternal configurationProvider) {
super(configurationProvider);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.EditPartFactory#createEditPart(org.eclipse.gef.EditPart,
* java.lang.Object)
*/
public EditPart createEditPart(EditPart context, Object model) {
EditPart ret = null;
IConfigurationProviderInternal configurationProvider = getConfigurationProvider();
Map<?, ?> epRegistry = getConfigurationProvider().getDiagramContainer().getGraphicalViewer()
.getEditPartRegistry();
if (epRegistry != null && epRegistry.containsKey(model)) {
T.racer().warning("PictogramsEditPartFactory.createEditPart()", "edit part for this model already exists"); //$NON-NLS-1$ //$NON-NLS-2$
}
if (model instanceof Shape) {
Shape shape = (Shape) model;
if (!(shape instanceof Diagram) && !shape.isActive()) {
// return ret;
// the following is a temorary fix just to make it fly
ret = new ShapeEditPart(configurationProvider, shape);
}
}
if (ret == null) {
if (model instanceof Diagram) {
ret = new DiagramEditPart(configurationProvider, (Diagram) model);
} else if (model instanceof ConnectionDecorator) {
ret = new ConnectionDecoratorEditPart(configurationProvider, (Shape) model);
} else if (model instanceof ContainerShape) {
ret = new ContainerShapeEditPart(configurationProvider, (ContainerShape) model);
} else if (model instanceof Shape) {
ret = new ShapeEditPart(configurationProvider, (Shape) model);
} else if (model instanceof ManhattanConnection) {
ret = new ManhattanConnectionEditPart(configurationProvider, (ManhattanConnection) model, context);
} else if (model instanceof FreeFormConnection) {
ret = new FreeFormConnectionEditPart(configurationProvider, (FreeFormConnection) model, context);
} else if (model instanceof CurvedConnection) {
ret = new CurvedConnectionEditPart(configurationProvider, (CurvedConnection) model, context);
} else if (model instanceof CompositeConnection) {
ret = new CompositeConnectionEditPart(configurationProvider, (CompositeConnection) model, this, context);
} else if (model instanceof AdvancedAnchor) {
ret = new AdvancedAnchorEditPart(configurationProvider, (AdvancedAnchor) model);
}
}
// check whether autoswitch to direct editing has been set
// if yes: store the affected edit part in the editor for later use in
// the refresh method
// if (ret instanceof ShapeEditPart) {
// IDirectEditingInfo dei =
// getConfigurationProvider().getDiagramTypeProvider().getFeatureProvider()
// .getDirectEditingInfo();
// if (dei.isActive() && model.equals(dei.getMainPictogramElement())) {
// getConfigurationProvider().getDiagramEditor().setDirectEditingEditPart((ShapeEditPart)
// ret);
// }
// }
return ret;
}
}