Exemple #1
0
 @Override
 protected NodeCluster findSingleInLinkClusters(TreeMap<Integer, NodeCluster> clusters) {
   double minFlow = Double.POSITIVE_INFINITY;
   NodeCluster outCluster = null;
   for (int i : clusters.keySet()) {
     NodeCluster nc = clusters.get(i);
     if (nc.getInLinks().size() == 1) {
       for (ClusterLink cl : nc.getInLinks().values()) {
         NodeCluster newCluster;
         newCluster =
             new NodeCluster(
                 cl.getFromCluster(),
                 nc,
                 internalFlowMethod,
                 internalFlowMethodParameters,
                 clusterSteps,
                 cl.getFromCluster().getId());
         if (newCluster.getDeltaFlow() < minFlow) {
           minFlow = newCluster.getDeltaFlow();
           outCluster = newCluster;
         }
       }
     }
   }
   return outCluster;
 }
  public static List<Address> getTransportAddresses(Priority priority) {
    ClusterLink clusterLink = getClusterLink();

    if (clusterLink == null) {
      return Collections.emptyList();
    }

    return clusterLink.getTransportAddresses(priority);
  }
  public static List<Address> getLocalTransportAddresses() {
    ClusterLink clusterLink = getClusterLink();

    if (clusterLink == null) {
      return Collections.emptyList();
    }

    return clusterLink.getLocalTransportAddresses();
  }
  public static InetAddress getBindInetAddress() {
    ClusterLink clusterLink = getClusterLink();

    if (clusterLink == null) {
      return null;
    }

    return clusterLink.getBindInetAddress();
  }
  public static void sendMulticastMessage(Message message, Priority priority) {

    ClusterLink clusterLink = getClusterLink();

    if (clusterLink == null) {
      return;
    }

    clusterLink.sendMulticastMessage(message, priority);
  }
  public static void sendUnicastMessage(Address address, Message message, Priority priority) {

    ClusterLink clusterLink = getClusterLink();

    if (clusterLink == null) {
      return;
    }

    clusterLink.sendUnicastMessage(address, message, priority);
  }
 private boolean hasSharedLinks(NodeCluster nc1, NodeCluster nc2) {
   for (ClusterLink l : nc1.getInLinks().values()) {
     if (nc2.getOutLinks().get(l.getId()) != null) {
       return true;
     }
   }
   for (ClusterLink l : nc1.getOutLinks().values()) {
     if (nc2.getInLinks().get(l.getId()) != null) {
       return true;
     }
   }
   return false;
 }
 private void updateLinksAndNodes(NodeCluster newCluster) {
   for (ClusterLink l : newCluster.getInLinks().values()) {
     l.setNewRoot(newCluster, false);
     l.setToCluster(newCluster);
   }
   for (ClusterLink l : newCluster.getOutLinks().values()) {
     l.setNewRoot(newCluster, false);
     l.setFromCluster(newCluster);
   }
   for (ClusterLink l : newCluster.getInterLinks().values()) {
     l.setNewRoot(newCluster, true);
   }
   for (ClusterNode n : newCluster.getNodes().values()) {
     n.setNewRoot(newCluster);
   }
   newCluster.getChild1().setParent(newCluster);
   newCluster.getChild2().setParent(newCluster);
 }
  @Override
  public void draw() {
    // stroke(0);

    if (change) {
      println(currentStep + ":" + colorsForDisplay.length);
      background(255);
      pushMatrix();
      if (followMouse) {
        translate(mouseX - width / 2, mouseY - height / 2);
      }
      if (width / height < (maxX - minX) / (maxY - minY))
        scale(width / (maxX - minX), -width / (maxX - minX));
      else scale(height / (maxY - minY), -height / (maxY - minY));
      ArrayList<NodeCluster> clustersAtLevel = nca.getClustersAtLevel(currentStep);
      NodeCluster largestCluster = nca.getLargestCluster(clustersAtLevel);
      println("largest: " + largestCluster.getId());
      translate(-minX, -maxY);

      for (NodeCluster nc : clustersAtLevel) {
        if (nc.isLeaf()) {
          for (ClusterLink link : nc.getOutLinks().values()) {
            strokeWeight(strokeWeights.get(link.getId()));

            stroke(color(240));
            // pushMatrix();
            line(
                (float) (link.getFromNode().getCoord().getX()),
                (float) (link.getFromNode().getCoord().getY()),
                (float) (link.getToNode().getCoord().getX()),
                (float) (link.getToNode().getCoord().getY()));
          }

        } else {

          for (ClusterLink link : nc.getInterLinks().values()) {
            strokeWeight(strokeWeights.get(link.getId()));
            int colindex = nc.getId();
            if (nc.equals(largestCluster)) {
              stroke(color(255, 0, 0));
            } else {
              stroke(colorsForDisplay[colindex]);
            }
            // pushMatrix();
            line(
                (float) (link.getFromNode().getCoord().getX()),
                (float) (link.getFromNode().getCoord().getY()),
                (float) (link.getToNode().getCoord().getX()),
                (float) (link.getToNode().getCoord().getY()));
          }
          for (ClusterLink link : nc.getOutLinks().values()) {
            strokeWeight(strokeWeights.get(link.getId()));
            stroke(color(200));
            // pushMatrix();
            line(
                (float) (link.getFromNode().getCoord().getX()),
                (float) (link.getFromNode().getCoord().getY()),
                (float) (link.getToNode().getCoord().getX()),
                (float) (link.getToNode().getCoord().getY()));
          }
        }
      }
      // println(currentStep+":"+clustersAtLevel);

      // for (Link link : network.getLinks().values()) {
      // // popMatrix();
      // }
      // for (Node n:network.getNodes().values()){
      //
      // }
      popMatrix();
      change = false;
      // currentStep++;
      fill(0);
      text(currentStep + ":" + (colorsForDisplay.length - 1), 20, 20);
    }
    if (this.mousePressed) {
      change = true;
      followMouse = true;
    }

    //		 do some frame counting
    //		 fcount += 1;
    //		 int m = millis();
    //		 if (m - lastm > 1000 * fint) {
    //		 frate = (float) fcount / fint;
    //		 fcount = 0;
    //		 lastm = m;
    //		 // println("fps: " + frate);
    //		 }
    //		 text(frate, 0, 20);
  }