CustomANDGatewayEditPart.java :  » Library » bonita » org » bonitasoft » studio » diagram » custom » parts » Java Open Source

Java Open Source » Library » bonita 
bonita » org » bonitasoft » studio » diagram » custom » parts » CustomANDGatewayEditPart.java
/**
 * Copyright (C) 2009 BonitaSoft S.A.
 * BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2.0 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.bonitasoft.studio.diagram.custom.parts;

import org.bonitasoft.studio.common.diagram.tools.FiguresHelper;
import org.bonitasoft.studio.common.gmf.tools.GMFTools;
import org.bonitasoft.studio.diagram.custom.anchors.SourceFixedConnectionAnchor;
import org.bonitasoft.studio.diagram.custom.anchors.TargetFixedConnectionAnchor;
import org.bonitasoft.studio.model.process.diagram.edit.parts.ANDGatewayEditPart;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.SnapToHelper;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.RoutingStyle;
import org.eclipse.gmf.runtime.notation.View;

/**
 * @author Romain Bioteau
 *
 */
public class CustomANDGatewayEditPart extends ANDGatewayEditPart {

  private TargetFixedConnectionAnchor targetAnchor ;
  private SourceFixedConnectionAnchor sourceAnchor ;


  public CustomANDGatewayEditPart(View view) {
    super(view);
  }

  @SuppressWarnings("unchecked")
  @Override
  public Object getAdapter(Class key) {

    if (key == SnapToHelper.class) {
      EditPart parent = getParent() ;
      while(!(parent instanceof DiagramEditPart)){
        parent = parent.getParent() ;
      }
      return GMFTools.getSnapHelper((org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart) parent);
    }

    return super.getAdapter(key);
  }

  @Override
  public ConnectionAnchor getSourceConnectionAnchor(
      ConnectionEditPart connEditPart) {

    final RoutingStyle style = (RoutingStyle) ((View) connEditPart.getModel())
    .getStyle(NotationPackage.Literals.ROUTING_STYLE);
    
    if(style.isClosestDistance()){
      sourceAnchor = null ;
      sourceAnchor = new SourceFixedConnectionAnchor(this,((GraphicalEditPart)connEditPart.getTarget()).getFigure());
      return sourceAnchor;
    }else{
      return super.getSourceConnectionAnchor(connEditPart);
    }

  }


  @Override
  public ConnectionAnchor getTargetConnectionAnchor(
      ConnectionEditPart connEditPart) {

    final RoutingStyle style = (RoutingStyle) ((View) connEditPart.getModel())
    .getStyle(NotationPackage.Literals.ROUTING_STYLE);
    
    if(style.isClosestDistance()){
      targetAnchor = null ;
      targetAnchor = new TargetFixedConnectionAnchor(this,((GraphicalEditPart)connEditPart.getSource()).getFigure());
      return targetAnchor;
    }else{
      return super.getTargetConnectionAnchor(connEditPart);
    }

  }

  @Override
  protected void createDefaultEditPolicies() {
    super.createDefaultEditPolicies();
    removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
    removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
  }



  @Override
  protected NodeFigure createNodePlate() {
    DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(FiguresHelper.GATEWAY_WIDTH, FiguresHelper.GATEWAY_WIDTH) {
        public PointList getPolygonPoints() {
          PointList points = new PointList(5);
          Rectangle anchRect = getHandleBounds();
          points.addPoint(anchRect.x+anchRect.width/2,anchRect.y);                         
          points.addPoint(anchRect.x + anchRect.width, anchRect.y+anchRect.height/2);                        
          points.addPoint(anchRect.x+anchRect.width/2,anchRect.y+anchRect.height); 
          points.addPoint(anchRect.x, anchRect.y+anchRect.height/2);       
          points.addPoint(anchRect.x+ anchRect.width/2,anchRect.y);
          return points;
        }
    
      };
      return result;
  }

  @Override
  protected void refreshBounds() {
    int width = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
    int height = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
    Dimension size = new Dimension(width, height);
    int x = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_X())).intValue();
    int y = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_Y())).intValue();
    Point newLoc = FiguresHelper.handleCompartmentMargin(this, x, y);
    Point loc = new Point(x, y);
    if(!newLoc.equals(loc)){
      if(newLoc.equals(FiguresHelper.handleCompartmentMargin(this, newLoc.x, newLoc.y)))
        GMFTools.setEditPartLocation(this,new Rectangle(newLoc, size));
    }
    if(newLoc != null){
      loc = newLoc ;
    }
    ((GraphicalEditPart) getParent()).setLayoutConstraint(
        this,
        getFigure(),
        new Rectangle(loc, size));

  }


}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.