@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; }
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); }