Package net.wigis.graph.dnv

Examples of net.wigis.graph.dnv.DNVNode


  public static void generateWattsAndStrogatzGraphToFile( int numberOfNodes, int meanDegree, double rewireProbability )
  {
    System.out.println( "Generating Watts and Strogatz graph with " + numberOfNodes + " nodes and " + meanDegree + " mean degree." );
    System.out.println( "Rewiring probability is " + rewireProbability );
    DNVGraph graph = new DNVGraph();
    DNVNode tempNode;
    for( int i = 0; i < numberOfNodes; i++ )
    {
      tempNode = new DNVNode( new Vector2D( (float)Math.random(), (float)Math.random() ), graph );
      tempNode.setId( i );
      graph.addNode( 0, tempNode );
    }

    int degreeBy2 = meanDegree / 2;
    DNVNode tempNode2;
    DNVEdge tempEdge;
    int edgeId = numberOfNodes;
    HashMap<String, DNVEdge> edgeMap = new HashMap<String, DNVEdge>();
    System.out.println( "Generating nodes and edges..." );
    for( int i = 0; i < numberOfNodes; i++ )
View Full Code Here


   *            the nodes by connectivity
   * @return the dNV node
   */
  private static DNVNode addNode( DNVGraph graph, Map<Integer, List<DNVNode>> nodesByConnectivity )
  {
    DNVNode n = new DNVNode( graph );
    n.setPosition( (float)Math.random(), (float)Math.random() );
    n.setLevel( 0 );
    n.setColor( 0.5f, 0.5f, 1.0f );
    n.setLabel( RandomNames.getRandomName() );
    n.setBbId( n.getLabel() );
    graph.addNode( 0, n );

    addNodeToConnectivityMap( nodesByConnectivity, n );

    return n;
View Full Code Here

          buildNewNode = true;
        }
      }
      //build a new node, assign parent to the nodes in the triangle
      if(buildNewNode){
        DNVNode parent = new DNVNode(compressedGraph);
        parentToTriangle.put(parent, tri);
        triangleToParent.put(tri,parent);
        compressedGraph.addNode(0, parent);
        for(DNVNode node : tri.vertices){
          nodeToParent.put(node, parent);
          untraveledNode.remove(node);
        }
      }
     
    }
    //do the same thing for lines
    for(Object obj : lines){
      Line line = (Line)obj;
      untraveledEdge.removeAll(line.edges);
      //map each node to the triangle it belongs to and see if need to build a new node
      for(DNVNode node : line.vertices){
        if(!nodeToLines.containsKey(node)){
          nodeToLines.put(node, new ArrayList<Line>());
        }
        nodeToLines.get(node).add(line);
        untraveledNode.remove(node);
      }
      //build a new node, assign parent to the nodes in the triangle
      if(!nodeToParent.containsKey(line.nodes.getMiddle())){
        //System.out.println("add new node");
        DNVNode parent = new DNVNode(compressedGraph);
        parentToLine.put(parent, line);
        lineToParent.put(line,parent);
        compressedGraph.addNode(0, parent);
        for(DNVNode node : line.vertices){
          nodeToParent.put(node, parent);       
        }
      }else{
        DNVNode nodeLeft = line.nodes.getLeft();
        DNVNode nodeRight = line.nodes.getRight();
        DNVNode middleParent = nodeToParent.get(line.nodes.getMiddle());
        if(!nodeToParent.containsKey(nodeLeft) && nodeLeft.getConnectivity() == 1){
          nodeToParent.put(nodeLeft, middleParent);   
          untraveledNode.remove(nodeLeft);
        }
        if(!nodeToParent.containsKey(nodeRight) && nodeRight.getConnectivity() == 1){
          nodeToParent.put(nodeRight, middleParent)
          untraveledNode.remove(nodeRight);
        }
      }
    }
    //start building edges for the parent nodes
    /*List<DNVNode> newNodes = compressedGraph.getNodes(0);
    for(int i = 0; i < newNodes.size(); i++){
      for(int j = 1; j < newNodes.size(); j++){       
        DNVNode p1 = newNodes.get(i);
        DNVNode p2 = newNodes.get(j);
        if(p1.getNeighbors().contains(p2) || p2.getNeighbors().contains(p1)){
          continue;
        }
        Triangle p1Tri = parentToTriangle.get(p1);
        Triangle p2Tri = parentToTriangle.get(p2);
        Line p1Line = parentToLine.get(p1);
        Line p2Line = parentToLine.get(p2);
        if(p1Tri != null){
          if(p2Tri != null){
            if(p1Tri.share(p2Tri)){
              DNVEdge edge = new DNVEdge(compressedGraph);
              edge.setTo(p1);
              edge.setFrom(p2);
              compressedGraph.addEdge(0, edge);
              continue;
            }
          }
          if(p2Line != null){
            if(p1Tri.share(p2Line)){
              DNVEdge edge = new DNVEdge(compressedGraph);
              edge.setTo(p1);
              edge.setFrom(p2);
              compressedGraph.addEdge(0, edge);
              continue;
            }
          }
        }
       
        if(p1Line != null){
          if(p2Tri != null){
            if(p1Line.share(p2Tri)){
              DNVEdge edge = new DNVEdge(compressedGraph);
              edge.setTo(p1);
              edge.setFrom(p2);
              compressedGraph.addEdge(0, edge);
              continue;
            }
          }
          if(p2Line != null){
            if(p1Line.share(p2Line)){
              DNVEdge edge = new DNVEdge(compressedGraph);
              edge.setTo(p1);
              edge.setFrom(p2);
              compressedGraph.addEdge(0, edge);
              continue;
            }
          }
        }
      }
    }*/
    for(DNVNode parent : compressedGraph.getNodes(0)){
      Triangle tri = parentToTriangle.get(parent);
      if(tri != null){
        for(DNVNode node : tri.vertices){
          if(nodeToTriangles.get(node) != null){
            for(Triangle newTri : nodeToTriangles.get(node)){
              if(newTri != tri){
                DNVNode otherNode = triangleToParent.get(newTri);
                if(otherNode != null && !parent.getAllNeighbors().contains(otherNode) && !parent.shareNeighbors(otherNode)){
                  DNVEdge edge = new DNVEdge(compressedGraph);
                  edge.setTo(parent);
                  edge.setFrom(otherNode);
                  compressedGraph.addEdge(0, edge);
                }
              }
            }
          }
          if(nodeToLines.get(node) != null){
            for(Line newLine: nodeToLines.get(node)){
              DNVNode otherNode = lineToParent.get(newLine);
              if(otherNode != null && !parent.getAllNeighbors().contains(otherNode) && !parent.shareNeighbors(otherNode)){
                DNVEdge edge = new DNVEdge(compressedGraph);
                edge.setTo(parent);
                edge.setFrom(otherNode);
                compressedGraph.addEdge(0, edge);
              }
            }
          }
        }
      }
     
      Line line = parentToLine.get(parent);
      if(line != null){
        for(DNVNode node : line.vertices){
          if(nodeToTriangles.get(node) != null){
            for(Triangle newTri : nodeToTriangles.get(node)){
              DNVNode otherNode = triangleToParent.get(newTri);
              if(otherNode != null && !parent.getAllNeighbors().contains(otherNode) && !parent.shareNeighbors(otherNode)){
                DNVEdge edge = new DNVEdge(compressedGraph);
                edge.setTo(parent);
                edge.setFrom(otherNode);
                compressedGraph.addEdge(0, edge);
              }
            }
          }
          if(nodeToLines.get(node) != null){
            for(Line newLine: nodeToLines.get(node)){
              if(newLine != line){
                DNVNode otherNode = lineToParent.get(newLine);
                if(otherNode != null && !parent.getAllNeighbors().contains(otherNode) && !parent.shareNeighbors(otherNode)){
                  //if(!parent.getNeighbors().contains(otherNode) && !otherNode.getNeighbors().contains(parent)){
                    DNVEdge edge = new DNVEdge(compressedGraph);
                    edge.setTo(parent);
                    edge.setFrom(otherNode);
                    compressedGraph.addEdge(0, edge);
                }
              }
            }
          }
        }
      }
    }
    //put in the disconnected nodes
    for(DNVNode node : untraveledNode){
      if(node.getConnectivity() > 1){
        System.out.println("connectivity > 1, shouldn't be happening");
      }
      DNVNode parent = new DNVNode(compressedGraph);
      compressedGraph.addNode(0, parent);
      nodeToParent.put(node, parent);
    }
    for(DNVEdge edge : untraveledEdge){
      if(! (edge.getFrom().getConnectivity() == 1 && edge.getTo().getConnectivity() == 1)){
        System.out.println("weird edge");
        continue;
      }
      DNVNode p1 = nodeToParent.get(edge.getFrom());
      DNVNode p2 = nodeToParent.get(edge.getTo());
      if(p1 == null){
        System.out.println("p1 is null");
      }
      if(p2 == null){
        System.out.println("p2 is null " + edge.getFrom().getConnectivity() + " " + edge.getTo().getConnectivity());
        DNVNode node = edge.getTo();
        if(nodeToTriangles.get(node) == null){
          System.out.println("no triangle");
        }else{
          System.out.println("belong to triangle");
        }
View Full Code Here

    int edgesPerNewNode = (int)Math.round( (double)nEdges / (double)nNodes );

    int startingChainSize = nEdges / nNodes + 1;
    if( startingChainSize >= dnvGraph.getGraphSize( 0 ) )
    {
      DNVNode currentNode;
      DNVNode previousNode = addNode( dnvGraph, nodesByConnectivity );
      int initialGraphSize = dnvGraph.getGraphSize( 0 );
      for( int i = 1; i < startingChainSize - initialGraphSize; i++ )
      {
        currentNode = addNode( dnvGraph, nodesByConnectivity );
        totalConnectivity = addEdge( previousNode, currentNode, dnvGraph, totalConnectivity, nodesByConnectivity );
        previousNode = currentNode;
      }
    }
   
    System.out.println( "Starting chain size " + startingChainSize );
    int edgesPerNewNode_assigned;
    int currentConnectivity = -1;
    List<DNVNode> tempList;
    boolean connected;
    Timer timer = new Timer( Timer.MILLISECONDS );
    timer.setStart();
    Timer edgeTimer = new Timer( Timer.MILLISECONDS );
    Timer keysTimer = new Timer( Timer.MILLISECONDS );
    int addedEdge = 0;
    DNVNode node1;
    DNVNode node2;
    for( int i = startingChainSize; dnvGraph.getGraphSize( 0 ) < nNodes; i++ )
    {
      if( i % 10000 == 0 )
      {
        timer.setEnd();
        System.gc();
        System.out.println( i + " : " + timer.getLastSegment( Timer.SECONDS ) + " seconds." );
        System.out.println( "Edgetimer : " + edgeTimer.getNumberOfSegments() + " Average time : " + edgeTimer.getAverageTime( Timer.SECONDS )
            + " seconds." );
        System.out.println( "KeysTimer : " + keysTimer.getNumberOfSegments() + " Average time : " + keysTimer.getAverageTime( Timer.SECONDS )
            + " seconds." );
        System.out.println( "Added Edge : " + addedEdge );
        edgeTimer.reset();
        keysTimer.reset();
        timer.setStart();
        addedEdge = 0;
      }
      node1 = addNode( dnvGraph, nodesByConnectivity );

      // add edges
      edgesPerNewNode_assigned = 0;
      edgeTimer.setStart();
      while( edgesPerNewNode_assigned < edgesPerNewNode )
      {
//        System.out.println( edgesPerNewNode_assigned + " < " + edgesPerNewNode );
        currentConnectivity = findCorrectConnectivity( totalConnectivity, nodesByConnectivity, node1, keysTimer );
//        System.out.println( currentConnectivity );
        // Get the list of nodes with given connectivity
        tempList = nodesByConnectivity.get( currentConnectivity );

//        System.out.println( tempList.size() );
        // add edge to a node of the given connectivity
        connected = false;
        for( int k = 0; k < tempList.size() && !connected; k++ )
        {
          node2 = tempList.get( k );

          if( !node1.equals( node2 ) && !node1.isNeighbor( node2 ) )
          {
            addedEdge++;
            totalConnectivity = addEdge( node1, node2, dnvGraph, totalConnectivity, nodesByConnectivity );

            edgesPerNewNode_assigned++;

            connected = true;
          }
        }
      }
      edgeTimer.setEnd();
    }
   
    // Add edges until we have the specified number of edges
    List<DNVNode> dnvNodes = dnvGraph.getNodes( 0 );
    while( totalConnectivity / 2.0 < nEdges )
    {
      System.out.println( totalConnectivity / 2.0 + " < " + nEdges );

      int i = 0;
      node1 = dnvNodes.get( i );
      while( node1.getConnectivity() > edgesPerNewNode * 2 )
        node1 = dnvNodes.get( i = ( i + 1 ) % dnvNodes.size() );
      connected = false;
      edgesPerNewNode_assigned = 0;
      while( !connected )
      {
        currentConnectivity = findCorrectConnectivity( totalConnectivity, nodesByConnectivity, node1, keysTimer );
        // Get the list of nodes with given connectivity
        tempList = nodesByConnectivity.get( currentConnectivity );

        // add edge to a node of the given connectivity
        connected = false;
        for( int k = 0; k < tempList.size() && !connected; k++ )
        {
          node2 = tempList.get( k );

          if( !node1.equals( node2 ) && node1.isNeighbor( node2 ) )
          {
            addedEdge++;
            totalConnectivity = addEdge( node1, node2, dnvGraph, totalConnectivity, nodesByConnectivity );

            edgesPerNewNode_assigned++;

            connected = true;
          }
        }
      }
    }

    nEdges = dnvGraph.getEdges( 0 ).size();
    nNodes = dnvGraph.getNodes( 0 ).size();
    if( runLayout )
    {
      new FruchtermanReingold().runLayout( 100, 100, dnvGraph, 0.1f, 0, false, false );
    }
    dnvGraph.writeGraph( Settings.GRAPHS_PATH + graphName + "_" + nNodes + "_" + nEdges + ".dnv" );

    // csv
    if( writeCSV )
    {
      FileWriter fstream = new FileWriter( Settings.GRAPHS_PATH + "touchgraph/" + graphName + "_" + nNodes + "_" + String.valueOf( nEdges )
          + "_EDGES" + ".csv" );
      BufferedWriter out = new BufferedWriter( fstream );
      if( writeCSV )
        out.write( "id" + "\n" );

      DNVNode dnvNode;
      List<DNVNode> nodes = dnvGraph.getNodes( 0 );
      for( int i = 0; i < nodes.size(); i++ )
      {
        // dnv
        dnvNode = nodes.get( i );

        // csv
        out.write( dnvNode.getId() + "\n" );
      }

      // csv
      out.close();
      fstream = new FileWriter( Settings.GRAPHS_PATH + "touchgraph/" + graphName + "_" + nNodes + "_" + String.valueOf( nEdges ) + "_NODES"
View Full Code Here

   * @return the dNV node
   */
  public static DNVNode createParentNode( DNVNode tempNode, Integer newLevel, DNVGraph graph, Map<Integer, Integer> nodeDistance,
      Map<Integer, DNVNode> nodeToParent, Map<Integer, List<DNVNode>> parentToNodes )
  {
    DNVNode newNode = new DNVNode( new Vector2D( tempNode.getPosition() ), graph );
    newNode.setColor( tempNode.getColor() );
    newNode.setLevel( newLevel.intValue() );
    newNode.setFirstChild( tempNode );
    graph.addNode( newLevel, newNode );
    if( multicolor && newLevel == 1 )
    {
      Vector3D color = new Vector3D( (float)Math.max( 0.3, Math.random() ), (float)Math.max( 0.3, Math.random() ), (float)Math.max( 0.3, Math
          .random() ) );
      newNode.setColor( color );
    }
    else
    {
      Vector3D color = new Vector3D( tempNode.getColor() );
      newNode.setColor( color );
    }

    nodeDistance.put( tempNode.getId(), Integer.valueOf( 0 ) );
    nodeToParent.put( tempNode.getId(), newNode );
    List<DNVNode> tempList = new ArrayList<DNVNode>();
    tempList.add( tempNode );
    parentToNodes.put( newNode.getId(), tempList );
    return newNode;
  }
View Full Code Here

      return -1;
    }

    if( highlightNeighbors )
    {
      DNVNode tempNode0 = (DNVNode)node0;
      DNVNode tempNode1 = (DNVNode)node1;
      if( ( tempNode0.isNeighborSelected() || tempNode0.isEdgeSelected() ) && !( tempNode1.isNeighborSelected() || tempNode1.isEdgeSelected() ) )
      {
        return 1;
      }
      if( !( tempNode0.isNeighborSelected() || tempNode0.isEdgeSelected() ) && ( tempNode1.isNeighborSelected() || tempNode1.isEdgeSelected() ) )
      {
        return -1;
      }
    }
View Full Code Here

      HashSet<String> countrySet = new HashSet<String>();
      String minTime = null;
      String maxTime = null;
      for(int rowCnt = 2; rowCnt < sheet.getPhysicalNumberOfRows(); rowCnt++){
        Row row = sheet.getRow(rowCnt);
        DNVNode node = new DNVNode(graph);
        //time
        Cell timeCell = row.getCell(0);
        timeCell.setCellType(Cell.CELL_TYPE_STRING);
        String timeString = timeCell.getStringCellValue().substring(0, 8);
        node.setProperty("time", timeString);
       
        if(rowCnt == 2){
          minTime = timeString;
          maxTime = timeString;
        }else{
          if(minTime.compareTo(timeString) > 0){
            minTime = timeString;
          }
          if(maxTime.compareTo(timeString) < 0){
            maxTime = timeString;
          }
        }
       
       
        //country
        Cell countryCell = row.getCell(7);
        countryCell.setCellType(Cell.CELL_TYPE_STRING);
        countrySet.add(row.getCell(8).getStringCellValue());
        node.setProperty("country", row.getCell(8).getStringCellValue());
       
        //city
        Cell cityCell = row.getCell(12);
        cityCell.setCellType(Cell.CELL_TYPE_STRING);
        node.setProperty("city", cityCell.getStringCellValue());
        node.setLabel(cityCell.getStringCellValue() + " " + timeString);
        //System.out.println(cityCell.getStringCellValue());
       
        //whether the attack is successful or not
        Cell successCell = row.getCell(24);
        if(successCell.getNumericCellValue() == 1)
          node.setProperty("success","successful");
        else{
          node.setProperty("success","failed");
        }
       
        //attack type, up to three attack types
        Cell attacktype1Cell = row.getCell(26);
        attacktype1Cell.setCellType(Cell.CELL_TYPE_STRING);
        String attacktype1 = attacktype1Cell.getStringCellValue();
        attacktypeHash.put(attacktype1, row.getCell(27).getStringCellValue());
        String attacktype = row.getCell(27).getStringCellValue();//attacktype1;
       
        Cell attacktype2Cell = row.getCell(28);
        if(attacktype2Cell != null){
          attacktype2Cell.setCellType(Cell.CELL_TYPE_STRING);
          attacktype += "\t" + attacktypeHash.get(attacktype2Cell.getStringCellValue());//attacktype2Cell.getStringCellValue();
        }

        Cell attacktype3Cell = row.getCell(30);
        if(attacktype3Cell != null){
          attacktype3Cell.setCellType(Cell.CELL_TYPE_STRING);
          attacktype += "\t" + attacktypeHash.get(attacktype3Cell.getStringCellValue());//attacktype3Cell.getStringCellValue();
        }
        node.setProperty("attacktype", attacktype);
        //System.out.println("attacktype " + attacktype);
       
        //target type, up to three target types
        Cell targettype1Cell = row.getCell(32);
        targettype1Cell.setCellType(Cell.CELL_TYPE_STRING);
        String targettype1 = targettype1Cell.getStringCellValue();
        targettypeHash.put(targettype1, row.getCell(33).getStringCellValue());
        String targettype = row.getCell(33).getStringCellValue();//targettype1;       
       
        Cell targettype2Cell = row.getCell(38);
        if(targettype2Cell != null){
          targettype2Cell.setCellType(Cell.CELL_TYPE_STRING);
          targettype += "\t" + targettypeHash.get(targettype2Cell.getStringCellValue());
        }
       
        Cell targettype3Cell = row.getCell(44);
        if(targettype3Cell != null){
          targettype3Cell.setCellType(Cell.CELL_TYPE_STRING);
          targettype += "\t" + targettypeHash.get(targettype3Cell.getStringCellValue());
        }
        node.setProperty("targettype", targettype);
        //System.out.println("targettype " + targettype);
       
        //number of victims
        int numberVictims = -10;
        Cell numberKilledCell = row.getCell(92);
        if(numberKilledCell != null && numberKilledCell.getNumericCellValue() > 0){
          numberVictims = (int) numberKilledCell.getNumericCellValue();
        }
        Cell numberWoundedCell = row.getCell(95);
        if(numberWoundedCell != null && numberWoundedCell.getNumericCellValue() > 0){
          if(numberVictims < 0)
            numberVictims = (int) numberWoundedCell.getNumericCellValue();
          else
            numberVictims += (int) numberWoundedCell.getNumericCellValue();
        }
        if(numberVictims < 0){
          node.setRadius(3);
          node.setProperty("numberOfVictims", "unknown");
        }else{
          node.setRadius((float) (3 + Math.log10(numberVictims)));
          node.setProperty("numberOfVictims", String.valueOf(numberVictims));
        }//System.out.println("number of victims " + numberVictims);
       
        //property loss
        Cell propertyLoss = row.getCell(99);
        if(propertyLoss != null){
          propertyLoss.setCellType(Cell.CELL_TYPE_STRING);
          node.setProperty("propertyLoss", row.getCell(100).getStringCellValue());
          propertyLossHash.put(propertyLoss.getStringCellValue(), row.getCell(100).getStringCellValue());
          //System.out.println("property loss " + row.getCell(100).getStringCellValue());
        }
        //System.out.println();
        graph.addNode(0, node);
      }
      String countryHashString = "";
      for(String key : countrySet){
        countryHashString += key + "\t";
      }
      System.out.println();
      String attacktypeHashString = "";
      for(String key : attacktypeHash.keySet()){
        attacktypeHashString += attacktypeHash.get(key) + "\t";
      }
      System.out.println();
      String targettypeHashString = "";
      for(String key : targettypeHash.keySet()){
        targettypeHashString += targettypeHash.get(key) + "\t";
      }
      System.out.println();
      String propertyLossHashString = "";
      for(String key : propertyLossHash.keySet()){
        propertyLossHashString += propertyLossHash.get(key) + "\t";
      }
      Random generator = new Random();
    for(DNVNode node : graph.getNodes(0)){
      node.setPosition(generator.nextFloat() * 2 - 1, generator.nextFloat() * 2 - 1);
    }
      String propertyList = "country" + "\t" + "success" + "\t" + "attacktype" + "\t" + "targettype" + "\t" + "propertyLoss";
      graph.setProperty("propertyList", propertyList);
      graph.setProperty("country", countryHashString);
      graph.setProperty("success", "successful"+"\t"+"failed");
View Full Code Here

    List<DNVNode> tempNodeList = new ArrayList<DNVNode>();

    if( sort )
      Collections.sort( currentNodes, sorter );

    DNVNode tempNode;
    DNVNode tempNode2;
    DNVNode newNode;
    DNVEdge tempEdge;

    System.out.println( "First node neighbors : " + currentNodes.get( 0 ).getNeighbors().size() );
    System.out.println( "Last node neighbors : " + currentNodes.get( currentNodes.size() - 1 ).getNeighbors().size() );

    Map<Integer, Integer> nodeDistance = new HashMap<Integer, Integer>();
    Map<Integer, DNVNode> nodeToParent = new HashMap<Integer, DNVNode>();
    Map<Integer, List<DNVNode>> parentToNodes = new HashMap<Integer, List<DNVNode>>();

    List<DNVNode> tempList;

    // Assign all nodes with a parent node
    for( int i = 0; i < numberOfClusters; i++ )
    {
      tempNode = currentNodes.get( i );
      newNode = createParentNode( tempNode, newLevel, graph, nodeDistance, nodeToParent, parentToNodes );
      if( Settings.DEBUG )
      {
        System.out.println( "Parent node has id " + newNode.getId() + " subnode has id " + tempNode.getId() );
        System.out.println( "Subnode[" + tempNode.getId() + "] has " + tempNode.getNeighbors().size() + " neighbors" );
      }
      tempNodeList = tempNode.getNeighbors();
      handleNeighbors( 1, tempNodeList, newNode, nodeDistance, nodeToParent );
    }

    // Handle nodes that are not connected to any other nodes
    tempList = graph.getNodes( currentLevel );
    for( int i = 0; i < tempList.size(); i++ )
    {
      tempNode = tempList.get( i );
      if( tempNode.getNeighbors().size() == 0 )
      {
        newNode = createParentNode( tempNode, newLevel, graph, nodeDistance, nodeToParent, parentToNodes );
        if( Settings.DEBUG )
        {
          System.out.println( "Node with id " + tempNode.getId() + " at level " + currentLevel + " has no neighbors. Create parent node." );
          System.out.println( "Parent node has id " + newNode.getId() );
          System.out.println( "" );
        }
      }
    }

    if( Settings.DEBUG )
    {
      System.out.println( "Number of nodes that have a parent node: " + nodeToParent.keySet().size() );
      System.out.println( "Number of nodes at current level: " + currentNodes.size() );

      for( int i = 0; i < currentNodes.size(); i++ )
      {
        if( nodeToParent.get( currentNodes.get( i ).getId() ) == null )
        {
          System.out.println( "node " + currentNodes.get( i ).getId() + " has no parent." );
        }
      }
    }

    // Set connections from parent to sub nodes
    Iterator<Integer> ids = nodeToParent.keySet().iterator();
    Integer tempId;
    while( ids.hasNext() )
    {
      tempId = ids.next();
      tempNode = nodeToParent.get( tempId );
      tempList = parentToNodes.get( tempNode.getId() );
      tempNode2 = (DNVNode)graph.getNodeById( tempId );
      if( tempNode2 != null && !tempList.contains( tempNode2 ) )
      {
        tempList.add( tempNode2 );
        parentToNodes.put( tempNode.getId(), tempList );
        tempNode.setLabel( "" + tempList.size() );
      }

      if( tempNode2 == null )
      {
        System.out.println( "Trying to add a link from a non-existing node" );
      }
    }

    // Create the edges
    List<DNVEdge> edgeList;
    ids = parentToNodes.keySet().iterator();
    DNVNode tempParent;
    DNVNode tempParent2;
    while( ids.hasNext() )
    {
      tempId = ids.next();
      tempParent2 = (DNVNode)graph.getNodeById( tempId );
      tempList = parentToNodes.get( tempId );
      tempParent2.setSubNodes( tempList );
      for( int i = 0; i < tempList.size(); i++ )
      {
        tempNode = tempList.get( i );
        edgeList = tempNode.getFromEdges();
        for( int j = 0; j < edgeList.size(); j++ )
        {
          tempEdge = edgeList.get( j );
          tempNode2 = tempEdge.getTo();
          tempParent = nodeToParent.get( tempNode2.getId() );
          if( tempParent != null && !tempParent.getId().equals( tempId ) && tempParent != tempParent2 )
          {
            if( !tempParent.getNeighbors().contains( tempParent2 ) )
            {
              tempEdge = new DNVEdge( newLevel.intValue(), DNVEdge.DEFAULT_RESTING_DISTANCE, false, tempParent2, tempParent, graph );
              tempParent2.addFromEdge( tempEdge );
              tempParent.addToEdge( tempEdge );
              graph.addNode( newLevel, tempEdge );
            }
          }
        }

        edgeList = tempNode.getToEdges();
        for( int j = 0; j < edgeList.size(); j++ )
        {
          tempEdge = edgeList.get( j );
          tempNode2 = tempEdge.getFrom();
          tempParent = nodeToParent.get( tempNode2.getId() );

          if( tempParent != null && !tempParent.getId().equals( tempId ) && tempParent != tempParent2 )
          {
            tempParent2 = (DNVNode)graph.getNodeById( tempId );
            if( !tempParent.getNeighbors().contains( tempParent2 ) )
            {
              tempEdge = new DNVEdge( newLevel.intValue(), DNVEdge.DEFAULT_RESTING_DISTANCE, false, tempParent, tempParent2, graph );
              tempParent2.addToEdge( tempEdge );
              tempParent.addFromEdge( tempEdge );
              graph.addNode( newLevel, tempEdge );
            }
          }
        }
View Full Code Here

   *            the node to parent
   */
  private static void handleNeighbors( int distance, List<DNVNode> neighbors, DNVNode parentNode, Map<Integer, Integer> nodeDistance,
      Map<Integer, DNVNode> nodeToParent )
  {
    DNVNode tempNode;
    Integer tempDistance;
    for( int i = 0; i < neighbors.size(); i++ )
    {
      tempNode = neighbors.get( i );
      if( multicolor && parentNode.getLevel() == 1 )
        tempNode.setColor( parentNode.getColor() );
      tempDistance = nodeDistance.get( tempNode.getId() );
      if( tempDistance == null || tempDistance > distance )
      {
        nodeDistance.put( tempNode.getId(), Integer.valueOf( distance ) );
        nodeToParent.put( tempNode.getId(), parentNode );
        handleNeighbors( distance + 1, tempNode.getNeighbors(), parentNode, nodeDistance, nodeToParent );
      }
      else
      {
        // System.out.println( "Stopping expansion at node " +
        // tempNode.getId() + " distance " + tempDistance +
View Full Code Here

        // totalApplyTimer.setEnd();

        // Do one iteration of the layout algorithm for the subnodes of
        // a random node
        int random = (int)( Math.random() * graph.getGraphSize( level ) );
        DNVNode tempNode = graph.getNodes( level ).get( random );
        tempNode.iterateSubGraph();

        overallForce = forceStrength.getVectorSum().length();
        if( overallForce < minOverallForce )
          minOverallForce = overallForce;
        if( automaticLevelJump && graph.getActiveNodes( level ).size() < graph.getGraphSize( level ) / 5.0 )
View Full Code Here

TOP

Related Classes of net.wigis.graph.dnv.DNVNode

Copyright © 2018 www.massapicom. 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.