// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.core.ui.editor.connections;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.swt.widgets.Shell;
import org.talend.core.model.process.Element;
import org.talend.core.model.process.IElementParameter;
import org.talend.designer.core.model.components.EParameterName;
import org.talend.designer.core.ui.dialog.FilterColumnDialog;
import org.talend.designer.core.ui.editor.cmd.PropertyChangeCommand;
/**
* EditPart of the NodeTrace.
*
* $Id: ConnectionTraceEditPart.java 77219 2012-01-24 01:14:15Z mhirt $
*
*/
public class ConnectionTraceEditPart extends AbstractGraphicalEditPart implements PropertyChangeListener {
@Override
public boolean isSelectable() {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate()
*/
public void activate() {
if (!isActive()) {
super.activate();
((Element) getModel()).addPropertyChangeListener(this);
}
}
protected void addChildVisual(EditPart childEditPart, int index) {
IFigure child = ((GraphicalEditPart) childEditPart).getFigure();
getContentPane().add(child, index);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactivate()
*/
public void deactivate() {
if (isActive()) {
super.deactivate();
((Element) getModel()).removePropertyChangeListener(this);
unregister();
}
}
public ConnectionTraceEditPart() {
super();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
@Override
protected IFigure createFigure() {
ConnectionTraceFigure fig = new ConnectionTraceFigure((Connection) this.getParent().getModel(), true);
return fig;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
*/
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ConnTextMovePolicy());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getDragTracker(org.eclipse.gef.Request)
*/
@Override
public DragTracker getDragTracker(Request request) {
return new ConnTextTracker(this, (ConnectionPart) getParent());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
@Override
protected void refreshVisuals() {
ConnectionPart connectionPart;
connectionPart = (ConnectionPart) getParent();
Connection conn = (Connection) connectionPart.getModel();
IElementParameter element = conn.getElementParameter(EParameterName.TRACES_CONNECTION_ENABLE.getName());
Boolean flag = false;
if (element != null) {
flag = (Boolean) element.getValue();
}
ConnectionTraceFigure htmlFigure = (ConnectionTraceFigure) getFigure();
ConnectionTrace connectionTrace = (ConnectionTrace) getModel();
String trace = connectionTrace.getTrace();
if (trace == null) {
Point offset = conn.getConnectionLabel().getOffset();
connectionTrace.getOffset().x = offset.x;
connectionTrace.getOffset().y = offset.y;
this.removeEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE);
} else {
this.installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new ConnTextMovePolicy());
}
htmlFigure.setTraceData(trace, flag, conn.checkTraceShowEnable());
Dimension size = htmlFigure.getPreferredSize();
connectionTrace.setSize(size);
String connectionName = ((Connection) connectionPart.getModel()).getConnectionLabel().getLabelText();
Point offset = ((ConnectionTrace) getModel()).getOffset();
ConnectionTraceConstraint constraint = new ConnectionTraceConstraint(connectionName, size, "center", offset, //$NON-NLS-1$
(PolylineConnection) connectionPart.getFigure());
connectionPart.setLayoutConstraint(this, getFigure(), constraint);
}
/*
* (non-Javadoc)
*
* @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
*/
public void propertyChange(PropertyChangeEvent evt) {
String request = evt.getPropertyName();
if (request.equals("positionChange") || request.equals(ConnectionTrace.TRACE_PROP)) { //$NON-NLS-1$ //$NON-NLS-2$
refreshVisuals();
} else if (request.equals(EParameterName.TRACES_SHOW_ENABLE.getName())
|| request.equals(EParameterName.TRACES_CONNECTION_FILTER.getName())
|| request.equals(EParameterName.ACTIVEBREAKPOINT.getName())) {
refreshVisuals();
} else if (request.equals(EParameterName.TRACES_CONNECTION_ENABLE.getName())) {
ConnectionTrace connectionTrace = ((ConnectionTrace) this.getModel());
Connection connection = connectionTrace.getConnection();
PropertyChangeCommand pcc = new PropertyChangeCommand(connection, EParameterName.TRACES_CONNECTION_ENABLE.getName(),
evt.getNewValue());
this.getViewer().getEditDomain().getCommandStack().execute(pcc);
refreshVisuals();
}
}
public void performRequest(Request req) {
if (req.getType().equals(RequestConstants.REQ_OPEN)) {
ConnectionTrace a = ((ConnectionTrace) this.getModel());
FilterColumnDialog dialog = new FilterColumnDialog(new Shell(), a.getConnection(), this.getViewer().getEditDomain()
.getCommandStack());
dialog.open();
}
}
}