public FigureMulticastTreePanel(GUINetworkDesign callback, MulticastTree tree, String titleMessage, double carriedTraffic) { super(callback); this.generalMessage = Arrays.asList(titleMessage, "Carried trafffic: " + String.format("%.2f ", carriedTraffic) + " " + callback.getDesign().getDemandTrafficUnitsName(tree.getLayer())); this.tree = tree; this.preferredDimension = null; }
/** Returns the set of multicast trees in the given layer with the given tag. If no layer is provided, the defaulf layer is assumed. * @param tag the tag * @param optionalLayerParameter the layer (optional) * @return the set (or an empty set if there are no elements to return) */ public SortedSet<MulticastTree> getTaggedMulticastTrees (String tag , NetworkLayer... optionalLayerParameter) { final NetworkLayer layer = checkInThisNetPlanOptionalLayerParameter(optionalLayerParameter); final SortedSet<NetworkElement> el = cache_taggedElements.get (tag); if (el == null) return new TreeSet<> (); return el.stream ().filter (e->e instanceof MulticastTree).map(e->(MulticastTree) e).filter(e->e.getLayer().equals(layer)).collect (Collectors.toCollection(TreeSet::new)); } /** Returns the set of layers with the given tag.
private TBFToFromCarriedTraffic(MulticastTree tree, boolean onlyThisLayer) { super(tree.getNetPlan()); this.initialElement = tree; this.onlyThisLayer = onlyThisLayer; this.initialFR = null; this.auxLayerInNodes = null; final Set<Link> linksAllLayers = new HashSet<>(); final Set<Demand> demandsAllLayers = new HashSet<>(); final Set<MulticastDemand> mDemandsAllLayers = new HashSet<>(); mDemandsAllLayers.add(tree.getMulticastDemand()); linksAllLayers.addAll(tree.getLinkSet()); if (!onlyThisLayer) updatePropagationDownWards(linksAllLayers, linksAllLayers, demandsAllLayers, mDemandsAllLayers); if (!onlyThisLayer) updatePropagationUpWards(demandsAllLayers, mDemandsAllLayers, linksAllLayers, demandsAllLayers, mDemandsAllLayers); final Set<NetworkLayer> layersToKeepAllElements = onlyThisLayer ? Sets.difference(new HashSet<>(netPlan.getNetworkLayers()), Sets.newHashSet(tree.getLayer())) : new HashSet<>(); updateAllButLinksDemandsMDemandsUsingExistingInfo(linksAllLayers, demandsAllLayers, mDemandsAllLayers, layersToKeepAllElements); }
private List<Triple<String,String,String>> getMulticastTreeInfoTables (MulticastTree t) { final DecimalFormat df = new DecimalFormat("###.##"); final NetPlan np = t.getNetPlan(); final List<Triple<String,String,String>> res = new ArrayList <> (); res.add(Triple.of("Tree index/id" , "Tree " + t.getIndex() + " (id " + t.getId() + ")", "multicastTre" + t.getId())); res.add(Triple.of("Layer" , "" + getLayerName(t.getLayer()) , "layer" + t.getLayer().getId())); res.add(Triple.of("Tree demand" , "Multicast demand " + t.getMulticastDemand().getIndex() + " (id " + t.getMulticastDemand().getId() + ")" , "multicastDemand" + t.getMulticastDemand().getId())); res.add(Triple.of("M. Demand offered traffic" , "" + df.format(t.getMulticastDemand().getOfferedTraffic()) + " " + np.getDemandTrafficUnitsName(t.getLayer()) , "")); res.add(Triple.of("M. Demand carried traffic" , "" + df.format(t.getMulticastDemand().getCarriedTraffic()) + " " + np.getDemandTrafficUnitsName(t.getLayer()) , "")); res.add(Triple.of("Tree carried traffic" , "" + df.format(t.getCarriedTraffic()) + " " + np.getDemandTrafficUnitsName(t.getLayer()), "")); res.add(Triple.of("Is up?" , "" + !t.isDown(), "")); res.add(Triple.of("Worst link utilization" , "" + df.format(t.getLinkSet().stream().mapToDouble(e->e.getUtilization()).max().orElse(0)), "")); res.add(Triple.of("E2E num. hops (av / max)" , "" + df.format(t.getTreeAveragePathLengthInHops()) + " / " + df.format(t.getTreeMaximumPathLengthInHops()) , "")); res.add(Triple.of("E2E length in km (av / max)" , "" + df.format(t.getTreeAveragePathLengthInHops()) + " / " + df.format(t.getTreeMaximumPathLengthInKm()) + " km", "")); res.add(Triple.of("E2E length in ms (av / max)" , "" + df.format(t.getTreeAveragePropagationDelayInMs()) + " / " + df.format(t.getTreeMaximumPropagationDelayInMs()) + " ms", "")); return res; } private List<Triple<String,String,String>> getDemandInfoTables (Demand d)
this.drawnLines = new ArrayList<>(); final Point dnOriginTopLeftPosition = new Point(initialXTitle, initialTopYOfFirstLineOfNodes); final DrawNode ingressDn = new DrawNode(tree.getIngressNode(), tree.getLayer(), maxHeightOrSizeIcon); this.drawnNodes.add(ingressDn); DrawNode.addNodeToGraphics(g2d, ingressDn, dnOriginTopLeftPosition, fontMetrics, regularInterlineSpacePixels, Color.GREEN); final DrawNode dn = new DrawNode(tree.getIngressNode(), tree.getLayer(), maxHeightOrSizeIcon); this.drawnNodes.add(dn); DrawNode.addNodeToGraphics(g2d, dn, dnTopLeftPosition, fontMetrics, regularInterlineSpacePixels, tree.getEgressNodesReached().contains(n) ? Color.CYAN : null);
final boolean isTreeLayerVisibleInTheCanvas = vs.isLayerVisibleInCanvas(pickedTree.getLayer()); final GUINode gnOrigin = vs.getCanvasAssociatedGUINode(pickedTree.getIngressNode(), pickedTree.getLayer()); for (Node egressNode : pickedTree.getEgressNodesReached()) final GUINode gnDestination = vs.getCanvasAssociatedGUINode(egressNode, pickedTree.getLayer()); if (vs.isShowInCanvasThisLayerPropagation() && isTreeLayerVisibleInTheCanvas)
public NetworkLayer getOrEstimateLayer () { if (ne == null && fr == null) return null; if (isFr()) return fr.getFirst().getLayer(); switch (ne.getNeType()) { case DEMAND: return ((Demand) ne).getLayer(); case LAYER: return (NetworkLayer) ne; case LINK: return ((Link) ne).getLayer(); case MULTICAST_DEMAND: return ((MulticastDemand) ne).getLayer(); case MULTICAST_TREE: return ((MulticastTree) ne).getLayer(); case NETWORK: return ((NetPlan) ne).getNetworkLayerDefault(); case NODE: return ne.getNetPlan().getNetworkLayerDefault(); case RESOURCE: return ne.getNetPlan().getNetworkLayerDefault(); case ROUTE: return ((Route) ne).getLayer(); case SRG: return ne.getNetPlan().getNetworkLayerDefault(); default: throw new Net2PlanException (); } } }