Package org.springframework.ide.eclipse.config.graph.policies

Source Code of org.springframework.ide.eclipse.config.graph.policies.FixedConnectionNodeEditPolicy

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  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:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.config.graph.policies;

import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.gef.requests.DropRequest;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gef.requests.SelectionRequest;
import org.eclipse.gef.requests.TargetRequest;
import org.eclipse.ui.texteditor.ITextEditor;
import org.springframework.ide.eclipse.config.graph.model.Activity;
import org.springframework.ide.eclipse.config.graph.model.Transition;
import org.springframework.ide.eclipse.config.graph.model.commands.FixedConnectionCreateCommand;
import org.springframework.ide.eclipse.config.graph.model.commands.ReconnectFixedSourceCommand;
import org.springframework.ide.eclipse.config.graph.model.commands.ReconnectFixedTargetCommand;
import org.springframework.ide.eclipse.config.graph.parts.BorderedActivityPart;
import org.springframework.ide.eclipse.config.graph.parts.FixedConnectionAnchor;


/**
* @author Leo Dos Santos
*/
public abstract class FixedConnectionNodeEditPolicy extends ActivityNodeEditPolicy {

  private void eraseConnectionLabel() {
    if (getActivityPart() instanceof BorderedActivityPart) {
      BorderedActivityPart part = (BorderedActivityPart) getActivityPart();
      part.setBorderLabel(""); //$NON-NLS-1$
      part.getFigure().repaint();
    }
  }

  @Override
  protected void eraseTargetConnectionFeedback(DropRequest request) {
    eraseConnectionLabel();
  }

  @Override
  public void eraseTargetFeedback(Request request) {
    eraseConnectionLabel();
    super.eraseTargetFeedback(request);
  }

  @Override
  protected Command getConnectionCompleteCommand(CreateConnectionRequest request) {
    if (request.getStartCommand() instanceof FixedConnectionCreateCommand) {
      FixedConnectionCreateCommand cmd = (FixedConnectionCreateCommand) request.getStartCommand();
      ConnectionAnchor anchor = getActivityPart().getTargetConnectionAnchor(request);
      if (anchor instanceof FixedConnectionAnchor) {
        FixedConnectionAnchor fixedAnchor = (FixedConnectionAnchor) anchor;
        cmd.setTargetAnchor(fixedAnchor);
      }
      else {
        cmd.setTargetAnchor(null);
      }
      cmd.setTarget(getActivity());
      return cmd;
    }
    return super.getConnectionCompleteCommand(request);
  }

  @Override
  protected Command getConnectionCreateCommand(CreateConnectionRequest request) {
    int style = ((Integer) request.getNewObjectType()).intValue();
    Activity source = getActivity();
    FixedConnectionCreateCommand cmd = getConnectionCreateCommand(source.getDiagram().getTextEditor(), style);
    if (cmd != null) {
      ConnectionAnchor anchor = getActivityPart().getSourceConnectionAnchor(request);
      if (anchor instanceof FixedConnectionAnchor) {
        FixedConnectionAnchor fixedAnchor = (FixedConnectionAnchor) anchor;
        cmd.setSourceAnchor(fixedAnchor);
      }
      cmd.setSource(source);
      request.setStartCommand(cmd);
    }
    return cmd;
  }

  protected abstract FixedConnectionCreateCommand getConnectionCreateCommand(ITextEditor textEditor, int style);

  @Override
  protected Command getReconnectSourceCommand(ReconnectRequest request) {
    Activity source = getActivity();
    ReconnectFixedSourceCommand cmd = new ReconnectFixedSourceCommand(source.getDiagram().getTextEditor());
    ConnectionAnchor anchor = getActivityPart().getSourceConnectionAnchor(request);
    if (anchor instanceof FixedConnectionAnchor) {
      FixedConnectionAnchor fixedAnchor = (FixedConnectionAnchor) anchor;
      cmd.setSourceAnchor(fixedAnchor);
    }
    cmd.setTransition((Transition) request.getConnectionEditPart().getModel());
    cmd.setSource(source);
    return cmd;
  }

  @Override
  protected Command getReconnectTargetCommand(ReconnectRequest request) {
    Activity target = getActivity();
    ReconnectFixedTargetCommand cmd = new ReconnectFixedTargetCommand(target.getDiagram().getTextEditor());
    ConnectionAnchor anchor = getActivityPart().getTargetConnectionAnchor(request);
    if (anchor instanceof FixedConnectionAnchor) {
      FixedConnectionAnchor fixedAnchor = (FixedConnectionAnchor) anchor;
      cmd.setTargetAnchor(fixedAnchor);
    }
    cmd.setTransition((Transition) request.getConnectionEditPart().getModel());
    cmd.setTarget(target);
    return cmd;
  }

  private void showConnectionLabel(BorderedActivityPart part, Point location) {
    ConnectionAnchor anchor = part.getConnectionAnchorAt(location);
    if (anchor instanceof FixedConnectionAnchor) {
      part.setBorderLabel(((FixedConnectionAnchor) anchor).getConnectionLabel());
    }
    else {
      part.setBorderLabel(""); //$NON-NLS-1$
    }
    part.getFigure().repaint();
  }

  @Override
  protected void showTargetConnectionFeedback(DropRequest request) {
    if (getActivityPart() instanceof BorderedActivityPart) {
      BorderedActivityPart part = (BorderedActivityPart) getActivityPart();
      if (request instanceof TargetRequest) {
        Point location = request.getLocation();
        showConnectionLabel(part, location);
      }
    }
  }

  @Override
  public void showTargetFeedback(Request request) {
    if (getActivityPart() instanceof BorderedActivityPart) {
      BorderedActivityPart part = (BorderedActivityPart) getActivityPart();
      if (request instanceof SelectionRequest) {
        SelectionRequest selection = (SelectionRequest) request;
        Point location = selection.getLocation();
        showConnectionLabel(part, location);
      }
    }
    super.showTargetFeedback(request);
  }

}
TOP

Related Classes of org.springframework.ide.eclipse.config.graph.policies.FixedConnectionNodeEditPolicy

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.