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:08 UTC

[11/24] git commit: Restructuring Scimpi to remove dependencies and enable easier testing.

Restructuring Scimpi to remove dependencies and enable easier testing.

Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/49518c89
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/49518c89
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/49518c89

Branch: refs/heads/scimpi-restructure
Commit: 49518c89ff57987cbd8dcc8c033a8b3b819e037f
Parents: b5ea578
Author: rmatthews <rm...@nakedobjects.org>
Authored: Wed Jan 16 23:25:06 2013 +0000
Committer: rmatthews <rm...@nakedobjects.org>
Committed: Wed Jan 16 23:25:06 2013 +0000

----------------------------------------------------------------------
 .../apache/isis/viewer/scimpi/DebugHtmlWriter.java |   45 +
 .../isis/viewer/scimpi/ForbiddenException.java     |   68 ++
 .../java/org/apache/isis/viewer/scimpi/Names.java  |  104 ++
 .../isis/viewer/scimpi/NotLoggedInException.java   |   32 +
 .../apache/isis/viewer/scimpi/ScimpiException.java |   44 +
 .../dispatcher/AbstractElementProcessor.java       |   55 -
 .../scimpi/dispatcher/AbstractObjectProcessor.java |   54 -
 .../isis/viewer/scimpi/dispatcher/Action.java      |   37 -
 .../scimpi/dispatcher/AddElementProcessors.java    |  215 ++++
 .../viewer/scimpi/dispatcher/BlockContent.java     |   23 -
 .../scimpi/dispatcher/DispatchException.java       |    3 +
 .../isis/viewer/scimpi/dispatcher/Dispatcher.java  |  144 ++--
 .../scimpi/dispatcher/ElementContentProcessor.java |   24 -
 .../viewer/scimpi/dispatcher/ElementProcessor.java |   30 -
 .../viewer/scimpi/dispatcher/ErrorCollator.java    |  146 ---
 .../scimpi/dispatcher/ForbiddenException.java      |   68 --
 .../isis/viewer/scimpi/dispatcher/Names.java       |   91 --
 .../scimpi/dispatcher/NotLoggedInException.java    |   31 -
 .../isis/viewer/scimpi/dispatcher/Response.java    |    6 +
 .../viewer/scimpi/dispatcher/ScimpiException.java  |   44 -
 .../scimpi/dispatcher/ScimpiNotFoundException.java |    2 +
 .../scimpi/dispatcher/TagOrderException.java       |    7 +-
 .../isis/viewer/scimpi/dispatcher/UserManager.java |   90 --
 .../scimpi/dispatcher/action/ActionAction.java     |   29 +-
 .../scimpi/dispatcher/action/Attributes.java       |  131 ---
 .../scimpi/dispatcher/action/DebugAction.java      |  244 ++++
 .../scimpi/dispatcher/action/DebugUserAction.java  |   72 ++
 .../scimpi/dispatcher/action/EditAction.java       |  271 +++++
 .../viewer/scimpi/dispatcher/action/LogAction.java |   76 ++
 .../scimpi/dispatcher/action/LogonAction.java      |  146 +++
 .../scimpi/dispatcher/action/LogoutAction.java     |   71 ++
 .../dispatcher/action/PropertyException.java       |   44 -
 .../scimpi/dispatcher/action/RemoveAction.java     |  117 ++
 .../action/RequiredPropertyException.java          |   43 -
 .../viewer/scimpi/dispatcher/context/Action.java   |   37 +
 .../context/DefaultOidObjectMapping.java           |    6 +-
 .../scimpi/dispatcher/context/ErrorCollator.java   |  145 +++
 .../dispatcher/context/IndirectObjectMapping.java  |    3 +-
 .../scimpi/dispatcher/context/ObjectMapping.java   |    2 +-
 .../dispatcher/context/PropertyException.java      |   44 +
 .../viewer/scimpi/dispatcher/context/Request.java  |  864 +++++++++++++++
 .../scimpi/dispatcher/context/RequestContext.java  |  862 --------------
 .../scimpi/dispatcher/debug/DebugAction.java       |  243 ----
 .../scimpi/dispatcher/debug/DebugHtmlWriter.java   |   45 -
 .../scimpi/dispatcher/debug/DebugUserAction.java   |   71 --
 .../viewer/scimpi/dispatcher/debug/DebugUsers.java |   97 --
 .../scimpi/dispatcher/debug/DebugUsersView.java    |   30 +-
 .../scimpi/dispatcher/debug/ErrorDetails.java      |    8 +-
 .../scimpi/dispatcher/debug/ErrorMessage.java      |    8 +-
 .../scimpi/dispatcher/debug/ErrorReference.java    |    8 +-
 .../viewer/scimpi/dispatcher/debug/LogAction.java  |   76 --
 .../viewer/scimpi/dispatcher/edit/EditAction.java  |  269 -----
 .../scimpi/dispatcher/edit/FieldEditState.java     |   57 -
 .../viewer/scimpi/dispatcher/edit/FormState.java   |   67 --
 .../scimpi/dispatcher/edit/RemoveAction.java       |  116 --
 .../scimpi/dispatcher/logon/LogonAction.java       |  147 ---
 .../scimpi/dispatcher/logon/LogoutAction.java      |   71 --
 .../scimpi/dispatcher/processor/Attributes.java    |  132 +++
 .../scimpi/dispatcher/processor/BlockContent.java  |   23 +
 .../processor/ElementContentProcessor.java         |   25 +
 .../dispatcher/processor/ElementProcessor.java     |   29 +
 .../dispatcher/processor/HtmlFileParser.java       |   13 +-
 .../scimpi/dispatcher/processor/HtmlSnippet.java   |   51 +
 .../dispatcher/processor/ProcessorLookup.java      |  206 ----
 .../scimpi/dispatcher/processor/Request.java       |  323 ------
 .../processor/RequiredPropertyException.java       |   43 +
 .../scimpi/dispatcher/processor/Snippet.java       |   27 +
 .../viewer/scimpi/dispatcher/processor/SwfTag.java |   89 ++
 .../processor/TagProcessingException.java          |    2 +-
 .../scimpi/dispatcher/processor/TagProcessor.java  |  317 ++++++
 .../dispatcher/structure/FieldEditState.java       |   57 +
 .../scimpi/dispatcher/structure/FormState.java     |   67 ++
 .../scimpi/dispatcher/util/MethodsUtils.java       |   23 +-
 .../dispatcher/view/AbstractElementProcessor.java  |   58 +
 .../dispatcher/view/AbstractObjectProcessor.java   |   55 +
 .../viewer/scimpi/dispatcher/view/HelpLink.java    |   72 --
 .../viewer/scimpi/dispatcher/view/History.java     |  150 ---
 .../viewer/scimpi/dispatcher/view/HtmlSnippet.java |   51 -
 .../viewer/scimpi/dispatcher/view/Snippet.java     |   27 -
 .../isis/viewer/scimpi/dispatcher/view/SwfTag.java |   90 --
 .../scimpi/dispatcher/view/VersionNumber.java      |   70 --
 .../dispatcher/view/action/ActionButton.java       |  117 +-
 .../dispatcher/view/action/ActionContent.java      |   10 +-
 .../scimpi/dispatcher/view/action/ActionForm.java  |   97 +-
 .../scimpi/dispatcher/view/action/ActionLink.java  |   62 +-
 .../scimpi/dispatcher/view/action/Methods.java     |  110 +-
 .../scimpi/dispatcher/view/action/Parameter.java   |   16 +-
 .../scimpi/dispatcher/view/action/RunAction.java   |   32 +-
 .../scimpi/dispatcher/view/action/Services.java    |   36 +-
 .../dispatcher/view/collection/Collection.java     |   36 +-
 .../viewer/scimpi/dispatcher/view/debug/Debug.java |  168 ++--
 .../dispatcher/view/debug/DebugAccessCheck.java    |   10 +-
 .../dispatcher/view/debug/DebugCollectionView.java |   32 +-
 .../dispatcher/view/debug/DebugObjectView.java     |   66 +-
 .../scimpi/dispatcher/view/debug/DebuggerLink.java |   28 +-
 .../scimpi/dispatcher/view/debug/Diagnostics.java  |   57 +-
 .../viewer/scimpi/dispatcher/view/debug/Log.java   |   14 +-
 .../scimpi/dispatcher/view/debug/LogLevel.java     |   28 +-
 .../scimpi/dispatcher/view/debug/Members.java      |   44 +-
 .../scimpi/dispatcher/view/debug/ShowDebug.java    |   12 +-
 .../dispatcher/view/debug/Specification.java       |   54 +-
 .../dispatcher/view/debug/ThrowException.java      |   10 +-
 .../dispatcher/view/display/AbstractFormView.java  |   64 +-
 .../dispatcher/view/display/AbstractTableView.java |   60 +-
 .../scimpi/dispatcher/view/display/AddMessage.java |   12 +-
 .../scimpi/dispatcher/view/display/AddWarning.java |   12 +-
 .../scimpi/dispatcher/view/display/Errors.java     |   22 +-
 .../scimpi/dispatcher/view/display/Feedback.java   |   16 +-
 .../scimpi/dispatcher/view/display/FieldLabel.java |   22 +-
 .../scimpi/dispatcher/view/display/FieldValue.java |   46 +-
 .../scimpi/dispatcher/view/display/GetField.java   |   44 +-
 .../dispatcher/view/display/IncludeObject.java     |   32 +-
 .../scimpi/dispatcher/view/display/ListView.java   |   47 +-
 .../dispatcher/view/display/LongFormView.java      |   14 +-
 .../scimpi/dispatcher/view/display/Messages.java   |   14 +-
 .../dispatcher/view/display/SelectedObject.java    |   26 +-
 .../scimpi/dispatcher/view/display/TableBlock.java |    4 +-
 .../dispatcher/view/display/TableBuilder.java      |   32 +-
 .../scimpi/dispatcher/view/display/TableCell.java  |   55 +-
 .../view/display/TableContentWriter.java           |    6 +-
 .../scimpi/dispatcher/view/display/TableEmpty.java |   24 +-
 .../dispatcher/view/display/TableHeader.java       |   12 +-
 .../scimpi/dispatcher/view/display/TableRow.java   |   20 +-
 .../scimpi/dispatcher/view/display/TableView.java  |  110 +-
 .../scimpi/dispatcher/view/display/Title.java      |   32 +-
 .../scimpi/dispatcher/view/display/Warnings.java   |   14 +-
 .../scimpi/dispatcher/view/edit/EditObject.java    |   74 +-
 .../scimpi/dispatcher/view/edit/FieldFactory.java  |  105 --
 .../scimpi/dispatcher/view/edit/FormEntry.java     |   44 -
 .../scimpi/dispatcher/view/edit/FormField.java     |   44 -
 .../dispatcher/view/edit/FormFieldBlock.java       |   68 --
 .../scimpi/dispatcher/view/edit/HiddenField.java   |   48 -
 .../dispatcher/view/edit/RadioListField.java       |   70 --
 .../scimpi/dispatcher/view/edit/Selector.java      |  158 ---
 .../scimpi/dispatcher/view/field/ExcludeField.java |   10 +-
 .../scimpi/dispatcher/view/field/IncludeField.java |   10 +-
 .../dispatcher/view/field/InclusionList.java       |    2 +-
 .../scimpi/dispatcher/view/field/LinkField.java    |   21 +-
 .../scimpi/dispatcher/view/field/LinkedObject.java |    6 +-
 .../dispatcher/view/form/HtmlFormBuilder.java      |   62 +-
 .../scimpi/dispatcher/view/logon/Logoff.java       |   10 +-
 .../viewer/scimpi/dispatcher/view/logon/Logon.java |   54 +-
 .../dispatcher/view/logon/RestrictAccess.java      |   16 +-
 .../scimpi/dispatcher/view/logon/Secure.java       |   10 +-
 .../viewer/scimpi/dispatcher/view/logon/User.java  |   46 +-
 .../scimpi/dispatcher/view/other/HelpLink.java     |   72 ++
 .../scimpi/dispatcher/view/other/History.java      |  150 +++
 .../dispatcher/view/other/VersionNumber.java       |   70 ++
 .../view/simple/AbstractConditionalBlock.java      |  108 +-
 .../dispatcher/view/simple/AbstractLink.java       |   65 +-
 .../scimpi/dispatcher/view/simple/BlockDefine.java |   18 +-
 .../scimpi/dispatcher/view/simple/BlockUse.java    |   18 +-
 .../scimpi/dispatcher/view/simple/Commit.java      |    6 +-
 .../scimpi/dispatcher/view/simple/ContentTag.java  |    8 +-
 .../scimpi/dispatcher/view/simple/CookieValue.java |   24 +-
 .../dispatcher/view/simple/DefaultValue.java       |   24 +-
 .../scimpi/dispatcher/view/simple/EditLink.java    |    8 +-
 .../scimpi/dispatcher/view/simple/EndSession.java  |    8 +-
 .../scimpi/dispatcher/view/simple/Forward.java     |   10 +-
 .../scimpi/dispatcher/view/simple/GetCookie.java   |   12 +-
 .../scimpi/dispatcher/view/simple/Import.java      |    8 +-
 .../view/simple/InitializeFromCookie.java          |   35 +-
 .../view/simple/InitializeFromResult.java          |   43 +-
 .../dispatcher/view/simple/Localization.java       |   14 +-
 .../viewer/scimpi/dispatcher/view/simple/Mark.java |   12 +-
 .../dispatcher/view/simple/NewActionLink.java      |   14 +-
 .../scimpi/dispatcher/view/simple/ObjectLink.java  |    8 +-
 .../scimpi/dispatcher/view/simple/PageTitle.java   |    8 +-
 .../scimpi/dispatcher/view/simple/Redirect.java    |   10 +-
 .../dispatcher/view/simple/RemoveElement.java      |   86 +-
 .../scimpi/dispatcher/view/simple/ScopeTag.java    |   28 +-
 .../scimpi/dispatcher/view/simple/SetCookie.java   |   24 +-
 .../dispatcher/view/simple/SetCookieFromField.java |    6 +-
 .../dispatcher/view/simple/SetFieldFromCookie.java |    6 +-
 .../dispatcher/view/simple/SetLocalization.java    |   12 +-
 .../dispatcher/view/simple/SimpleButton.java       |   16 +-
 .../dispatcher/view/simple/StartSession.java       |    8 +-
 .../scimpi/dispatcher/view/simple/TemplateTag.java |    6 +-
 .../scimpi/dispatcher/view/simple/Unless.java      |   10 +-
 .../scimpi/dispatcher/view/simple/Variable.java    |   40 +-
 .../viewer/scimpi/dispatcher/view/simple/When.java |   10 +-
 .../scimpi/dispatcher/view/value/ActionName.java   |   14 +-
 .../dispatcher/view/value/CountElements.java       |   14 +-
 .../scimpi/dispatcher/view/value/ElementType.java  |   20 +-
 .../scimpi/dispatcher/view/value/FieldName.java    |   20 +-
 .../dispatcher/view/value/ParameterName.java       |   18 +-
 .../scimpi/dispatcher/view/value/TitleString.java  |   20 +-
 .../viewer/scimpi/dispatcher/view/value/Type.java  |   22 +-
 .../dispatcher/view/widget/FieldFactory.java       |  105 ++
 .../scimpi/dispatcher/view/widget/FormEntry.java   |   44 +
 .../scimpi/dispatcher/view/widget/FormField.java   |   44 +
 .../dispatcher/view/widget/FormFieldBlock.java     |   68 ++
 .../scimpi/dispatcher/view/widget/HiddenField.java |   48 +
 .../dispatcher/view/widget/RadioListField.java     |   70 ++
 .../scimpi/dispatcher/view/widget/Selector.java    |  158 +++
 .../isis/viewer/scimpi/security/DebugUsers.java    |   97 ++
 .../isis/viewer/scimpi/security/UserManager.java   |   89 ++
 .../viewer/scimpi/servlet/DispatchException.java   |    2 +-
 .../viewer/scimpi/servlet/DispatcherServlet.java   |    8 +-
 .../scimpi/servlet/ServletRequestContext.java      |   10 +-
 200 files changed, 6225 insertions(+), 6171 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/DebugHtmlWriter.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/DebugHtmlWriter.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/DebugHtmlWriter.java
