You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by rm...@apache.org on 2012/07/23 13:28:52 UTC

svn commit: r1364587 - /incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java

Author: rmatthews
Date: Mon Jul 23 11:28:52 2012
New Revision: 1364587

URL: http://svn.apache.org/viewvc?rev=1364587&view=rev
Log:
ISIS-162 - Expand element to display graph of specifications.

Modified:
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java?rev=1364587&r1=1364586&r2=1364587&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java Mon Jul 23 11:28:52 2012
@@ -19,8 +19,10 @@
 
 package org.apache.isis.viewer.scimpi.dispatcher.view.debug;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -28,6 +30,7 @@ import org.apache.isis.viewer.scimpi.dis
 import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
 
+
 public class Specification extends AbstractElementProcessor {
 
     @Override
@@ -44,10 +47,14 @@ public class Specification extends Abstr
             final String id = request.getOptionalProperty("object");
             final ObjectAdapter object = context.getMappedObjectOrResult(id);
             final ObjectSpecification specification = object.getSpecification();
-            request.appendHtml(specification.getSingularName() + " (" + specification.getFullIdentifier() + ") \n");
-            final List<ObjectAssociation> fields = specification.getAssociations();
-            for (int i = 0; i < fields.size(); i++) {
-                request.appendHtml("    " + fields.get(i).getName() + " (" + fields.get(i).getSpecification().getSingularName() + ") \n");
+            String type = request.getOptionalProperty(TYPE, "details");
+
+            if (type.equals("graph")) {
+                specificationGraph(request, specification, null, new ArrayList<ObjectSpecification>(), 0);
+            } else if (type.equals("details")) {
+                specificationDetails(request, specification);
+            } else {
+                request.appendHtml("invalid type: " + type);
             }
 
             request.appendHtml("</pre>");
@@ -55,6 +62,54 @@ public class Specification extends Abstr
         }
     }
 
+    private void specificationDetails(final Request request, final ObjectSpecification specification) {
+        renderName(request, specification);
+        final List<ObjectAssociation> fields = specification.getAssociations();
+        for (int i = 0; i < fields.size(); i++) {
+            request.appendHtml("    " + fields.get(i).getName() + " (" + fields.get(i).getSpecification().getSingularName()
+                    + ") \n");
+        }
+    }
+
+    private void specificationGraph(
+            Request request,
+            ObjectSpecification specification,
+            String fieldName,
+            List<ObjectSpecification> processed,
+            int level) {
+        if (processed.contains(specification)) {
+            return;
+        }
+
+        request.appendHtml(StringUtils.repeat("    ", level));
+        if (processed.contains(specification)) {
+            request.appendHtml("* ");
+        }
+        request.appendHtml(specification.getFullIdentifier());
+        if (fieldName != null) {
+            request.appendHtml(" (" + fieldName + ")");
+        }
+        request.appendHtml("\n");
+
+        if (processed.contains(specification)) {
+            return;
+        }
+        processed.add(specification);
+
+        final List<ObjectAssociation> fields = specification.getAssociations();
+        for (int i = 0; i < fields.size(); i++) {
+            ObjectSpecification fieldSpecification = fields.get(i).getSpecification();
+            if (fieldSpecification.isValue()) {
+                continue;
+            }
+            specificationGraph(request, fieldSpecification, fields.get(i).getName(), processed, level + 1);
+        }
+    }
+
+    private void renderName(final Request request, final ObjectSpecification specification) {
+        request.appendHtml(specification.getSingularName() + " (" + specification.getFullIdentifier() + ") \n");
+    }
+
     @Override
     public String getName() {
         return "specification";