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 2013/03/24 18:45:03 UTC

[06/24] Restructuring Scimpi to remove dependencies and enable easier testing.

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionButton.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionButton.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionButton.java
index 0192724..2954e4e 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionButton.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionButton.java
@@ -30,12 +30,13 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.Names;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
-import org.apache.isis.viewer.scimpi.dispatcher.view.HelpLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.view.other.HelpLink;
 
 public class ActionButton extends AbstractElementProcessor {
     private static final Logger LOG = Logger.getLogger(ActionButton.class);
@@ -48,28 +49,28 @@ public class ActionButton extends AbstractElementProcessor {
     private final static Where where = Where.ANYWHERE;
 
     @Override
-    public void process(final Request request) {
-        final String objectId = request.getOptionalProperty(OBJECT);
-        final String methodName = request.getRequiredProperty(METHOD);
-        final String forwardResultTo = request.getOptionalProperty(VIEW);
-        final String forwardVoidTo = request.getOptionalProperty(VOID);
-        final String forwardErrorTo = request.getOptionalProperty(ERROR);
-        final String variable = request.getOptionalProperty(RESULT_NAME);
-        final String scope = request.getOptionalProperty(SCOPE);
-        final String buttonTitle = request.getOptionalProperty(BUTTON_TITLE);
-        String resultOverride = request.getOptionalProperty(RESULT_OVERRIDE);
-        final String idName = request.getOptionalProperty(ID, methodName);
-        final String className = request.getOptionalProperty(CLASS);
-        final boolean showMessage = request.isRequested(SHOW_MESSAGE, false);
-        final String completionMessage = request.getOptionalProperty(MESSAGE);
-
-        final ObjectAdapter object = MethodsUtils.findObject(request.getContext(), objectId);
-        final String version = request.getContext().mapVersion(object);
+    public void process(final TagProcessor tagProcessor) {
+        final String objectId = tagProcessor.getOptionalProperty(OBJECT);
+        final String methodName = tagProcessor.getRequiredProperty(METHOD);
+        final String forwardResultTo = tagProcessor.getOptionalProperty(VIEW);
+        final String forwardVoidTo = tagProcessor.getOptionalProperty(VOID);
+        final String forwardErrorTo = tagProcessor.getOptionalProperty(ERROR);
+        final String variable = tagProcessor.getOptionalProperty(RESULT_NAME);
+        final String scope = tagProcessor.getOptionalProperty(SCOPE);
+        final String buttonTitle = tagProcessor.getOptionalProperty(BUTTON_TITLE);
+        String resultOverride = tagProcessor.getOptionalProperty(RESULT_OVERRIDE);
+        final String idName = tagProcessor.getOptionalProperty(ID, methodName);
+        final String className = tagProcessor.getOptionalProperty(CLASS);
+        final boolean showMessage = tagProcessor.isRequested(SHOW_MESSAGE, false);
+        final String completionMessage = tagProcessor.getOptionalProperty(MESSAGE);
+
+        final ObjectAdapter object = MethodsUtils.findObject(tagProcessor.getContext(), objectId);
+        final String version = tagProcessor.getContext().mapVersion(object);
         final ObjectAction action = MethodsUtils.findAction(object, methodName);
 
         final ActionContent parameterBlock = new ActionContent(action);
-        request.setBlockContent(parameterBlock);
-        request.processUtilCloseTag();
+        tagProcessor.setBlockContent(parameterBlock);
+        tagProcessor.processUtilCloseTag();
         final String[] parameters = parameterBlock.getParameters();
         final ObjectAdapter[] objectParameters;
         
@@ -77,7 +78,7 @@ public class ActionButton extends AbstractElementProcessor {
         if (action.isContributed()) {
             objectParameters= null;
             System.arraycopy(parameters, 0, parameters, 1, parameters.length - 1);
-            parameters[0] = request.getContext().mapObject(object, Scope.REQUEST);
+            parameters[0] = tagProcessor.getContext().mapObject(object, Scope.REQUEST);
             target =  action.realTarget(object);
             if (!action.hasReturn() && resultOverride == null) {
                 resultOverride = parameters[0];
@@ -95,7 +96,7 @@ public class ActionButton extends AbstractElementProcessor {
                     Localization localization = IsisContext.getLocalization(); 
                     objectParameters[i] = facet.parseTextEntry(null, parameters[i], localization); 
                 } else {
-                    objectParameters[i] = MethodsUtils.findObject(request.getContext(), parameters[i]);
+                    objectParameters[i] = MethodsUtils.findObject(tagProcessor.getContext(), parameters[i]);
                 }
                 i++;
             }
@@ -103,7 +104,7 @@ public class ActionButton extends AbstractElementProcessor {
 
         if (MethodsUtils.isVisibleAndUsable(object, action, where) && MethodsUtils.canRunMethod(object, action, objectParameters).isAllowed()) {
             // TODO use the form creation mechanism as used in ActionForm
-            write(request, target, action, parameters, objectId, version, forwardResultTo, forwardVoidTo, forwardErrorTo, variable, scope, buttonTitle, completionMessage, resultOverride, idName, className);
+            write(tagProcessor, target, action, parameters, objectId, version, forwardResultTo, forwardVoidTo, forwardErrorTo, variable, scope, buttonTitle, completionMessage, resultOverride, idName, className);
         }
 
         if (showMessage) {
@@ -112,35 +113,35 @@ public class ActionButton extends AbstractElementProcessor {
                 final String notUsable = usable.getReason();
                 if (notUsable != null) {
                     String title = buttonTitle == null ? action.getName() : buttonTitle;
-                    disabledButton(request, title, notUsable, idName, className);
+                    disabledButton(tagProcessor, title, notUsable, idName, className);
                 }
             } else {
                 final Consent valid = action.isProposedArgumentSetValid(object, objectParameters);
                 final String notValid = valid.getReason();
                 if (notValid != null) {
                     String title = buttonTitle == null ? action.getName() : buttonTitle;
-                    disabledButton(request, title, notValid, idName, className);
+                    disabledButton(tagProcessor, title, notValid, idName, className);
                 }
             }
         }
 
-        request.popBlockContent();
+        tagProcessor.popBlockContent();
     }
 
-    private void disabledButton(final Request request, final String buttonTitle, String message, String id, String className) {
+    private void disabledButton(final TagProcessor tagProcessor, final String buttonTitle, String message, String id, String className) {
         if (className == null) {
             className = "access";
         }
-        request.appendHtml("<div id=\"" + id + "\" class=\"" + className + " disabled-form\">");
-        request.appendHtml("<div class=\"button disabled\" title=\"");
-        request.appendAsHtmlEncoded(message);
-        request.appendHtml("\" >" + buttonTitle);
-        request.appendHtml("</div>");
-        request.appendHtml("</div>");
+        tagProcessor.appendHtml("<div id=\"" + id + "\" class=\"" + className + " disabled-form\">");
+        tagProcessor.appendHtml("<div class=\"button disabled\" title=\"");
+        tagProcessor.appendAsHtmlEncoded(message);
+        tagProcessor.appendHtml("\" >" + buttonTitle);
+        tagProcessor.appendHtml("</div>");
+        tagProcessor.appendHtml("</div>");
     }
 
     public static void write(
-            final Request request,
+            final TagProcessor tagProcessor,
             final ObjectAdapter object,
             final ObjectAction action,
             final String[] parameters,
@@ -156,7 +157,7 @@ public class ActionButton extends AbstractElementProcessor {
             final String resultOverride,
             final String idName,
             final String className) {
-        final RequestContext context = request.getContext();
+        final Request context = tagProcessor.getContext();
 
         buttonTitle = buttonTitle != null ? buttonTitle : action.getName();
 
@@ -183,48 +184,48 @@ public class ActionButton extends AbstractElementProcessor {
 
         final String idSegment = idName == null ? "" : ("id=\"" + idName + "\" ");
         final String classSegment = "class=\"" + (className == null ? "action in-line" : className) + "\"";
-        request.appendHtml("\n<form " + idSegment + classSegment + " action=\"action.app\" method=\"post\">\n");
+        tagProcessor.appendHtml("\n<form " + idSegment + classSegment + " action=\"action.app\" method=\"post\">\n");
         if (objectId == null) {
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + OBJECT + "\" value=\"" + context.getVariable(RequestContext.RESULT) + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + OBJECT + "\" value=\"" + context.getVariable(Names.RESULT) + "\" />\n");
         } else {
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + OBJECT + "\" value=\"" + objectId + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + OBJECT + "\" value=\"" + objectId + "\" />\n");
         }
-        request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + VERSION + "\" value=\"" + version + "\" />\n");
+        tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + VERSION + "\" value=\"" + version + "\" />\n");
         if (scope != null) {
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + SCOPE + "\" value=\"" + scope + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + SCOPE + "\" value=\"" + scope + "\" />\n");
         }
-        request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + METHOD + "\" value=\"" + action.getId() + "\" />\n");
+        tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + METHOD + "\" value=\"" + action.getId() + "\" />\n");
         if (forwardResultTo != null) {
             forwardResultTo = context.fullFilePath(forwardResultTo);
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + VIEW + "\" value=\"" + forwardResultTo + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + VIEW + "\" value=\"" + forwardResultTo + "\" />\n");
         }
         if (forwardErrorTo == null) {
-            forwardErrorTo = request.getContext().getResourceFile();
+            forwardErrorTo = tagProcessor.getContext().getResourceFile();
         }
         forwardErrorTo = context.fullFilePath(forwardErrorTo);
-        request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + ERROR + "\" value=\"" + forwardErrorTo + "\" />\n");
+        tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + ERROR + "\" value=\"" + forwardErrorTo + "\" />\n");
         if (forwardVoidTo == null) {
-            forwardVoidTo = request.getContext().getResourceFile();
+            forwardVoidTo = tagProcessor.getContext().getResourceFile();
         }
         forwardVoidTo = context.fullFilePath(forwardVoidTo);
