/* * Copyright (c) 2005, 2007 IBM Corporation and others. * 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: * IBM Corporation - initial implementation * */ package org.eclipse.epf.diagram.ad.edit.policies; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.LayoutEditPolicy; import org.eclipse.gef.requests.ChangeBoundsRequest; import org.eclipse.gef.requests.GroupRequest; import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.XYLayoutEditPolicy; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; /** * @generated */ public class UMLExtNodeLabelHostLayoutEditPolicy extends XYLayoutEditPolicy { /** * @generated */ private LayoutEditPolicy realLayoutEditPolicy; /** * @generated */ public LayoutEditPolicy getRealLayoutEditPolicy() { return realLayoutEditPolicy; } /** * @generated */ public void setRealLayoutEditPolicy(LayoutEditPolicy realLayoutEditPolicy) { this.realLayoutEditPolicy = realLayoutEditPolicy; } /** * @generated */ protected boolean isExternalLabel(EditPart editPart) { return false; } /** * @generated */ protected final List getExternalLabels(GroupRequest request) { List editParts = new ArrayList(); if (request.getEditParts() != null) { for (Iterator it = request.getEditParts().iterator(); it.hasNext();) { EditPart editPart = (EditPart) it.next(); if (isExternalLabel(editPart)) { editParts.add(editPart); } } } return editParts; } /** * @generated */ public Command getCommand(Request request) { if (REQ_MOVE_CHILDREN.equals(request.getType())) { ChangeBoundsRequest cbRequest = (ChangeBoundsRequest) request; List extLabels = getExternalLabels(cbRequest); if (!extLabels.isEmpty()) { List editParts = cbRequest.getEditParts(); Command cmd = null; if (realLayoutEditPolicy != null && editParts.size() > extLabels.size()) { List other = new ArrayList(editParts); other.removeAll(extLabels); cbRequest.setEditParts(other); cmd = realLayoutEditPolicy.getCommand(request); } cbRequest.setEditParts(extLabels); Command extLabelsCmd = getMoveChildrenCommand(request); cbRequest.setEditParts(editParts); return cmd == null ? extLabelsCmd : cmd.chain(extLabelsCmd); } } if (request instanceof GroupRequest) { List extLabels = getExternalLabels((GroupRequest) request); if (!extLabels.isEmpty()) { return null; } } return realLayoutEditPolicy == null ? null : realLayoutEditPolicy .getCommand(request); } /** * @generated */ protected Object getConstraintFor(ChangeBoundsRequest request, GraphicalEditPart child) { int dx = ((Integer) ViewUtil.getStructuralFeatureValue((View) child .getModel(), NotationPackage.eINSTANCE.getLocation_X())) .intValue(); int dy = ((Integer) ViewUtil.getStructuralFeatureValue((View) child .getModel(), NotationPackage.eINSTANCE.getLocation_Y())) .intValue(); Rectangle r = new Rectangle(dx, dy, 0, 0); child.getFigure().translateToAbsolute(r); r.translate(request.getMoveDelta()); child.getFigure().translateToRelative(r); return r; } /** * @generated */ public boolean understandsRequest(Request req) { if (realLayoutEditPolicy != null && realLayoutEditPolicy.understandsRequest(req)) { return true; } return super.understandsRequest(req); } /** * @generated */ protected void decorateChild(EditPart child) { } /** * @generated */ public void setHost(EditPart host) { super.setHost(host); if (realLayoutEditPolicy != null) { realLayoutEditPolicy.setHost(host); } } /** * @generated */ public void activate() { super.activate(); if (realLayoutEditPolicy != null) { realLayoutEditPolicy.activate(); } } /** * @generated */ public void deactivate() { super.deactivate(); if (realLayoutEditPolicy != null) { realLayoutEditPolicy.deactivate(); } } /** * @generated */ public EditPart getTargetEditPart(Request request) { if (realLayoutEditPolicy != null) { return realLayoutEditPolicy.getTargetEditPart(request); } else { return super.getTargetEditPart(request); } } /** * @generated */ public void showSourceFeedback(Request request) { if (realLayoutEditPolicy != null) { realLayoutEditPolicy.showSourceFeedback(request); } else { super.showSourceFeedback(request); } } /** * @generated */ public void eraseSourceFeedback(Request request) { if (realLayoutEditPolicy != null) { realLayoutEditPolicy.eraseSourceFeedback(request); } else { super.eraseSourceFeedback(request); } } /** * @generated */ public void showTargetFeedback(Request request) { if (realLayoutEditPolicy != null) { realLayoutEditPolicy.showTargetFeedback(request); } else { super.showTargetFeedback(request); } } /** * @generated */ public void eraseTargetFeedback(Request request) { if (realLayoutEditPolicy != null) { realLayoutEditPolicy.eraseTargetFeedback(request); } else { super.eraseTargetFeedback(request); } } }