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";