-        request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + VOID + "\" value=\"" + forwardVoidTo + "\" />\n");
+        tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + VOID + "\" value=\"" + forwardVoidTo + "\" />\n");
         if (variable != null) {
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + RESULT_NAME + "\" value=\"" + variable + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + RESULT_NAME + "\" value=\"" + variable + "\" />\n");
         }
         if (resultOverride != null) {
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + RESULT_OVERRIDE + "\" value=\"" + resultOverride + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + RESULT_OVERRIDE + "\" value=\"" + resultOverride + "\" />\n");
         }
         if (completionMessage != null) {
-            request.appendHtml("  <input type=\"hidden\" name=\"" + "_" + MESSAGE + "\" value=\"" + completionMessage + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"" + "_" + MESSAGE + "\" value=\"" + completionMessage + "\" />\n");
         }
 
         for (int i = 0; i < parameters.length; i++) {
-            request.appendHtml("  <input type=\"hidden\" name=\"param" + (i + 1) + "\" value=\"" + parameters[i] + "\" />\n");
+            tagProcessor.appendHtml("  <input type=\"hidden\" name=\"param" + (i + 1) + "\" value=\"" + parameters[i] + "\" />\n");
         }
-        request.appendHtml(request.getContext().interactionFields());
-        request.appendHtml("  <input class=\"button\" type=\"submit\" value=\"" + buttonTitle + "\" name=\"execute\" title=\"" + action.getDescription() + "\" />");
-        HelpLink.append(request, action.getDescription(), action.getHelp());
-        request.appendHtml("\n</form>\n");
+        tagProcessor.appendHtml(tagProcessor.getContext().interactionFields());
+        tagProcessor.appendHtml("  <input class=\"button\" type=\"submit\" value=\"" + buttonTitle + "\" name=\"execute\" title=\"" + action.getDescription() + "\" />");
+        HelpLink.append(tagProcessor, action.getDescription(), action.getHelp());
+        tagProcessor.appendHtml("\n</form>\n");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionContent.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionContent.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionContent.java
index 2466726..5d30f0d 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionContent.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionContent.java
@@ -28,9 +28,9 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.BlockContent;
-import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.ScimpiException;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.BlockContent;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
 
 public class ActionContent implements BlockContent {
     private final ObjectAction action;
@@ -55,7 +55,7 @@ public class ActionContent implements BlockContent {
         parameters[index] = value;
     }
 
-    public ObjectAdapter[] getParameters(final Request request) {
+    public ObjectAdapter[] getParameters(final TagProcessor tagProcessor) {
         final ObjectAdapter[] params = new ObjectAdapter[parameters.length];
         final List<ObjectActionParameter> pars = action.getParameters();
         for (int i = 0; i < parameters.length; i++) {
@@ -65,7 +65,7 @@ public class ActionContent implements BlockContent {
                 Localization localization = IsisContext.getLocalization(); 
                 params[i] = facet.parseTextEntry(null, parameters[i], localization);            
             } else {
-                params[i] = request.getContext().getMappedObject(parameters[i]);
+                params[i] = tagProcessor.getContext().getMappedObject(parameters[i]);
             }
         }
         return params;

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionForm.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionForm.java
index 5f47985..9f1d682 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionForm.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionForm.java
@@ -26,20 +26,21 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
+import org.apache.isis.viewer.scimpi.Names;
+import org.apache.isis.viewer.scimpi.ScimpiException;
 import org.apache.isis.viewer.scimpi.dispatcher.action.ActionAction;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.edit.FieldEditState;
-import org.apache.isis.viewer.scimpi.dispatcher.edit.FormState;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.structure.FieldEditState;
+import org.apache.isis.viewer.scimpi.dispatcher.structure.FormState;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
-import org.apache.isis.viewer.scimpi.dispatcher.view.edit.FieldFactory;
-import org.apache.isis.viewer.scimpi.dispatcher.view.edit.FormFieldBlock;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.view.form.HiddenInputField;
 import org.apache.isis.viewer.scimpi.dispatcher.view.form.HtmlFormBuilder;
 import org.apache.isis.viewer.scimpi.dispatcher.view.form.InputField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.FieldFactory;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.FormFieldBlock;
 
 public class ActionForm extends AbstractElementProcessor {
 
@@ -47,37 +48,37 @@ public class ActionForm extends AbstractElementProcessor {
     private final static Where where = Where.OBJECT_FORMS;
 
     @Override
-    public void process(final Request request) {
+    public void process(final TagProcessor tagProcessor) {
         final CreateFormParameter parameters = new CreateFormParameter();
-        parameters.objectId = request.getOptionalProperty(OBJECT);
-        parameters.methodName = request.getRequiredProperty(METHOD);
-        parameters.forwardResultTo = request.getOptionalProperty(VIEW);
-        parameters.forwardVoidTo = request.getOptionalProperty(VOID);
-        parameters.forwardErrorTo = request.getOptionalProperty(ERROR);
-        parameters.cancelTo = request.getOptionalProperty(CANCEL_TO); 
-        parameters.showIcon = request.isRequested(SHOW_ICON, showIconByDefault());
-        parameters.buttonTitle = request.getOptionalProperty(BUTTON_TITLE);
-        parameters.formTitle = request.getOptionalProperty(FORM_TITLE);
-        parameters.labelDelimiter = request.getOptionalProperty(LABEL_DELIMITER, ":");
-        parameters.formId = request.getOptionalProperty(FORM_ID, request.nextFormId());
-        parameters.resultName = request.getOptionalProperty(RESULT_NAME);
-        parameters.resultOverride = request.getOptionalProperty(RESULT_OVERRIDE);
-        parameters.scope = request.getOptionalProperty(SCOPE);
-        parameters.className = request.getOptionalProperty(CLASS, "action full");
-        parameters.showMessage = request.isRequested(SHOW_MESSAGE, false);
-        parameters.completionMessage = request.getOptionalProperty(MESSAGE);
-        parameters.id = request.getOptionalProperty(ID, parameters.methodName);
-        createForm(request, parameters);
+        parameters.objectId = tagProcessor.getOptionalProperty(OBJECT);
+        parameters.methodName = tagProcessor.getRequiredProperty(METHOD);
+        parameters.forwardResultTo = tagProcessor.getOptionalProperty(VIEW);
+        parameters.forwardVoidTo = tagProcessor.getOptionalProperty(VOID);
+        parameters.forwardErrorTo = tagProcessor.getOptionalProperty(ERROR);
+        parameters.cancelTo = tagProcessor.getOptionalProperty(CANCEL_TO); 
+        parameters.showIcon = tagProcessor.isRequested(SHOW_ICON, showIconByDefault());
+        parameters.buttonTitle = tagProcessor.getOptionalProperty(BUTTON_TITLE);
+        parameters.formTitle = tagProcessor.getOptionalProperty(FORM_TITLE);
+        parameters.labelDelimiter = tagProcessor.getOptionalProperty(LABEL_DELIMITER, ":");
+        parameters.formId = tagProcessor.getOptionalProperty(FORM_ID, tagProcessor.nextFormId());
+        parameters.resultName = tagProcessor.getOptionalProperty(RESULT_NAME);
+        parameters.resultOverride = tagProcessor.getOptionalProperty(RESULT_OVERRIDE);
+        parameters.scope = tagProcessor.getOptionalProperty(SCOPE);
+        parameters.className = tagProcessor.getOptionalProperty(CLASS, "action full");
+        parameters.showMessage = tagProcessor.isRequested(SHOW_MESSAGE, false);
+        parameters.completionMessage = tagProcessor.getOptionalProperty(MESSAGE);
+        parameters.id = tagProcessor.getOptionalProperty(ID, parameters.methodName);
+        createForm(tagProcessor, parameters);
     }
 
-    public static void createForm(final Request request, final CreateFormParameter parameterObject) {
-        createForm(request, parameterObject, false);
+    public static void createForm(final TagProcessor tagProcessor, final CreateFormParameter parameterObject) {
+        createForm(tagProcessor, parameterObject, false);
     }
 
-    protected static void createForm(final Request request, final CreateFormParameter parameterObject, final boolean withoutProcessing) {
-        final RequestContext context = request.getContext();
+    protected static void createForm(final TagProcessor tagProcessor, final CreateFormParameter parameterObject, final boolean withoutProcessing) {
+        final Request context = tagProcessor.getContext();
         final ObjectAdapter object = MethodsUtils.findObject(context, parameterObject.objectId);
-        final String version = request.getContext().mapVersion(object);
+        final String version = tagProcessor.getContext().mapVersion(object);
         final ObjectAction action = MethodsUtils.findAction(object, parameterObject.methodName);
         // TODO how do we distinguish between overloaded methods?
 
@@ -89,17 +90,17 @@ public class ActionForm extends AbstractElementProcessor {
             final String notUsable = MethodsUtils.isUsable(object, action, where);
             if (notUsable != null) {
                 if (!withoutProcessing) {
-                    request.skipUntilClose();
+                    tagProcessor.skipUntilClose();
                 }
-                request.appendHtml("<div class=\"" + parameterObject.className + "-message\" >");
-                request.appendAsHtmlEncoded(notUsable);
-                request.appendHtml("</div>");
+                tagProcessor.appendHtml("<div class=\"" + parameterObject.className + "-message\" >");
+                tagProcessor.appendAsHtmlEncoded(notUsable);
+                tagProcessor.appendHtml("</div>");
                 return;
             }
         }
         if (!MethodsUtils.isVisibleAndUsable(object, action, where)) {
             if (!withoutProcessing) {
-                request.skipUntilClose();
+                tagProcessor.skipUntilClose();
             }
             return;
         }
@@ -113,7 +114,7 @@ public class ActionForm extends AbstractElementProcessor {
                 parameterObject.forwardResultTo == null ? null : new HiddenInputField("_" + VIEW, context.fullFilePath(parameterObject.forwardResultTo)), new HiddenInputField("_" + VOID, voidView), new HiddenInputField("_" + ERROR, errorView),
                 parameterObject.completionMessage == null ? null : new HiddenInputField("_" + MESSAGE, parameterObject.completionMessage), parameterObject.scope == null ? null : new HiddenInputField("_" + SCOPE, parameterObject.scope),
                 parameterObject.resultOverride == null ? null : new HiddenInputField("_" + RESULT_OVERRIDE, parameterObject.resultOverride), parameterObject.resultName == null ? null : new HiddenInputField("_" + RESULT_NAME, parameterObject.resultName),
-                parameterObject.resultName == null ? null : new HiddenInputField(RequestContext.RESULT, (String) request.getContext().getVariable(RequestContext.RESULT)) };
+                parameterObject.resultName == null ? null : new HiddenInputField(Names.RESULT, (String) tagProcessor.getContext().getVariable(Names.RESULT)) };
 
         // TODO when the block contains a selector tag it doesn't disable it if
         // the field cannot be edited!!!
@@ -125,9 +126,9 @@ public class ActionForm extends AbstractElementProcessor {
                 return param.isOptional();
             }
         };
-        request.setBlockContent(containedBlock);
+        tagProcessor.setBlockContent(containedBlock);
         if (!withoutProcessing) {
-            request.processUtilCloseTag();
+            tagProcessor.processUtilCloseTag();
         }
 
         final FormState entryState = (FormState) context.getVariable(ENTRY_FIELDS);
@@ -160,10 +161,10 @@ public class ActionForm extends AbstractElementProcessor {
             buttonTitle = "Ok";
         }
 
-        HtmlFormBuilder.createForm(request, ActionAction.ACTION + ".app", hiddenFields, formFields, parameterObject.className,
+        HtmlFormBuilder.createForm(tagProcessor, ActionAction.ACTION + ".app", hiddenFields, formFields, parameterObject.className,
                 parameterObject.id, formTitle, parameterObject.labelDelimiter, action.getDescription(), action.getHelp(), buttonTitle, errors, parameterObject.cancelTo);
 
-        request.popBlockContent();
+        tagProcessor.popBlockContent();
     }
 
     private static InputField[] createFields(final ObjectAction action, final ObjectAdapter object) {
@@ -175,7 +176,7 @@ public class ActionForm extends AbstractElementProcessor {
         return fields;
     }
 
-    private static void initializeFields(final RequestContext context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields) {
+    private static void initializeFields(final Request context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields) {
         final List<ObjectActionParameter> parameters = action.getParameters();
         for (int i = 0; i < fields.length; i++) {
             final InputField field = fields[i];
@@ -199,7 +200,7 @@ public class ActionForm extends AbstractElementProcessor {
      * 
      * @param showIcon
      */
-    private static void setDefaults(final RequestContext context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields, final FormState entryState, final boolean showIcon) {
+    private static void setDefaults(final Request context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields, final FormState entryState, final boolean showIcon) {
         final ObjectAdapter[] defaultValues = action.getDefaults(object);
         if (defaultValues == null) {
             return;
@@ -225,7 +226,7 @@ public class ActionForm extends AbstractElementProcessor {
         }
     }
 
-    private static void copyEntryState(final RequestContext context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields, final FormState entryState) {
+    private static void copyEntryState(final Request context, final ObjectAdapter object, final ObjectAction action, final InputField[] fields, final FormState entryState) {
 
         for (final InputField field : fields) {
             final FieldEditState fieldState = entryState.getField(field.getName());
@@ -241,7 +242,7 @@ public class ActionForm extends AbstractElementProcessor {
         }
     }
 
-    private static void overrideWithHtml(final RequestContext context, final FormFieldBlock containedBlock, final InputField[] formFields) {
+    private static void overrideWithHtml(final Request context, final FormFieldBlock containedBlock, final InputField[] formFields) {
         for (int i = 0; i < formFields.length; i++) {
             final String id = ActionAction.parameterName(i);
             if (containedBlock.hasContent(id)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionLink.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionLink.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionLink.java
index 0f09e19..3a50cda 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionLink.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/ActionLink.java
@@ -24,12 +24,12 @@ import java.net.URLEncoder;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
-import org.apache.isis.viewer.scimpi.dispatcher.view.HelpLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.view.other.HelpLink;
 
 public class ActionLink extends AbstractElementProcessor {
 
@@ -37,43 +37,43 @@ public class ActionLink extends AbstractElementProcessor {
     private final Where where = Where.OBJECT_FORMS;
 
     @Override
-    public void process(final Request request) {
-        String objectId = request.getOptionalProperty(OBJECT);
-        final String method = request.getOptionalProperty(METHOD);
-        final String forwardResultTo = request.getOptionalProperty(VIEW);
-        final String forwardVoidTo = request.getOptionalProperty(VOID);
-        String resultOverride = request.getOptionalProperty(RESULT_OVERRIDE);
+    public void process(final TagProcessor tagProcessor) {
+        String objectId = tagProcessor.getOptionalProperty(OBJECT);
+        final String method = tagProcessor.getOptionalProperty(METHOD);
+        final String forwardResultTo = tagProcessor.getOptionalProperty(VIEW);
+        final String forwardVoidTo = tagProcessor.getOptionalProperty(VOID);
+        String resultOverride = tagProcessor.getOptionalProperty(RESULT_OVERRIDE);
         
-        final String resultName = request.getOptionalProperty(RESULT_NAME);
+        final String resultName = tagProcessor.getOptionalProperty(RESULT_NAME);
         final String resultNameSegment = resultName == null ? "" : "&amp;" + RESULT_NAME + "=" + resultName;
-        final String scope = request.getOptionalProperty(SCOPE);
+        final String scope = tagProcessor.getOptionalProperty(SCOPE);
         final String scopeSegment = scope == null ? "" : "&amp;" + SCOPE + "=" + scope;
-        final String confirm = request.getOptionalProperty(CONFIRM);
-        final String completionMessage = request.getOptionalProperty(MESSAGE);
+        final String confirm = tagProcessor.getOptionalProperty(CONFIRM);
+        final String completionMessage = tagProcessor.getOptionalProperty(MESSAGE);
 
         // TODO need a mechanism for globally dealing with encoding; then use
         // the new encode method
         final String confirmSegment = confirm == null ? "" : "&amp;" + "_" + CONFIRM + "=" + URLEncoder.encode(confirm);
         final String messageSegment = completionMessage == null ? "" : "&amp;" + "_" + MESSAGE + "=" + URLEncoder.encode(completionMessage);
 
-        final RequestContext context = request.getContext();
+        final Request context = tagProcessor.getContext();
         final ObjectAdapter object = MethodsUtils.findObject(context, objectId);
         final String version = context.mapVersion(object);
         final ObjectAction action = MethodsUtils.findAction(object, method);
-        objectId = request.getContext().mapObject(object, Scope.REQUEST);
+        objectId = tagProcessor.getContext().mapObject(object, Scope.REQUEST);
 
         final ActionContent parameterBlock = new ActionContent(action);
-        request.setBlockContent(parameterBlock);
-        request.pushNewBuffer();
-        request.processUtilCloseTag();
-        final String text = request.popBuffer();
+        tagProcessor.setBlockContent(parameterBlock);
+        tagProcessor.pushNewBuffer();
+        tagProcessor.processUtilCloseTag();
+        final String text = tagProcessor.popBuffer();
         
         final String[] parameters = parameterBlock.getParameters();
         final String target;
         if (action.isContributed()) {
             System.arraycopy(parameters, 0, parameters, 1, parameters.length - 1);
-            parameters[0] = request.getContext().mapObject(object, Scope.REQUEST);
-            target =  request.getContext().mapObject(action.realTarget(object), Scope.REQUEST);
+            parameters[0] = tagProcessor.getContext().mapObject(object, Scope.REQUEST);
+            target =  tagProcessor.getContext().mapObject(action.realTarget(object), Scope.REQUEST);
             if (!action.hasReturn() && resultOverride == null) {
                 resultOverride = parameters[0];
             }
@@ -82,14 +82,14 @@ public class ActionLink extends AbstractElementProcessor {
         }
 
         if (MethodsUtils.isVisibleAndUsable(object, action, where)) {
-            writeLink(request, target, version, method, forwardResultTo, forwardVoidTo, resultNameSegment, resultOverride, scopeSegment,
+            writeLink(tagProcessor, target, version, method, forwardResultTo, forwardVoidTo, resultNameSegment, resultOverride, scopeSegment,
                     confirmSegment, messageSegment, context, action, parameters, text);
         }
-        request.popBlockContent();
+        tagProcessor.popBlockContent();
     }
 
     public static void writeLink(
-            final Request request,
+            final TagProcessor tagProcessor,
             final String objectId,
             final String version,
             final String method,
@@ -100,7 +100,7 @@ public class ActionLink extends AbstractElementProcessor {
             final String scopeSegment,
             final String confirmSegment,
             final String messageSegment,
-            final RequestContext context,
+            final Request context,
             final ObjectAction action,
             final String[] parameters,
             String text) {
@@ -116,12 +116,12 @@ public class ActionLink extends AbstractElementProcessor {
         final String resultOverrideSegment = resultOverride == null ? "" : "&amp;" + "_" + RESULT_OVERRIDE + "=" + resultOverride;
         final String voidView = context.fullFilePath(forwardVoidTo == null ? context.getResourceFile() : forwardVoidTo);
         final String forwardVoidSegment = "&amp;" + "_" + VOID + "=" + voidView;
-        request.appendHtml("<a href=\"action.app?" + "_" + OBJECT + "=" + objectId + "&amp;" + "_" + VERSION + "=" + version
+        tagProcessor.appendHtml("<a href=\"action.app?" + "_" + OBJECT + "=" + objectId + "&amp;" + "_" + VERSION + "=" + version
                 + "&amp;" + "_" + METHOD + "=" + method + resultOverrideSegment + forwardResultSegment + forwardVoidSegment + resultNameSegment
                 + parameterSegment + scopeSegment + confirmSegment + messageSegment + interactionParamters + "\">");
-        request.appendHtml(text);
-        request.appendHtml("</a>");
-        HelpLink.append(request, action.getDescription(), action.getHelp());
+        tagProcessor.appendHtml(text);
+        tagProcessor.appendHtml("</a>");
+        HelpLink.append(tagProcessor, action.getDescription(), action.getHelp());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
index 37e5ba4..7c334fb 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Methods.java
@@ -28,11 +28,11 @@ import org.apache.isis.core.metamodel.spec.ObjectActionSet;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.Contributed;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.Names;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.view.field.InclusionList;
 
 public class Methods extends AbstractElementProcessor {
@@ -45,33 +45,33 @@ public class Methods extends AbstractElementProcessor {
     private final static Where where = Where.ANYWHERE;
 
     @Override
-    public void process(final Request request) {
-        String objectId = request.getOptionalProperty(OBJECT);
-        final String view = request.getOptionalProperty(VIEW, "_generic_action." + Dispatcher.EXTENSION);
-        final String cancelTo = request.getOptionalProperty(CANCEL_TO);
-        final boolean showForms = request.isRequested(FORMS, false);
-        final ObjectAdapter object = MethodsUtils.findObject(request.getContext(), objectId);
+    public void process(final TagProcessor tagProcessor) {
+        String objectId = tagProcessor.getOptionalProperty(OBJECT);
+        final String view = tagProcessor.getOptionalProperty(VIEW, "_generic_action." + Names.EXTENSION);
+        // final String cancelTo = tagProcessor.getOptionalProperty(CANCEL_TO);
+        final boolean showForms = tagProcessor.isRequested(FORMS, false);
+        final ObjectAdapter object = MethodsUtils.findObject(tagProcessor.getContext(), objectId);
         if (objectId == null) {
-            objectId = request.getContext().mapObject(object, null);
+            objectId = tagProcessor.getContext().mapObject(object, null);
         }
 
         final InclusionList inclusionList = new InclusionList();
-        request.setBlockContent(inclusionList);
-        request.processUtilCloseTag();
+        tagProcessor.setBlockContent(inclusionList);
+        tagProcessor.processUtilCloseTag();
 
-        request.appendHtml("<div class=\"actions\">");
+        tagProcessor.appendHtml("<div class=\"actions\">");
         if (inclusionList.includes("edit") && !object.getSpecification().isService()) {
-            request.appendHtml("<div class=\"action\">");
-            request.appendHtml("<a class=\"button\" href=\"_generic_edit." + Dispatcher.EXTENSION + "?_result=" + objectId + "\">Edit...</a>");
-            request.appendHtml("</div>");
+            tagProcessor.appendHtml("<div class=\"action\">");
+            tagProcessor.appendHtml("<a class=\"button\" href=\"_generic_edit." + Names.EXTENSION + "?_result=" + objectId + "\">Edit...</a>");
+            tagProcessor.appendHtml("</div>");
         }
-        writeMethods(request, objectId, object, showForms, inclusionList, view, "_generic.shtml?_result=" + objectId);
-        request.popBlockContent();
-        request.appendHtml("</div>");
+        writeMethods(tagProcessor, objectId, object, showForms, inclusionList, view, "_generic.shtml?_result=" + objectId);
+        tagProcessor.popBlockContent();
+        tagProcessor.appendHtml("</div>");
     }
 
     public static void writeMethods(
-            final Request request,
+            final TagProcessor tagProcessor,
             final String objectId,
             final ObjectAdapter adapter,
             final boolean showForms,
@@ -79,21 +79,21 @@ public class Methods extends AbstractElementProcessor {
             final String view,
             final String cancelTo) {
         List<ObjectAction> actions = adapter.getSpecification().getObjectActions(ActionType.USER, Contributed.INCLUDED);
-        writeMethods(request, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
+        writeMethods(tagProcessor, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
         // TODO determine if system is set up to display exploration methods
         if (true) {
             actions = adapter.getSpecification().getObjectActions(ActionType.EXPLORATION, Contributed.INCLUDED);
-            writeMethods(request, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
+            writeMethods(tagProcessor, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
         }
         // TODO determine if system is set up to display debug methods
         if (true) {
             actions = adapter.getSpecification().getObjectActions(ActionType.DEBUG, Contributed.INCLUDED);
-            writeMethods(request, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
+            writeMethods(tagProcessor, adapter, actions, objectId, showForms, inclusionList, view, cancelTo);
         }
     }
 
     private static void writeMethods(
-            final Request request,
+            final TagProcessor tagProcessor,
             final ObjectAdapter adapter,
             List<ObjectAction> actions,
             final String objectId,
@@ -105,32 +105,32 @@ public class Methods extends AbstractElementProcessor {
         for (int j = 0; j < actions.size(); j++) {
             final ObjectAction action = actions.get(j);
             if (action instanceof ObjectActionSet) {
-                request.appendHtml("<div class=\"actions\">");
-                writeMethods(request, adapter, action.getActions(), objectId, showForms, inclusionList, view, cancelTo);
-                request.appendHtml("</div>");
+                tagProcessor.appendHtml("<div class=\"actions\">");
+                writeMethods(tagProcessor, adapter, action.getActions(), objectId, showForms, inclusionList, view, cancelTo);
+                tagProcessor.appendHtml("</div>");
             } else if (action.isContributed()) {
                 if (action.getParameterCount() == 1 && adapter.getSpecification().isOfType(action.getParameters().get(0).getSpecification())) {
                     if (objectId != null) {
-                        final ObjectAdapter target = request.getContext().getMappedObject(objectId);
+                        final ObjectAdapter target = tagProcessor.getContext().getMappedObject(objectId);
                         final ObjectAdapter realTarget = action.realTarget(target);
-                        final String realTargetId = request.getContext().mapObject(realTarget, Scope.INTERACTION);
-                        writeMethod(request, adapter, new String[] { objectId }, action, realTargetId, showForms, view, cancelTo);
+                        final String realTargetId = tagProcessor.getContext().mapObject(realTarget, Scope.INTERACTION);
+                        writeMethod(tagProcessor, adapter, new String[] { objectId }, action, realTargetId, showForms, view, cancelTo);
                     } else {
-                        request.appendHtml("<div class=\"action\">");
-                        request.appendAsHtmlEncoded(action.getName());
-                        request.appendHtml("???</div>");
+                        tagProcessor.appendHtml("<div class=\"action\">");
+                        tagProcessor.appendAsHtmlEncoded(action.getName());
+                        tagProcessor.appendHtml("???</div>");
                     }
                 } else if (!adapter.getSpecification().isService()) {
-                    writeMethod(request, adapter, new String[0], action, objectId, showForms, view, cancelTo);
+                    writeMethod(tagProcessor, adapter, new String[0], action, objectId, showForms, view, cancelTo);
                 }
             } else {
-                writeMethod(request, adapter, new String[0], action, objectId, showForms, view, cancelTo);
+                writeMethod(tagProcessor, adapter, new String[0], action, objectId, showForms, view, cancelTo);
             }
         }
     }
 
     private static void writeMethod(
-            final Request request,
+            final TagProcessor tagProcessor,
             final ObjectAdapter adapter,
             final String[] parameters,
             final ObjectAction action,
@@ -142,11 +142,11 @@ public class Methods extends AbstractElementProcessor {
         // action.isVisible(IsisContext.getSession(), adapter))
         // {
         if (action.isVisible(IsisContext.getAuthenticationSession(), adapter, where).isAllowed()) {
-            request.appendHtml("<div class=\"action\">");
+            tagProcessor.appendHtml("<div class=\"action\">");
             if (IsisContext.getSession() == null) {
-                request.appendHtml("<span class=\"disabled\" title=\"no user logged in\">");
-                request.appendAsHtmlEncoded(action.getName());
-                request.appendHtml("</span>");
+                tagProcessor.appendHtml("<span class=\"disabled\" title=\"no user logged in\">");
+                tagProcessor.appendAsHtmlEncoded(action.getName());
+                tagProcessor.appendHtml("</span>");
                 /*
                  * } else if (action.isUsable(IsisContext.getSession(),
                  * null).isVetoed()) {
@@ -155,33 +155,33 @@ public class Methods extends AbstractElementProcessor {
                  * "\">"); request.appendHtml(action.getName());
                  * request.appendHtml("</span>");
                  */} else if (action.isUsable(IsisContext.getAuthenticationSession(), adapter, where).isVetoed()) {
-                request.appendHtml("<span class=\"disabled\" title=\"" + action.isUsable(IsisContext.getAuthenticationSession(), adapter, where).getReason() + "\">");
-                request.appendAsHtmlEncoded(action.getName());
-                request.appendHtml("</span>");
+                tagProcessor.appendHtml("<span class=\"disabled\" title=\"" + action.isUsable(IsisContext.getAuthenticationSession(), adapter, where).getReason() + "\">");
+                tagProcessor.appendAsHtmlEncoded(action.getName());
+                tagProcessor.appendHtml("</span>");
             } else {
-                final String version = request.getContext().mapVersion(adapter);
+                final String version = tagProcessor.getContext().mapVersion(adapter);
                 if (action.getParameterCount() == 0 || (action.isContributed() && action.getParameterCount() == 1)) {
-                    ActionButton.write(request, adapter, action, parameters, objectId, version, "_generic." + Dispatcher.EXTENSION, null, null, null, null, null, null, null, null, null);
+                    ActionButton.write(tagProcessor, adapter, action, parameters, objectId, version, "_generic." + Names.EXTENSION, null, null, null, null, null, null, null, null, null);
                 } else if (showForms) {
                     final CreateFormParameter params = new CreateFormParameter();
                     params.objectId = objectId;
                     params.methodName = action.getId();
-                    params.forwardResultTo = "_generic." + Dispatcher.EXTENSION;
+                    params.forwardResultTo = "_generic." + Names.EXTENSION;
                     params.buttonTitle = "OK";
                     params.formTitle = action.getName();
-                    ActionForm.createForm(request, params, true);
+                    ActionForm.createForm(tagProcessor, params, true);
                 } else {
-                    request.appendHtml("<a class=\"button\" href=\"" + view + "?_result=" + objectId + "&amp;_" + VERSION + "=" + version + "&amp;_" + METHOD + "=" + action.getId());
+                    tagProcessor.appendHtml("<a class=\"button\" href=\"" + view + "?_result=" + objectId + "&amp;_" + VERSION + "=" + version + "&amp;_" + METHOD + "=" + action.getId());
                     if (cancelTo != null) {
-                        request.appendHtml("&amp;_cancel-to=");
-                        request.appendAsHtmlEncoded("cancel-to=\"" + cancelTo + "\"");
+                        tagProcessor.appendHtml("&amp;_cancel-to=");
+                        tagProcessor.appendAsHtmlEncoded("cancel-to=\"" + cancelTo + "\"");
                     }
-                    request.appendHtml("\" title=\"" + action.getDescription() + "\">");
-                    request.appendAsHtmlEncoded(action.getName() + "...");
-                    request.appendHtml("</a>");
+                    tagProcessor.appendHtml("\" title=\"" + action.getDescription() + "\">");
+                    tagProcessor.appendAsHtmlEncoded(action.getName() + "...");
+                    tagProcessor.appendHtml("</a>");
                 }
             }
-            request.appendHtml("</div>");
+            tagProcessor.appendHtml("</div>");
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Parameter.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Parameter.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Parameter.java
index 69be5c5..cbf7464 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Parameter.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Parameter.java
@@ -19,22 +19,22 @@
 
 package org.apache.isis.viewer.scimpi.dispatcher.view.action;
 
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.BlockContent;
 import org.apache.isis.viewer.scimpi.dispatcher.TagOrderException;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.BlockContent;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 
 public class Parameter extends AbstractElementProcessor {
 
     @Override
-    public void process(final Request request) {
-        final BlockContent blockContent = request.getBlockContent();
+    public void process(final TagProcessor tagProcessor) {
+        final BlockContent blockContent = tagProcessor.getBlockContent();
         if (!(blockContent instanceof ActionContent)) {
-            throw new TagOrderException(request);
+            throw new TagOrderException(tagProcessor);
         }
 
-        final String field = request.getOptionalProperty(PARAMETER_NUMBER);
-        final String value = request.getRequiredProperty(VALUE);
+        final String field = tagProcessor.getOptionalProperty(PARAMETER_NUMBER);
+        final String value = tagProcessor.getRequiredProperty(VALUE);
         final ActionContent block = (ActionContent) blockContent;
         block.setParameter(field, value);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java
index 6aa2138..00d617c 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java
@@ -25,12 +25,12 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.ForbiddenException;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.ForbiddenException;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 
 public class RunAction extends AbstractElementProcessor {
 
@@ -42,22 +42,22 @@ public class RunAction extends AbstractElementProcessor {
     private final Where where = Where.ANYWHERE;
 
     @Override
-    public void process(final Request request) {
-        final RequestContext context = request.getContext();
+    public void process(final TagProcessor tagProcessor) {
+        final Request context = tagProcessor.getContext();
 
-        final String objectId = request.getOptionalProperty(OBJECT);
+        final String objectId = tagProcessor.getOptionalProperty(OBJECT);
         final ObjectAdapter object = MethodsUtils.findObject(context, objectId);
 
-        final String methodName = request.getRequiredProperty(METHOD);
+        final String methodName = tagProcessor.getRequiredProperty(METHOD);
         final ObjectAction action = MethodsUtils.findAction(object, methodName);
 
-        final String variableName = request.getOptionalProperty(RESULT_NAME);
-        final String scopeName = request.getOptionalProperty(SCOPE);
+        final String variableName = tagProcessor.getOptionalProperty(RESULT_NAME);
+        final String scopeName = tagProcessor.getOptionalProperty(SCOPE);
 
         final ActionContent parameterBlock = new ActionContent(action);
-        request.setBlockContent(parameterBlock);
-        request.processUtilCloseTag();
-        final ObjectAdapter[] parameters = parameterBlock.getParameters(request);
+        tagProcessor.setBlockContent(parameterBlock);
+        tagProcessor.processUtilCloseTag();
+        final ObjectAdapter[] parameters = parameterBlock.getParameters(tagProcessor);
 
         if (!MethodsUtils.isVisibleAndUsable(object, action, where)) {
             throw new ForbiddenException(action, ForbiddenException.VISIBLE_AND_USABLE);
@@ -74,9 +74,9 @@ public class RunAction extends AbstractElementProcessor {
             }
         }
 
-        final Scope scope = RequestContext.scope(scopeName, Scope.REQUEST);
+        final Scope scope = Request.scope(scopeName, Scope.REQUEST);
         MethodsUtils.runMethod(context, action, object, parameters, variableName, scope);
-        request.popBlockContent();
+        tagProcessor.popBlockContent();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Services.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Services.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Services.java
index 2a621f1..761b849 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Services.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/Services.java
@@ -24,35 +24,35 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.Names;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.view.field.InclusionList;
 
 public class Services extends AbstractElementProcessor {
 
     @Override
-    public void process(final Request request) {
-        final boolean showForms = request.isRequested(FORMS, false);
-        final String view = request.getOptionalProperty(VIEW, "_generic_action." + Dispatcher.EXTENSION);
-        final String cancelTo = request.getOptionalProperty(CANCEL_TO);
+    public void process(final TagProcessor tagProcessor) {
+        final boolean showForms = tagProcessor.isRequested(FORMS, false);
+        final String view = tagProcessor.getOptionalProperty(VIEW, "_generic_action." + Names.EXTENSION);
+        final String cancelTo = tagProcessor.getOptionalProperty(CANCEL_TO);
 
         final InclusionList inclusionList = new InclusionList();
-        request.setBlockContent(inclusionList);
-        request.processUtilCloseTag();
+        tagProcessor.setBlockContent(inclusionList);
+        tagProcessor.processUtilCloseTag();
 
         final List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
         for (final ObjectAdapter adapter : serviceAdapters) {
-            final String serviceId = request.getContext().mapObject(adapter, Scope.REQUEST);
-            request.appendHtml("<div class=\"actions\">");
-            request.appendHtml("<h3>");
-            request.appendAsHtmlEncoded(adapter.titleString());
-            request.appendHtml("</h3>");
-            Methods.writeMethods(request, serviceId, adapter, showForms, inclusionList, view, cancelTo);
-            request.appendHtml("</div>");
+            final String serviceId = tagProcessor.getContext().mapObject(adapter, Scope.REQUEST);
+            tagProcessor.appendHtml("<div class=\"actions\">");
+            tagProcessor.appendHtml("<h3>");
+            tagProcessor.appendAsHtmlEncoded(adapter.titleString());
+            tagProcessor.appendHtml("</h3>");
+            Methods.writeMethods(tagProcessor, serviceId, adapter, showForms, inclusionList, view, cancelTo);
+            tagProcessor.appendHtml("</div>");
         }
-        request.popBlockContent();
+        tagProcessor.popBlockContent();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java
index 5a561b6..20e0cc9 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/collection/Collection.java
@@ -25,24 +25,24 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request.RepeatMarker;
+import org.apache.isis.viewer.scimpi.ScimpiException;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor.RepeatMarker;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 
 public class Collection extends AbstractElementProcessor {
 
     @Override
-    public void process(final Request request) {
-        final RequestContext context = request.getContext();
+    public void process(final TagProcessor tagProcessor) {
+        final Request context = tagProcessor.getContext();
 
         ObjectAdapter collection;
 
-        final String field = request.getOptionalProperty(FIELD);
+        final String field = tagProcessor.getOptionalProperty(FIELD);
         if (field != null) {
-            final String id = request.getOptionalProperty(OBJECT);
+            final String id = tagProcessor.getOptionalProperty(OBJECT);
             final ObjectAdapter object = context.getMappedObjectOrResult(id);
             final ObjectAssociation objectField = object.getSpecification().getAssociation(field);
             if (!objectField.isOneToManyAssociation()) {
@@ -51,16 +51,16 @@ public class Collection extends AbstractElementProcessor {
             IsisContext.getPersistenceSession().resolveField(object, objectField);
             collection = objectField.get(object);
         } else {
-            final String id = request.getOptionalProperty(COLLECTION);
+            final String id = tagProcessor.getOptionalProperty(COLLECTION);
             collection = context.getMappedObjectOrResult(id);
         }
 
-        final RepeatMarker marker = request.createMarker();
+        final RepeatMarker marker = tagProcessor.createMarker();
 
-        final String variable = request.getOptionalProperty(ELEMENT_NAME);
-        final String scopeName = request.getOptionalProperty(SCOPE);
-        final Scope scope = RequestContext.scope(scopeName, Scope.REQUEST);
-        final String rowClassesList = request.getOptionalProperty(ROW_CLASSES, ODD_ROW_CLASS + "|" + EVEN_ROW_CLASS);
+        final String variable = tagProcessor.getOptionalProperty(ELEMENT_NAME);
+        final String scopeName = tagProcessor.getOptionalProperty(SCOPE);
+        final Scope scope = Request.scope(scopeName, Scope.REQUEST);
+        final String rowClassesList = tagProcessor.getOptionalProperty(ROW_CLASSES, ODD_ROW_CLASS + "|" + EVEN_ROW_CLASS);
         String[] rowClasses = new String[0];
         if (rowClassesList != null) {
             rowClasses = rowClassesList.split("[,|/]");
@@ -68,7 +68,7 @@ public class Collection extends AbstractElementProcessor {
 
         final CollectionFacet facet = collection.getSpecification().getFacet(CollectionFacet.class);
         if (facet.size(collection) == 0) {
-            request.skipUntilClose();
+            tagProcessor.skipUntilClose();
         } else {
             final Iterator<ObjectAdapter> iterator = facet.iterator(collection);
             int row = 0;
@@ -80,7 +80,7 @@ public class Collection extends AbstractElementProcessor {
                 }
                 context.addVariable(variable, context.mapObject(element, scope), scope);
                 marker.repeat();
-                request.processUtilCloseTag();
+                tagProcessor.processUtilCloseTag();
                 row++;
             }
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
index c1a5562..d6754ef 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
@@ -28,6 +28,7 @@ import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.debug.DebugHtmlString;
 import org.apache.isis.core.commons.debug.DebugString;
+import org.apache.isis.core.commons.debug.Debuggable;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -42,33 +43,32 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.util.Dump;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 
 public class Debug extends AbstractElementProcessor {
 
-    private final Dispatcher dispatcher;
+    private final Debuggable dispatcher;
 
-    public Debug(final Dispatcher dispatcher) {
+    public Debug(final Debuggable dispatcher) {
         this.dispatcher = dispatcher;
     }
 
     @Override
-    public void process(final Request request) {
-        if (request.getContext().isDebugDisabled()) {
+    public void process(final TagProcessor tagProcessor) {
+        if (tagProcessor.getContext().isDebugDisabled()) {
             return;
         }
         
-        final String type = request.getOptionalProperty(TYPE);
+        final String type = tagProcessor.getOptionalProperty(TYPE);
 
-        final boolean alwaysShow = request.isRequested("force", false);
+        final boolean alwaysShow = tagProcessor.isRequested("force", false);
         if (type != null) {
             if (type.equals("system")) {
-                displaySystem(request);
+                displaySystem(tagProcessor);
             } else if (type.equals("session")) {
-                displaySession(request);
+                displaySession(tagProcessor);
             } else if (type.equals("test")) {
                 final DebugBuilder debug = new DebugHtmlString();
                 debug.appendTitle("Title");
@@ -106,153 +106,153 @@ public class Debug extends AbstractElementProcessor {
                 debug.appendln("A lot of text etc.");
                 debug.endSection();
 
-                request.appendHtml(debug.toString());
+                tagProcessor.appendHtml(debug.toString());
                 //request.appendHtml("<pre>" + debug.toString() + "</pre>");
                 
                 debug.close();
                 
             } else if (type.equals("variables")) {
-                displayVariables(request);
+                displayVariables(tagProcessor);
             } else if (type.equals("dispatcher")) {
-                displayDispatcher(request);
+                displayDispatcher(tagProcessor);
             } else if (type.equals("context")) {
-                displayContext(request);
+                displayContext(tagProcessor);
             } else if (type.equals("specifications")) {
-                listSpecifications(request);
+                listSpecifications(tagProcessor);
             } else if (type.equals("specification-for")) {
-                specificationFor(request);
+                specificationFor(tagProcessor);
             } else if (type.equals("specification")) {
-                specification(request);
+                specification(tagProcessor);
             } else if (type.equals("specification-graph")) {
-                specificationGraph(request);
+                specificationGraph(tagProcessor);
             } else if (type.equals("object-graph")) {
-                objectGraph(request);
+                objectGraph(tagProcessor);
 
             } else if (type.equals("object")) {
-                final String value = request.getOptionalProperty(VALUE);
-                final RequestContext context = request.getContext();
+                final String value = tagProcessor.getOptionalProperty(VALUE);
+                final Request context = tagProcessor.getContext();
                 final ObjectAdapter object = context.getMappedObject(value);
                 final DebugString str = new DebugString();
                 Dump.adapter(object, str);
                 Dump.graph(object, IsisContext.getAuthenticationSession(), str);
-                request.appendHtml("<h2>" + object.getSpecification().getFullIdentifier() + "</h2>");
-                request.appendHtml("<pre class=\"debug\">" + str + "</pre>");
+                tagProcessor.appendHtml("<h2>" + object.getSpecification().getFullIdentifier() + "</h2>");
+                tagProcessor.appendHtml("<pre class=\"debug\">" + str + "</pre>");
             }
 
         }
 
-        if (alwaysShow || request.getContext().getDebug() == RequestContext.Debug.ON) {
+        if (alwaysShow || tagProcessor.getContext().getDebug() == Request.Debug.ON) {
 
-            final RequestContext context = request.getContext();
+            final Request context = tagProcessor.getContext();
 
-            final String id = request.getOptionalProperty("object");
+            final String id = tagProcessor.getOptionalProperty("object");
             if (id != null) {
                 final ObjectAdapter object = context.getMappedObject(id);
                 if (object instanceof DebuggableWithTitle) {
                     final DebugString debug = new DebugString();
                     ((DebuggableWithTitle) object).debugData(debug);
-                    request.appendHtml("<pre class=\"debug\">" + debug + "</pre>");
+                    tagProcessor.appendHtml("<pre class=\"debug\">" + debug + "</pre>");
                 } else {
-                    request.appendHtml(object.toString());
+                    tagProcessor.appendHtml(object.toString());
                 }
             }
 
-            final String variable = request.getOptionalProperty("variable");
+            final String variable = tagProcessor.getOptionalProperty("variable");
             if (variable != null) {
                 final Object object = context.getVariable(variable);
-                request.appendHtml(variable + " => " + (object == null ? "null" : object.toString()));
+                tagProcessor.appendHtml(variable + " => " + (object == null ? "null" : object.toString()));
             }
 
-            final String list = request.getOptionalProperty("list");
+            final String list = tagProcessor.getOptionalProperty("list");
             if (list != null) {
                 final DebugString debug = new DebugString();
                 context.append(debug, list);
-                request.appendHtml(debug.toString());
+                tagProcessor.appendHtml(debug.toString());
             }
 
-            final String uri = request.getOptionalProperty("uri");
+            final String uri = tagProcessor.getOptionalProperty("uri");
             if (uri != null) {
-                request.appendHtml("<pre class=\"debug\">");
-                request.appendHtml(context.getUri());
-                request.appendHtml("</pre>");
+                tagProcessor.appendHtml("<pre class=\"debug\">");
+                tagProcessor.appendHtml(context.getUri());
+                tagProcessor.appendHtml("</pre>");
             }
 
         }
     }
 
-    protected void objectGraph(final Request request) {
-        final String id = request.getOptionalProperty(VALUE);
-        final ObjectAdapter object = request.getContext().getMappedObjectOrResult(id);
-        request.appendHtml("<h1>Object Graph - " + object + "</h1>");
-        request.appendHtml("<pre>");
+    protected void objectGraph(final TagProcessor tagProcessor) {
+        final String id = tagProcessor.getOptionalProperty(VALUE);
+        final ObjectAdapter object = tagProcessor.getContext().getMappedObjectOrResult(id);
+        tagProcessor.appendHtml("<h1>Object Graph - " + object + "</h1>");
+        tagProcessor.appendHtml("<pre>");
         final DebugBuilder debug = new DebugString();
         Dump.graph(object, null, debug);
-        request.appendHtml(debug.toString());
-        request.appendHtml("</pre>");
+        tagProcessor.appendHtml(debug.toString());
+        tagProcessor.appendHtml("</pre>");
     }
 
-    protected void specificationFor(final Request request) {
-        final String id = request.getOptionalProperty(VALUE);
-        final ObjectAdapter object = request.getContext().getMappedObjectOrResult(id);
-        specification(request, object.getSpecification());
+    protected void specificationFor(final TagProcessor tagProcessor) {
+        final String id = tagProcessor.getOptionalProperty(VALUE);
+        final ObjectAdapter object = tagProcessor.getContext().getMappedObjectOrResult(id);
+        specification(tagProcessor, object.getSpecification());
     }
 
-    protected void specification(final Request request) {
-        final String name = request.getOptionalProperty(VALUE);
+    protected void specification(final TagProcessor tagProcessor) {
+        final String name = tagProcessor.getOptionalProperty(VALUE);
         final ObjectSpecification spec = getSpecificationLoader().loadSpecification(name);
-        specification(request, spec);
+        specification(tagProcessor, spec);
     }
 
-    private void specification(final Request request, final ObjectSpecification spec) {
-        request.appendHtml("<h1>Specification - " + spec.getFullIdentifier() + "</h1>");
-        request.appendHtml("<p><a href=\"./debug.shtml?type=specification-graph&value=" + spec.getFullIdentifier() + "\">Specification Graph</a></p>");
+    private void specification(final TagProcessor tagProcessor, final ObjectSpecification spec) {
+        tagProcessor.appendHtml("<h1>Specification - " + spec.getFullIdentifier() + "</h1>");
+        tagProcessor.appendHtml("<p><a href=\"./debug.shtml?type=specification-graph&value=" + spec.getFullIdentifier() + "\">Specification Graph</a></p>");
         final DebugBuilder debug = new DebugHtmlString();
         specification(spec, debug);
-        request.appendHtml(debug.toString());
+        tagProcessor.appendHtml(debug.toString());
     }
 
-    protected void specificationGraph(final Request request) {
-        final String name = request.getOptionalProperty(VALUE);
+    protected void specificationGraph(final TagProcessor tagProcessor) {
+        final String name = tagProcessor.getOptionalProperty(VALUE);
         final ObjectSpecification spec = getSpecificationLoader().loadSpecification(name);
-        request.appendHtml("<h1>Specification Graph - " + spec.getFullIdentifier() + "</h1>");
-        request.appendHtml("<p><a href=\"./debug.shtml?type=specification&value=" + spec.getFullIdentifier() + "\">Full Specification</a></p>");
-        request.appendHtml("<pre>");
+        tagProcessor.appendHtml("<h1>Specification Graph - " + spec.getFullIdentifier() + "</h1>");
+        tagProcessor.appendHtml("<p><a href=\"./debug.shtml?type=specification&value=" + spec.getFullIdentifier() + "\">Full Specification</a></p>");
+        tagProcessor.appendHtml("<pre>");
         final DebugBuilder debug = new DebugString();
         debug.appendln(spec.getFullIdentifier());
         debug.indent();
         specificationGraph(spec, debug, new ArrayList<ObjectSpecification>());
         debug.unindent();
-        request.appendHtml(debug.toString());
-        request.appendHtml("</pre>");
+        tagProcessor.appendHtml(debug.toString());
+        tagProcessor.appendHtml("</pre>");
     }
 
-    private void displayContext(final Request request) {
-        request.appendHtml("<h1>Context</h1>");
+    private void displayContext(final TagProcessor tagProcessor) {
+        tagProcessor.appendHtml("<h1>Context</h1>");
         final DebugHtmlString debugString = new DebugHtmlString();
-        request.getContext().append(debugString);
+        tagProcessor.getContext().append(debugString);
         debugString.close();
-        request.appendHtml(debugString.toString());
+        tagProcessor.appendHtml(debugString.toString());
     }
 
-    private void displayDispatcher(final Request request) {
-        request.appendHtml("<h1>Dispatcher</h1>");
+    private void displayDispatcher(final TagProcessor tagProcessor) {
+        tagProcessor.appendHtml("<h1>Dispatcher</h1>");
         final DebugHtmlString debugString = new DebugHtmlString();
-        dispatcher.debug(debugString);
+        dispatcher.debugData(debugString);
         debugString.close();
-        request.appendHtml(debugString.toString());
+        tagProcessor.appendHtml(debugString.toString());
     }
 
-    protected void displayVariables(final Request request) {
-        request.appendHtml("<h1>Variables</h1>");
+    protected void displayVariables(final TagProcessor tagProcessor) {
+        tagProcessor.appendHtml("<h1>Variables</h1>");
         final DebugHtmlString debug = new DebugHtmlString();
-        final RequestContext context = request.getContext();
+        final Request context = tagProcessor.getContext();
         context.append(debug, "variables");
         debug.close();
-        request.appendHtml(debug.toString());
+        tagProcessor.appendHtml(debug.toString());
     }
 
-    protected void displaySystem(final Request request) {
-        request.appendHtml("<h1>System</h1>");
+    protected void displaySystem(final TagProcessor tagProcessor) {
+        tagProcessor.appendHtml("<h1>System</h1>");
         final DebuggableWithTitle[] debugItems = IsisContext.debugSystem();
         for (final DebuggableWithTitle debug : debugItems) {
             final DebugHtmlString debugBuffer = new DebugHtmlString();
@@ -260,12 +260,12 @@ public class Debug extends AbstractElementProcessor {
             debug.debugData(debugBuffer);
             debugBuffer.endSection();
             debugBuffer.close();
-            request.appendHtml(debugBuffer.toString());
+            tagProcessor.appendHtml(debugBuffer.toString());
         }
     }
 
-    protected void displaySession(final Request request) {
-        request.appendHtml("<h1>Session</h1>");
+    protected void displaySession(final TagProcessor tagProcessor) {
+        tagProcessor.appendHtml("<h1>Session</h1>");
         final DebuggableWithTitle[] debugItems = IsisContext.debugSession();
         for (final DebuggableWithTitle debug : debugItems) {
             final DebugHtmlString debugBuffer = new DebugHtmlString();
@@ -273,12 +273,12 @@ public class Debug extends AbstractElementProcessor {
             debug.debugData(debugBuffer);
             debugBuffer.endSection();
             debugBuffer.close();
-            request.appendHtml(debugBuffer.toString());
+            tagProcessor.appendHtml(debugBuffer.toString());
         }
     }
 
-    protected void listSpecifications(final Request request) {
-        request.appendHtml("<h1>Specifications</h1>");
+    protected void listSpecifications(final TagProcessor tagProcessor) {
+        tagProcessor.appendHtml("<h1>Specifications</h1>");
         final List<ObjectSpecification> fullIdentifierList = new ArrayList<ObjectSpecification>(getSpecificationLoader().allSpecifications());
         Collections.sort(fullIdentifierList, ObjectSpecification.COMPARATOR_SHORT_IDENTIFIER_IGNORE_CASE);
         final DebugHtmlString debug = new DebugHtmlString();
@@ -287,7 +287,7 @@ public class Debug extends AbstractElementProcessor {
             debug.appendln(name, specificationLink(spec));
         }
         debug.close();
-        request.appendHtml(debug.toString());
+        tagProcessor.appendHtml(debug.toString());
     }
 
     private String specificationLink(final ObjectSpecification specification) {

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugAccessCheck.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugAccessCheck.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugAccessCheck.java
index 796faf0..f48fcad 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugAccessCheck.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebugAccessCheck.java
@@ -19,15 +19,15 @@
 
 package org.apache.isis.viewer.scimpi.dispatcher.view.debug;
 
-import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.ForbiddenException;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.ForbiddenException;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.view.AbstractElementProcessor;
 
 public class DebugAccessCheck extends AbstractElementProcessor {
 
     @Override
-    public void process(final Request request) {
-        if (request.getContext().isDebugDisabled()) {
+    public void process(final TagProcessor tagProcessor) {
+        if (tagProcessor.getContext().isDebugDisabled()) {
             throw new ForbiddenException("Debug is disabled");
         }
     }