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

[24/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/7700b437
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/7700b437
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/7700b437

Branch: refs/heads/scimpi-restructure
Commit: 7700b4371c740cb3ac84a808e32ed408721b1361
Parents: 49518c8
Author: rmatthews <rm...@nakedobjects.org>
Authored: Thu Jan 31 21:53:13 2013 +0000
Committer: rmatthews <rm...@nakedobjects.org>
Committed: Sun Mar 24 17:43:06 2013 +0000

----------------------------------------------------------------------
 component/viewer/scimpi/dispatcher/pom.xml         |    2 +-
 .../apache/isis/viewer/scimpi/ScimpiContext.java   |   38 +
 .../scimpi/dispatcher/AddElementProcessors.java    |  215 ------
 .../isis/viewer/scimpi/dispatcher/Dispatcher.java  |   42 +-
 .../isis/viewer/scimpi/dispatcher/LocaleUtil.java  |  101 +++
 .../dispatcher/PreinstallElementProcessors.java    |  215 ++++++
 .../isis/viewer/scimpi/dispatcher/Response.java    |    6 -
 .../scimpi/dispatcher/RuntimeScimpiContext.java    |   17 +
 .../scimpi/dispatcher/ScimpiNotFoundException.java |   43 --
 .../scimpi/dispatcher/TagOrderException.java       |   32 -
 .../apache/isis/viewer/scimpi/dispatcher/Util.java |  105 ---
 .../scimpi/dispatcher/action/ActionAction.java     |    4 +-
 .../scimpi/dispatcher/action/DebugUserAction.java  |    2 +-
 .../scimpi/dispatcher/action/EditAction.java       |    4 +-
 .../scimpi/dispatcher/action/LogonAction.java      |    6 +-
 .../scimpi/dispatcher/action/LogoutAction.java     |    4 +-
 .../scimpi/dispatcher/context/DebugUsers.java      |   97 +++
 .../viewer/scimpi/dispatcher/context/Request.java  |    7 +-
 .../scimpi/dispatcher/context/RequestState.java    |   47 ++
 .../viewer/scimpi/dispatcher/context/Response.java |    6 +
 .../context/ScimpiNotFoundException.java           |   43 ++
 .../scimpi/dispatcher/debug/DebugUsersView.java    |   50 --
 .../scimpi/dispatcher/debug/ErrorDetails.java      |   35 -
 .../scimpi/dispatcher/debug/ErrorMessage.java      |   35 -
 .../scimpi/dispatcher/debug/ErrorReference.java    |   35 -
 .../scimpi/dispatcher/form/FieldEditState.java     |   57 ++
 .../viewer/scimpi/dispatcher/form/FormState.java   |   67 ++
 .../scimpi/dispatcher/processor/Attributes.java    |  132 ----
 .../scimpi/dispatcher/processor/BlockContent.java  |    5 +
 .../processor/ElementContentProcessor.java         |   25 -
 .../dispatcher/processor/ElementProcessor.java     |   13 +-
 .../processor/ElementProcessorLookup.java          |   57 ++
 .../scimpi/dispatcher/processor/Encoder.java       |   26 -
 .../scimpi/dispatcher/processor/HtmlEncoder.java   |   26 +
 .../dispatcher/processor/HtmlFileParser.java       |    8 +-
 .../dispatcher/processor/ProcessorLookup.java      |   50 --
 .../scimpi/dispatcher/processor/SimpleEncoder.java |   32 -
 .../scimpi/dispatcher/processor/Snippet.java       |    4 +
 .../viewer/scimpi/dispatcher/processor/SwfTag.java |   10 +-
 .../scimpi/dispatcher/processor/TagAttributes.java |  137 ++++
 .../dispatcher/processor/TagOrderException.java    |   31 +
 .../processor/TagProcessingException.java          |   59 --
 .../scimpi/dispatcher/processor/TagProcessor.java  |  317 --------
 .../processor/TemplateProcessingException.java     |   59 ++
 .../dispatcher/processor/TemplateProcessor.java    |  318 ++++++++
 .../dispatcher/structure/FieldEditState.java       |   57 --
 .../scimpi/dispatcher/structure/FormState.java     |   67 --
 .../scimpi/dispatcher/util/MethodsUtils.java       |    3 +-
 .../viewer/scimpi/dispatcher/util/UserManager.java |   89 +++
 .../dispatcher/view/AbstractElementProcessor.java  |   19 +-
 .../dispatcher/view/AbstractObjectProcessor.java   |   15 +-
 .../dispatcher/view/action/ActionButton.java       |  109 ++--
 .../dispatcher/view/action/ActionContent.java      |    6 +-
 .../scimpi/dispatcher/view/action/ActionForm.java  |  254 +------
 .../scimpi/dispatcher/view/action/ActionLink.java  |   53 +-
 .../scimpi/dispatcher/view/action/ActionName.java  |   48 ++
 .../view/action/CreateFormParameter.java           |   43 --
 .../scimpi/dispatcher/view/action/Methods.java     |  193 -----
 .../dispatcher/view/action/NewActionLink.java      |   63 ++
 .../scimpi/dispatcher/view/action/Parameter.java   |   15 +-
 .../dispatcher/view/action/ParameterName.java      |   63 ++
 .../scimpi/dispatcher/view/action/RunAction.java   |   23 +-
 .../scimpi/dispatcher/view/action/Services.java    |   67 --
 .../view/collection/AbstractTableView.java         |  150 ++++
 .../dispatcher/view/collection/Collection.java     |   27 +-
 .../dispatcher/view/collection/CountElements.java  |   54 ++
 .../dispatcher/view/collection/ElementType.java    |   62 ++
 .../dispatcher/view/collection/ListView.java       |   93 +++
 .../dispatcher/view/collection/RemoveElement.java  |  144 ++++
 .../dispatcher/view/collection/TableBlock.java     |   86 +++
 .../dispatcher/view/collection/TableBuilder.java   |   92 +++
 .../dispatcher/view/collection/TableCell.java      |   96 +++
 .../view/collection/TableContentWriter.java        |   39 +
 .../dispatcher/view/collection/TableEmpty.java     |   54 ++
 .../dispatcher/view/collection/TableHeader.java    |   40 +
 .../dispatcher/view/collection/TableRow.java       |   50 ++
 .../dispatcher/view/collection/TableView.java      |  328 +++++++++
 .../view/control/AbstractConditionalBlock.java     |  563 +++++++++++++++
 .../scimpi/dispatcher/view/control/Forward.java    |   38 +
 .../scimpi/dispatcher/view/control/Redirect.java   |   38 +
 .../scimpi/dispatcher/view/control/Unless.java     |   41 +
 .../scimpi/dispatcher/view/control/When.java       |   41 +
 .../viewer/scimpi/dispatcher/view/debug/Debug.java |  157 ++--
 .../dispatcher/view/debug/DebugAccessCheck.java    |    7 +-
 .../dispatcher/view/debug/DebugCollectionView.java |   31 +-
 .../dispatcher/view/debug/DebugObjectView.java     |   66 +-
 .../dispatcher/view/debug/DebugUsersView.java      |   51 ++
 .../scimpi/dispatcher/view/debug/DebuggerLink.java |   26 +-
 .../scimpi/dispatcher/view/debug/Diagnostics.java  |   53 +-
 .../viewer/scimpi/dispatcher/view/debug/Log.java   |   13 +-
 .../scimpi/dispatcher/view/debug/LogLevel.java     |   27 +-
 .../scimpi/dispatcher/view/debug/Members.java      |   39 +-
 .../scimpi/dispatcher/view/debug/ShowDebug.java    |   11 +-
 .../dispatcher/view/debug/Specification.java       |   51 +-
 .../dispatcher/view/debug/ThrowException.java      |    9 +-
 .../scimpi/dispatcher/view/determine/Exclude.java  |   40 +
 .../scimpi/dispatcher/view/determine/Include.java  |   40 +
 .../dispatcher/view/determine/InclusionList.java   |   80 ++
 .../scimpi/dispatcher/view/determine/Link.java     |   45 ++
 .../view/determine/LinkedFieldsBlock.java          |   47 ++
 .../dispatcher/view/determine/LinkedObject.java    |   58 ++
 .../dispatcher/view/display/AbstractFormView.java  |  142 ----
 .../dispatcher/view/display/AbstractTableView.java |  149 ----
 .../scimpi/dispatcher/view/display/AddMessage.java |   44 --
 .../scimpi/dispatcher/view/display/AddWarning.java |   44 --
 .../scimpi/dispatcher/view/display/Errors.java     |   65 --
 .../scimpi/dispatcher/view/display/Feedback.java   |   46 --
 .../scimpi/dispatcher/view/display/FieldLabel.java |   77 --
 .../scimpi/dispatcher/view/display/FieldValue.java |  118 ---
 .../scimpi/dispatcher/view/display/GetField.java   |  103 ---
 .../dispatcher/view/display/IncludeObject.java     |  107 ---
 .../scimpi/dispatcher/view/display/ListView.java   |   93 ---
 .../dispatcher/view/display/LongFormView.java      |   85 ---
 .../scimpi/dispatcher/view/display/Messages.java   |   60 --
 .../dispatcher/view/display/SelectedObject.java    |   55 --
 .../dispatcher/view/display/ShortFormView.java     |   36 -
 .../scimpi/dispatcher/view/display/TableBlock.java |   86 ---
 .../dispatcher/view/display/TableBuilder.java      |   92 ---
 .../scimpi/dispatcher/view/display/TableCell.java  |   95 ---
 .../view/display/TableContentWriter.java           |   39 -
 .../scimpi/dispatcher/view/display/TableEmpty.java |   53 --
 .../dispatcher/view/display/TableHeader.java       |   39 -
 .../scimpi/dispatcher/view/display/TableRow.java   |   49 --
 .../scimpi/dispatcher/view/display/TableView.java  |  329 ---------
 .../scimpi/dispatcher/view/display/Title.java      |   68 --
 .../scimpi/dispatcher/view/display/Warnings.java   |   59 --
 .../scimpi/dispatcher/view/edit/EditObject.java    |  320 --------
 .../scimpi/dispatcher/view/field/ExcludeField.java |   39 -
 .../scimpi/dispatcher/view/field/IncludeField.java |   39 -
 .../dispatcher/view/field/InclusionList.java       |   89 ---
 .../scimpi/dispatcher/view/field/LinkField.java    |   44 --
 .../dispatcher/view/field/LinkedFieldsBlock.java   |   47 --
 .../scimpi/dispatcher/view/field/LinkedObject.java |   58 --
 .../dispatcher/view/form/ActionFormAbstract.java   |  223 ++++++
 .../dispatcher/view/form/CreateFormParameter.java  |   43 ++
 .../dispatcher/view/form/EditFormAbstract.java     |  171 +++++
 .../scimpi/dispatcher/view/form/FieldFactory.java  |  104 +++
 .../scimpi/dispatcher/view/form/FormEntry.java     |   45 ++
 .../scimpi/dispatcher/view/form/FormField.java     |   45 ++
 .../dispatcher/view/form/FormFieldBlock.java       |   67 ++
 .../scimpi/dispatcher/view/form/HiddenField.java   |   49 ++
 .../dispatcher/view/form/HtmlFormBuilder.java      |   91 ++--
 .../dispatcher/view/form/LogonFormAbstract.java    |   86 +++
 .../dispatcher/view/form/RadioListField.java       |   71 ++
 .../scimpi/dispatcher/view/form/Selector.java      |  157 ++++
 .../scimpi/dispatcher/view/form/SimpleButton.java  |   40 +
 .../scimpi/dispatcher/view/global/Commit.java      |   46 ++
 .../scimpi/dispatcher/view/global/Methods.java     |  197 +++++
 .../scimpi/dispatcher/view/global/Services.java    |   68 ++
 .../dispatcher/view/localization/Localization.java |   65 ++
 .../view/localization/SetLocalization.java         |   65 ++
 .../scimpi/dispatcher/view/logon/Logoff.java       |   38 -
 .../viewer/scimpi/dispatcher/view/logon/Logon.java |  124 ----
 .../dispatcher/view/logon/RestrictAccess.java      |   41 -
 .../scimpi/dispatcher/view/logon/Secure.java       |   45 --
 .../viewer/scimpi/dispatcher/view/logon/User.java  |   77 --
 .../scimpi/dispatcher/view/message/AddMessage.java |   45 ++
 .../scimpi/dispatcher/view/message/AddWarning.java |   45 ++
 .../dispatcher/view/message/ErrorDetails.java      |   36 +
 .../dispatcher/view/message/ErrorMessage.java      |   37 +
 .../dispatcher/view/message/ErrorReference.java    |   36 +
 .../scimpi/dispatcher/view/message/Errors.java     |   66 ++
 .../scimpi/dispatcher/view/message/Feedback.java   |   47 ++
 .../scimpi/dispatcher/view/message/Messages.java   |   61 ++
 .../scimpi/dispatcher/view/message/Warnings.java   |   60 ++
 .../scimpi/dispatcher/view/object/EditLink.java    |   71 ++
 .../scimpi/dispatcher/view/object/EditObject.java  |  171 +++++
 .../scimpi/dispatcher/view/object/FieldLabel.java  |   78 ++
 .../scimpi/dispatcher/view/object/FieldName.java   |   66 ++
 .../scimpi/dispatcher/view/object/FieldValue.java  |  119 +++
 .../scimpi/dispatcher/view/object/GetField.java    |  104 +++
 .../dispatcher/view/object/IncludeObject.java      |  108 +++
 .../dispatcher/view/object/LinkAbstract.java       |  122 ++++
 .../dispatcher/view/object/LongViewForm.java       |   87 +++
 .../scimpi/dispatcher/view/object/ObjectLink.java  |   68 ++
 .../dispatcher/view/object/SelectedObject.java     |   56 ++
 .../dispatcher/view/object/ShortViewForm.java      |   36 +
 .../scimpi/dispatcher/view/object/Title.java       |   69 ++
 .../scimpi/dispatcher/view/object/TitleString.java |   69 ++
 .../viewer/scimpi/dispatcher/view/object/Type.java |   58 ++
 .../dispatcher/view/object/ViewFormAbstract.java   |  142 ++++
 .../scimpi/dispatcher/view/other/HelpLink.java     |   13 +-
 .../scimpi/dispatcher/view/other/History.java      |   45 +-
 .../dispatcher/view/other/VersionNumber.java       |    9 +-
 .../dispatcher/view/security/EndSession.java       |   37 +
 .../scimpi/dispatcher/view/security/Logoff.java    |   39 +
 .../scimpi/dispatcher/view/security/Logon.java     |   51 ++
 .../dispatcher/view/security/RestrictAccess.java   |   42 ++
 .../scimpi/dispatcher/view/security/Secure.java    |   46 ++
 .../dispatcher/view/security/StartSession.java     |   37 +
 .../scimpi/dispatcher/view/security/User.java      |   78 ++
 .../view/simple/AbstractConditionalBlock.java      |  562 --------------
 .../dispatcher/view/simple/AbstractLink.java       |  121 ---
 .../scimpi/dispatcher/view/simple/BlockDefine.java |   42 --
 .../scimpi/dispatcher/view/simple/BlockUse.java    |   46 --
 .../scimpi/dispatcher/view/simple/Commit.java      |   45 --
 .../scimpi/dispatcher/view/simple/ContentTag.java  |   36 -
 .../scimpi/dispatcher/view/simple/CookieValue.java |   46 --
 .../dispatcher/view/simple/DefaultValue.java       |   52 --
 .../scimpi/dispatcher/view/simple/EditLink.java    |   71 --
 .../scimpi/dispatcher/view/simple/EndSession.java  |   36 -
 .../scimpi/dispatcher/view/simple/Forward.java     |   37 -
 .../scimpi/dispatcher/view/simple/GetCookie.java   |   39 -
 .../scimpi/dispatcher/view/simple/Import.java      |   37 -
 .../view/simple/InitializeFromCookie.java          |   81 --
 .../view/simple/InitializeFromResult.java          |   78 --
 .../dispatcher/view/simple/Localization.java       |   64 --
 .../viewer/scimpi/dispatcher/view/simple/Mark.java |   43 --
 .../dispatcher/view/simple/NewActionLink.java      |   62 --
 .../scimpi/dispatcher/view/simple/ObjectLink.java  |   68 --
 .../scimpi/dispatcher/view/simple/PageTitle.java   |   35 -
 .../scimpi/dispatcher/view/simple/Redirect.java    |   37 -
 .../dispatcher/view/simple/RemoveElement.java      |  143 ----
 .../scimpi/dispatcher/view/simple/ScopeTag.java    |   51 --
 .../scimpi/dispatcher/view/simple/SetCookie.java   |   53 --
 .../dispatcher/view/simple/SetCookieFromField.java |   55 --
 .../dispatcher/view/simple/SetFieldFromCookie.java |   52 --
 .../dispatcher/view/simple/SetLocalization.java    |   64 --
 .../dispatcher/view/simple/SimpleButton.java       |   39 -
 .../dispatcher/view/simple/StartSession.java       |   36 -
 .../scimpi/dispatcher/view/simple/TemplateTag.java |   40 -
 .../scimpi/dispatcher/view/simple/Unless.java      |   41 -
 .../scimpi/dispatcher/view/simple/Variable.java    |   64 --
 .../viewer/scimpi/dispatcher/view/simple/When.java |   41 -
 .../dispatcher/view/structure/BlockDefine.java     |   43 ++
 .../scimpi/dispatcher/view/structure/BlockUse.java |   47 ++
 .../dispatcher/view/structure/ContentTag.java      |   40 +
 .../scimpi/dispatcher/view/structure/Import.java   |   38 +
 .../scimpi/dispatcher/view/structure/Mark.java     |   44 ++
 .../dispatcher/view/structure/TemplateTag.java     |   44 ++
 .../scimpi/dispatcher/view/value/ActionName.java   |   47 --
 .../dispatcher/view/value/CountElements.java       |   54 --
 .../scimpi/dispatcher/view/value/ElementType.java  |   61 --
 .../scimpi/dispatcher/view/value/FieldName.java    |   65 --
 .../dispatcher/view/value/ParameterName.java       |   62 --
 .../scimpi/dispatcher/view/value/TitleString.java  |   68 --
 .../viewer/scimpi/dispatcher/view/value/Type.java  |   57 --
 .../dispatcher/view/variable/ChangeScope.java      |   52 ++
 .../dispatcher/view/variable/CookieValue.java      |   47 ++
 .../dispatcher/view/variable/DefaultValue.java     |   53 ++
 .../scimpi/dispatcher/view/variable/GetCookie.java |   40 +
 .../view/variable/InitializeFromCookie.java        |   82 +++
 .../view/variable/InitializeFromResult.java        |   79 ++
 .../scimpi/dispatcher/view/variable/PageTitle.java |   36 +
 .../scimpi/dispatcher/view/variable/SetCookie.java |   54 ++
 .../view/variable/SetCookieFromField.java          |   56 ++
 .../view/variable/SetFieldFromCookie.java          |   53 ++
 .../scimpi/dispatcher/view/variable/Variable.java  |   65 ++
 .../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 ---
 .../dispatcher/view/ElementProcessorTest.java      |   61 ++
 .../scimpi/dispatcher/view/TestRequestState.java   |   32 +
 .../dispatcher/view/message/ErrorMessageTest.java  |   42 ++
 component/viewer/scimpi/pom.xml                    |    2 +-
 component/viewer/scimpi/servlet/pom.xml            |    2 +-
 .../viewer/scimpi/servlet/DispatcherServlet.java   |    6 +-
 .../scimpi/servlet/ServletRequestContext.java      |    4 +-
 264 files changed, 9256 insertions(+), 8899 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/pom.xml b/component/viewer/scimpi/dispatcher/pom.xml
index 44ed076..7c5d950 100644
--- a/component/viewer/scimpi/dispatcher/pom.xml
+++ b/component/viewer/scimpi/dispatcher/pom.xml
@@ -23,7 +23,7 @@
 	<parent>
         <groupId>org.apache.isis.viewer</groupId>
 	    <artifactId>isis-viewer-scimpi</artifactId>
-		<version>1.0.0-SNAPSHOT</version>
+		<version>1.0.0-restructure-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>isis-viewer-scimpi-dispatcher</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiContext.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiContext.java
new file mode 100644
index 0000000..9e1395e
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/ScimpiContext.java
@@ -0,0 +1,38 @@
+/*
+ *  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 org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+
+public interface ScimpiContext {
+
+    static String BASE = ConfigurationConstants.ROOT + "scimpi.";
+
+    /**
+     * Returns the full configuration name for the provided name. This will include the overall isis project
+     * prefix (isis) and the viewer prefix (scimpi). So passing in 'show-icon' will return
+     * 'isis.scimpi.show-icon'.
+     */
+    String configurationName(String name);
+    
+    IsisConfiguration getConfiguration();
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/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
deleted file mode 100644
index ad51add..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/AddElementProcessors.java
+++ /dev/null
@@ -1,215 +0,0 @@
-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/7700b437/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 f5e2e5e..3a87184 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
@@ -54,6 +54,7 @@ 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.ScimpiContext;
 import org.apache.isis.viewer.scimpi.ScimpiException;
 import org.apache.isis.viewer.scimpi.dispatcher.action.ActionAction;
 import org.apache.isis.viewer.scimpi.dispatcher.action.DebugAction;
@@ -64,21 +65,21 @@ 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.DebugUsers;
 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.Response;
+import org.apache.isis.viewer.scimpi.dispatcher.context.ScimpiNotFoundException;
 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.SimpleEncoder;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.ElementProcessorLookup;
 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.processor.TemplateProcessingException;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TemplateProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
-import org.apache.isis.viewer.scimpi.security.DebugUsers;
-import org.apache.isis.viewer.scimpi.security.UserManager;
+import org.apache.isis.viewer.scimpi.dispatcher.util.UserManager;
 import org.apache.log4j.Logger;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
@@ -102,11 +103,16 @@ public class Dispatcher implements Debuggable {
     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>();
-    private final ProcessorLookup processors = new ProcessorLookup();
-    private final HtmlFileParser parser = new HtmlFileParser(processors);
-    private final Encoder encoder = new SimpleEncoder();
+    private final ElementProcessorLookup processors;
+    private final HtmlFileParser parser;
     private boolean showUnshownMessages;
 
+    public Dispatcher() {
+        ScimpiContext context = new RuntimeScimpiContext();
+        processors = new ElementProcessorLookup(context);
+        parser = new HtmlFileParser(processors);
+    }
+    
     public void process(final Request request, final Response response, final String servletPath) {
         LOG.debug("processing request " + servletPath);
         final AuthenticationSession session = UserManager.startRequest(request.getSession());
@@ -114,8 +120,8 @@ public class Dispatcher implements Debuggable {
         
         String language = (String) request.getVariable("user-language");
         if (language != null) {
-            Locale locale = Util.locale(language);
-            TimeZone timeZone = Util.timeZone((String) request.getVariable("user-time-zone"));
+            Locale locale = LocaleUtil.locale(language);
+            TimeZone timeZone = LocaleUtil.timeZone((String) request.getVariable("user-time-zone"));
             IsisContext.getUserProfile().setLocalization(new UserLocalization(locale, timeZone));
          } 
         
@@ -147,7 +153,7 @@ public class Dispatcher implements Debuggable {
                 transactionManager.startTransaction();
             }
 
-            final Throwable ex = e instanceof TagProcessingException ? e.getCause() : e;
+            final Throwable ex = e instanceof TemplateProcessingException ? e.getCause() : e;
             if (ex instanceof ForbiddenException) {
                 LOG.error("invalid access to " + servletPath, e);
                 show403ErrorPage(request, error, e, ex);
@@ -288,10 +294,10 @@ public class Dispatcher implements Debuggable {
 
         context.addVariable("title", "Untitled Page", Scope.REQUEST);
         final Stack<Snippet> tags = loadPageTemplate(context, fullPath);
-        final TagProcessor tagProcessor = new TagProcessor(file, context, encoder, tags, processors);
-        tagProcessor.appendDebug("processing " + fullPath);
+        final TemplateProcessor templateProcessor = new TemplateProcessor(file, context, context, tags, processors);
+        templateProcessor.appendDebug("processing " + fullPath);
         try {
-            tagProcessor.processNextTag();
+            templateProcessor.processNextTag();
             noteIfMessagesHaveNotBeenDisplay(context);
             IsisContext.getUpdateNotifier().clear();
         } catch (final RuntimeException e) {
@@ -300,7 +306,7 @@ public class Dispatcher implements Debuggable {
             IsisContext.getUpdateNotifier().clear();
             throw e;
         }
-        final String page = tagProcessor.popBuffer();
+        final String page = templateProcessor.popBuffer();
         final PrintWriter writer = context.getWriter();
         writer.write(page);
         if (context.getDebug() == Debug.PAGE) {
@@ -432,7 +438,7 @@ public class Dispatcher implements Debuggable {
             }
         }
 
-        AddElementProcessors.init(processors);
+        PreinstallElementProcessors.init(processors);
         processors.addElementProcessor(new org.apache.isis.viewer.scimpi.dispatcher.view.debug.Debug(this));
         
         showUnshownMessages = IsisContext.getConfiguration().getBoolean(SHOW_UNSHOWN_MESSAGES, true);

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/LocaleUtil.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/LocaleUtil.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/LocaleUtil.java
new file mode 100644
index 0000000..3c4e08d
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/LocaleUtil.java
@@ -0,0 +1,101 @@
+/*
+ *  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.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+
+class LocaleUtil {
+    
+    public static final String DEFAULT_TIME_ZONE = "Europe/London";
+    public static final String DEFAULT_LANGUAGE = "English, United Kingdom (en-gb)";
+    
+
+    private LocaleUtil() {}
+
+    public static List<String> languages() {
+        Locale[] locales = DateFormat.getAvailableLocales();
+        List<String> list = new ArrayList<String>(locales.length);
+        for (Locale locale : locales) {
+            list.add(localeName(locale));
+        }
+        Collections.sort(list);
+        return list;
+    }
+    
+    public static List<String> timeZones() {
+        List<String> timezones = Arrays.asList(TimeZone.getAvailableIDs());
+        Collections.sort(timezones);
+        return timezones;
+    }
+
+    public static TimeZone timeZone(String timeZoneEntry) {
+        TimeZone timeZone = TimeZone.getTimeZone(timeZoneEntry);
+        return timeZone;
+    }
+
+    public static Locale locale(String localeCode) {
+        String substring[] = localeCode.trim().split("-");
+        Locale locale;
+        switch (substring.length) {
+        case 1:
+            locale = new Locale(substring[0]);                    
+            break;
+        case 2:
+            locale = new Locale(substring[0], substring[1]);                    
+            break;
+        case 3:
+            locale = new Locale(substring[0], substring[1], substring[3]);                    
+            break;
+        default:
+            locale = Locale.getDefault();
+            break;
+        }
+        return locale;
+    }
+
+    public static String languageName(String languageCode) {
+        Locale locale = locale(languageCode);
+        return localeName(locale);
+    }
+
+    public static String codeForLanguage(String language) {
+        Locale[] locales = DateFormat.getAvailableLocales();
+        for (Locale locale : locales) {
+            String name = localeName(locale);
+            if (name.equals(language)) {
+                return locale.toString().toLowerCase().replace('_', '-');
+            }
+        }
+        return null;
+    }
+
+    public static String localeName(Locale locale) {
+        String language = locale.getDisplayLanguage();
+        String country = locale.getDisplayCountry().length() == 0 ? "" :  ", " + (locale.getDisplayCountry());
+        return language + country + " (" +  locale.toString().toLowerCase().replace('_', '-') + ")";
+    }
+   
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/PreinstallElementProcessors.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/PreinstallElementProcessors.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/PreinstallElementProcessors.java
new file mode 100644
index 0000000..ad29000
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/PreinstallElementProcessors.java
@@ -0,0 +1,215 @@
+package org.apache.isis.viewer.scimpi.dispatcher;
+
+import org.apache.isis.viewer.scimpi.dispatcher.processor.ElementProcessorLookup;
+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.ActionName;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.NewActionLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.Parameter;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.ParameterName;
+import org.apache.isis.viewer.scimpi.dispatcher.view.action.RunAction;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.Collection;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.CountElements;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.ElementType;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.ListView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.RemoveElement;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.TableBuilder;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.TableCell;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.TableEmpty;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.TableHeader;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.TableRow;
+import org.apache.isis.viewer.scimpi.dispatcher.view.collection.TableView;
+import org.apache.isis.viewer.scimpi.dispatcher.view.control.Forward;
+import org.apache.isis.viewer.scimpi.dispatcher.view.control.Redirect;
+import org.apache.isis.viewer.scimpi.dispatcher.view.control.Unless;
+import org.apache.isis.viewer.scimpi.dispatcher.view.control.When;
+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.DebugUsersView;
+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.determine.Exclude;
+import org.apache.isis.viewer.scimpi.dispatcher.view.determine.Include;
+import org.apache.isis.viewer.scimpi.dispatcher.view.determine.Link;
+import org.apache.isis.viewer.scimpi.dispatcher.view.form.FormEntry;
+import org.apache.isis.viewer.scimpi.dispatcher.view.form.FormField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.form.HiddenField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.form.RadioListField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.form.Selector;
+import org.apache.isis.viewer.scimpi.dispatcher.view.form.SimpleButton;
+import org.apache.isis.viewer.scimpi.dispatcher.view.global.Commit;
+import org.apache.isis.viewer.scimpi.dispatcher.view.global.Methods;
+import org.apache.isis.viewer.scimpi.dispatcher.view.global.Services;
+import org.apache.isis.viewer.scimpi.dispatcher.view.localization.Localization;
+import org.apache.isis.viewer.scimpi.dispatcher.view.localization.SetLocalization;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.AddMessage;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.AddWarning;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.ErrorDetails;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.ErrorMessage;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.ErrorReference;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.Errors;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.Feedback;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.Messages;
+import org.apache.isis.viewer.scimpi.dispatcher.view.message.Warnings;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.EditLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.EditObject;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.FieldLabel;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.FieldName;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.FieldValue;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.GetField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.IncludeObject;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.LongViewForm;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.ObjectLink;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.SelectedObject;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.ShortViewForm;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.Title;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.TitleString;
+import org.apache.isis.viewer.scimpi.dispatcher.view.object.Type;
+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.security.EndSession;
+import org.apache.isis.viewer.scimpi.dispatcher.view.security.Logoff;
+import org.apache.isis.viewer.scimpi.dispatcher.view.security.Logon;
+import org.apache.isis.viewer.scimpi.dispatcher.view.security.RestrictAccess;
+import org.apache.isis.viewer.scimpi.dispatcher.view.security.Secure;
+import org.apache.isis.viewer.scimpi.dispatcher.view.security.StartSession;
+import org.apache.isis.viewer.scimpi.dispatcher.view.security.User;
+import org.apache.isis.viewer.scimpi.dispatcher.view.structure.BlockDefine;
+import org.apache.isis.viewer.scimpi.dispatcher.view.structure.BlockUse;
+import org.apache.isis.viewer.scimpi.dispatcher.view.structure.ContentTag;
+import org.apache.isis.viewer.scimpi.dispatcher.view.structure.Import;
+import org.apache.isis.viewer.scimpi.dispatcher.view.structure.Mark;
+import org.apache.isis.viewer.scimpi.dispatcher.view.structure.TemplateTag;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.ChangeScope;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.CookieValue;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.DefaultValue;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.GetCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.InitializeFromCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.InitializeFromResult;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.PageTitle;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.SetCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.SetCookieFromField;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.SetFieldFromCookie;
+import org.apache.isis.viewer.scimpi.dispatcher.view.variable.Variable;
+
+public class PreinstallElementProcessors {
+
+    public static void init(ElementProcessorLookup 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 Exclude());
+        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 Include());
+        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 LongViewForm());
+        processors.addElementProcessor(new Link());
+        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 ChangeScope());
+        processors.addElementProcessor(new Secure());
+        processors.addElementProcessor(new SelectedObject());
+        processors.addElementProcessor(new Selector());
+        processors.addElementProcessor(new Services());
+        processors.addElementProcessor(new ShortViewForm());
+        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/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Response.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Response.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Response.java
deleted file mode 100644
index 173378e..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Response.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.apache.isis.viewer.scimpi.dispatcher;
-
-public interface Response {
-
-}
-

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/RuntimeScimpiContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/RuntimeScimpiContext.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/RuntimeScimpiContext.java
new file mode 100644
index 0000000..85d88ba
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/RuntimeScimpiContext.java
@@ -0,0 +1,17 @@
+package org.apache.isis.viewer.scimpi.dispatcher;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.scimpi.ScimpiContext;
+
+public class RuntimeScimpiContext implements ScimpiContext {
+
+    public String configurationName(String name) {
+        return BASE + name;
+    }
+
+    public IsisConfiguration getConfiguration() {
+        return IsisContext.getConfiguration();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ScimpiNotFoundException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ScimpiNotFoundException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ScimpiNotFoundException.java
deleted file mode 100644
index e448293..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ScimpiNotFoundException.java
+++ /dev/null
@@ -1,43 +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.ScimpiException;
-
-public class ScimpiNotFoundException extends ScimpiException {
-    public ScimpiNotFoundException() {
-        super();
-    }
-
-    public ScimpiNotFoundException(final String message, final Throwable cause) {
-        super(message, cause);
-    }
-
-    public ScimpiNotFoundException(final String message) {
-        super(message);
-    }
-
-    public ScimpiNotFoundException(final Throwable cause) {
-        super(cause);
-    }
-
-    private static final long serialVersionUID = 1L;
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/TagOrderException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/TagOrderException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/TagOrderException.java
deleted file mode 100644
index 543d57b..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/TagOrderException.java
+++ /dev/null
@@ -1,32 +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.ScimpiException;
-import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessor;
-
-public class TagOrderException extends ScimpiException {
-    private static final long serialVersionUID = 1L;
-
-    public TagOrderException(final TagProcessor tagProcessor) {
-        super("Invalid tag in this context: " + tagProcessor.getTag().getName());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Util.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Util.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Util.java
deleted file mode 100644
index b485dd0..0000000
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Util.java
+++ /dev/null
@@ -1,105 +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.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-class Util {
-    
-    public static final String DEFAULT_TIME_ZONE = "Europe/London";
-    public static final String DEFAULT_LANGUAGE = "English, United Kingdom (en-gb)";
-    
-
-    private Util() {}
-
-    public static boolean hasChanged(String version1, String version2) {
-        return version2 == null && version1 != null || (version2 != null && !version2.equals(version1));
-    }
-
-    public static List<String> languages() {
-        Locale[] locales = DateFormat.getAvailableLocales();
-        List<String> list = new ArrayList<String>(locales.length);
-        for (Locale locale : locales) {
-            list.add(localeName(locale));
-        }
-        Collections.sort(list);
-        return list;
-    }
-    
-    public static List<String> timeZones() {
-        List<String> timezones = Arrays.asList(TimeZone.getAvailableIDs());
-        Collections.sort(timezones);
-        return timezones;
-    }
-
-    public static TimeZone timeZone(String timeZoneEntry) {
-        TimeZone timeZone = TimeZone.getTimeZone(timeZoneEntry);
-        return timeZone;
-    }
-
-    public static Locale locale(String localeCode) {
-        String substring[] = localeCode.trim().split("-");
-        Locale locale;
-        switch (substring.length) {
-        case 1:
-            locale = new Locale(substring[0]);                    
-            break;
-        case 2:
-            locale = new Locale(substring[0], substring[1]);                    
-            break;
-        case 3:
-            locale = new Locale(substring[0], substring[1], substring[3]);                    
-            break;
-        default:
-            locale = Locale.getDefault();
-            break;
-        }
-        return locale;
-    }
-
-    public static String languageName(String languageCode) {
-        Locale locale = locale(languageCode);
-        return localeName(locale);
-    }
-
-    public static String codeForLanguage(String language) {
-        Locale[] locales = DateFormat.getAvailableLocales();
-        for (Locale locale : locales) {
-            String name = localeName(locale);
-            if (name.equals(language)) {
-                return locale.toString().toLowerCase().replace('_', '-');
-            }
-        }
-        return null;
-    }
-
-    public static String localeName(Locale locale) {
-        String language = locale.getDisplayLanguage();
-        String country = locale.getDisplayCountry().length() == 0 ? "" :  ", " + (locale.getDisplayCountry());
-        return language + country + " (" +  locale.toString().toLowerCase().replace('_', '-') + ")";
-    }
-   
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/ActionAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/ActionAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/ActionAction.java
index 9b30d48..fe95cd4 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/ActionAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/ActionAction.java
@@ -42,8 +42,8 @@ import org.apache.isis.core.runtime.system.transaction.MessageBroker;
 import org.apache.isis.viewer.scimpi.dispatcher.context.Action;
 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.structure.FieldEditState;
-import org.apache.isis.viewer.scimpi.dispatcher.structure.FormState;
+import org.apache.isis.viewer.scimpi.dispatcher.form.FieldEditState;
+import org.apache.isis.viewer.scimpi.dispatcher.form.FormState;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
 
 public class ActionAction implements Action {

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/DebugUserAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/DebugUserAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/DebugUserAction.java
index c314b01..3d4cfb8 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/DebugUserAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/DebugUserAction.java
@@ -25,8 +25,8 @@ import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.viewer.scimpi.ForbiddenException;
 import org.apache.isis.viewer.scimpi.ScimpiException;
 import org.apache.isis.viewer.scimpi.dispatcher.context.Action;
+import org.apache.isis.viewer.scimpi.dispatcher.context.DebugUsers;
 import org.apache.isis.viewer.scimpi.dispatcher.context.Request;
-import org.apache.isis.viewer.scimpi.security.DebugUsers;
 
 public class DebugUserAction implements Action {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/EditAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/EditAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/EditAction.java
index 86b7046..5686eb2 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/EditAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/EditAction.java
@@ -44,8 +44,8 @@ import org.apache.isis.viewer.scimpi.NotLoggedInException;
 import org.apache.isis.viewer.scimpi.dispatcher.context.Action;
 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.structure.FieldEditState;
-import org.apache.isis.viewer.scimpi.dispatcher.structure.FormState;
+import org.apache.isis.viewer.scimpi.dispatcher.form.FieldEditState;
+import org.apache.isis.viewer.scimpi.dispatcher.form.FormState;
 
 public class EditAction implements Action {
     public static final String ACTION = "edit";

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogonAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogonAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogonAction.java
index ea158f1..573b31d 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogonAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogonAction.java
@@ -35,10 +35,10 @@ import org.apache.isis.viewer.scimpi.ScimpiException;
 import org.apache.isis.viewer.scimpi.dispatcher.context.Action;
 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.structure.FieldEditState;
-import org.apache.isis.viewer.scimpi.dispatcher.structure.FormState;
+import org.apache.isis.viewer.scimpi.dispatcher.form.FieldEditState;
+import org.apache.isis.viewer.scimpi.dispatcher.form.FormState;
 import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
-import org.apache.isis.viewer.scimpi.security.UserManager;
+import org.apache.isis.viewer.scimpi.dispatcher.util.UserManager;
 
 
 // TODO this should work like EditAction so that logon page is repopulated

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogoutAction.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogoutAction.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogoutAction.java
index af8581a..9a31da5 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogoutAction.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/action/LogoutAction.java
@@ -23,11 +23,11 @@ import java.io.IOException;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.context.IsisContext;//
 import org.apache.isis.viewer.scimpi.dispatcher.context.Action;
 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.security.UserManager;
+import org.apache.isis.viewer.scimpi.dispatcher.util.UserManager;
 
 public class LogoutAction implements Action {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DebugUsers.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DebugUsers.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DebugUsers.java
new file mode 100644
index 0000000..c925da8
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DebugUsers.java
@@ -0,0 +1,97 @@
+/*
+ *  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.context;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.scimpi.ScimpiException;
+
+public class DebugUsers {
+
+    private static Logger LOG = Logger.getLogger(DebugUsers.class);
+
+    private enum DebugMode {
+        OFF, ON, NAMED, SYSADMIN_ONLY
+    }
+
+    private static List<String> debugUsers = new ArrayList<String>();
+    private static DebugMode debugMode;
+
+    public void initialize() {
+        if (debugMode != null) {
+            throw new ScimpiException("Debug mode is already set up!");
+        }
+
+        final String debugUserEntry = IsisContext.getConfiguration().getString(ConfigurationConstants.ROOT + "scimpi.debug.users", "");
+        final String[] users = debugUserEntry.split("\\|");
+        for (final String name : users) {
+            debugUsers.add(name.trim());
+        }
+
+        final String debugModeEntry = IsisContext.getConfiguration().getString(ConfigurationConstants.ROOT + "scimpi.debug.mode");
+        if (debugModeEntry != null) {
+            try {
+                debugMode = DebugMode.valueOf(debugModeEntry.toUpperCase());
+                LOG.info("Debug mode set to " + debugMode);
+            } catch (final IllegalArgumentException e) {
+                LOG.error("Invalid debug mode - " + debugModeEntry + " - mode set to OFF");
+                debugMode = DebugMode.OFF;
+            }
+        } else {
+            debugMode = DebugMode.OFF;
+        }
+    }
+
+    public boolean isDebugEnabled(final AuthenticationSession session) {
+        if (debugMode == DebugMode.ON) {
+            return true;
+        } else if (session != null && debugMode == DebugMode.SYSADMIN_ONLY && session.getRoles().contains("sysadmin")) {
+            return true;
+        } else if (session != null && debugMode == DebugMode.NAMED && (debugUsers.contains(session.getUserName()) || session.getRoles().contains("sysadmin"))) {
+            return true;
+        }
+        return false;
+    }
+
+    public List<String> getNames() {
+        final ArrayList<String> users = new ArrayList<String>(debugUsers);
+        Collections.sort(users);
+        return users;
+    }
+
+    public void add(final String name) {
+        if (!debugUsers.contains(name)) {
+            debugUsers.add(name);
+            LOG.info("Added '" + debugMode + "' to debug users list");
+        }
+    }
+
+    public void remove(final String name) {
+        debugUsers.remove(name);
+        LOG.info("Removed '" + debugMode + "' from debug users list");
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Request.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Request.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Request.java
index 605bb65..937e796 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Request.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Request.java
@@ -51,9 +51,8 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.Persistor;
 import org.apache.isis.viewer.scimpi.Names;
 import org.apache.isis.viewer.scimpi.ScimpiException;
-import org.apache.isis.viewer.scimpi.security.DebugUsers;
 
-public abstract class Request {
+public abstract class Request implements RequestState {
     private static final Logger LOG = Logger.getLogger(Request.class);
     static final String TRANSIENT_OBJECT_OID_MARKER = "~";
 
@@ -385,7 +384,7 @@ public abstract class Request {
     }
 
     public void clearVariable(String name, final Scope scope) {
-        name = name != null ? name : RESULT;
+        name = name != null ? name : Names.RESULT;
         variables.get(scope).remove(name);
     }
 
@@ -394,7 +393,7 @@ public abstract class Request {
     }
 
     public void addVariable(String name, final Object value, final Scope scope) {
-        name = name != null ? name : RESULT;
+        name = name != null ? name : Names.RESULT;
         if (scope == Scope.SESSION && value != null && !(value instanceof Serializable)) {
             throw new ScimpiException("SESSION scoped variable (" + name + ") must be serializable: " + value);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestState.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestState.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestState.java
new file mode 100644
index 0000000..a2eb7a8
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestState.java
@@ -0,0 +1,47 @@
+/*
+ *  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.context;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+
+public interface RequestState {
+
+    String replaceVariables(String value);
+
+    String getStringVariable(String result);
+
+    
+    
+    ObjectAdapter getMappedObject(String objectId);
+    
+    
+    
+    
+    String getErrorMessage();
+
+
+
+
+    
+    // String getOptionalProperty(String name);
+
+
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Response.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Response.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Response.java
new file mode 100644
index 0000000..bbb8d7d
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/Response.java
@@ -0,0 +1,6 @@
+package org.apache.isis.viewer.scimpi.dispatcher.context;
+
+public interface Response {
+
+}
+

http://git-wip-us.apache.org/repos/asf/isis/blob/7700b437/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/ScimpiNotFoundException.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/ScimpiNotFoundException.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/ScimpiNotFoundException.java
new file mode 100644
index 0000000..3033ca2
--- /dev/null
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/ScimpiNotFoundException.java
@@ -0,0 +1,43 @@
+/*
+ *  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.context;
+
+import org.apache.isis.viewer.scimpi.ScimpiException;
+
+public class ScimpiNotFoundException extends ScimpiException {
+    public ScimpiNotFoundException() {
+        super();
+    }
+
+    public ScimpiNotFoundException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
+
+    public ScimpiNotFoundException(final String message) {
+        super(message);
+    }
+
+    public ScimpiNotFoundException(final Throwable cause) {
+        super(cause);
+    }
+
+    private static final long serialVersionUID = 1L;
+
+}