From 8f00c1e89659ff62399b3b179c05870104fa52d5 Mon Sep 17 00:00:00 2001 From: orbiter Date: Thu, 7 Jun 2007 22:56:42 +0000 Subject: [PATCH] restrict number of nodes in web structure picture git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3822 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/WatchWebStructure_p.html | 8 +++++--- htroot/WatchWebStructure_p.java | 3 +++ htroot/WebStructurePicture_p.java | 28 ++++++++++++++++++++-------- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/htroot/WatchWebStructure_p.html b/htroot/WatchWebStructure_p.html index e2b054c10..949e7832e 100644 --- a/htroot/WatchWebStructure_p.html +++ b/htroot/WatchWebStructure_p.html @@ -32,19 +32,21 @@
depth
- + - +
size
 x 
+
nodes
+
 
- + #%env/templates/footer.template%# diff --git a/htroot/WatchWebStructure_p.java b/htroot/WatchWebStructure_p.java index fe8a08b8a..6be4f2853 100644 --- a/htroot/WatchWebStructure_p.java +++ b/htroot/WatchWebStructure_p.java @@ -16,12 +16,14 @@ public class WatchWebStructure_p { int width = 768; int height = 576; int depth = 3; + int nodes = 100; // maximum number of host nodes that are painted String host = "auto"; if (post != null) { width = post.getInt("width", 768); height = post.getInt("height", 576); depth = post.getInt("depth", 3); + nodes = post.getInt("nodes", width * height * 100 / 768 / 576); host = post.get("host", "auto"); } @@ -47,6 +49,7 @@ public class WatchWebStructure_p { prop.put("depthd", Math.max(0, depth - 1)); prop.put("width", width); prop.put("height", height); + prop.put("nodes", nodes); return prop; } diff --git a/htroot/WebStructurePicture_p.java b/htroot/WebStructurePicture_p.java index 73df275d2..c10bf2ae6 100644 --- a/htroot/WebStructurePicture_p.java +++ b/htroot/WebStructurePicture_p.java @@ -50,12 +50,14 @@ public class WebStructurePicture_p { int width = 768; int height = 576; int depth = 3; + int nodes = 100; // maximum number of host nodes that are painted String host = null; if (post != null) { width = post.getInt("width", 768); height = post.getInt("height", 576); depth = post.getInt("depth", 3); + nodes = post.getInt("nodes", width * height * 100 / 768 / 576); host = post.get("host", null); } @@ -81,19 +83,24 @@ public class WebStructurePicture_p { // recursively find domains, up to a specific depth ymageGraph graph = new ymageGraph(); - if (host != null) place(graph, sb.webStructure, hash, host, 0.0, 0.0, 0, depth); + if (host != null) place(graph, sb.webStructure, hash, host, nodes, 0.0, 0.0, 0, depth); //graph.print(); return graph.draw(width, height, 40, 40, 5, 15); } - private static final void place(ymageGraph graph, plasmaWebStructure structure, String centerhash, String centerhost, double x, double y, int nextlayer, int maxlayer) { - // returns the host string + private static final int place(ymageGraph graph, plasmaWebStructure structure, String centerhash, String centerhost, int maxnodes, double x, double y, int nextlayer, int maxlayer) { + // returns the number of nodes that had been placed assert centerhost != null; ymageGraph.coordinate center = graph.getPoint(centerhost); - if (center == null) center = graph.addPoint(centerhost, x, y, nextlayer); - if (nextlayer == maxlayer) return; + int mynodes = 0; + if (center == null) { + center = graph.addPoint(centerhost, x, y, nextlayer); + maxnodes--; + mynodes++; + } + if (nextlayer == maxlayer) return mynodes; nextlayer++; double radius = 1.0 / ((double) (1 << nextlayer)); Map next = structure.references(centerhash); @@ -105,7 +112,7 @@ public class WebStructurePicture_p { int maxtargetrefs = 8, maxthisrefs = 8; int targetrefs, thisrefs; double rr, re; - while (i.hasNext()) { + while ((i.hasNext()) && (maxnodes > 0)) { entry = (Map.Entry) i.next(); targethash = (String) entry.getKey(); targethost = structure.resolveDomHash2DomString(targethash); @@ -122,20 +129,25 @@ public class WebStructurePicture_p { rr = radius * 0.25 * (1 - targetrefs / maxtargetrefs); re = radius * 0.5 * (thisrefs / maxthisrefs); graph.addPoint(targethost, x + (radius - rr - re) * Math.cos(angle), y + (radius - rr - re) * Math.sin(angle), nextlayer); + maxnodes--; + mynodes++; } // recursively set next hosts i = targets.iterator(); String[] target; + int nextnodes; while (i.hasNext()) { target = (String[]) i.next(); targethash = target[0]; targethost = target[1]; ymageGraph.coordinate c = graph.getPoint(targethost); assert c != null; - place(graph, structure, targethash, targethost, c.x, c.y, nextlayer, maxlayer); + nextnodes = (maxnodes <= 0) ? 0 : place(graph, structure, targethash, targethost, maxnodes, c.x, c.y, nextlayer, maxlayer); + mynodes += nextnodes; + maxnodes -= nextnodes; graph.setBorder(centerhost, targethost); } - return; + return mynodes; } }