Package org.springframework.ide.eclipse.beans.ui.graph.parts

Source Code of org.springframework.ide.eclipse.beans.ui.graph.parts.ReferencePart

/*******************************************************************************
* Copyright (c) 2004, 2008 Spring IDE 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:
*     Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.ui.graph.parts;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.draw2d.AbsoluteBendpoint;
import org.eclipse.draw2d.BendpointConnectionRouter;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.PolylineDecoration;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.draw2d.graph.Edge;
import org.eclipse.draw2d.graph.Node;
import org.eclipse.draw2d.graph.NodeList;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.editparts.AbstractConnectionEditPart;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansConnection.BeanType;
import org.springframework.ide.eclipse.beans.ui.BeansUIUtils;
import org.springframework.ide.eclipse.beans.ui.graph.model.Bean;
import org.springframework.ide.eclipse.beans.ui.graph.model.ConstructorArgument;
import org.springframework.ide.eclipse.beans.ui.graph.model.Property;
import org.springframework.ide.eclipse.beans.ui.graph.model.Reference;

/**
* @author Torsten Juergeleit
* @author Christian Dupuis
*/
public class ReferencePart extends AbstractConnectionEditPart {

  protected Reference getReference() {
    return (Reference) getModel();
  }

  @Override
  protected IFigure createFigure() {
    PolylineConnection conn = createConnection(getReference());
    Label label = new Label();
    BeanType type = getReference().getType();
    if (type == BeanType.PARENT) {
      conn.setLineStyle(Graphics.LINE_DOT);
      label.setText("Parent bean: "
          + getReference().getTargetBean().getName());
    } else if (type == BeanType.FACTORY) {
      conn.setLineStyle(Graphics.LINE_DASH);
      label.setText("Factory bean");
    } else if (type == BeanType.DEPENDS_ON) {
      conn.setLineStyle(Graphics.LINE_DASH);
      label.setText("Depends-on bean");
    } else if (type == BeanType.METHOD_OVERRIDE) {
      conn.setLineStyle(Graphics.LINE_DOT);
      label.setText("Method-override bean");
    } else if (type == BeanType.INTERCEPTOR) {
      conn.setLineStyle(Graphics.LINE_DASHDOT);
      label.setText("Interceptor bean");
    } else {
      Node node = getReference().getNode();
      if (node instanceof ConstructorArgument) {
        label.setText("ConstructorArgument: "
            + ((ConstructorArgument) node).getName());
      } else if (node instanceof Property) {
        label.setText("Property: " + ((Property) node).getName());
      }
    }
    conn.setToolTip(label);
    return conn;
  }

  @Override
  protected void createEditPolicies() {
  }

  protected PolylineConnection createConnection(Edge edge) {
    PolylineConnection conn = new PolylineConnection();

    // Prepare connection router with corresponding bendpoints
    conn.setConnectionRouter(new BendpointConnectionRouter());

    // Add bend point if source's bean prefered height is different from
    // heigth calculated by DirectedGraphLayout
    List<AbsoluteBendpoint> bends = new ArrayList<AbsoluteBendpoint>();
    Bean source = (Bean) getReference().source;
    if (source.height > source.preferredHeight) {
      Rectangle rect = new Rectangle(source.x + GraphPart.MARGIN_SIZE,
          source.y + GraphPart.MARGIN_SIZE, source.width,
          source.height);
      bends.add(new AbsoluteBendpoint(rect.getBottom()));
    }

    // Create bend points for edge's virtual nodes (if any)
    NodeList nodes = edge.vNodes;
    if (nodes != null) {
      for (int i = 0; i < nodes.size(); i++) {
        Node node = nodes.getNode(i);

        // Check if edge was inverted (due to broken cycle)
        if (edge.isFeedback()) {
          bends.add(new AbsoluteBendpoint(node.x
              + GraphPart.MARGIN_SIZE, node.y
              + GraphPart.MARGIN_SIZE + node.height));
          bends.add(new AbsoluteBendpoint(node.x
              + GraphPart.MARGIN_SIZE, node.y
              + GraphPart.MARGIN_SIZE));
        } else {
          bends.add(new AbsoluteBendpoint(node.x
              + GraphPart.MARGIN_SIZE, node.y
              + GraphPart.MARGIN_SIZE));
          bends.add(new AbsoluteBendpoint(node.x
              + GraphPart.MARGIN_SIZE, node.y
              + GraphPart.MARGIN_SIZE + node.height));
        }
      }
    }
    conn.setRoutingConstraint(bends);
    conn.setTargetDecoration(new PolylineDecoration());
    if (getReference().isInner()) {
      conn.setLineStyle(Graphics.LINE_DOT);
    }
    return conn;
  }

  @Override
  public void setSelected(int value) {
    super.setSelected(value);
    if (value != EditPart.SELECTED_NONE) {
      ((PolylineConnection) getFigure()).setLineWidth(2);
    } else {
      ((PolylineConnection) getFigure()).setLineWidth(1);
    }
  }

  /**
   * Opens this property's config file on double click.
   */
  @Override
  public void performRequest(Request req) {
    if (req.getType() == RequestConstants.REQ_OPEN) {
      BeansUIUtils.openInEditor(getReference().getResourceElement());
    }
    super.performRequest(req);
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.beans.ui.graph.parts.ReferencePart

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.