| /** |
| * <copyright> |
| * |
| * Copyright (c) 2012, 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: |
| * Benjamin Schmeling - initial API, implementation and documentation for Bug 367483 |
| * |
| * </copyright> |
| */ |
| package org.eclipse.graphiti.ui.internal.parts; |
| |
| import java.util.Collection; |
| import java.util.HashSet; |
| |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.gef.Request; |
| import org.eclipse.gef.requests.SelectionRequest; |
| import org.eclipse.graphiti.mm.pictograms.CompositeConnection; |
| import org.eclipse.graphiti.mm.pictograms.Connection; |
| import org.eclipse.graphiti.ui.internal.config.IConfigurationProviderInternal; |
| import org.eclipse.graphiti.ui.internal.partfactory.PictogramsEditPartFactory; |
| |
| public class CompositeConnectionEditPart extends ConnectionEditPart { |
| |
| private Collection<org.eclipse.gef.ConnectionEditPart> editParts = new HashSet<org.eclipse.gef.ConnectionEditPart>(); |
| /* |
| * Stores the child connection edit part that has been selected. The |
| * selection lead to the complete composite connection (including all child |
| * connections to be selected) |
| */ |
| private ConnectionEditPart originallySelectedChild = null; |
| |
| public CompositeConnectionEditPart(IConfigurationProviderInternal configurationProvider, CompositeConnection connection, |
| PictogramsEditPartFactory factory, EditPart contextParent) { |
| super(configurationProvider, connection, contextParent); |
| |
| for (Connection con : ((CompositeConnection) getConnection()).getChildren()) { |
| org.eclipse.gef.ConnectionEditPart editPart = (org.eclipse.gef.ConnectionEditPart) getConfigurationProvider() |
| .getEditPartFactory().createEditPart(this, con); |
| this.getEditParts().add(editPart); |
| } |
| } |
| |
| @Override |
| public void setSource(EditPart editPart) { |
| super.setSource(editPart); |
| for (org.eclipse.gef.ConnectionEditPart editPartChild : this.getEditParts()) { |
| editPartChild.setSource(editPart); |
| } |
| } |
| |
| @Override |
| public void setTarget(EditPart editPart) { |
| super.setTarget(editPart); |
| for (org.eclipse.gef.ConnectionEditPart editPartChild : this.getEditParts()) { |
| editPartChild.setTarget(editPart); |
| } |
| } |
| |
| @Override |
| public EditPart getTargetEditPart(Request request) { |
| if (request instanceof SelectionRequest) { |
| // The CompositeConnectionEditPart itself has been selected --> the |
| // child selection info must be removed |
| ((CompositeConnectionEditPart) this).setOriginallySelectedChild(null); |
| } |
| return super.getTargetEditPart(request); |
| } |
| |
| @Override |
| public void setSelected(int value) { |
| for (org.eclipse.gef.ConnectionEditPart editPartChild : this.getEditParts()) { |
| editPartChild.setSelected(value); |
| } |
| super.setSelected(value); |
| } |
| |
| public Collection<org.eclipse.gef.ConnectionEditPart> getEditParts() { |
| return editParts; |
| } |
| |
| /** |
| * Returns the child connection that has been selected originally. The |
| * complete selection has been enhanced to be the complete composite |
| * connection (including all child connections), but the originally selected |
| * child will be added to the custom context in case the user needs the info |
| * which part of the composite connection has been clicked. |
| * |
| * @return the {@link ConnectionEditPart} that has been selected originally |
| */ |
| public ConnectionEditPart getOriginallySelectedChild() { |
| return originallySelectedChild; |
| } |
| |
| /** |
| * Sets the child connection that has been selected originally. |
| * |
| * @see #getOriginallySelectedChild() |
| * |
| * @param originallySelectedChild |
| * the {@link ConnectionEditPart} that was selected originally |
| */ |
| public void setOriginallySelectedChild(ConnectionEditPart originallySelectedChild) { |
| this.originallySelectedChild = originallySelectedChild; |
| } |
| |
| @Override |
| public void forceVisualRefresh() { |
| super.forceVisualRefresh(); |
| Collection<org.eclipse.gef.ConnectionEditPart> connectionEditParts = getEditParts(); |
| for (org.eclipse.gef.ConnectionEditPart connectionEditPart : connectionEditParts) { |
| if (connectionEditPart instanceof IConnectionEditPart) { |
| ((IConnectionEditPart) connectionEditPart).forceVisualRefresh(); |
| } |
| } |
| } |
| } |