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&m=103008672127247&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>
