Package lupos.gui.operatorgraph.arrange

Source Code of lupos.gui.operatorgraph.arrange.GraphHelper

/**
* Copyright (c) 2013, Institute of Information Systems (Sven Groppe and contributors of LUPOSDATE), University of Luebeck
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
* following conditions are met:
*
*   - Redistributions of source code must retain the above copyright notice, this list of conditions and the following
*     disclaimer.
*   - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
*     following disclaimer in the documentation and/or other materials provided with the distribution.
*   - Neither the name of the University of Luebeck nor the names of its contributors may be used to endorse or promote
*     products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package lupos.gui.operatorgraph.arrange;

import java.util.HashMap;

import lupos.gui.operatorgraph.GraphBox;
import lupos.gui.operatorgraph.OperatorGraph;
import lupos.gui.operatorgraph.graphwrapper.GraphWrapper;
import lupos.misc.Tuple;

public class GraphHelper {

  /**
   * If graph is out of display after a computed layout, this method fits it
   * back into the display
   */
  public static void fitToWindow(final OperatorGraph operatorgraph) {
    HashMap<GraphWrapper, GraphBox> boxes = operatorgraph.getBoxes();
    int minX = 0; int minY = 0;
   
    // get the smallest x- and y-values
    for (GraphBox box : boxes.values()) {
      if (box.getX() < minX) minX = box.getX();
      if (box.getY() < minY) minY = box.getY();
    }
   
    // x-correction
    if (minX < 0) {
      for (GraphWrapper gw : boxes.keySet()) {
        GraphBox box = boxes.get(gw);
        box.setXWithoutUpdatingParentsSize(box.getX()+Math.abs(minX));
      }
    }
       
    // y-correction
    if (minY < 0) {
      for (GraphWrapper gw : boxes.keySet()) {
        GraphBox box = boxes.get(gw);
        box.setYWithoutUpdatingParentsSize(box.getY()+Math.abs(minY));
      }
    }
   
    minX = Integer.MAX_VALUE; minY = Integer.MAX_VALUE;
   
    // get the smallest x- and y-values
    for (GraphBox box : boxes.values()) {
      if (box.getX() < minX) minX = box.getX();
      if (box.getY() < minY) minY = box.getY();
    }
   
    // x-correction
    for (GraphWrapper gw : boxes.keySet()) {
      GraphBox box = boxes.get(gw);
      box.setXWithoutUpdatingParentsSize(box.getX()-minX);
    }
       
    // y-correction
    for (GraphWrapper gw : boxes.keySet()) {
      GraphBox box = boxes.get(gw);
      box.setYWithoutUpdatingParentsSize(box.getY()-minY);
    }
  } 
 
  /**
   * Method gets the width of the graph
   * @return
   */
  protected static int graphWidth(final OperatorGraph operatorgraph) {
    int width = 0;
    HashMap<GraphWrapper, GraphBox> boxes = operatorgraph.getBoxes();
   
    for (GraphBox box : boxes.values()) {
      if ((box.getX() + box.width) > width) {
        width = box.getX() + box.width;
      }
    }   
    return width;
  }
 
  /**
   * Method gets the avg. width and height of all boxes in the graph
   * @return
   */
  protected static Tuple<Double, Double> getAvgSizesOfBoxes(final OperatorGraph operatorgraph) {   
    long width = 0;
    long height = 0;
    HashMap<GraphWrapper, GraphBox> boxes = operatorgraph.getBoxes();
   
    if(boxes.size()==0){
      return new Tuple<Double, Double>(1.0, 1.0);
    }
   
    for (GraphBox box : boxes.values()) {
      width += box.width;
      height += box.width;
    }
   
    return new Tuple<Double, Double>(width/((double)boxes.size()), height/((double)boxes.size()));
  }
 
  /**
   * Method gets the height of the graph
   * @return
   */
  protected static int graphHeight(final OperatorGraph operatorgraph) {
    int height = 0;
    HashMap<GraphWrapper, GraphBox> boxes = operatorgraph.getBoxes();
   
    for (GraphBox box : boxes.values()) {
      if ((box.getY() + box.height) > height) {
        height= box.getY() + box.height;
      }
    }   
    return height;
  }
 
  /**
   * Method sets all node-positions to their starting-positions.
   * Here x = -1 an y = -1
   */
  protected static void restoreOriginalPositions(final OperatorGraph operatorgraph) {
    for (GraphBox box: operatorgraph.getBoxes().values()) {
      box.setX(-1);
      box.setY(-1);
    }   
  }
}
TOP

Related Classes of lupos.gui.operatorgraph.arrange.GraphHelper

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.