/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.graphical.editors.editparts.javamapping;
import org.eclipse.draw2d.Connection;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.forms.editor.FormPage;
import org.jboss.tools.smooks.gef.tree.editparts.TreeNodeConnectionEditPart;
import org.jboss.tools.smooks.gef.tree.figures.LeftOrRightAnchor;
import org.jboss.tools.smooks.graphical.editors.IGraphicalEditorPart;
import org.jboss.tools.smooks.graphical.editors.SmooksTaskDetailsEditorSite;
import org.jboss.tools.smooks.graphical.editors.template.SmooksFreemarkerTemplateGraphicalEditor;
/**
* @author Dart
*
*/
public class BeanReferenceConnectionEditPart extends TreeNodeConnectionEditPart {
public BeanReferenceConnectionEditPart() {
super();
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.editparts.TreeNodeConnectionEditPart#
* createConnectionFigure()
*/
@Override
protected Connection createConnectionFigure() {
PolylineConnection connection = new PolylineConnection() {
@Override
public void paintFigure(Graphics graphics) {
graphics.setAlpha(alpha);
super.paintFigure(graphics);
}
public PointList getPoints() {
ConnectionAnchor sourceAnchor = getSourceConnectionAnchor();
ConnectionAnchor targetAnchor = getTargetConnectionAnchor();
boolean startLeft = false;
if (sourceAnchor instanceof LeftOrRightAnchor) {
((LeftOrRightAnchor) sourceAnchor).getLocation(targetAnchor.getReferencePoint());
startLeft = ((LeftOrRightAnchor) sourceAnchor).isLeft();
}
boolean targetLeft = false;
if (targetAnchor instanceof LeftOrRightAnchor) {
((LeftOrRightAnchor) targetAnchor).getLocation(sourceAnchor.getReferencePoint());
targetLeft = ((LeftOrRightAnchor) targetAnchor).isLeft();
}
PointList list = super.getPoints();
if (list.size() == 0)
return list;
Point start = getStart();
int slength = 20;
int tlength = 20;
if (startLeft) {
slength = (-slength);
}
if (targetLeft) {
tlength = (-tlength);
}
Point start2 = new Point(start.x + slength, start.y);
Point end = getEnd();
Point end2 = new Point(end.x + tlength, end.y);
list.removeAllPoints();
list.addPoint(start);
list.addPoint(start2);
list.addPoint(end2);
list.addPoint(end);
return list;
}
};
DefaultEditDomain domain = (DefaultEditDomain) getViewer().getEditDomain();
IEditorPart editorPart = domain.getEditorPart();
IEditorSite site = editorPart.getEditorSite();
if (site instanceof SmooksTaskDetailsEditorSite) {
FormPage page = ((SmooksTaskDetailsEditorSite) site).getParentEditor();
connection.setForegroundColor(page.getManagedForm().getToolkit().getColors().getBorderColor());
}
connection.setLineStyle(Graphics.LINE_CUSTOM);
connection.setLineDash(new float[] { 10, 5 });
connection.setLineCap(SWT.CAP_ROUND);
// connection.set
// connection.setConnectionRouter(new ManhattanConnectionRouter());
return connection;
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.editparts.TreeNodeConnectionEditPart#
* isCanDelete()
*/
@Override
public boolean isCanDelete() {
IEditorPart editorpart = getEditorPart();
if (editorpart instanceof IGraphicalEditorPart) {
if (SmooksFreemarkerTemplateGraphicalEditor.ID.equals(((IGraphicalEditorPart) editorpart).getID())) {
return false;
}
}
return super.isCanDelete();
}
}