/******************************************************************************* * Copyright (c) 2010-2015 Henshin developers. 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: * TU Berlin, University of Luxembourg, SES S.A. *******************************************************************************/ /** * SubtreeEditPart.java * created on 15.07.2012 00:06:41 */ package de.tub.tfs.henshin.editor.editparts.graph.graphical; import java.util.List; import org.eclipse.draw2d.ChopboxAnchor; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.Ellipse; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.emf.common.notify.Notification; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.NodeEditPart; import org.eclipse.gef.Request; import de.tub.tfs.henshin.editor.interfaces.Constants; import de.tub.tfs.henshin.model.layout.HenshinLayoutFactory; import de.tub.tfs.henshin.model.layout.NodeLayout; import de.tub.tfs.henshin.model.subtree.Edge; import de.tub.tfs.henshin.model.subtree.Subtree; import de.tub.tfs.muvitor.gef.editparts.AdapterGraphicalEditPart; /** * @author huuloi * */ public class SubtreeEditPart extends AdapterGraphicalEditPart<Subtree> implements NodeEditPart { private NodeLayout layoutModel; public SubtreeEditPart(Subtree model) { super(model); layoutModel = HenshinLayoutFactory.eINSTANCE.createNodeLayout(); registerAdapter(layoutModel); } @Override public ConnectionAnchor getSourceConnectionAnchor( ConnectionEditPart connection) { return new ChopboxAnchor(getFigure()); } @Override public ConnectionAnchor getTargetConnectionAnchor( ConnectionEditPart connection) { return new ChopboxAnchor(getFigure()); } @Override public ConnectionAnchor getSourceConnectionAnchor(Request request) { return new ChopboxAnchor(getFigure()); } @Override public ConnectionAnchor getTargetConnectionAnchor(Request request) { return new ChopboxAnchor(getFigure()); } @Override protected IFigure createFigure() { figure = new Ellipse(); figure.setOpaque(true); figure.setBackgroundColor(ColorConstants.green); figure.setSize(Constants.SIZE_25, Constants.SIZE_25); figure.setLocation(new Point(layoutModel.getX(), layoutModel.getY())); return figure; } public NodeLayout getLayoutModel() { return layoutModel; } public void setLayoutModel(NodeLayout layoutModel) { this.layoutModel = layoutModel; registerAdapter(layoutModel); } @Override protected void createEditPolicies() { } @Override protected void notifyChanged(Notification notification) { if (notification.getNotifier() instanceof NodeLayout) { refreshLocation(); } } private void refreshLocation() { IFigure figure = getFigure(); figure.setLocation(new Point(getLayoutModel().getX(), getLayoutModel().getY())); } @Override protected List<Edge> getModelSourceConnections() { return getCastedModel().getOutgoing(); } @Override protected List<Edge> getModelTargetConnections() { return getCastedModel().getIncoming(); } }