Package net.wigis.graph.dnv.layout.implementations

Source Code of net.wigis.graph.dnv.layout.implementations.Dk2Layout

package net.wigis.graph.dnv.layout.implementations;

import java.io.BufferedWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;

import net.wigis.graph.PaintBean;
import net.wigis.graph.dnv.DNVEdge;
import net.wigis.graph.dnv.DNVGraph;
import net.wigis.graph.dnv.DNVNode;
import net.wigis.graph.dnv.layout.interfaces.SimpleLayoutInterface;
import net.wigis.graph.dnv.utilities.Timer;
import net.wigis.stats.Dk2Calc;
import net.wigis.yun.Pair;
import net.wigis.yun.Tuple;
import net.wigis.yun.hashTableSort;

public class Dk2Layout implements SimpleLayoutInterface{
  /** The Constant FRUCHTERMAN_REINGOLD_LAYOUT. */
  public static final String LABEL = "DK2-Layout";
 
 
  public static final float WIDTH = (float) 100.0;
  public static final float HEIGHT = (float) 100.0;
  public static final float COOLING_FACTOR = (float) 0.1;
 
  private BufferedWriter writer;
  @Override
  public void setOutputWriter(BufferedWriter writer) {
    // TODO Auto-generated method stub
    this.writer = writer;
  }
  @Override
  public String getLabel()
  {
    return LABEL;
  }

  @Override
  public void runLayout(DNVGraph graph, int level) {
    // TODO Auto-generated method stub
    System.out.println("running " + LABEL);
    Dk1Layout.randomizePosition(graph);
    graph.clearNodesByDKTime();
   
   
    FruchtermanReingold FR = new FruchtermanReingold(false);
   
    Dk2Calc dk2Calc = new Dk2Calc(graph);
    Hashtable<Pair<Integer, Integer>, ArrayList<Tuple<Integer, Integer, DNVEdge>>> degreeNodeEdgeIndexTableDK2 = dk2Calc.getDegreeNodeEdgeIndexTableDK2();
    List degreeOrderedListDK2 = dk2Calc.getDegreeOrderedListDK2();
   
    /*dk2Calc.saveDk2Results(graph);
    Hashtable<Integer, HashSet<DNVNode>> tableNodes = (Hashtable<Integer, HashSet<DNVNode>>) graph.getAttribute("Dk2ResultsNodes");
    Hashtable<Integer, HashSet<DNVEdge>> tableEdges = (Hashtable<Integer, HashSet<DNVEdge>>) graph.getAttribute("Dk2ResultsEdges");
    List degreeOrderedListDK2 = hashTableSort.sortByKey(tableNodes);*/
   
    System.out.println("  prepair finished");
       
   
    //HashSet<DNVNode> traveledNodes = new HashSet<DNVNode>();
    //HashSet<DNVEdge> traveledEdges = new HashSet<DNVEdge>();
       

    Timer timer = new Timer( Timer.MILLISECONDS );
    timer.setStart();
   

    while(!degreeOrderedListDK2.isEmpty()){
     
     
      HashSet<DNVNode> impNodes = new HashSet<DNVNode>();
      HashSet<DNVNode> nodes = new HashSet<DNVNode>();
      HashSet<DNVEdge> edges = new HashSet<DNVEdge>();
     
      //for(int i = 0; i < iterateDecrease; i++){
      while(!degreeOrderedListDK2.isEmpty() && impNodes.size() <= 10 && edges.size() <= 10){
        Object key = degreeOrderedListDK2.get(0);
        degreeOrderedListDK2.remove(0);
       
        ArrayList<Tuple<Integer, Integer, DNVEdge>> nodeEdgeIndex = degreeNodeEdgeIndexTableDK2.get(key);
        for(Tuple<Integer, Integer, DNVEdge> tuple : nodeEdgeIndex){
          DNVNode node1 = graph.getNode(0, tuple.getLeft());
          impNodes.add(node1);
          DNVNode node2 = graph.getNode(0, tuple.getMiddle());
          nodes.add(node1);
          nodes.add(node2);         
          //nodes.add(node2);
          DNVEdge edge = tuple.getRight();
          edges.add(edge);   
          //traveledEdges.add(edge);   
        }
       
        /*for(DNVNode node : tableNodes.get(key)){
          traveledNodes.add(node);
          nodes.add(node);
                 
        }
        for(DNVEdge edge : tableEdges.get(key)){
         
          edges.add(edge);   
          traveledEdges.add(edge);
         
        }*/
      }
      /*if(iterateDecrease > 2){
        iterateDecrease--;
      }*/

     
      FR.runLayout(WIDTH,HEIGHT,nodes,edges,COOLING_FACTOR,false);
      for(DNVNode n : impNodes){
        //n.setVisible(true); 
        n.setProperty("pinned", "true");
      }
      for(DNVEdge e: edges){
        //e.setVisible(true);
        e.setProperty("pinned", "true");
      }

    }
   
    timer.setEnd();
    System.out.println( "Dk2 Layout took " + timer.getLastSegment( Timer.SECONDS ) + " seconds." );
    if(writer != null){
      try{
        int n = graph.getNodes(0).size();
        int e = graph.getEdges().size();
        double time = timer.getTimeSinceStart(Timer.SECONDS);;
        writer.write(time + "\t" + time/n + "\t" + time/e + "\t" + time/(n+e) + "\t" + time/(e/n) + "\n");
        //writer.write(timer.getLastSegment( Timer.SECONDS ) + "\n");
        //writer.write(LABEL + " finished in " + timer.getLastSegment( Timer.SECONDS ) + " seconds.\n\n");
      }catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }

    //List<DNVNode> nodesList = new ArrayList<DNVNode>(graph.getVisibleNodes(0).values());
    //List<DNVEdge> edgesList = new ArrayList<DNVEdge>(graph.getVisibleEdges(0).values());
   
    List<DNVNode> nodesList = graph.getNodes(0);
    List<DNVEdge> edgesList = graph.getEdges(0);
   
    for(int x=0;x<nodesList.size();x++){
      nodesList.get(x).setProperty("pinned", "false");
    }
    for(int x=0;x<edgesList.size();x++){
      edgesList.get(x).setProperty("pinner", "false");
    }
  }
}
TOP

Related Classes of net.wigis.graph.dnv.layout.implementations.Dk2Layout

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.