Modified: turbine/core/trunk/xdocs/fsd.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/fsd.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/fsd.xml (original)
+++ turbine/core/trunk/xdocs/fsd.xml Thu Oct 19 12:34:25 2017
@@ -29,9 +29,9 @@
 <section name="Specification">
 
 <p>
-Turbine is made up of different modules which serve a specific service within 
-the Turbine framework. Five of them are used in the standard configuration. 
-In order for the reader to understand the general flow of the Turbine 
framework, 
+Turbine is made up of different modules which serve a specific service within
+the Turbine framework. Five of them are used in the standard configuration.
+In order for the reader to understand the general flow of the Turbine 
framework,
 each of these modules is explained in detail below.
 </p>
 
@@ -46,7 +46,7 @@ each of these modules is explained in de
 <section name="The Pipeline">
 
 <p>
-In Turbine 4, the way a request is processed is controlled by the 
+In Turbine 4, the way a request is processed is controlled by the
 <em>Pipeline</em>. This concept has been "borrowed" from the Tomcat
 project. A pipeline consists of <em>Valves</em> which control the single
 processing steps and allow to decide which path the request is to take.
@@ -116,12 +116,12 @@ business logic.
 </p>
 
 <p>
-Sometimes it may seem to be difficult to decide which parts of an application 
+Sometimes it may seem to be difficult to decide which parts of an application
 should go to Actions and which parts go to Pages (or Screens). To help you with
 these decisions, our recommended rules of thumb are
 <ul>
   <li>
-    Screens <em>show</em> something. That is, they <em>read</em> data, for 
+    Screens <em>show</em> something. That is, they <em>read</em> data, for
     example a record from a database.
   </li>
   <li>
@@ -130,7 +130,7 @@ these decisions, our recommended rules o
   </li>
   <li>
     When an Action is finished, it should generally clean up after itself so 
that
-    a following Screen or other module will find the same state as if no 
action was 
+    a following Screen or other module will find the same state as if no 
action was
     performed. In the given example that would mean that the Action writes its 
data
     to the database and the Screen would reload it from there.
   </li>
@@ -271,10 +271,10 @@ factory that creates requested modules f
 
 <p>
 Factories are required to provide access to an instance of a Loader (see above)
-that is able to load the specific type of module they are responsible for. 
They 
+that is able to load the specific type of module they are responsible for. They
 can in fact implement the Loader themselves. Turbine makes no assumptions about
-a module. The wiring of modules is controlled by the valves of the pipeline 
-only. 
+a module. The wiring of modules is controlled by the valves of the pipeline
+only.
 </p>
 
 <p>

Modified: turbine/core/trunk/xdocs/how-to-build.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/how-to-build.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/how-to-build.xml (original)
+++ turbine/core/trunk/xdocs/how-to-build.xml Thu Oct 19 12:34:25 2017
@@ -34,7 +34,7 @@
 </p>
 
 <p>
-  To build Turbine, from the Turbine home directory just run <code>mvn 
install</code> the 
+  To build Turbine, from the Turbine home directory just run <code>mvn 
install</code> the
   project will be compiled, test cases run, and jar files created.
   This will also install the artifact into your local Maven repository as well.
 </p>

Modified: turbine/core/trunk/xdocs/howto/action-event-howto.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/howto/action-event-howto.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/howto/action-event-howto.xml (original)
+++ turbine/core/trunk/xdocs/howto/action-event-howto.xml Thu Oct 19 12:34:25 
2017
@@ -58,7 +58,7 @@ public class NewUser extends VelocityAct
     @TurbineActionEvent("save")
     public void saveUser (PipelineData data, Context context) throws Exception
     {
-        // put code here to save the modified user to persistent storage 
+        // put code here to save the modified user to persistent storage
         getRunData(data).setMessage("User Saved!");
     }
 
@@ -103,7 +103,7 @@ method or button could be found.
 </p>
 
 <p>
-Because all keys processed by ParameterParser are subject to URL 
+Because all keys processed by ParameterParser are subject to URL
 case folding, (in default mode lowercase), we have
 to do some work to format the string into a method name. For example, a
 button name eventSubmit_doDelete gets converted into eventsubmit_dodelete.

Modified: turbine/core/trunk/xdocs/howto/annotations.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/howto/annotations.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/howto/annotations.xml (original)
+++ turbine/core/trunk/xdocs/howto/annotations.xml Thu Oct 19 12:34:25 2017
@@ -30,16 +30,16 @@
 
 <p>
 Turbine provides a number of annotations to inject dependencies into your 
actions,
-screens and layouts. All <code>Assemblers</code> that is, all modules of type 
+screens and layouts. All <code>Assemblers</code> that is, all modules of type
 <code>Action</code>, <code>Screen</code>, <code>Layout</code>, 
<code>Page</code>,
-<code>Navigation</code> and <code>ScheduledJob</code> as well as all 
-<code>Valves</code> in the pipeline support the injection of services, 
+<code>Navigation</code> and <code>ScheduledJob</code> as well as all
+<code>Valves</code> in the pipeline support the injection of services,
 configurations and loaders. This relieves you from the burden of looking
-them up at runtime and thus simplifies and accelerates the code. 
+them up at runtime and thus simplifies and accelerates the code.
 </p>
 
 <subsection name="@TurbineService">
-The annotation can only be used with a field. 
+The annotation can only be used with a field.
 A declared field in a class annotated with <code>@TurbineService</code>
 gets injected an instance of this service at the time the instance
 of the class is created. The field should have the type of the service
@@ -61,24 +61,24 @@ runDataService = (RunDataService) Turbin
 factory = (FactoryService) TurbineServices
     .getInstance().getService(FactoryService.ROLE);
 ]]></source>
-As you an see, the annotation supports an optional parameter, the 
-name of the service in the Turbine service repository. If this 
+As you an see, the annotation supports an optional parameter, the
+name of the service in the Turbine service repository. If this
 parameter is not present, the annotation processor will look
 for the field <code>SERVICE_NAME</code> and then <code>ROLE</code>
 in the type class of the field to retrieve the service name. If none
 of them can be found, the fully qualified class name of the
 service interface is used to look up the service.
 <br />
-If the service instance cannot be found, the annotation processor 
+If the service instance cannot be found, the annotation processor
 will throw an exception.
 </subsection>
 
 <subsection name="@TurbineConfiguration">
