Package org.activiti.designer.features

Source Code of org.activiti.designer.features.TaskResizeFeature

/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.activiti.designer.features;

import java.util.List;

import org.activiti.bpmn.model.Activity;
import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.CallActivity;
import org.activiti.bpmn.model.Task;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IResizeShapeContext;
import org.eclipse.graphiti.features.impl.DefaultResizeShapeFeature;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.Image;
import org.eclipse.graphiti.mm.algorithms.MultiText;
import org.eclipse.graphiti.mm.algorithms.Text;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;


/**
* @author Tijs Rademakers
*/
public class TaskResizeFeature extends DefaultResizeShapeFeature {
 
  public TaskResizeFeature(IFeatureProvider fp) {
    super(fp);
  }

  @Override
  public boolean canResizeShape(IResizeShapeContext context) {
    boolean canResize = super.canResizeShape(context);

    // perform further check only if move allowed by default feature
    if (canResize == true) {
      // don't allow resize if the class name has the length of 1
      Shape shape = context.getShape();
      Object bo = getBusinessObjectForPictogramElement(shape);
      if (bo instanceof Task || bo instanceof CallActivity) {
        canResize = true;
      } else {
        canResize = false;
      }
    }
    return canResize;
  }

  @Override
  public void resizeShape(IResizeShapeContext context) {
   
    int height = context.getHeight();
    int width = context.getWidth();
    if(height < 55) {
      height = 55;
    }
    if(width < 105) {
      width = 105;
    }
    Shape boShape = context.getShape();
    int oldX = boShape.getGraphicsAlgorithm().getX();
    int oldY = boShape.getGraphicsAlgorithm().getY();
    int deltaHeight = height - boShape.getGraphicsAlgorithm().getHeight();
   
    super.resizeShape(context);
   
    int newX = boShape.getGraphicsAlgorithm().getX();
    int newY = boShape.getGraphicsAlgorithm().getY();
   
    Object bo = getBusinessObjectForPictogramElement(boShape);
   
    Activity activity = (Activity) bo;
    for (BoundaryEvent boundaryEvent : activity.getBoundaryEvents()) {
      PictogramElement boundaryElement = getFeatureProvider().getPictogramElementForBusinessObject(boundaryEvent);
      boundaryElement.getGraphicsAlgorithm().setX(boundaryElement.getGraphicsAlgorithm().getX() + newX - oldX);
      if (newY - oldY == 0) {
        boundaryElement.getGraphicsAlgorithm().setY(boundaryElement.getGraphicsAlgorithm().getY() + deltaHeight);
      }
    }
   
    context.getShape().getGraphicsAlgorithm().setHeight(height);
    context.getShape().getGraphicsAlgorithm().setWidth(width);
    for (GraphicsAlgorithm graphicsAlgorithm : context.getShape().getGraphicsAlgorithm().getGraphicsAlgorithmChildren()) {
      graphicsAlgorithm.setHeight(height);
      graphicsAlgorithm.setWidth(width);
    }
   
    List<Shape> shapes = ((ContainerShape) context.getShape()).getChildren();
    for (Shape shape : shapes) {
      if(shape.getGraphicsAlgorithm() != null) {
        if(shape.getGraphicsAlgorithm() instanceof MultiText) {
          MultiText text = (MultiText) shape.getGraphicsAlgorithm();
          text.setHeight(height - 25);
          text.setWidth(width);
        } else if(shape.getGraphicsAlgorithm() instanceof Image) {
          Image image = (Image) shape.getGraphicsAlgorithm();
         
          if(bo instanceof CallActivity) {
           
            // calculate position for icon
            final int iconWidthAndHeight = 10;
            final int padding = 5;
            final int xPos = (context.getShape().getGraphicsAlgorithm().getWidth() / 2) - (iconWidthAndHeight / 2);
            final int yPos = context.getShape().getGraphicsAlgorithm().getHeight() - padding - iconWidthAndHeight;

            image.setX(xPos);
            image.setY(yPos);
           
          } else {
            int imageX = image.getX();
            if(imageX > 20) {
              image.setX(width - 20);
            }
          }
        } else if(shape.getGraphicsAlgorithm() instanceof Text) {
          Text text = (Text) shape.getGraphicsAlgorithm();
          text.setHeight(height - 25);
          text.setWidth(width);
        }
      }
    }
  }

}
TOP

Related Classes of org.activiti.designer.features.TaskResizeFeature

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.