new file mode 100644
index 0000000..0251e7f
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/DebugHtmlWriter.java
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.scimpi;
+
+import java.io.PrintWriter;
+
+import org.apache.isis.core.commons.debug.DebugHtmlStringAbstract;
+
+public class DebugHtmlWriter extends DebugHtmlStringAbstract {
+
+    private final PrintWriter writer;
+
+    public DebugHtmlWriter(final PrintWriter writer, final boolean createPage) {
+        super(createPage);
+        this.writer = writer;
+        header();
+    }
+
+    @Override
+    protected void appendHtml(final String html) {
+        writer.println(html);
+    }
+
+    @Override
+    protected void doClose() {
+        footer();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ForbiddenException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ForbiddenException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ForbiddenException.java
new file mode 100644
index 0000000..30384ab
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ForbiddenException.java
@@ -0,0 +1,68 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.scimpi;
+
+import java.util.List;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+
+/**
+ * Indicates that request could not complete as it could not access (for
+ * security reasons) some of the content.
+ */
+public class ForbiddenException extends ScimpiException {
+    private static final long serialVersionUID = 1L;
+    public static final boolean VISIBLE_AND_USABLE = true;
+    public static final boolean VISIBLE = false;
+    private final Identifier identifier;
+    private final AuthenticationSession session;
+
+    public ForbiddenException(final String message) {
+        this(IsisContext.getAuthenticationSession(), message);
+    }
+
+    private ForbiddenException(final AuthenticationSession session, final String message) {
+        super(message + " for " + session.getUserName() + " " + session.getRoles());
+        this.session = session;
+        identifier = null;
+    }
+
+    public ForbiddenException(final IdentifiedHolder target, final boolean isVisibleAndUsabable) {
+        this(target.getIdentifier(), IsisContext.getAuthenticationSession(), isVisibleAndUsabable);
+    }
+
+    private ForbiddenException(final Identifier identifier, final AuthenticationSession session, final boolean isVisibleAndUsabable) {
+        super((identifier.getType() == Identifier.Type.PROPERTY_OR_COLLECTION ? "Field" : "Action") + " '" + identifier.getMemberName() + "' in " + identifier.getClassName() + " is not " + (isVisibleAndUsabable ? "visible/usable " : "visible") + " for " + session.getUserName() + " "
+                + session.getRoles());
+        this.identifier = identifier;
+        this.session = session;
+    }
+
+    public Identifier getIdentifier() {
+        return identifier;
+    }
+
+    public List<String> getRoles() {
+        return session.getRoles();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/Names.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/Names.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/Names.java
new file mode 100644
index 0000000..9ebbbbc
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/Names.java
@@ -0,0 +1,104 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.scimpi;
+
+public interface Names {
+    static final String PREFIX = "_logon-";
+
+    public static final String COMMAND_ROOT = ".app";
+
+    public static final String EXTENSION = "shtml";
+
+    public static final String ACTION = "_action";
+    public static final String EDIT = "_edit";
+    public static final String REMOVE = "_remove";
+    public static final String GENERIC = "_generic";
+
+    public static final String RESULT = "_result";
+    public static final String ERROR_PARAM = "_error";
+    public static final String BACK_TO = "_back_to";
+ 
+    static final String BUTTON_TITLE = "button-title";
+    static final String CANCEL_TO = "cancel-to";
+    static final String COLLECTION = "collection";
+    static final String CONFIRM = "confirm";
+    static final String CLASS = "class";
+    static final String CONTAINER_CLASS = "container-" + CLASS;
+    static final String DEFAULT = "default";
+    static final String ELEMENT_NAME = "element-name";
+    static final String ELEMENT = "element";
+    static final String EVEN_ROW_CLASS = "even-row";
+    static final String FALSE = "false";
+    static final String ERROR = "error";
+    static final String FIELD = "field";
+    static final String FIELD_NAME = "field-name";
+    static final String FOOTER = "footer";
+    static final String FORM_ID = "form-id";
+    static final String FORM_TITLE = "title";
+    static final String FORMS = "show-forms";
+    static final String HEADER = "header";
+    static final String ICON_CLASS = "icon";
+    static final String HIDDEN = "hidden";
+    static final String HIDE_UNEDITABLE = "hide-uneditable";
+    static final String HEADER_LEVEL = "header";
+    static final String ID = "id";
+    static final String LABEL_DELIMITER = "label";
+    static final String LINK_VIEW = "link-view";
+    static final String LINK_NAME = "link-name";
+    static final String LINK_OBJECT = "link-object";
+    static final String METHOD = "method";
+    static final String MESSAGE = "message";
+    static final String NAME = "name";
+    static final String ODD_ROW_CLASS = "odd-row";
+    static final String OBJECT = "object";
+    static final String PARAMETER = "param";
+    static final String PARAMETER_NUMBER = "number";
+    static final String PLURAL = "plural";
+    static final String REFERENCE_NAME = "reference-name";
+    static final String RESULT_NAME = "result-name";
+    static final String RESULT_OVERRIDE = "result-override";
+    static final String ROW_CLASSES = "row-classes";
+    static final String SCOPE = "scope";
+    static final String SHOW_ICON = "icon";
+    static final String SHOW_SELECT = "select";
+    static final String SHOW_EDIT = "edit";
+    static final String SHOW_DELETE = "delete";
+    static final String SHOW_MESSAGE = "show-message";
+    static final String SHOW_TITLE = "show-title";
+    static final String TRUNCATE = "truncate";
+    static final String TABLE_TITLE = "title";
+    static final String TYPE = "type";
+    static final String VIEW = "view";
+    static final String VALUE = "value";
+    static final String VERSION = "version";
+    static final String USER = "user";
+    static final String VOID = "void";
+    static final String WHEN = "when";
+    static final String ENTRY_FIELDS = "entry-fields";
+    
+    
+    static final String LOGON_OBJECT = PREFIX + OBJECT;
+    static final String LOGON_METHOD = PREFIX + METHOD;
+    static final String LOGON_SCOPE = PREFIX + SCOPE;
+    static final String LOGON_RESULT_NAME = PREFIX + RESULT_NAME;
+    static final String LOGON_FORM_ID = PREFIX + "form-id";
+    
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/NotLoggedInException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/NotLoggedInException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/NotLoggedInException.java
new file mode 100644
index 0000000..8a663f1
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/NotLoggedInException.java
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.scimpi;
+
+
+/**
+ * Indicates that request could not complete as a user was not logged in.
+ */
+public class NotLoggedInException extends ScimpiException {
+    private static final long serialVersionUID = 1L;
+
+    public NotLoggedInException() {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiException.java
new file mode 100644
index 0000000..15781a4
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiException.java
@@ -0,0 +1,44 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.scimpi;
+
+public class ScimpiException extends RuntimeException {
+    private static final long serialVersionUID = 1L;
+
+    public ScimpiException() {
+    }
+
+    public ScimpiException(final String message) {
+        super(message);
+    }
+
+    public ScimpiException(final Throwable cause) {
+        super(cause);
+    }
+
+    public ScimpiException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
+
+    public String getHtmlMessage() {
+        return getMessage();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractElementProcessor.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractElementProcessor.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractElementProcessor.java
deleted file mode 100644
index 4869cc4..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractElementProcessor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
-
-public abstract class AbstractElementProcessor implements ElementProcessor, Names {
-
-    private static final String SHOW_ICONS_BY_DEFAULT = ConfigurationConstants.ROOT + "scimpi.show-icons";
-
-    private final boolean showIconByDefault;
-
-    public AbstractElementProcessor() {
-        showIconByDefault = IsisContext.getConfiguration().getBoolean(SHOW_ICONS_BY_DEFAULT, false);
-    }
-
-    /**
-     * Return the Class for the class specified in the type attribute.
-     */
-    protected Class<?> forClass(final Request request) {
-        Class<?> cls = null;
-        final String className = request.getOptionalProperty(TYPE);
-        if (className != null) {
-            try {
-                cls = Class.forName(className);
-            } catch (final ClassNotFoundException e) {
-                throw new ScimpiException("No class for " + className, e);
-            }
-        }
-        return cls;
-    }
-
-    protected boolean showIconByDefault() {
-        return showIconByDefault;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java
deleted file mode 100644
index d163bc1..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AbstractObjectProcessor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-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.processor.Request;
-
-public abstract class AbstractObjectProcessor extends AbstractElementProcessor {
-
-    @Override
-    public void process(final Request request) {
-        final String id = request.getOptionalProperty(OBJECT);
-        ObjectAdapter object = request.getContext().getMappedObjectOrResult(id);
-
-        final String field = request.getOptionalProperty(FIELD);
-        if (field != null) {
-            final ObjectAssociation objectField = object.getSpecification().getAssociation(field);
-            final String error = checkFieldType(objectField);
-            if (error != null) {
-                throw new ScimpiException("Field " + objectField.getId() + " " + error);
-            }
-            IsisContext.getPersistenceSession().resolveField(object, objectField);
-            object = objectField.get(object);
-        }
-
-        process(request, object);
-    }
-
-    protected String checkFieldType(final ObjectAssociation objectField) {
-        return null;
-    }
-
-    protected abstract void process(Request request, ObjectAdapter object);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Action.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Action.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Action.java
deleted file mode 100644
index 7bd6b26..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Action.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-import java.io.IOException;
-
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-
-public interface Action extends Names {
-
-    void process(RequestContext context) throws IOException;
-
-    String getName();
-
-    void init();
-
-    void debug(DebugBuilder debug);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AddElementProcessors.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AddElementProcessors.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AddElementProcessors.java
new file mode 100644
index 0000000..ad51add
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AddElementProcessors.java
@@ -0,0 +1,215 @@
+package org.apache.isis.viewer.scimpi.dispatcher;
+
+import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugUsersView;
+import org.apache.isis.viewer.scimpi.dispatcher.debug.ErrorDetails;
+import org.apache.isis.viewer.scimpi.dispatcher.debug.ErrorMessage;
+import org.apache.isis.viewer.scimpi.dispatcher.debug.ErrorReference;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.ProcessorLookup;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.ActionButton;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.ActionForm;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.ActionLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.Methods;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.Parameter;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.RunAction;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.Services;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.Collection;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.DebugAccessCheck;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.DebugCollectionView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.DebugObjectView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.DebuggerLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.Diagnostics;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.Log;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.LogLevel;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.Members;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.ShowDebug;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.Specification;
+import org.apache.isis.viewer.scimpi.dispatcher.view.debug.ThrowException;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.AddMessage;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.AddWarning;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.Errors;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.Feedback;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.FieldLabel;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.FieldValue;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.GetField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.IncludeObject;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.ListView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.LongFormView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.Messages;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.SelectedObject;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.ShortFormView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableBuilder;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableCell;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableEmpty;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableHeader;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableRow;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.TableView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.Title;
+import org.apache.isis.viewer.scimpi.dispatcher.view.display.Warnings;
+import org.apache.isis.viewer.scimpi.dispatcher.view.edit.EditObject;
+import org.apache.isis.viewer.scimpi.dispatcher.view.field.ExcludeField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.field.IncludeField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.field.LinkField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.logon.Logoff;
+import org.apache.isis.viewer.scimpi.dispatcher.view.logon.Logon;
+import org.apache.isis.viewer.scimpi.dispatcher.view.logon.RestrictAccess;
+import org.apache.isis.viewer.scimpi.dispatcher.view.logon.Secure;
+import org.apache.isis.viewer.scimpi.dispatcher.view.logon.User;
+import org.apache.isis.viewer.scimpi.dispatcher.view.other.HelpLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.other.History;
+import org.apache.isis.viewer.scimpi.dispatcher.view.other.VersionNumber;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.BlockDefine;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.BlockUse;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Commit;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.ContentTag;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.CookieValue;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.DefaultValue;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.EditLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.EndSession;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Forward;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.GetCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Import;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.InitializeFromCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.InitializeFromResult;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Localization;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Mark;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.NewActionLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.ObjectLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.PageTitle;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Redirect;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.RemoveElement;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.ScopeTag;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.SetCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.SetCookieFromField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.SetFieldFromCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.SetLocalization;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.SimpleButton;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.StartSession;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.TemplateTag;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Unless;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Variable;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.When;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.ActionName;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.CountElements;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.ElementType;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.FieldName;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.ParameterName;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.TitleString;
+import org.apache.isis.viewer.scimpi.dispatcher.view.value.Type;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.FormEntry;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.FormField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.HiddenField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.RadioListField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.widget.Selector;
+
+public class AddElementProcessors {
+
+    public static void init(ProcessorLookup processors) {
+
+        processors.addElementProcessor(new ActionLink());
+        processors.addElementProcessor(new ActionButton());
+        processors.addElementProcessor(new ActionForm());
+        processors.addElementProcessor(new ActionName());
+        processors.addElementProcessor(new AddMessage());
+        processors.addElementProcessor(new AddWarning());
+        processors.addElementProcessor(new BlockDefine());
+        processors.addElementProcessor(new BlockUse());
+        processors.addElementProcessor(new History());
+        processors.addElementProcessor(new Collection());
+        processors.addElementProcessor(new Commit());
+        processors.addElementProcessor(new ContentTag());
+        processors.addElementProcessor(new CountElements());
+        processors.addElementProcessor(new Diagnostics());
+        processors.addElementProcessor(new DebugAccessCheck());
+        processors.addElementProcessor(new DebugCollectionView()); 
+        processors.addElementProcessor(new DebuggerLink());
+        processors.addElementProcessor(new DebugObjectView()); 
+        processors.addElementProcessor(new DebugUsersView());
+        processors.addElementProcessor(new DefaultValue());
+        processors.addElementProcessor(new EditLink());
+        processors.addElementProcessor(new EditObject());
+        processors.addElementProcessor(new ElementType());
+        processors.addElementProcessor(new Errors());
+        processors.addElementProcessor(new ErrorDetails()); 
+        processors.addElementProcessor(new ErrorMessage()); 
+        processors.addElementProcessor(new ErrorReference());
+        processors.addElementProcessor(new ExcludeField());
+        processors.addElementProcessor(new Feedback());
+        processors.addElementProcessor(new FieldLabel());
+        processors.addElementProcessor(new FieldName());
+        processors.addElementProcessor(new FieldValue());
+        processors.addElementProcessor(new FormField());
+        processors.addElementProcessor(new FormEntry());
+        processors.addElementProcessor(new Forward());
+        processors.addElementProcessor(new GetField());
+        processors.addElementProcessor(new HelpLink());
+        processors.addElementProcessor(new HiddenField());
+        processors.addElementProcessor(new Import());
+        processors.addElementProcessor(new IncludeObject());
+        processors.addElementProcessor(new IncludeField());
+        processors.addElementProcessor(new InitializeFromCookie());
+        processors.addElementProcessor(new InitializeFromResult());
+        processors.addElementProcessor(new Log());
+        processors.addElementProcessor(new LogLevel());
+        processors.addElementProcessor(new Logon());
+        processors.addElementProcessor(new Logoff());
+        processors.addElementProcessor(new LongFormView());
+        processors.addElementProcessor(new LinkField());
+        processors.addElementProcessor(new ListView());
+        processors.addElementProcessor(new NewActionLink());
+        processors.addElementProcessor(new Mark());
+        processors.addElementProcessor(new Members());
+        processors.addElementProcessor(new Messages());
+        processors.addElementProcessor(new Methods());
+        processors.addElementProcessor(new ObjectLink());
+        processors.addElementProcessor(new PageTitle());
+        processors.addElementProcessor(new Parameter());
+        processors.addElementProcessor(new ParameterName());
+        processors.addElementProcessor(new RadioListField());
+        processors.addElementProcessor(new Redirect());
+        processors.addElementProcessor(new RemoveElement());
+        processors.addElementProcessor(new VersionNumber());
+        processors.addElementProcessor(new RunAction());
+        processors.addElementProcessor(new RestrictAccess());
+        processors.addElementProcessor(new ScopeTag());
+        processors.addElementProcessor(new Secure());
+        processors.addElementProcessor(new SelectedObject());
+        processors.addElementProcessor(new Selector());
+        processors.addElementProcessor(new Services());
+        processors.addElementProcessor(new ShortFormView());
+        processors.addElementProcessor(new ShowDebug());
+        processors.addElementProcessor(new SimpleButton());
+        processors.addElementProcessor(new Specification());
+        processors.addElementProcessor(new TableCell());
+        processors.addElementProcessor(new TableView());
+        processors.addElementProcessor(new TableBuilder());
+        processors.addElementProcessor(new TableEmpty());
+        processors.addElementProcessor(new TableRow());
+        processors.addElementProcessor(new TableHeader());
+        processors.addElementProcessor(new TemplateTag());
+        processors.addElementProcessor(new Title());
+        processors.addElementProcessor(new TitleString());
+        processors.addElementProcessor(new ThrowException());
+        processors.addElementProcessor(new Type());
+        processors.addElementProcessor(new User());
+        processors.addElementProcessor(new Unless());
+        processors.addElementProcessor(new Variable());
+        processors.addElementProcessor(new Warnings());
+        processors.addElementProcessor(new When());
+
+        processors.addElementProcessor(new StartSession());
+        processors.addElementProcessor(new EndSession());
+
+        processors.addElementProcessor(new CookieValue());
+        processors.addElementProcessor(new SetCookie());
+        processors.addElementProcessor(new GetCookie());
+        processors.addElementProcessor(new SetCookieFromField());
+        processors.addElementProcessor(new SetFieldFromCookie());
+        
+        // new, alpha, processors
+        processors.addElementProcessor(new Localization());
+        processors.addElementProcessor(new SetLocalization());
+    
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/BlockContent.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/BlockContent.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/BlockContent.java
deleted file mode 100644
index 836ae60..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/BlockContent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-public interface BlockContent {
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/DispatchException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/DispatchException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/DispatchException.java
index cc679ae..25eadbc 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/DispatchException.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/DispatchException.java
@@ -19,6 +19,9 @@
 
 package org.apache.isis.viewer.scimpi.dispatcher;
 
+import org.apache.isis.viewer.scimpi.ScimpiException;
+
+
 public class DispatchException extends ScimpiException {
     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
index 045536e..f5e2e5e 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
@@ -23,7 +23,6 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -39,6 +38,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.ConfigurationConstants;
 import org.apache.isis.core.commons.debug.DebugBuilder;
+import org.apache.isis.core.commons.debug.Debuggable;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -50,41 +50,55 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.core.runtime.userprofile.UserLocalization;
+import org.apache.isis.viewer.scimpi.DebugHtmlWriter;
+import org.apache.isis.viewer.scimpi.ForbiddenException;
+import org.apache.isis.viewer.scimpi.Names;
+import org.apache.isis.viewer.scimpi.NotLoggedInException;
+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.Debug;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
-import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugAction;
-import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugUserAction;
-import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugUsers;
-import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugHtmlWriter;
-import org.apache.isis.viewer.scimpi.dispatcher.debug.LogAction;
-import org.apache.isis.viewer.scimpi.dispatcher.edit.EditAction;
-import org.apache.isis.viewer.scimpi.dispatcher.edit.RemoveAction;
-import org.apache.isis.viewer.scimpi.dispatcher.logon.LogonAction;
-import org.apache.isis.viewer.scimpi.dispatcher.logon.LogoutAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.DebugAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.DebugUserAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.EditAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.LogAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.LogonAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.LogoutAction;
+import org.apache.isis.viewer.scimpi.dispatcher.action.RemoveAction;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Action;
+import org.apache.isis.viewer.scimpi.dispatcher.context.ErrorCollator;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Debug;
+import org.apache.isis.viewer.scimpi.dispatcher.context.Request.Scope;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.ElementProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Encoder;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.HtmlFileParser;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.ProcessorLookup;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.SimpleEncoder;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.Snippet;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessingException;
+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.Snippet;
+import org.apache.isis.viewer.scimpi.security.DebugUsers;
+import org.apache.isis.viewer.scimpi.security.UserManager;
 import org.apache.log4j.Logger;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
 
-public class Dispatcher {
+public class Dispatcher implements Debuggable {
     private static final String SHOW_UNSHOWN_MESSAGES = ConfigurationConstants.ROOT + "scimpi.show-unshown-messages";
+    @Deprecated
     public static final String ACTION = "_action";
+    @Deprecated
     public static final String EDIT = "_edit";
+    @Deprecated
     public static final String REMOVE = "_remove";
+    @Deprecated
     public static final String GENERIC = "_generic";
+    @Deprecated
     public static final String EXTENSION = "shtml";
     private static final Logger LOG = Logger.getLogger(Dispatcher.class);
+    @Deprecated
     public static final String COMMAND_ROOT = ".app";
     private final Map<String, Action> actions = new HashMap<String, Action>();
     private final Map<String, String> parameters = new HashMap<String, String>();
@@ -93,37 +107,37 @@ public class Dispatcher {
     private final Encoder encoder = new SimpleEncoder();
     private boolean showUnshownMessages;
 
-    public void process(final RequestContext context, final String servletPath) {
+    public void process(final Request request, final Response response, final String servletPath) {
         LOG.debug("processing request " + servletPath);
-        final AuthenticationSession session = UserManager.startRequest(context);
-        LOG.debug("exsiting session: " + session);
+        final AuthenticationSession session = UserManager.startRequest(request.getSession());
+        LOG.debug("  using session: " + session);
         
-        String language = (String) context.getVariable("user-language");
+        String language = (String) request.getVariable("user-language");
         if (language != null) {
             Locale locale = Util.locale(language);
-            TimeZone timeZone = Util.timeZone((String) context.getVariable("user-time-zone"));
+            TimeZone timeZone = Util.timeZone((String) request.getVariable("user-time-zone"));
             IsisContext.getUserProfile().setLocalization(new UserLocalization(locale, timeZone));
          } 
         
         IsisContext.getPersistenceSession().getTransactionManager().startTransaction();
-        context.setRequestPath(servletPath);
-        context.startRequest();
+        request.setRequestPath(servletPath);
+        request.startRequest();
 
         try {
-            processActions(context, false, servletPath);
-            processTheView(context);
+            processActions(request, false, servletPath);
+            processTheView(request);
         } catch (final ScimpiNotFoundException e) {
-            if (context.isInternalRequest()) {
+            if (request.isInternalRequest()) {
                 LOG.error("invalid page request (from within application): " + e.getMessage());
                 ErrorCollator error = new ErrorCollator(); 
                 error.missingFile("Failed to find page " + servletPath + "."); 
-                show500ErrorPage(context, e, error);             
+                show500ErrorPage(request, e, error);             
             } else {
                 LOG.info("invalid page request (from outside application): " + e.getMessage());
-                show404ErrorPage(context, servletPath); 
+                show404ErrorPage(request, servletPath); 
             }
         } catch (final NotLoggedInException e) {
-            redirectToLoginPage(context); 
+            redirectToLoginPage(request); 
         } catch (final Throwable e) {
             ErrorCollator error = new ErrorCollator();
             final PersistenceSession checkSession = IsisContext.getPersistenceSession();
@@ -136,25 +150,25 @@ public class Dispatcher {
             final Throwable ex = e instanceof TagProcessingException ? e.getCause() : e;
             if (ex instanceof ForbiddenException) {
                 LOG.error("invalid access to " + servletPath, e);
-                show403ErrorPage(context, error, e, ex);
+                show403ErrorPage(request, error, e, ex);
             } else {
                 LOG.error("error procesing " + servletPath, e);
-                if (context.getErrorMessage() != null) {
-                    fallbackToSimpleErrorPage(context, e);
+                if (request.getErrorMessage() != null) {
+                    fallbackToSimpleErrorPage(request, e);
                 } else {
-                    show500ErrorPage(context, e, error);
+                    show500ErrorPage(request, e, error);
                 }
             }
         } finally {
             try {
-                UserManager.endRequest(context.getSession());
+                UserManager.endRequest(request.getSession());
             } catch (final Exception e1) {
                 LOG.error("endRequest call failed", e1);
             }
         }
     }
 
-    private void redirectToLoginPage(final RequestContext context) {
+    private void redirectToLoginPage(final Request context) {
         IsisContext.getMessageBroker().addWarning(
             "You are not currently logged in! Please log in so you can continue.");
         context.setRequestPath("/login.shtml");
@@ -165,13 +179,13 @@ public class Dispatcher {
         }
     }
 
-    private void show404ErrorPage(final RequestContext context, final String servletPath) {
+    private void show404ErrorPage(final Request context, final String servletPath) {
         ErrorCollator error = new ErrorCollator();
         error.missingFile("Failed to find page " + servletPath + ".");
         context.raiseError(404, error);
     }
 
-    private void show403ErrorPage(final RequestContext context, ErrorCollator error, final Throwable e, final Throwable ex) {
+    private void show403ErrorPage(final Request context, ErrorCollator error, final Throwable e, final Throwable ex) {
         DebugBuilder debug = error.getDebug();
         error.message(e);
         error.message(ex);
@@ -195,13 +209,13 @@ public class Dispatcher {
         context.raiseError(403, error);
     }
 
-    private void show500ErrorPage(final RequestContext context, final Throwable e, ErrorCollator error) {
+    private void show500ErrorPage(final Request context, final Throwable e, ErrorCollator error) {
         error.exception(e);
         error.compileError(context);
         context.raiseError(500, error);
     }
 
-    private void fallbackToSimpleErrorPage(final RequestContext context, final Throwable e) {
+    private void fallbackToSimpleErrorPage(final Request context, final Throwable e) {
         context.setContentType("text/html");
         final PrintWriter writer = context.getWriter();
         writer.write("<html><head><title>Error</title></head>");
@@ -213,7 +227,7 @@ public class Dispatcher {
         LOG.error("Error while processing error", e);
     }
 
-    protected void processTheView(final RequestContext context) throws IOException {
+    protected void processTheView(final Request context) throws IOException {
         IsisTransactionManager transactionManager = IsisContext.getPersistenceSession().getTransactionManager();
         if (transactionManager.getTransaction().getState().canFlush()) {
             transactionManager.flushTransaction();
@@ -239,7 +253,7 @@ public class Dispatcher {
         return parameters.get(name);
     }
 
-    private void processActions(final RequestContext context, final boolean userLoggedIn, final String actionName) throws IOException {
+    private void processActions(final Request context, final boolean userLoggedIn, final String actionName) throws IOException {
         if (actionName.endsWith(COMMAND_ROOT)) {
             final int pos = actionName.lastIndexOf('/');
             final Action action = actions.get(actionName.substring(pos, actionName.length() - COMMAND_ROOT.length()));
@@ -256,7 +270,7 @@ public class Dispatcher {
         }
     }
 
-    private void processView(final RequestContext context) throws IOException {
+    private void processView(final Request context) throws IOException {
         String file = context.getRequestedFile();
         if (file == null) {
             LOG.warn("No view specified to process");
@@ -274,10 +288,10 @@ public class Dispatcher {
 
         context.addVariable("title", "Untitled Page", Scope.REQUEST);
         final Stack<Snippet> tags = loadPageTemplate(context, fullPath);
-        final Request request = new Request(file, context, encoder, tags, processors);
-        request.appendDebug("processing " + fullPath);
+        final TagProcessor tagProcessor = new TagProcessor(file, context, encoder, tags, processors);
+        tagProcessor.appendDebug("processing " + fullPath);
         try {
-            request.processNextTag();
+            tagProcessor.processNextTag();
             noteIfMessagesHaveNotBeenDisplay(context);
             IsisContext.getUpdateNotifier().clear();
         } catch (final RuntimeException e) {
@@ -286,7 +300,7 @@ public class Dispatcher {
             IsisContext.getUpdateNotifier().clear();
             throw e;
         }
-        final String page = request.popBuffer();
+        final String page = tagProcessor.popBuffer();
         final PrintWriter writer = context.getWriter();
         writer.write(page);
         if (context.getDebug() == Debug.PAGE) {
@@ -295,7 +309,7 @@ public class Dispatcher {
         }
     }
 
-    public void noteIfMessagesHaveNotBeenDisplay(final RequestContext context) {
+    public void noteIfMessagesHaveNotBeenDisplay(final Request context) {
         final List<String> messages = IsisContext.getMessageBroker().getMessages();
         if (showUnshownMessages) {
             if (messages.size() > 0) {
@@ -316,43 +330,43 @@ public class Dispatcher {
         }
     }
 
-    private String determineFile(final RequestContext context, String file) {
+    private String determineFile(final Request context, String file) {
         final String fileName = file.trim();
-        if (fileName.startsWith(GENERIC)) {
-            final Object result = context.getVariable(RequestContext.RESULT);
+        if (fileName.startsWith(Names.GENERIC)) {
+            final Object result = context.getVariable(Names.RESULT);
             final ObjectAdapter mappedObject = MethodsUtils.findObject(context, (String) result);
             if (mappedObject == null) {
                 throw new ScimpiException("No object mapping for " + result);
             }
-            if (fileName.equals(GENERIC + "." + EXTENSION)) {
+            if (fileName.equals(Names.GENERIC + "." + Names.EXTENSION)) {
                 final Facet facet = mappedObject.getSpecification().getFacet(CollectionFacet.class);
                 if (facet != null) {
                     final ObjectSpecification specification = mappedObject.getSpecification();
                     final TypeOfFacet facet2 = specification.getFacet(TypeOfFacet.class);
-                    file = findFileForSpecification(context, facet2.valueSpec(), "collection", EXTENSION);
+                    file = findFileForSpecification(context, facet2.valueSpec(), "collection", Names.EXTENSION);
                 } else {
                     final ObjectAdapter mappedObject2 = mappedObject;
                     if (mappedObject2.isTransient()) {
-                        file = findFileForSpecification(context, mappedObject.getSpecification(), "edit", EXTENSION);
+                        file = findFileForSpecification(context, mappedObject.getSpecification(), "edit", Names.EXTENSION);
                     } else {
-                        file = findFileForSpecification(context, mappedObject.getSpecification(), "object", EXTENSION);
+                        file = findFileForSpecification(context, mappedObject.getSpecification(), "object", Names.EXTENSION);
                     }
                 }
-            } else if (fileName.equals(GENERIC + EDIT + "." + EXTENSION)) {
-                file = findFileForSpecification(context, mappedObject.getSpecification(), "edit", EXTENSION);
-            } else if (fileName.equals(GENERIC + ACTION + "." + EXTENSION)) {
+            } else if (fileName.equals(Names.GENERIC + Names.EDIT + "." + Names.EXTENSION)) {
+                file = findFileForSpecification(context, mappedObject.getSpecification(), "edit", Names.EXTENSION);
+            } else if (fileName.equals(Names.GENERIC + Names.ACTION + "." + Names.EXTENSION)) {
                 final String method = context.getParameter("method");
-                file = findFileForSpecification(context, mappedObject.getSpecification(), method, "action", EXTENSION);
+                file = findFileForSpecification(context, mappedObject.getSpecification(), method, "action", Names.EXTENSION);
             }
         }
         return file;
     }
 
-    private String findFileForSpecification(final RequestContext context, final ObjectSpecification specification, final String name, final String extension) {
+    private String findFileForSpecification(final Request context, final ObjectSpecification specification, final String name, final String extension) {
         return findFileForSpecification(context, specification, name, name, extension);
     }
 
-    private String findFileForSpecification(final RequestContext context, final ObjectSpecification specification, final String name, final String defaultName, final String extension) {
+    private String findFileForSpecification(final Request context, final ObjectSpecification specification, final String name, final String defaultName, final String extension) {
 
         String find = findFile(context, specification, name, extension);
         if (find == null) {
@@ -361,7 +375,7 @@ public class Dispatcher {
         return find;
     }
 
-    private String findFile(final RequestContext context, final ObjectSpecification specification, final String name, final String extension) {
+    private String findFile(final Request context, final ObjectSpecification specification, final String name, final String extension) {
         final String className = specification.getShortIdentifier();
         String fileName = context.findFile("/" + className + "/" + name + "." + extension);
         if (fileName == null) {
@@ -379,14 +393,14 @@ public class Dispatcher {
         return fileName;
     }
 
-    private Stack<Snippet> loadPageTemplate(final RequestContext context, final String path) throws IOException, FileNotFoundException {
+    private Stack<Snippet> loadPageTemplate(final Request context, final String path) throws IOException, FileNotFoundException {
         // TODO cache stacks and check for them first
         copyParametersToVariableList(context);
         LOG.debug("parsing source " + path);
         return parser.parseHtmlFile(path, context);
     }
 
-    private void copyParametersToVariableList(final RequestContext context) {
+    private void copyParametersToVariableList(final Request context) {
         /*
          * Enumeration parameterNames = context.getParameterNames(); while
          * (parameterNames.hasMoreElements()) { String name = (String)
@@ -418,7 +432,7 @@ public class Dispatcher {
             }
         }
 
-        processors.init();
+        AddElementProcessors.init(processors);
         processors.addElementProcessor(new org.apache.isis.viewer.scimpi.dispatcher.view.debug.Debug(this));
         
         showUnshownMessages = IsisContext.getConfiguration().getBoolean(SHOW_UNSHOWN_MESSAGES, true);
@@ -463,7 +477,7 @@ public class Dispatcher {
         action.init();
     }
 
-    public void debug(final DebugBuilder debug) {
+    public void debugData(final DebugBuilder debug) {
         debug.startSection("Actions");
         final Set<String> keySet = actions.keySet();
         final ArrayList<String> list = new ArrayList<String>(keySet);

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementContentProcessor.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementContentProcessor.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementContentProcessor.java
deleted file mode 100644
index eaae2ac..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementContentProcessor.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-public interface ElementContentProcessor extends ElementProcessor {
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementProcessor.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementProcessor.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementProcessor.java
deleted file mode 100644
index 471ac00..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ElementProcessor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
-
-public interface ElementProcessor {
-
-    String getName();
-
-    void process(Request request);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ErrorCollator.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ErrorCollator.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ErrorCollator.java
deleted file mode 100644
index 4c162a2..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ErrorCollator.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.PrintWriter;
-import java.util.List;
-
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-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.DebugTee;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
-import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugHtmlWriter;
-import org.apache.log4j.Logger;
-
-public class ErrorCollator {
-    private static final Logger LOG = Logger.getLogger(ErrorCollator.class);
-
-    private String errorRef;
-    private String message;
-    private final DebugString debugText = new DebugString();
-    private final DebugHtmlString debugHtml = new DebugHtmlString();
-    private final DebugBuilder debug = new DebugTee(debugText, debugHtml);
- 
-    public void missingFile(String message) {
-        this.message = message;
-    }
-
-    public void message(final Throwable exception) {
-        LOG.debug(exception.getMessage(), exception);
-        message = exception.getMessage();
-        debug.appendPreformatted(message);
-    }
-
-    public void exception(final Throwable exception) {
-        String messageText = exception.getMessage(); 
-        LOG.debug(messageText, exception); 
-        try {
-            debug.startSection("Exception");
-            debug.appendException(exception);
-            debug.endSection();
-        } catch (final RuntimeException e) {
-            debug.appendln("NOTE - an exception occurred while dumping an exception!");
-            debug.appendException(e);
-        }
-        message = messageText == null ? exception.getClass().getName() : messageText; 
-    }
-        
-    public DebugBuilder getDebug() {
-        return debug;
-    }
-    
-    public void compileError(final RequestContext requestContext) {
-        errorRef = Long.toString(System.currentTimeMillis(), 36).toUpperCase();
-        LOG.info("error " + errorRef);
-
-        captureWarningsAndMessages();
-        dumpDebugDetails(requestContext);
-        writeErrorFile();
-    }
-
-    private void captureWarningsAndMessages() {
-        // Capture warnings/messages
-        if (IsisContext.getCurrentTransaction() != null) {
-            final List<String> messages = IsisContext.getMessageBroker().getMessages();
-            final List<String> warnings = IsisContext.getMessageBroker().getWarnings();
-            if (messages.size() > 0 || messages.size() > 0) {
-                debug.startSection("Warnings/Messages");
-                for (final String message : messages) {
-                    debug.appendln("message", message);
-                }
-                for (final String message : warnings) {
-                    debug.appendln("warning", message);
-                }
-            }
-        }
-    }
-
-    private void dumpDebugDetails(final RequestContext requestContext) {
-        // Dump page debug details 
-        requestContext.append(debug);
-
-        debug.startSection("Processing Trace");
-        debug.appendPreformatted(requestContext.getDebugTrace());
-        debug.endSection();
-        debug.close();
-    }
-
-    private void writeErrorFile() {
-        LOG.error(message + "\n" + debugText.toString());
-        
-        
-        PrintWriter writer;
-        try {
-            final String directory =
-                IsisContext.getConfiguration().getString(ConfigurationConstants.ROOT + "scimpi.error-snapshots", ".");
-            File dir = new File(directory);
-            if (!dir.exists()) {
-                dir.mkdirs();
-            }
-            writer = new PrintWriter(new File(dir, "error_" + errorRef + ".html"));
-            final DebugHtmlWriter writer2 = new DebugHtmlWriter(writer, true);
-            writer2.concat(debugHtml);
-            writer2.close();
-            writer.close();
-        } catch (final FileNotFoundException e) {
-            LOG.error("Failed to archive error page", e);
-        }
-    }
-
-    public String getReference() {
-        return errorRef;
-    }
-    
-    public String getDetails() {
-        return debugHtml.toString();
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    
-}
-

http://git-wip-us.apache.org/repos/asf/isis/blob/49518c89/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java
deleted file mode 100644
index 32d0c0c..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-import java.util.List;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-
-/**
- * Indicates that request could not complete as it could not access (for
- * security reasons) some of the content.
- */
-public class ForbiddenException extends ScimpiException {
-    private static final long serialVersionUID = 1L;
-    public static final boolean VISIBLE_AND_USABLE = true;
-    public static final boolean VISIBLE = false;
-    private final Identifier identifier;
-    private final AuthenticationSession session;
-
-    public ForbiddenException(final String message) {
-        this(IsisContext.getAuthenticationSession(), message);
-    }
-
-    private ForbiddenException(final AuthenticationSession session, final String message) {
-        super(message + " for " + session.getUserName() + " " + session.getRoles());
-        this.session = session;
-        identifier = null;
-    }
-
-    public ForbiddenException(final IdentifiedHolder target, final boolean isVisibleAndUsabable) {
-        this(target.getIdentifier(), IsisContext.getAuthenticationSession(), isVisibleAndUsabable);
-    }
-
-    private ForbiddenException(final Identifier identifier, final AuthenticationSession session, final boolean isVisibleAndUsabable) {
-        super((identifier.getType() == Identifier.Type.PROPERTY_OR_COLLECTION ? "Field" : "Action") + " '" + identifier.getMemberName() + "' in " + identifier.getClassName() + " is not " + (isVisibleAndUsabable ? "visible/usable " : "visible") + " for " + session.getUserName() + " "
-                + session.getRoles());
-        this.identifier = identifier;
-        this.session = session;
-    }
-
-    public Identifier getIdentifier() {
-        return identifier;
-    }
-
-    public List<String> getRoles() {
-        return session.getRoles();
-    }
-}