-The annotation can only be used with a field. 
-If a declared field of the type <code>Configuration</code> is annotated 
-with <code>@TurbineConfiguration</code>, Turbine will inject an instance 
-of the Turbine configuration object at the time the instance of the class 
-is created. 
+The annotation can only be used with a field.
+If a declared field of the type <code>Configuration</code> is annotated
+with <code>@TurbineConfiguration</code>, Turbine will inject an instance
+of the Turbine configuration object at the time the instance of the class
+is created.
 <source><![CDATA[
 // Injected configuration instance
 @TurbineConfiguration
@@ -94,15 +94,15 @@ config = Turbine.getConfiguration();
 
 actionConfig = Turbine.getConfiguration().subset("action");
 ]]></source>
-The annotation supports an optional parameter, the 
+The annotation supports an optional parameter, the
 prefix of the configuration subset to retrieve.
 <br />
-If other fields having simple types are annotated with 
+If other fields having simple types are annotated with
 <code>@TurbineConfiguration</code>, Turbine will inject the corresponding
 configuration value. In this case, the annotation parameter defines the
 configuration key and is required. Strings, Lists and most simple types
-are supported. The value will only be set if the key is found in the 
-configuration, so that the field can be initialized with a default value. 
+are supported. The value will only be set if the key is found in the
+configuration, so that the field can be initialized with a default value.
 <source><![CDATA[
 // Injected configuration value
 @TurbineConfiguration( "module.cache" )
@@ -119,10 +119,10 @@ templateHomepage = Turbine.getConfigurat
 </subsection>
 
 <subsection name="@TurbineLoader">
-The annotation can only be used with a field. 
+The annotation can only be used with a field.
 A declared field in a class annotated with <code>@TurbineLoader</code>
 gets injected an instance of the specified <code>Loader</code> at
-the time the instance of the class is created. The field should have 
+the time the instance of the class is created. The field should have
 the type of the loader.
 <source><![CDATA[
 // Injected loader instance
@@ -133,15 +133,15 @@ This is the equivalent of
 <source><![CDATA[
 actionLoader = TurbineAssemblerBroker.getLoader(Action.class);
 ]]></source>
-The annotation parameter is required and defines the type of module 
+The annotation parameter is required and defines the type of module
 that is to be loaded.
 </subsection>
 
 <subsection name="@TurbineActionEvent">
-The annotation can only be used with a method. 
+The annotation can only be used with a method.
 A method in a class annotated with <code>@TurbineActionEvent</code>
-is associated to a named action event. The annotation parameter 
-is required and defines the name of the event. See the 
+is associated to a named action event. The annotation parameter
+is required and defines the name of the event. See the
 <a href="action-event-howto.html">Action Events Howto</a>
 for usage and examples.
 </subsection>
@@ -151,7 +151,7 @@ It is important to note that the process
 the time the module class is instantiated takes some time. It is
 therefore strongly recommended to re-use the module instances in
 a production environment by setting the configuration parameter
-<code>module.cache</code> to <code>true</code> in 
+<code>module.cache</code> to <code>true</code> in
 <code>TurbineResources.properties</code>.
 </subsection>
 

Modified: turbine/core/trunk/xdocs/howto/configuration-howto.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/howto/configuration-howto.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/howto/configuration-howto.xml (original)
+++ turbine/core/trunk/xdocs/howto/configuration-howto.xml Thu Oct 19 12:34:25 
2017
@@ -78,8 +78,8 @@ web.xml file:
 
 <p>
 This works well, but if you want to customize the various settings that 
Turbine uses to
-control it's behavior, then you need to provide a TurbineConfiguration.xml 
file! 
-Reading from /WEB-INF/conf/TurbineResources.properties is actually the default 
fall back - if no init parameter is provided. 
+control it's behavior, then you need to provide a TurbineConfiguration.xml 
file!
+Reading from /WEB-INF/conf/TurbineResources.properties is actually the default 
fall back - if no init parameter is provided.
 </p>
 </section>
 
@@ -88,7 +88,7 @@ Reading from /WEB-INF/conf/TurbineResour
 The TurbineConfiguration.xml file doesn't contain any configuration data 
itself, instead
 it points at other files that may have configuration data.  Turbine leverages 
Commons-Configuration's
 <code>DefaultConfigurationBuilder</code> to access the data.  For more 
information, look at
-the <a 
href="http://commons.apache.org/proper/commons-configuration/";>Configuration</a>
 
+the <a 
href="http://commons.apache.org/proper/commons-configuration/";>Configuration</a>
 homepage.
 </p>
 

Modified: turbine/core/trunk/xdocs/howto/migrate-from-2_3-howto.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/howto/migrate-from-2_3-howto.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/howto/migrate-from-2_3-howto.xml (original)
+++ turbine/core/trunk/xdocs/howto/migrate-from-2_3-howto.xml Thu Oct 19 
12:34:25 2017
@@ -1,117 +1,117 @@
-<?xml version="1.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.
--->
-
-<document>
-
- <properties>
-  <title>Migrating from 2.3 to 4.0</title>
- </properties>
-
-<body>
-
-<section name="Introduction">
-<p>
-    This document describes the basic steps needed to migrate an
-    application written for Turbine 2.3 to Turbine 4.0.
-</p>
-<p>
-       Migrating from Turbine 2.3 to Turbine 4.0 is mostly a task of 
-       moving from the old service format to the new one. One of the 
-       biggest purposes with Turbine 4 was to decouple the different services
-       and move them to <a 
href="http://turbine.apache.org/fulcrum/";>Fulcrum</a>.
-       Many of the released components of Fulcrum correspond to 
-       a previous Turbine service that is no longer bundled with the
-       Turbine core. 
-</p>
-<p>
-       The services has been converted to Avalon components and do not 
-       implement the Service interface any more. Turbine still handles 
-       services that do implement the Service interface though so no
-       rewrite is necessary if you have written services of your own.
-       The new services can also be accessed in pretty much the same way
-       as the old ones, as long as the AvalonComponentService is properly 
configured.
-</p>
-</section>
-
-<section name="Accessing the new services">
-<p>
-       What needs to be done to access the decoupled services can be 
-       summarised in 4 steps:
-       <ul>
-               <li>Make sure the AvalonComponentService is properly 
configured</li>
-               <li>Add the services you need to your project dependency and to 
roleConfiguration.xml</li>
-               <li>Access the Fulcrum services with class name instead of 
service name</li>
-               <li>Remove any reference to the static facade classes and 
access the interfaces directly</li>
-       </ul>
-</p>
-<subsection name="Make sure the AvalonComponentService is properly configured">
-<p>
-       The AvalonComponentService allows you to retrieve the new services 
-       via the old TurbineServices interface. Make sure that the 
AvalonComponentService 
-       is added in your TurbineResources.properties and that you use 
TurbineYaafiComponentService as 
-       the implementing class. 
-</p>
-<source>
-<![CDATA[
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-services.AvalonComponentService.earlyInit=true
-]]>
-</source>
-<p>
-       The service <em>must</em> be the first service in 
TurbineResources.properties and it <em>must</em> be initialized early.
-       Also make sure that <a 
href="http://turbine.apache.org/fulcrum/fulcrum-yaafi/";>Fulcrum YAAFI</a>
-       is added to your project dependency.
-</p>
-</subsection>
-<subsection name="Add the services you need to your project dependency and to 
roleConfiguration.xml">
-<p>
-       Many services that were previously included in Turbine has been 
converted to Avalon
-       components and moved to Fulcrum. You only need to add the ones used in 
your project as
-       a dependency. Each service has its own documentation and it is 
described on their project
-       page how you can configure them, but common for all is that they need 
to be added to your
-       roleConfiguration.xml file. Adding a service to roleConfiguration.xml 
is equivalent to adding
-       a Turbine service to TurbineResources.properties.
-</p>
-</subsection>
-<subsection name="Access the Fulcrum services with class name instead of 
service name">
-<p>
-       As you may have noticed in the documentation for the Fulcrum 
components, the name for 
-       the different services is the full class name. Therefore the input 
parameter in the
-       getService method of TurbineServices needs to be the full class name of 
the service.
-       Usually this is stored in a static field called ROLE. Ex:
-</p>
-<source>
-<![CDATA[
-ParseService parserService = 
(ParserService)TurbineServices.getInstance().getService(ParserService.ROLE);
-]]>
-</source>
-</subsection>
-<subsection name="Remove any reference to the static facade classes and access 
the interfaces directly">
-<p>
-       The new services do not have a static facade class like the old ones 
-       (org.apache.turbine.services.localization.Localization for 
LocalizationService,
-       org.apache.turbine.services.cache.TurbineGlobalCache for 
GlobalCacheService etc).
-       If you have used these facade classes, you now need to access the 
service directly via
-       the interface instead. How to access the classes is described in the 
previous section. 
-</p>
-</subsection>
-</section>
-</body>
-</document>
+<?xml version="1.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.
+-->
+
+<document>
+
+ <properties>
+  <title>Migrating from 2.3 to 4.0</title>
+ </properties>
+
+<body>
+
+<section name="Introduction">
+<p>
+    This document describes the basic steps needed to migrate an
+    application written for Turbine 2.3 to Turbine 4.0.
+</p>
+<p>
+       Migrating from Turbine 2.3 to Turbine 4.0 is mostly a task of
+       moving from the old service format to the new one. One of the
+       biggest purposes with Turbine 4 was to decouple the different services
+       and move them to <a 
href="http://turbine.apache.org/fulcrum/";>Fulcrum</a>.
+       Many of the released components of Fulcrum correspond to
+       a previous Turbine service that is no longer bundled with the
+       Turbine core.
+</p>
+<p>
+       The services has been converted to Avalon components and do not
+       implement the Service interface any more. Turbine still handles
+       services that do implement the Service interface though so no
+       rewrite is necessary if you have written services of your own.
+       The new services can also be accessed in pretty much the same way
+       as the old ones, as long as the AvalonComponentService is properly 
configured.
+</p>
+</section>
+
+<section name="Accessing the new services">
+<p>
+       What needs to be done to access the decoupled services can be
+       summarised in 4 steps:
+       <ul>
+               <li>Make sure the AvalonComponentService is properly 
configured</li>
+               <li>Add the services you need to your project dependency and to 
roleConfiguration.xml</li>
+               <li>Access the Fulcrum services with class name instead of 
service name</li>
+               <li>Remove any reference to the static facade classes and 
access the interfaces directly</li>
+       </ul>
+</p>
+<subsection name="Make sure the AvalonComponentService is properly configured">
+<p>
+       The AvalonComponentService allows you to retrieve the new services
+       via the old TurbineServices interface. Make sure that the 
AvalonComponentService
+       is added in your TurbineResources.properties and that you use 
TurbineYaafiComponentService as
+       the implementing class.
+</p>
+<source>
+<![CDATA[
+services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
+services.AvalonComponentService.earlyInit=true
+]]>
+</source>
+<p>
+       The service <em>must</em> be the first service in 
TurbineResources.properties and it <em>must</em> be initialized early.
+       Also make sure that <a 
href="http://turbine.apache.org/fulcrum/fulcrum-yaafi/";>Fulcrum YAAFI</a>
+       is added to your project dependency.
+</p>
+</subsection>
+<subsection name="Add the services you need to your project dependency and to 
roleConfiguration.xml">
+<p>
+       Many services that were previously included in Turbine has been 
converted to Avalon
+       components and moved to Fulcrum. You only need to add the ones used in 
your project as
+       a dependency. Each service has its own documentation and it is 
described on their project
+       page how you can configure them, but common for all is that they need 
to be added to your
+       roleConfiguration.xml file. Adding a service to roleConfiguration.xml 
is equivalent to adding
+       a Turbine service to TurbineResources.properties.
+</p>
+</subsection>
+<subsection name="Access the Fulcrum services with class name instead of 
service name">
+<p>
+       As you may have noticed in the documentation for the Fulcrum 
components, the name for
+       the different services is the full class name. Therefore the input 
parameter in the
+       getService method of TurbineServices needs to be the full class name of 
the service.
+       Usually this is stored in a static field called ROLE. Ex:
+</p>
+<source>
+<![CDATA[
+ParseService parserService = 
(ParserService)TurbineServices.getInstance().getService(ParserService.ROLE);
+]]>
+</source>
+</subsection>
+<subsection name="Remove any reference to the static facade classes and access 
the interfaces directly">
+<p>
+       The new services do not have a static facade class like the old ones
+       (org.apache.turbine.services.localization.Localization for 
LocalizationService,
+       org.apache.turbine.services.cache.TurbineGlobalCache for 
GlobalCacheService etc).
+       If you have used these facade classes, you now need to access the 
service directly via
+       the interface instead. How to access the classes is described in the 
previous section.
+</p>
+</subsection>
+</section>
+</body>
+</document>

Modified: turbine/core/trunk/xdocs/services/index.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/services/index.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/services/index.xml (original)
+++ turbine/core/trunk/xdocs/services/index.xml Thu Oct 19 12:34:25 2017
@@ -160,7 +160,7 @@ Allows for the creation of Context uniqu
 <li>
 <a href="velocity-service.html">Velocity Service</a>
 <br/>
-The Velocity Service supports the rendering of 
+The Velocity Service supports the rendering of
 <a href="http://velocity.apache.org";>Velocity</a> templates.
 </li>
 

Modified: turbine/core/trunk/xdocs/services/jsonrpc-service.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/services/jsonrpc-service.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/services/jsonrpc-service.xml (original)
+++ turbine/core/trunk/xdocs/services/jsonrpc-service.xml Thu Oct 19 12:34:25 
2017
@@ -1,302 +1,302 @@
-<?xml version="1.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.
--->
-
-<document>
-
- <properties>
-  <title>Turbine Services - JSON-RPC Service</title>
-  <author email="[email protected]">Scott Eade</author>
- </properties>
-
-<body>
-
-<section name="JSON-RPC Service">
-
-<p>
-The JSON-RPC Service supports JavaScript to Java AJAX communications using
-<a href="https://code.google.com/p/jabsorb/";>JSON-RPC-Java</a> 
-(Jabsorb replaced project oss.metaparadigm.com/jsonrpc/. As of March 2015 
Google Code projects are only read-only and this project is <a 
href="https://code.google.com/archive/p/jabsorb/";>archived</a> too, though GIT 
exports are allowed probably until Jan 2016, e.g. 
https://github.com/gmkll/jabsorb).
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-...
-services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
-...
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-There are a number of things you need to do in order to add AJAX functionality
-to your webapp. First you implement the functions:
-</p>
-
-<source><![CDATA[
-public class MyJsonFunctions
-{
-    public String getHello(String clientParameter)
-    {
-        return "Hello " + clientParameter;
-    }
-    public String getGoodbye(String clientParameter)
-    {
-        return "Goodbye " + clientParameter;
-    }
-}
-]]></source>
-
-<p>
-Next you implement your Screen class to make your functions available:
-</p>
-
-<source><![CDATA[
-public class MyJsonScreen extends JSONScreen
-{
-    public void doOutput(RunData data) throws Exception
-    {
-        MyJsonFunctions myFunctions = new MyJsonFunctions();
-
-        // Session specific
-        TurbineJsonRpc.registerObject(data.getSession(), "myFunctions", 
myFunctions);
-
-        // Global
-        //TurbineJsonRpc.registerObjectGlobal("testGlobal", testObject);
-
-        super.doOutput(data);
-    }
-}
-]]></source>
-
-<subsection name="Client Side: Synchronous AJAX Calls"> 
-<p>
-
-Now we shift focus to your template classes.  Firstly, there are a few useful
-utility functions that you need to make sure are available to the pages that
-will include AJAX functionality:
-</p>
-
-<source><![CDATA[
-// Body onload utility (supports multiple onload functions)
-function SafeAddOnload(func) {
-  var oldonload = window.onload;
-  if (typeof window.onload != 'function') {
-    window.onload = func;
-  } else {
-    window.onload = function() {
-      oldonload();
-      func();
-    };
-  }
-}
-
-// Prepare for possible JSON-RPC requests.
-// jsonurl must be set before calling this function.
-// First example synchronous call
-function jsonOnLoadSync() {
-  try {
-    jsonrpc = new JSONRpcClient(jsonurl);
-  }
-  catch(e) {
-    if(e.message) {
-      alert(e.message);
-    }
-    else {
-      alert(e);
-    }
-  }
-}
-
-
-// Process a JSON-RPC request.
-function jsonEval(evalStr) {
-  try  {
-    return eval(evalStr);
-  }
-  catch(e) {
-    if(e.javaStack) {
-      alert("Exception: \n\n" + e.javaStack);
-    }
-    else {
-      alert("Exception: \n\n" + e);
-    }
-  }
-  return null;
-}
-]]></source>
-
-<p>
-In these pages you also need to include the JavaScript necessary to process the
-JSON calls - this file is available as part of the JSON-RPC Java distribution
-(it is included in the <code>webapps\jsonrpc</code> directory):
-</p>
-
-<source><![CDATA[
-$page.addScript($content.getURI('scripts/jsonrpc.js'))
-]]></source>
-
-<p>
-Then you need to set up the specific handler for the page (synchronous 
example):
-</p>
-
-<source><![CDATA[
-<script type="text/javascript">
-<!--
-  ## Set up the JSON-RPC handler.
-  var jsonurl = '$link.setScreen("MyJsonScreen")';
-  SafeAddOnload(jsonOnLoad);
-  ## myArg below would be provided when you call this function from your
-  ## web page (usually you would retrieve something via the DOM or your
-  ## favorite JavaScript DOM wrapper library).
-  function retrieveHello(myArg) {
-    ## This is a synchronous call.
-    var helloResult = jsonEval("jsonrpc.myFunctions.getHello(" + myArg + ")");
-    if(null == helloResult) {
-      alert('Something went wrong!');
-      return;
-    }
-    ## Here you would again use the DOM to include the result somewhere on your
-    ## page.
-  }
-//-->
-</script>
-]]></source>
-
-</subsection>
-<subsection name="Client Side: Asynchronous AJAX Call">
-
-<p>
-Alternatively, asynchronous calls require handling of the deferred objects, 
which could be done by using some kind of <a 
href="https://www.promisejs.org/";>Promise</a>) library.
-As an example a <a 
href="http://api.jquery.com/category/deferred-object/";>JQuery Promise Object 
model</a> (supported since version 1.5) is shown.
-Usage of asynchronous calls conforms more to <a 
href="ttps://xhr.spec.whatwg.org/#synchronous-flag">XMLHttpRequest 
specification</a>.
-</p>
-
-<source><![CDATA[
-
-// Prepare for possible JSON-RPC requests.
-// jsonurl must be set before calling this function.
-// Second example asynchronous call
-var deferred;
-function jsonOnLoad() {
-  try { 
-      // This feature is available since jabsorb 1.1 release, cft. 
webapps/jaxrpc/CHANGES.txt.
-      // JQuery Promises are available since jQuery 1.5/1.8 (with major 
changes).
-      // This is just an example, any other Promise handling will do it.
-       if (deferred != undefined) {
-            return deferred;
-        } else {
-            deferred =  jQuery.Deferred(function(defer) {
-      // Add a default function as first parameter to enable asynchronous call.
-                  jsonrpc = new JSONRpcClient(function(result, e) {
-                        defer.resolve(result,e);
-                    }, jsonurl);
-            }).promise();
-            return deferred;
-        }
-  }
-  catch(e) {
-    if(e.message) {
-      alert(e.message);
-    }
-    else {
-      alert(e);
-    }
-  }
-}
-
-]]></source>
-
-<p>
-In these pages you also need to include the JavaScript necessary to process the
-JSON calls - this file is available as part of the JSON-RPC-Java distribution
-(it is included in the <code>webapps\jsonrpc</code> directory):
-</p>
-
-<source><![CDATA[
-$page.addScript($content.getURI('scripts/jsonrpc.js'))
-]]></source>
-
-<p>
-Then you need to set up the specific handler for the page (in this case a 
asynchronous handler):
-</p>
-
-<source><![CDATA[
-<script type="text/javascript">
-<!--
-  ## Set up the JSON-RPC handler.
-  var jsonurl = '$link.setScreen("MyJsonScreen")';
-
-  ## myArg below would be provided when you call this function from your
-  ## web page (usually you would retrieve something via the DOM or your
-  ## favorite JavaScript DOM wrapper library).
-  function retrieveHello(myArg) {
-    ## This is a an ansynchronous call as you provide as first parameter a 
callback function to getHello
-    ## (Jabsorb JSON-RPC library expects it this way).
-    var promiseA = jsonOnLoad();
-    var promiseB = jQuery.Deferred();
-    promiseA.done(
-       function() {
-         jQuery.Deferred(function(deferred) {
-           jsonrpc.myFunctions.getHello( function(res,e) {
-                    deferred.resolve(); // not used
-                    promiseB.resolve(res);
-                  }, " + myArg + ")" );
-            }).promise();
-        }
-    );
-    return jQuery.when(promiseA, promiseB);
-    }
-    
-  # call function 
-  var helloResult;
-  var promise = retrieveHello(myArg);
-  promise.done( 
-      function(resultA,resultB) {
-        helloResult = resultB;
-        ## Here or in another dependent Promise you would again use the DOM to 
include the result somewhere on your
-        ## page.
-    }
-  ); 
-//-->
-</script>
-]]></source>
-
-</subsection>
-<p>
-The above code is executable by users that are not logged into your 
application.
-Your Screen class can extend JSONSecureScreen to require that users be logged 
in
-before allowing execution.
-</p>
-
-</section>
-
-</body>
-</document>
+<?xml version="1.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.
+-->
+
+<document>
+
+ <properties>
+  <title>Turbine Services - JSON-RPC Service</title>
+  <author email="[email protected]">Scott Eade</author>
+ </properties>
+
+<body>
+
+<section name="JSON-RPC Service">
+
+<p>
+The JSON-RPC Service supports JavaScript to Java AJAX communications using
+<a href="https://code.google.com/p/jabsorb/";>JSON-RPC-Java</a>
+(Jabsorb replaced project oss.metaparadigm.com/jsonrpc/. As of March 2015 
Google Code projects are only read-only and this project is <a 
href="https://code.google.com/archive/p/jabsorb/";>archived</a> too, though GIT 
exports are allowed probably until Jan 2016, e.g. 
https://github.com/gmkll/jabsorb).
+</p>
+
+</section>
+
+<section name="Configuration">
+
+<source><![CDATA[
+# -------------------------------------------------------------------
+#
+#  S E R V I C E S
+#
+# -------------------------------------------------------------------
+...
+services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
+...
+]]></source>
+
+</section>
+
+<section name="Usage">
+
+<p>
+There are a number of things you need to do in order to add AJAX functionality
+to your webapp. First you implement the functions:
+</p>
+
+<source><![CDATA[
+public class MyJsonFunctions
+{
+    public String getHello(String clientParameter)
+    {
+        return "Hello " + clientParameter;
+    }
+    public String getGoodbye(String clientParameter)
+    {
+        return "Goodbye " + clientParameter;
+    }
+}
+]]></source>
+
+<p>
+Next you implement your Screen class to make your functions available:
+</p>
+
+<source><![CDATA[
+public class MyJsonScreen extends JSONScreen
+{
+    public void doOutput(RunData data) throws Exception
+    {
+        MyJsonFunctions myFunctions = new MyJsonFunctions();
+
+        // Session specific
+        TurbineJsonRpc.registerObject(data.getSession(), "myFunctions", 
myFunctions);
+
+        // Global
+        //TurbineJsonRpc.registerObjectGlobal("testGlobal", testObject);
+
+        super.doOutput(data);
+    }
+}
+]]></source>
+
+<subsection name="Client Side: Synchronous AJAX Calls">
+<p>
+
+Now we shift focus to your template classes.  Firstly, there are a few useful
+utility functions that you need to make sure are available to the pages that
+will include AJAX functionality:
+</p>
+
+<source><![CDATA[
+// Body onload utility (supports multiple onload functions)
+function SafeAddOnload(func) {
+  var oldonload = window.onload;
+  if (typeof window.onload != 'function') {
+    window.onload = func;
+  } else {
+    window.onload = function() {
+      oldonload();
+      func();
+    };
+  }
+}
+
+// Prepare for possible JSON-RPC requests.
+// jsonurl must be set before calling this function.
+// First example synchronous call
+function jsonOnLoadSync() {
+  try {
+    jsonrpc = new JSONRpcClient(jsonurl);
+  }
+  catch(e) {
+    if(e.message) {
+      alert(e.message);
+    }
+    else {
+      alert(e);
+    }
+  }
+}
+
+
+// Process a JSON-RPC request.
+function jsonEval(evalStr) {
+  try  {
+    return eval(evalStr);
+  }
+  catch(e) {
+    if(e.javaStack) {
+      alert("Exception: \n\n" + e.javaStack);
+    }
+    else {
+      alert("Exception: \n\n" + e);
+    }
+  }
+  return null;
+}
+]]></source>
+
+<p>
+In these pages you also need to include the JavaScript necessary to process the
+JSON calls - this file is available as part of the JSON-RPC Java distribution
+(it is included in the <code>webapps\jsonrpc</code> directory):
+</p>
+
+<source><![CDATA[
+$page.addScript($content.getURI('scripts/jsonrpc.js'))
+]]></source>
+
+<p>
+Then you need to set up the specific handler for the page (synchronous 
example):
+</p>
+
+<source><![CDATA[
+<script type="text/javascript">
+<!--
+  ## Set up the JSON-RPC handler.
+  var jsonurl = '$link.setScreen("MyJsonScreen")';
+  SafeAddOnload(jsonOnLoad);
+  ## myArg below would be provided when you call this function from your
+  ## web page (usually you would retrieve something via the DOM or your
+  ## favorite JavaScript DOM wrapper library).
+  function retrieveHello(myArg) {
+    ## This is a synchronous call.
+    var helloResult = jsonEval("jsonrpc.myFunctions.getHello(" + myArg + ")");
+    if(null == helloResult) {
+      alert('Something went wrong!');
+      return;
+    }
+    ## Here you would again use the DOM to include the result somewhere on your
+    ## page.
+  }
+-->
+</script>
+]]></source>
+
+</subsection>
+<subsection name="Client Side: Asynchronous AJAX Call">
+
+<p>
+Alternatively, asynchronous calls require handling of the deferred objects, 
which could be done by using some kind of <a 
href="https://www.promisejs.org/";>Promise</a>) library.
+As an example a <a 
href="http://api.jquery.com/category/deferred-object/";>JQuery Promise Object 
model</a> (supported since version 1.5) is shown.
+Usage of asynchronous calls conforms more to <a 
href="ttps://xhr.spec.whatwg.org/#synchronous-flag">XMLHttpRequest 
specification</a>.
+</p>
+
+<source><![CDATA[
+
+// Prepare for possible JSON-RPC requests.
+// jsonurl must be set before calling this function.
+// Second example asynchronous call
+var deferred;
+function jsonOnLoad() {
+  try {
+      // This feature is available since jabsorb 1.1 release, cft. 
webapps/jaxrpc/CHANGES.txt.
+      // JQuery Promises are available since jQuery 1.5/1.8 (with major 
changes).
+      // This is just an example, any other Promise handling will do it.
+       if (deferred != undefined) {
+            return deferred;
+        } else {
+            deferred =  jQuery.Deferred(function(defer) {
+      // Add a default function as first parameter to enable asynchronous call.
+                  jsonrpc = new JSONRpcClient(function(result, e) {
+                        defer.resolve(result,e);
+                    }, jsonurl);
+            }).promise();
+            return deferred;
+        }
+  }
+  catch(e) {
+    if(e.message) {
+      alert(e.message);
+    }
+    else {
+      alert(e);
+    }
+  }
+}
+
+]]></source>
+
+<p>
+In these pages you also need to include the JavaScript necessary to process the
+JSON calls - this file is available as part of the JSON-RPC-Java distribution
+(it is included in the <code>webapps\jsonrpc</code> directory):
+</p>
+
+<source><![CDATA[
+$page.addScript($content.getURI('scripts/jsonrpc.js'))
+]]></source>
+
+<p>
+Then you need to set up the specific handler for the page (in this case a 
asynchronous handler):
+</p>
+
+<source><![CDATA[
+<script type="text/javascript">
+<!--
+  ## Set up the JSON-RPC handler.
+  var jsonurl = '$link.setScreen("MyJsonScreen")';
+
+  ## myArg below would be provided when you call this function from your
+  ## web page (usually you would retrieve something via the DOM or your
+  ## favorite JavaScript DOM wrapper library).
+  function retrieveHello(myArg) {
+    ## This is a an ansynchronous call as you provide as first parameter a 
callback function to getHello
+    ## (Jabsorb JSON-RPC library expects it this way).
+    var promiseA = jsonOnLoad();
+    var promiseB = jQuery.Deferred();
+    promiseA.done(
+       function() {
+         jQuery.Deferred(function(deferred) {
+           jsonrpc.myFunctions.getHello( function(res,e) {
+                    deferred.resolve(); // not used
+                    promiseB.resolve(res);
+                  }, " + myArg + ")" );
+            }).promise();
+        }
+    );
+    return jQuery.when(promiseA, promiseB);
+    }
+
+  # call function
+  var helloResult;
+  var promise = retrieveHello(myArg);
+  promise.done(
+      function(resultA,resultB) {
+        helloResult = resultB;
+        ## Here or in another dependent Promise you would again use the DOM to 
include the result somewhere on your
+        ## page.
+    }
+  );
+-->
+</script>
+]]></source>
+
+</subsection>
+<p>
+The above code is executable by users that are not logged into your 
application.
+Your Screen class can extend JSONSecureScreen to require that users be logged 
in
+before allowing execution.
+</p>
+
+</section>
+
+</body>
+</document>

Modified: turbine/core/trunk/xdocs/services/security-service.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/services/security-service.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/services/security-service.xml (original)
+++ turbine/core/trunk/xdocs/services/security-service.xml Thu Oct 19 12:34:25 
2017
@@ -34,9 +34,9 @@ and permissions in groups.
 </p>
 <p>
 Turbine uses the <a href="/fulcrum//fulcrum-security-api/index.html">Fulcrum 
Security API</a>
-to provide security features to applications. In the Fulcrum repository, 
-implementations exist for 
-<a href="/fulcrum/fulcrum-security-hibernate/index.html">Hibernate</a>, 
+to provide security features to applications. In the Fulcrum repository,
+implementations exist for
+<a href="/fulcrum/fulcrum-security-hibernate/index.html">Hibernate</a>,
 <a href="/fulcrum/fulcrum-security-torque/index.html">Torque</a>
 and <a href="/fulcrum/fulcrum-security-nt/index.html">NTLM</a>.
 </p>
@@ -105,10 +105,10 @@ If you have have additional columns in t
 
 - create a non default wrapper.class. This class should extend DefaultUserImpl 
and override or add the required properties.
 
-- best practice would be to provide an interface to communicate on same 
standards between this wrapper.class and the backend ORM-class (e.g generated 
TurbineTorqueUser class). Otherwise you could use your ORM class. 
+- best practice would be to provide an interface to communicate on same 
standards between this wrapper.class and the backend ORM-class (e.g generated 
TurbineTorqueUser class). Otherwise you could use your ORM class.
 
  The ORM class is e.g. fetched from the default implementation of the Fulcrum 
User Manager (org.apache.fulcrum.security.UserManager) (as configured in 
componentConfiguration.xml userManager->className) and the Turbine User Manager 
gets it by fetching it first from the Fulcrum User Manager (= umDelegate) and 
then setting this class as userDelegate in the wrapper class.
-   
+
 </p>
 
 </section>
@@ -117,17 +117,17 @@ If you have have additional columns in t
 <p>
 The actual implementations for the different Fulcrum services that
 define the behavior of the security service are configured in the
-files <code>roleConfiguration.xml</code> and 
+files <code>roleConfiguration.xml</code> and
 <code>componentConfiguration.xml</code>. All of them can be extended
 and/or modified to meet your requirements. The following example shows
-the sections for the 
+the sections for the
 <a href="/fulcrum/fulcrum-security-torque/index.html">Torque</a>
 implementation, using the Turbine security model.
 
 <subsection name="Dependencies">
-Turbine 4.0 does not depend on a particular Fulcrum Security 
+Turbine 4.0 does not depend on a particular Fulcrum Security
 implementation. To use the Torque-flavor, you need to specify
-the dependency explicitly in your POM: 
+the dependency explicitly in your POM:
 <source><![CDATA[
 <dependency>
   <groupId>org.apache.fulcrum</groupId>

Modified: turbine/core/trunk/xdocs/services/ui-service.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/services/ui-service.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/services/ui-service.xml (original)
+++ turbine/core/trunk/xdocs/services/ui-service.xml Thu Oct 19 12:34:25 2017
@@ -1,217 +1,217 @@
-<?xml version="1.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.
--->
-
-<document>
-
- <properties>
-  <title>Turbine Services - UI Service</title>
-  <author email="[email protected]">Scott Eade</author>
- </properties>
-
-<body>
-
-<section name="UI Service">
-
-<p>
-The UI (User Interface) Service allows your Turbine application to be skinned
-using simple properties files that are located in the 
WEBAPP/resources/ui/skins/
-directory hierarchy.
-</p>
-
-<p>
-The service and its associated pull tool provide the following enhancements 
over
-the old UIManager pull tool (which has been deprecated as od Turbine 2.3.3):
-</p>
-<ul>
-<li>Skin properties are shared between all users with lazy loading.</li>
-<li>Non-default skin files inherit properties from the default skin</li>
-<li>Access to skin properties from screen and action classes is now provided 
for</li>
-<li>Access is provided to the list of available skins</li>
-</ul>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-...
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-...
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-...
-## session scope allows us to pul the name of the selected skin from user.Temp
-## If you wanted the same skin to apply for all users you could use global 
scope.
-tool.session.ui = org.apache.turbine.services.pull.tools.UITool
-tool.ui.skin = default
-...
-]]></source>
-
-<p>
-Skin properties are defined in WEBAPP/resources/ui/skins/, the following might
-exist in a file WEBAPP/resources/ui/skins/default/skin.props:
-</p>
-
-<source><![CDATA[
-checkedImage = check.gif
-checkedImageAltText = Tick
-label_Introduction = Introduction
-l10n_label_introduction = introduction
-]]></source>
-
-<p>
-and the following might
-exist in a file WEBAPP/resources/ui/skins/custom_skin_1/skin.props:
-</p>
-
-<source><![CDATA[
-checkedImage = check-blue.gif
-checkedImageAltText = Blue tick
-label_Introduction = Summary
-l10n_label_introduction = summary
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-Retrieving a value from a skin is as simple as (where user.getSkin() returns 
the
-name of the currently selected skin):
-</p>
-
-<source><![CDATA[
-TurbineUI.get(user.getSkin(), "label_Introduction")
-]]></source>
-
-<p>
-or in a template (the current skin is retrieved from user.Temp):
-</p>
-
-<source><![CDATA[
-$ui.label_Introduction
-]]></source>
-
-<p>
-Images, css and javascript files are stored under the skin directory also and
-can be accessed thus:
-</p>
-
-<source><![CDATA[
-#set($imageurl = $ui.image($imageName))
-## Filename is skin.css
-#set($cssurl = $ui.getStylecss())
-#set($jsurl = $ui.getScript($filename))
-]]></source>
-
-<p>
-You can retrieve an array containing the names of the available skins thus:
-</p>
-
-<source><![CDATA[
-  String[] availableSkins = TurbineUI.getSkinNames();
-]]></source>
-
-<p>
-or in a template:
-</p>
-
-<source><![CDATA[
-  #set($availablekins = $ui.SkinNames)
-]]></source>
-
-<p>
-You can combine skinning and <a 
href="localization-service.html">localization</a>
-thus:
-</p>
-
-<source><![CDATA[
-## Retrieve the localized label_introduction or label_summary depending on the
-## selected skin
-$l10n.get("label_$ui.l10n_label_introduction")
-]]></source>
-
-<p>
-Please refer to the JavaDocs for the org.apache.turbine.services.ui package for
-further details.
-</p>
-
-</section>
-
-<section name="Properties">
-<p>
-You can configure the UI Service using the following properties:
-</p>
-
-<table>
-<tr>
-<th>Property</th>
-<th>Default</th>
-<th>Function</th>
-</tr>
-<tr>
-<td>tool.ui.dir.skin</td>
-<td>/ui/skins</td>
-<td>The name of the skin directory that is to be used for the web 
application.</td>
-</tr>
-<tr>
-<td>tool.ui.skin</td>
-<td>default</td>
-<td>The name of the default skin that is to be used for the web 
application.</td>
-</tr>
-<tr>
-<td>tool.ui.dir.image</td>
-<td>/images</td>
-<td>The name of the image directory inside the skin that is to be used for the
- web application.</td>
-</tr>
-<tr>
-<td>tool.ui.css</td>
-<td>skin.css</td>
-<td>The name of the css file that is to be used for the web application.</td>
-</tr>
-
-<tr>
-<td>tool.ui.want.relative</td>
-<td>false</td>
-<td>You can configure the UI Service to return relative links for the web
- application by setting this to <code>true</code>.</td>
-</tr>
-</table>
-
-<p>
-Note that the name of the file within the skin directory that actually contains
-the name/value pairs for the skin is fixed at <em>skin.props</em>.
-</p>
-
-</section>
-
-</body>
-</document>
+<?xml version="1.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.
+-->
+
+<document>
+
+ <properties>
+  <title>Turbine Services - UI Service</title>
+  <author email="[email protected]">Scott Eade</author>
+ </properties>
+
+<body>
+
+<section name="UI Service">
+
+<p>
+The UI (User Interface) Service allows your Turbine application to be skinned
+using simple properties files that are located in the 
WEBAPP/resources/ui/skins/
+directory hierarchy.
+</p>
+
+<p>
+The service and its associated pull tool provide the following enhancements 
over
+the old UIManager pull tool (which has been deprecated as od Turbine 2.3.3):
+</p>
+<ul>
+<li>Skin properties are shared between all users with lazy loading.</li>
+<li>Non-default skin files inherit properties from the default skin</li>
+<li>Access to skin properties from screen and action classes is now provided 
for</li>
+<li>Access is provided to the list of available skins</li>
+</ul>
+
+</section>
+
+<section name="Configuration">
+
+<source><![CDATA[
+# -------------------------------------------------------------------
+#
+#  S E R V I C E S
+#
+# -------------------------------------------------------------------
+...
+services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
+...
+
+# -------------------------------------------------------------------
+#
+#  P U L L  S E R V I C E
+#
+# -------------------------------------------------------------------
+...
+## session scope allows us to pul the name of the selected skin from user.Temp
+## If you wanted the same skin to apply for all users you could use global 
scope.
+tool.session.ui = org.apache.turbine.services.pull.tools.UITool
+tool.ui.skin = default
+...
+]]></source>
+
+<p>
+Skin properties are defined in WEBAPP/resources/ui/skins/, the following might
+exist in a file WEBAPP/resources/ui/skins/default/skin.props:
+</p>
+
+<source><![CDATA[
+checkedImage = check.gif
+checkedImageAltText = Tick
+label_Introduction = Introduction
+l10n_label_introduction = introduction
+]]></source>
+
+<p>
+and the following might
+exist in a file WEBAPP/resources/ui/skins/custom_skin_1/skin.props:
+</p>
+
+<source><![CDATA[
+checkedImage = check-blue.gif
+checkedImageAltText = Blue tick
+label_Introduction = Summary
+l10n_label_introduction = summary
+]]></source>
+
+</section>
+
+<section name="Usage">
+
+<p>
+Retrieving a value from a skin is as simple as (where user.getSkin() returns 
the
+name of the currently selected skin):
+</p>
+
+<source><![CDATA[
+TurbineUI.get(user.getSkin(), "label_Introduction")
+]]></source>
+
+<p>
+or in a template (the current skin is retrieved from user.Temp):
+</p>
+
+<source><![CDATA[
+$ui.label_Introduction
+]]></source>
+
+<p>
+Images, css and javascript files are stored under the skin directory also and
+can be accessed thus:
+</p>
+
+<source><![CDATA[
+#set($imageurl = $ui.image($imageName))
+## Filename is skin.css
+#set($cssurl = $ui.getStylecss())
+#set($jsurl = $ui.getScript($filename))
+]]></source>
+
+<p>
+You can retrieve an array containing the names of the available skins thus:
+</p>
+
+<source><![CDATA[
+  String[] availableSkins = TurbineUI.getSkinNames();
+]]></source>
+
+<p>
+or in a template:
+</p>
+
+<source><![CDATA[
+  #set($availablekins = $ui.SkinNames)
+]]></source>
+
+<p>
+You can combine skinning and <a 
href="localization-service.html">localization</a>
+thus:
+</p>
+
+<source><![CDATA[
+## Retrieve the localized label_introduction or label_summary depending on the
+## selected skin
+$l10n.get("label_$ui.l10n_label_introduction")
+]]></source>
+
+<p>
+Please refer to the JavaDocs for the org.apache.turbine.services.ui package for
+further details.
+</p>
+
+</section>
+
+<section name="Properties">
+<p>
+You can configure the UI Service using the following properties:
+</p>
+
+<table>
+<tr>
+<th>Property</th>
+<th>Default</th>
+<th>Function</th>
+</tr>
+<tr>
+<td>tool.ui.dir.skin</td>
+<td>/ui/skins</td>
+<td>The name of the skin directory that is to be used for the web 
application.</td>
+</tr>
+<tr>
+<td>tool.ui.skin</td>
+<td>default</td>
+<td>The name of the default skin that is to be used for the web 
application.</td>
+</tr>
+<tr>
+<td>tool.ui.dir.image</td>
+<td>/images</td>
+<td>The name of the image directory inside the skin that is to be used for the
+ web application.</td>
+</tr>
+<tr>
+<td>tool.ui.css</td>
+<td>skin.css</td>
+<td>The name of the css file that is to be used for the web application.</td>
+</tr>
+
+<tr>
+<td>tool.ui.want.relative</td>
+<td>false</td>
+<td>You can configure the UI Service to return relative links for the web
+ application by setting this to <code>true</code>.</td>
+</tr>
+</table>
+
+<p>
+Note that the name of the file within the skin directory that actually contains
+the name/value pairs for the skin is fixed at <em>skin.props</em>.
+</p>
+
+</section>
+
+</body>
+</document>

Modified: turbine/core/trunk/xdocs/todo.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/xdocs/todo.xml?rev=1812628&r1=1812627&r2=1812628&view=diff
==============================================================================
--- turbine/core/trunk/xdocs/todo.xml (original)
+++ turbine/core/trunk/xdocs/todo.xml Thu Oct 19 12:34:25 2017
@@ -41,10 +41,9 @@ No current items.
 <subsection name="Stuff that needs to be looked into (current release or next 
release)">
 <p>
   <ul>
-    <li>Googlezation of URLs (<a 
href="http://marc.theaimsgroup.com/?l=turbine-user&amp;m=103008672127247&amp;w=2";>See
 here</a>)</li>
-    <li>Make sure that pull tools get refreshed correctly under all 
circumstances</li>
-    <li>Check lifetimes of authorized and session tools if the application is 
not the standard login-logout application</li>
-    <li>Move AvalonComponentService to the Fortress container (suggested by 
the avalon-dev list)</li>
+    <li>Make sure that pull tools get refreshed correctly under all 
circumstances (done?)</li>
+    <li>Check lifetimes of authorized and session tools if the application is 
not the standard login-logout application (done?)</li>
+    <li>Move AvalonComponentService to the Fortress container (suggested by 
the avalon-dev list) - or looking for an alternative</li>
   </ul>
 </p>
 </subsection>
@@ -52,8 +51,8 @@ No current items.
 <subsection name="Blue Skying for future Turbine releases">
 <p>
   <ul>
-    <li>Move forward to a component based architecture (avalonization)  
(partly done!)</li>
-    <li>Decouple the code base into core, components and toolbox</li>
+    <li>Servlet 3.x asynchronous cycle handling / prototype / proof of concept 
(servlet API is still 2.5 in Turbine in 2017)</li>
+    <li>OSGI or Java 9 modularization (proposal exists and Java required 
version is still 6 for Turbine in 2017</li>
   </ul>
 </p>
 </subsection>


Reply via email to