// ============================================================================ // // 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.nodes; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; 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.editparts.AbstractGraphicalEditPart; import org.eclipse.swt.widgets.Shell; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.ui.dialog.mergeorder.ErrorMessageDialog; import org.talend.designer.core.ui.editor.nodecontainer.NodeContainer; import org.talend.designer.core.ui.editor.nodecontainer.NodeContainerPart; import org.talend.designer.core.ui.editor.process.ProcessPart; import org.talend.designer.core.ui.editor.subjobcontainer.SubjobContainerPart; /** * DOC hwang class global comment. Detailled comment */ public class NodeErrorEditPart extends AbstractGraphicalEditPart implements PropertyChangeListener { /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate() */ @Override public void activate() { if (!isActive()) { super.activate(); ((NodeError) getModel()).addPropertyChangeListener(this); } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getAdapter(java.lang.Class) */ @Override public Object getAdapter(final Class key) { return super.getAdapter(key); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactivate() */ @Override public void deactivate() { if (isActive()) { super.deactivate(); ((NodeError) getModel()).removePropertyChangeListener(this); } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ @Override public IFigure createFigure() { NodeErrorFigure errorFig = new NodeErrorFigure(); if (((NodeError) getModel()).isActivate()) { (errorFig).setAlpha(-1); } else { (errorFig).setAlpha(NodeError.ALPHA_VALUE); } ((NodeError) getModel()).setErrorSize(errorFig.getSize()); return errorFig; } /* * (non-Javadoc) * * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(final PropertyChangeEvent evt) { String request = evt.getPropertyName(); if (request.equals("UPDATE_STATUS")) { //$NON-NLS-1$ NodeErrorFigure figure = (NodeErrorFigure) this.getFigure(); Node node = ((NodeContainer) ((NodeContainerPart) getParent()).getModel()).getNode(); figure.updateVisible(node.isErrorFlag(), node.getErrorInfo()); ((NodeError) getModel()).setErrorSize((figure).getSize()); refreshVisuals(); } if (request.equals(NodeError.LOCATION)) { //$NON-NLS-1$ refreshVisuals(); getParent().refresh(); } if (request.equals(EParameterName.ACTIVATE.getName())) { if (((NodeError) getModel()).isActivate()) { ((NodeErrorFigure) figure).setAlpha(-1); ((NodeErrorFigure) figure).repaint(); refreshVisuals(); } else { ((NodeErrorFigure) figure).setAlpha(Node.ALPHA_VALUE); ((NodeErrorFigure) figure).repaint(); refreshVisuals(); } } EditPart editPart = getParent(); if (editPart != null) { while ((!(editPart instanceof ProcessPart)) && (!(editPart instanceof SubjobContainerPart))) { editPart = editPart.getParent(); } if (editPart instanceof SubjobContainerPart) { editPart.refresh(); } } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies() */ @Override public void createEditPolicies() { // installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new NodeTextEditPolicy()); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getDragTracker(org.eclipse.gef.Request) */ @Override public DragTracker getDragTracker(final Request request) { return new NodeTextTracker(this, this.getParent()); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ @Override protected void refreshVisuals() { Node node = ((NodeContainer) ((NodeContainerPart) getParent()).getModel()).getNode(); NodeLabel nodeLabel = node.getNodeLabel(); NodeErrorFigure errorFig = (NodeErrorFigure) this.getFigure(); Point loc = node.getLocation().getCopy(); Dimension size = errorFig.getSize(); loc.x = loc.x + (node.getSize().width - size.width) / 2; loc.y = loc.y + node.getSize().height + (nodeLabel.getLabelSize().height); Rectangle rectangle = new Rectangle(loc, size); ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), rectangle); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#performRequest(org.eclipse.gef.Request) */ @Override public void performRequest(final Request request) { if (request.getType().equals("open")) { //$NON-NLS-1$ Node node = ((NodeContainer) ((NodeContainerPart) getParent()).getModel()).getNode(); if (node.isErrorFlag()) { Shell shell = getViewer().getControl().getShell(); ErrorMessageDialog dialog = new ErrorMessageDialog(new Shell(shell), node); dialog.open(); } } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#setSelected(int) */ @Override @SuppressWarnings("unchecked")//$NON-NLS-1$ public void setSelected(final int value) { if (value != SELECTED_NONE) { List<EditPart> listEditParts = this.getViewer().getSelectedEditParts(); if (listEditParts.size() != 1) { // getParent().removeEditPolicy(EditPolicy.LAYOUT_ROLE); } else { // getParent().installEditPolicy(EditPolicy.LAYOUT_ROLE, new NodeContainerLayoutEditPolicy()); super.setSelected(value); } } else { getParent().removeEditPolicy(EditPolicy.LAYOUT_ROLE); super.setSelected(value); } } @Override public boolean isSelectable() { return (!((NodeError) getModel()).getNode().isReadOnly()) || (this.getViewer().getSelection().isEmpty()); } }