Author: michiel
Date: 2009-11-18 19:40:02 +0100 (Wed, 18 Nov 2009)
New Revision: 39784

Modified:
   mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.jspx
   mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.svg.jsp
Log:
this would made it a bit more managable for big models

Modified: 
mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.jspx
===================================================================
--- mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.jspx  
2009-11-18 18:20:14 UTC (rev 39783)
+++ mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.jspx  
2009-11-18 18:40:02 UTC (rev 39784)
@@ -12,11 +12,12 @@
      $("object").ready(function() { $(this).click(function() { 
console.log("hoi");});});
    </script>
   <mm:import externid="nodemanager" />
+  <mm:import externid="maxdistance">2</mm:import>
   <h2>Object model</h2>
   <p>This page needs <a href="http://www.graphviz.org";>graphviz</a> on the 
server and <a 
href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics";>SVG</a> in the 
browser</p>
 
   <h3>Possible relations</h3>
-  <mm:link page="/mmbase/components/core/model.svg.jsp" 
referids="nodemanager?">
+  <mm:link page="/mmbase/components/core/model.svg.jsp" 
referids="nodemanager?,maxdistance">
     <object data="${_}" type="image/svg+xml" />
   </mm:link>
 

Modified: 
mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.svg.jsp
===================================================================
--- 
mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.svg.jsp   
    2009-11-18 18:20:14 UTC (rev 39783)
+++ 
mmbase/trunk/base-webapp/src/main/webapp/mmbase/components/core/model.svg.jsp   
    2009-11-18 18:40:02 UTC (rev 39784)
@@ -4,37 +4,59 @@
      <mm:param name="command">dot</mm:param>
  </mm:escaper
 ><mm:content type="image/svg+xml" postprocessor="svg">
-<mm:import externid="nodemanager" jspvar="nodemanager" />
+<mm:import externid="nodemanager" jspvar="nodemanager" vartype="list" />
+<mm:import externid="maxdistance" jspvar="maxdistance" 
vartype="integer">2</mm:import>
 <mm:import id="baseurl" jspvar="url"><mm:url page="model.svg.jsp" 
/></mm:import>
 <mm:cloud jspvar="cloud">
 
 Digraph "MMBase<%= nodemanager == null ? "" : " " + nodemanager %>" {
   edge [fontsize=8.0];
-  node [fontsize=14.0];
+  node [fontsize=14.0,shape=box];
   nodesep=1;
   rankdir=LR;
 
   <%
-      Set<String> set = new HashSet<String>();
-      if (nodemanager != null) {
-        set.add(nodemanager);
-        out.println("root=" + nodemanager + ";");
+      Map<String, Integer> set = new HashMap<String, Integer>();
+      Set<RelationManager> rmset = new HashSet<RelationManager>();
+      for (Object nm : nodemanager) {
+         set.put((String) nm, new Integer(0));
       }
+      //out.println("root=" + nodemanager + ";");
       int size = -1;
-      while (size < set.size()) {
+      int distance = 1;
+      while (size < set.size() && distance <= maxdistance) {
          size = set.size();
+         Set<String> add = new HashSet<String>();
          for (RelationManager rm : cloud.getRelationManagers()) {
             try {
-            if (set.contains(rm.getSourceManager().getName()) || 
set.contains(rm.getDestinationManager().getName()) || nodemanager == null) {
-                set.add(rm.getSourceManager().getName());
-                set.add(rm.getDestinationManager().getName());
+            if (set.containsKey(rm.getSourceManager().getName()) || 
set.containsKey(rm.getDestinationManager().getName()) || nodemanager.size() == 
0) {
+                add.add(rm.getSourceManager().getName());
+                add.add(rm.getDestinationManager().getName());
+                rmset.add(rm);
             }
             } catch (NotFoundException nfe) {
             }
          }
+         for (String a : add) {
+           if (! set.containsKey(a)) {
+              set.put(a, distance);
+           }
+         }
+         distance++;
+
       }
-      for (String nm : set) {
-         out.println(nm  + " [" + (nm.equals(nodemanager) ? 
"color=red,fontcolor=red," : "") + "URL=\"" + url + "?nodemanager=" + nm + 
"\"];");
+      for (Map.Entry<String, Integer> entry : set.entrySet()) {
+         String nm = entry.getKey();
+         int dist = entry.getValue();
+         String color ;
+         if (dist == 0) {
+            color = "color=green,fontcolor=green,";
+         } else if (dist == maxdistance) {
+            color = "color=lightgray,fontcolor=gray,";
+         } else {
+            color = "";
+         }
+         out.println(nm  + " [label=<" + nm + ">," + color + "URL=\"" + url + 
"?nodemanager=" + nm + "&maxdistance=" + maxdistance + "\"];");
       }
   %>
 
@@ -42,9 +64,9 @@
   edge [style=dashed];
 
   <jsp:scriptlet>
-       for (RelationManager rm : cloud.getRelationManagers()) {
+       for (RelationManager rm : rmset) {
      try {
-     if (set.contains(rm.getSourceManager().getName()) || 
set.contains(rm.getDestinationManager().getName())) {
+     if (set.containsKey(rm.getSourceManager().getName()) || 
set.containsKey(rm.getDestinationManager().getName())) {
             out.print(rm.getSourceManager().getName() + "->" + 
rm.getDestinationManager().getName());
             String role = rm.getForwardRole();
             if (! "related".equals(role)) {

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to