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

Source Code of org.springframework.ide.eclipse.beans.ui.graph.parts.BeanPart$TopOrBottomAnchor

/*******************************************************************************
* 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.List;

import org.eclipse.draw2d.Border;
import org.eclipse.draw2d.ChopboxAnchor;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.NodeEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.jdt.core.IType;
import org.springframework.ide.eclipse.beans.core.internal.model.BeansModelUtils;
import org.springframework.ide.eclipse.beans.ui.BeansUIUtils;
import org.springframework.ide.eclipse.beans.ui.graph.figures.BeanFigure;
import org.springframework.ide.eclipse.beans.ui.graph.model.Bean;
import org.springframework.ide.eclipse.ui.SpringUIUtils;

/**
* @author Torsten Juergeleit
* @author Christian Dupuis
*/
public class BeanPart extends AbstractGraphicalEditPart implements NodeEditPart {

  public Bean getBean() {
    return (Bean) getModel();
  }

  @Override
  protected IFigure createFigure() {
    Bean bean = getBean();
    BeanFigure figure = new BeanFigure(bean);
    return figure;
  }

  @Override
  protected void createEditPolicies() {
  }

  /**
   * Sets constraint for XYLayout (rectangle with figure bounds from bean).
   */
  @Override
  protected void refreshVisuals() {
    Dimension dim = getFigure().getPreferredSize();
    Rectangle rect = null;
    if (getBean().getInnerBeans().length > 0) {
      rect = new Rectangle(getBean().x, getBean().y, dim.width + 3, dim.height);
    }
    else {
      rect = new Rectangle(getBean().x, getBean().y, dim.width + 3, dim.height);
    }
    ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), rect);
    getFigure().setBounds(rect);
  }

  @Override
  protected List getModelSourceConnections() {
    return getBean().outgoing;
  }

  @Override
  protected List getModelTargetConnections() {
    return getBean().incoming;
  }

  public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart conn) {
    return new TopOrBottomAnchor(getFigure());
  }

  public ConnectionAnchor getSourceConnectionAnchor(Request request) {
    return new TopOrBottomAnchor(getFigure());
  }

  public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart conn) {
    return new TopOrBottomAnchor(getFigure());
  }

  public ConnectionAnchor getTargetConnectionAnchor(Request request) {
    return new TopOrBottomAnchor(getFigure());
  }

  @Override
  public void setSelected(int value) {
    super.setSelected(value);
    Border border = getFigure().getBorder();
    if (border instanceof LineBorder) {
      if (value != EditPart.SELECTED_NONE) {
        ((LineBorder) border).setWidth(2);
      }
      else {
        ((LineBorder) border).setWidth(1);
      }
      getFigure().repaint();
    }
  }

  /**
   * Opens this bean's config file or corresponding java element on double click.
   */
  @Override
  public void performRequest(Request req) {
    if (req.getType() == RequestConstants.REQ_OPEN) {
      if (BeansUIUtils.shouldOpenConfigFile()) {
        BeansUIUtils.openInEditor(getBean().getBean());
      }
      else {
        IType type = BeansModelUtils.getBeanType(getBean().getBean(), null);
        if (type != null) {
          SpringUIUtils.openInEditor(type);
        }
      }
    }
    super.performRequest(req);
  }

  protected static class TopOrBottomAnchor extends ChopboxAnchor {

    public TopOrBottomAnchor(IFigure owner) {
      super(owner);
    }

    @Override
    public Point getLocation(Point reference) {
      Point p = getOwner().getBounds().getCenter();
      getOwner().translateToAbsolute(p);
      if (reference.y < p.y) {
        p = getOwner().getBounds().getTop();
      }
      else {
        p = getOwner().getBounds().getBottom();
      }
      getOwner().translateToAbsolute(p);
      return p;
    }
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.beans.ui.graph.parts.BeanPart$TopOrBottomAnchor

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.