You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Bruno Busco <br...@gmail.com> on 2010/09/05 15:31:52 UTC

Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

We should definitively have at least a simple demo of webslinger application
in the Example.
Is someone working on that?

-Bruno

2010/9/5 Jacques Le Roux <ja...@les7arts.com>

> I removed <author>Adam Heath</author> at r992768
> I'm still waiting an explanation about Webslinger, is there someting else
> than the code?
>
> Thanks
>
> Jacques
>
> Jacques Le Roux wrote:
>
>> I found
>> <author>Adam Heath</author> by chance.
>> I wonder if we should keep it in Apache OFBiz...
>> Also I understand that it's good for BrainFood to have Webslinger in OFBiz
>> repo, but for OFBiz?
>> What Webslinger is bringing to the project?
>>
>> Thanks to clarify please
>>
>> Jacques
>>
>> From: <do...@apache.org>
>>
>>> Author: doogie
>>> Date: Fri Mar 13 01:12:11 2009
>>> New Revision: 753081
>>>
>>> URL: http://svn.apache.org/viewvc?rev=753081&view=rev
>>> Log:
>>> New webslinger component.  This is being added to framework, based
>>> on the desire to make use of it in a support role.
>>>
>>> It is *not* enabled yet, not part of the build, nor used at runtime
>>> by the server.  That will come shortly.
>>>
>>> Added:
>>>   ofbiz/trunk/framework/webslinger/   (with props)
>>>   ofbiz/trunk/framework/webslinger/build.xml
>>>   ofbiz/trunk/framework/webslinger/config/
>>>   ofbiz/trunk/framework/webslinger/config/webslinger.properties
>>>   ofbiz/trunk/framework/webslinger/data/
>>>   ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml
>>>   ofbiz/trunk/framework/webslinger/entitydef/
>>>   ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml
>>>   ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml
>>>   ofbiz/trunk/framework/webslinger/lib/
>>>
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar
>>> (with props)
>>>
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar
>>>   (with props)
>>>
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar
>>>   (with props)
>>>
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar
>>>   (with props)
>>>   ofbiz/trunk/framework/webslinger/modules/
>>>   ofbiz/trunk/framework/webslinger/modules/defaults.zip   (with props)
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/www/
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>> /
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>> /data-filter
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>> /type
>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>>   ofbiz/trunk/framework/webslinger/ofbiz-component.xml
>>>   ofbiz/trunk/framework/webslinger/src/
>>>   ofbiz/trunk/framework/webslinger/src/META-INF/
>>>   ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml
>>>   ofbiz/trunk/framework/webslinger/src/org/
>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/
>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/
>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>>
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>>   ofbiz/trunk/framework/webslinger/webapp/
>>>   ofbiz/trunk/framework/webslinger/webapp/webslinger/
>>>   ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/
>>>   ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>>   ofbiz/trunk/framework/webslinger/websites/
>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/
>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/Config/
>>>
>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/Var/   (with
>>> props)
>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/www/
>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>>
>>> Propchange: ofbiz/trunk/framework/webslinger/
>>>
>>> ------------------------------------------------------------------------------
>>> --- svn:ignore (added)
>>> +++ svn:ignore Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1 @@
>>> +build
>>>
>>> Added: ofbiz/trunk/framework/webslinger/build.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/build.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/build.xml (added)
>>> +++ ofbiz/trunk/framework/webslinger/build.xml Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,69 @@
>>> +<?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.
>>> +-->
>>> +
>>> +<project name="OFBiz - Webslinger" default="jar" basedir=".">
>>> +    <import file="../../common.xml"/>
>>> +
>>> +    <!--
>>> ================================================================== -->
>>> +    <!-- Initialization of all property settings
>>>    -->
>>> +    <!--
>>> ================================================================== -->
>>> +
>>> +    <property name="desc" value="Webslinger Component"/>
>>> +    <property name="name" value="ofbiz-webslinger"/>
>>> +    <property name="ofbiz.home.dir" value="../.."/>
>>> +
>>> +    <path id="local.class.path">
>>> +        <fileset dir="lib" includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/entity/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/entity/build/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib/j2eespecs"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib/commons"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib/scripting"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/build/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/security/build/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/service/build/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/catalina/build/lib"
>>> includes="*.jar"/>
>>> +        <fileset dir="${ofbiz.home.dir}/framework/catalina/lib"
>>> includes="*.jar"/>
>>> +        <pathelement
>>> location="${ofbiz.home.dir}/framework/catalina/build/classes"/>
>>> +    </path>
>>> +
>>> +    <!--
>>> ================================================================== -->
>>> +    <!-- Compilation of the source
>>>      -->
>>> +    <!--
>>> ================================================================== -->
>>> +
>>> +    <target name="classes" depends="prepare">
>>> +    <javac15/>
>>> +    </target>
>>> +
>>> +    <!--
>>> ================================================================== -->
>>> +    <!-- Build JavaDoc
>>>    -->
>>> +    <!--
>>> ================================================================== -->
>>> +
>>> +    <target name="docs" depends="prepare-docs">
>>> +        <mkdir dir="${build.dir}/javadocs"/>
>>> +        <javadoc packagenames="org.ofbiz.webslinger.*"
>>> +                 classpathref="local.class.path"
>>> +                 destdir="${build.dir}/javadocs"
>>> +                 Windowtitle="Open for Business - ${desc}">
>>> +            <sourcepath path="${src.dir}"/>
>>> +        </javadoc>
>>> +    </target>
>>> +</project>
>>>
>>> Added: ofbiz/trunk/framework/webslinger/config/webslinger.properties
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/config/webslinger.properties?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/config/webslinger.properties (added)
>>> +++ ofbiz/trunk/framework/webslinger/config/webslinger.properties Fri Mar
>>> 13 01:12:11 2009
>>> @@ -0,0 +1,17 @@
>>> +# 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.
>>> +moduleBase=ofbiz-component://webslinger/modules
>>>
>>> Added: ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml (added)
>>> +++ ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml Fri Mar
>>> 13 01:12:11 2009
>>> @@ -0,0 +1,28 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<!--
>>> +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.
>>> +-->
>>> +<entity-engine-xml>
>>> + <WebslingerServer webslingerServerId="WEBSLINGER"
>>> delegatorName="default" dispatcherName="webslinger" serverName="webslinger"
>>> target="ofbiz-component://webslinger/websites/webslinger"/>
>>> +
>>> + <WebslingerHostMapping hostName="*" contextPath="/webslinger"
>>> webslingerServerId="WEBSLINGER"/>
>>> +
>>> + <WebslingerHostSuffix hostSuffixId="PREVIEW" hostSuffix=".preview"/>
>>> + <WebslingerHostSuffix hostSuffixId="LOCALHOST"
>>> hostSuffix=".localhost"/>
>>> +
>>> +</entity-engine-xml>
>>>
>>> Added: ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml (added)
>>> +++ ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml Fri Mar 13
>>> 01:12:11 2009
>>> @@ -0,0 +1,32 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<!--
>>> +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.
>>> +-->
>>> +<entitygroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +        xsi:noNamespaceSchemaLocation="
>>> http://www.ofbiz.org/dtds/entitygroup.xsd">
>>> +    <entity-group group="org.ofbiz" entity="WebslingerServer" />
>>> +    <entity-group group="org.ofbiz" entity="WebslingerServerBase" />
>>> +    <entity-group group="org.ofbiz" entity="WebslingerHostMapping" />
>>> +    <entity-group group="org.ofbiz" entity="WebslingerLayout" />
>>> +    <entity-group group="org.ofbiz" entity="WebslingerHostSuffix" />
>>> +    <!--
>>> +    <entity-group group="org.ofbiz" entity="WebslingerModule" />
>>> +    <entity-group group="org.ofbiz" entity="WebslingerServerModule" />
>>> +    <entity-group group="org.ofbiz"
>>> entity="WebslingerServerModuleLayout" />
>>> +    -->
>>> +</entitygroup>
>>>
>>> Added: ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml (added)
>>> +++ ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml Fri Mar 13
>>> 01:12:11 2009
>>> @@ -0,0 +1,146 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<!--
>>> +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.
>>> +-->
>>> +<entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +    xsi:noNamespaceSchemaLocation="
>>> http://www.ofbiz.org/dtds/entitymodel.xsd">
>>> +    <title></title>
>>> +    <description></description>
>>> +    <copyright></copyright>
>>> +    <author>Adam Heath</author>
>>> +    <version>0.0</version>
>>> +
>>> +    <entity entity-name="WebslingerServer"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="Webslinger Server">
>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>> +      <field name="delegatorName" type="name"></field>
>>> +      <field name="dispatcherName" type="name"></field>
>>> +      <field name="serverName" type="name"></field>
>>> +      <field name="webSiteId" type="id"></field>
>>> +      <field name="target" type="name"></field>
>>> +      <field name="loadAtStart" type="indicator"></field>
>>> +      <prim-key field="webslingerServerId"/>
>>> +      <relation type="one" fk-name="WSS_WS" rel-entity-name="WebSite">
>>> +          <key-map field-name="webSiteId"/>
>>> +      </relation>
>>> +    </entity>
>>> +
>>> +    <entity entity-name="WebslingerServerBase"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="Webslinger Server">
>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>> +      <field name="baseName" type="name"></field>
>>> +      <field name="seqNum" type="numeric"></field>
>>> +      <prim-key field="webslingerServerId"/>
>>> +      <prim-key field="baseName"/>
>>> +      <relation type="one" fk-name="WSB_WS"
>>> rel-entity-name="WebslingerServer">
>>> +          <key-map field-name="webslingerServerId"/>
>>> +      </relation>
>>> +    </entity>
>>> +
>>> +    <entity entity-name="WebslingerHostMapping"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="Webslinger Server">
>>> +      <field name="hostName" type="name"></field>
>>> +      <field name="contextPath" type="value"></field>
>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>> +      <prim-key field="hostName"/>
>>> +      <prim-key field="contextPath"/>
>>> +      <relation type="one" fk-name="WHM_WS"
>>> rel-entity-name="WebslingerServer">
>>> +          <key-map field-name="webslingerServerId"/>
>>> +      </relation>
>>> +    </entity>
>>> +
>>> +    <entity entity-name="WebslingerHostSuffix"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="Webslinger Server">
>>> +      <field name="hostSuffixId" type="id-ne"></field>
>>> +      <field name="hostSuffix" type="name"></field>
>>> +      <prim-key field="hostSuffixId"/>
>>> +    </entity>
>>> +
>>> +    <view-entity entity-name="WebslingerLayout"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="WebslingerServer and WebslingerHostMapping View
>>> Entity">
>>> +      <member-entity entity-alias="WS" entity-name="WebslingerServer"/>
>>> +      <member-entity entity-alias="WHM"
>>> entity-name="WebslingerHostMapping"/>
>>> +      <alias-all entity-alias="WS"/>
>>> +      <alias-all entity-alias="WHM">
>>> +       <exclude field="webslingerServerId"/>
>>> +      </alias-all>
>>> +      <view-link entity-alias="WS" rel-entity-alias="WHM">
>>> +        <key-map field-name="webslingerServerId"/>
>>> +      </view-link>
>>> +      <relation type="one" rel-entity-name="WebslingerServer">
>>> +        <key-map field-name="webslingerServerId"/>
>>> +      </relation>
>>> +      <relation type="many" rel-entity-name="WebslingerServerBase">
>>> +        <key-map field-name="webslingerServerId"/>
>>> +      </relation>
>>> +      <relation type="one" rel-entity-name="WebslingerHostMapping">
>>> +        <key-map field-name="hostName"/>
>>> +        <key-map field-name="contextPath"/>
>>> +      </relation>
>>> +    </view-entity>
>>> +    <!--
>>> +    <entity entity-name="WebslingerModule"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="Webslinger Module">
>>> +      <field name="moduleId" type="id-ne"></field>
>>> +      <field name="target" type="name"></field>
>>> +      <prim-key field="moduleId"/>
>>> +    </entity>
>>> +
>>> +    <entity entity-name="WebslingerServerModule"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="Webslinger Server">
>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>> +      <field name="moduleId" type="id-ne"></field>
>>> +      <prim-key field="webslingerServerId"/>
>>> +      <prim-key field="moduleId"/>
>>> +      <relation type="one" fk-name="WSM_WM"
>>> rel-entity-name="WebslingerModule">
>>> +          <key-map field-name="moduleId"/>
>>> +      </relation>
>>> +      <relation type="one" fk-name="WSM_WW"
>>> rel-entity-name="WebslingerServer">
>>> +          <key-map field-name="webslingerServerId"/>
>>> +      </relation>
>>> +    </entity>
>>> +
>>> +    <view-entity entity-name="WebslingerServerModuleLayout"
>>> +            package-name="org.ofbiz.webslinger"
>>> +            title="WebslingerModule and WebslingerServerModule View
>>> Entity">
>>> +      <member-entity entity-alias="WM" entity-name="WebslingerModule"/>
>>> +      <member-entity entity-alias="WSM"
>>> entity-name="WebslingerServerModule"/>
>>> +      <alias-all entity-alias="WM"/>
>>> +      <alias-all entity-alias="WSM">
>>> +       <exclude field="moduleId"/>
>>> +      </alias-all>
>>> +      <view-link entity-alias="WM" rel-entity-alias="WSM">
>>> +        <key-map field-name="moduleId"/>
>>> +      </view-link>
>>> +      <relation type="one" rel-entity-name="WebslingerModule">
>>> +        <key-map field-name="moduleId"/>
>>> +      </relation>
>>> +      <relation type="one" rel-entity-name="WebslingerServerModule">
>>> +        <key-map field-name="webslingerServerId"/>
>>> +        <key-map field-name="moduleId"/>
>>> +      </relation>
>>> +    </view-entity>
>>> +    -->
>>> +</entitymodel>
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> Binary file - no diff available.
>>>
>>> Propchange:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar
>>>
>>> ------------------------------------------------------------------------------
>>>   svn:mime-type = application/octet-stream
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> Binary file - no diff available.
>>>
>>> Propchange:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar
>>>
>>> ------------------------------------------------------------------------------
>>>   svn:mime-type = application/octet-stream
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> Binary file - no diff available.
>>>
>>> Propchange:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar
>>>
>>> ------------------------------------------------------------------------------
>>>   svn:mime-type = application/octet-stream
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> Binary file - no diff available.
>>>
>>> Propchange:
>>> ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar
>>>
>>> ------------------------------------------------------------------------------
>>>   svn:mime-type = application/octet-stream
>>>
>>> Added: ofbiz/trunk/framework/webslinger/modules/defaults.zip
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/defaults.zip?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> Binary file - no diff available.
>>>
>>> Propchange: ofbiz/trunk/framework/webslinger/modules/defaults.zip
>>>
>>> ------------------------------------------------------------------------------
>>>   svn:mime-type = application/octet-stream
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,17 @@
>>> +# 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.
>>> +application/x-ofbiz-condition ofbiz-condition
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition?rev=753081&view=auto
>>>
>>> ==============================================================================
>>>   (empty)
>>>
>>> Added:
>>>
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@/data-filter
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition%40/data-filter?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>> /data-filter
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>> /data-filter
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1 @@
>>> +java.lang.String:/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>> /type
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition%40/type?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@/type
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@/type
>>> Fri Mar
>>> 13 01:12:11 2009
>>> @@ -0,0 +1 @@
>>> +java.lang.String:data
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>> Fri Mar 13
>>> 01:12:11 2009
>>> @@ -0,0 +1,46 @@
>>>
>>> +/*******************************************************************************
>>> + * 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.
>>> +
>>> *******************************************************************************/
>>> +import org.ofbiz.entity.condition.EntityCondition
>>> +import org.ofbiz.entity.condition.EntityConditionList
>>> +import org.ofbiz.entity.condition.EntityExpr
>>> +import org.ofbiz.entity.condition.EntityOperator
>>> +
>>> +def buildCondition
>>> +def getValue = { item ->
>>> + if (item instanceof Map) return buildCondition(item)
>>> + return item
>>> +}
>>> +buildCondition = { item ->
>>> + switch (item.name) {
>>> + case "EntityConditionList":
>>> + def conditions = []
>>> + for (conditionDef in item.list) {
>>> + conditions.add(buildCondition(conditionDef))
>>> + }
>>> + return new EntityConditionList(conditions,
>>> EntityOperator.lookup(item.operator))
>>> + case "EntityExpr":
>>> + return new EntityExpr(getValue(item.left),
>>> EntityOperator.lookup(item.operator), getValue(item.right))
>>> + case "Include":
>>> + return webslinger.event(item.path)
>>> + default:
>>> + throw new InternalError(item.toString())
>>> + }
>>> +}
>>> +
>>> +return buildCondition(webslinger.payload)
>>>
>>> Added: ofbiz/trunk/framework/webslinger/ofbiz-component.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/ofbiz-component.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/ofbiz-component.xml (added)
>>> +++ ofbiz/trunk/framework/webslinger/ofbiz-component.xml Fri Mar 13
>>> 01:12:11 2009
>>> @@ -0,0 +1,35 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<!--
>>> +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.
>>> +-->
>>> +<ofbiz-component name="webslinger"
>>> +        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +        xsi:noNamespaceSchemaLocation="
>>> http://www.ofbiz.org/dtds/ofbiz-component.xsd">
>>> +    <resource-loader name="main" type="component"/>
>>> +    <classpath type="dir" location="config"/>
>>> +    <classpath type="jar" location="lib/*"/>
>>> +    <classpath type="jar" location="build/lib/*"/>
>>> +
>>> +    <entity-resource type="model" reader-name="main" loader="main"
>>> location="entitydef/entitymodel.xml"/>
>>> +    <entity-resource type="group" reader-name="main" loader="main"
>>> location="entitydef/entitygroup.xml"/>
>>> +    <entity-resource type="data" reader-name="seed" loader="main"
>>> location="data/WebslingerSeedData.xml"/>
>>> +
>>> +    <webapp name="webslinger" title="Webslinger" server="default-server"
>>> location="webapp/webslinger"
>>> +        base-permission="OFBTOOLS,WEBSLINGER"
>>> mount-point="/webslinger"/>
>>> +</ofbiz-component>
>>> +
>>>
>>> Added: ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml
>>> (added)
>>> +++ ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml Fri
>>> Mar 13 01:12:11 2009
>>> @@ -0,0 +1,27 @@
>>> +<?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.
>>> +-->
>>> +<providers>
>>> + <provider class-name="org.ofbiz.commons.vfs.ofbiz.OfbizHomeProvider">
>>> +  <scheme name="ofbiz-home"/>
>>> + </provider>
>>> + <provider
>>> class-name="org.ofbiz.commons.vfs.ofbiz.OfbizComponentProvider">
>>> +  <scheme name="ofbiz-component"/>
>>> + </provider>
>>> +</providers>
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,67 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.commons.vfs;
>>> +
>>> +import java.io.File;
>>> +import java.io.IOException;
>>> +import java.net.MalformedURLException;
>>> +
>>> +import org.apache.commons.vfs.CacheStrategy;
>>> +import org.apache.commons.vfs.FileObject;
>>> +import org.apache.commons.vfs.FileSystemException;
>>> +import org.apache.commons.vfs.FileSystemManager;
>>> +import org.apache.commons.vfs.impl.StandardFileSystemManager;
>>> +
>>> +import org.ofbiz.base.container.Container;
>>> +import org.ofbiz.base.container.ContainerException;
>>> +import org.webslinger.commons.vfs.VFSUtil;
>>> +
>>> +public class CommonsVfsContainer implements Container {
>>> +    private static StandardFileSystemManager sfsm;
>>> +
>>> +    public void init(String[] args, String configFile) throws
>>> ContainerException {
>>> +    }
>>> +
>>> +    public boolean start() throws ContainerException {
>>> +        try {
>>> +            StandardFileSystemManager sfsm =
>>> VFSUtil.createStandardFileSystemManager();
>>> +            FileObject currentDir = sfsm.resolveFile(new
>>> File(".").toURI().toURL().toString());
>>> +            sfsm.setBaseFile(currentDir);
>>> +            CommonsVfsContainer.sfsm = sfsm;
>>> +        } catch (FileSystemException e) {
>>> +            throw (ContainerException) new
>>> ContainerException("Initializing StandardFileSystemManager").initCause(e);
>>> +        } catch (MalformedURLException e) {
>>> +            throw (ContainerException) new
>>> ContainerException("Initializing StandardFileSystemManager").initCause(e);
>>> +        }
>>> +        return true;
>>> +    }
>>> +
>>> +    public void stop() throws ContainerException {
>>> +        sfsm.close();
>>> +        sfsm = null;
>>> +    }
>>> +
>>> +    public static FileObject resolveFile(String uri) throws IOException
>>> {
>>> +        return sfsm.resolveFile(uri);
>>> +    }
>>> +
>>> +    public static FileSystemManager getFileSystemManager() {
>>> +        return sfsm;
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,59 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.commons.vfs.ofbiz;
>>> +
>>> +import java.net.URL;
>>> +import java.util.Collection;
>>> +import org.apache.commons.vfs.FileObject;
>>> +import org.apache.commons.vfs.FileSystemException;
>>> +import org.apache.commons.vfs.FileSystemOptions;
>>> +import org.apache.commons.vfs.provider.AbstractFileProvider;
>>> +import org.apache.commons.vfs.provider.local.DefaultLocalFileProvider;
>>> +import org.ofbiz.base.location.FlexibleLocation;
>>> +import org.webslinger.commons.vfs.VFSUtil;
>>> +
>>> +public class OfbizComponentProvider extends AbstractFileProvider {
>>> +    public Collection getCapabilities() {
>>> +        return DefaultLocalFileProvider.capabilities;
>>> +    }
>>> +
>>> +    public FileObject findFile(FileObject base, String name,
>>> FileSystemOptions properties) throws FileSystemException {
>>> +        try {
>>> +            //name = name.replaceAll("^ofbiz-component://", "");
>>> +            int nameLength = name.length();
>>> +            int componentNameStart = 16;
>>> +            while (componentNameStart < nameLength &&
>>> name.charAt(componentNameStart) == '/') componentNameStart++;
>>> +            if (componentNameStart == nameLength) throw new
>>> IllegalArgumentException("Invalid name(" + name + ")");
>>> +            int componentNameEnd = componentNameStart;
>>> +            while (componentNameEnd < nameLength &&
>>> name.charAt(componentNameEnd) != '/') componentNameEnd++;
>>> +            if (componentNameEnd == nameLength) throw new
>>> IllegalArgumentException("Invalid name(" + name + ")");
>>> +            int restStart = componentNameEnd;
>>> +            while (restStart < nameLength && name.charAt(restStart) ==
>>> '/') restStart++;
>>> +            if (restStart == nameLength) throw new
>>> IllegalArgumentException("Invalid name(" + name + ")");
>>> +            String componentName = name.substring(componentNameStart,
>>> componentNameEnd);
>>> +            URL location =
>>> FlexibleLocation.resolveLocation("component://" + componentName + "/.");
>>> +            FileObject ofbizBase =
>>> getContext().resolveFile(location.toString(), properties);
>>> +            return
>>> VFSUtil.toFileObject(ofbizBase.getFileSystem().getFileSystemManager(),
>>> ofbizBase.resolveFile(name.substring(restStart)).getURL().toString(),
>>> properties);
>>> +        } catch (Exception e) {
>>> +            FileSystemException fse = new
>>> FileSystemException(e.getMessage(), null, e);
>>> +            fse.initCause(e);
>>> +            throw fse;
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,51 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.commons.vfs.ofbiz;
>>> +
>>> +import java.net.URL;
>>> +import java.util.Collection;
>>> +
>>> +import org.apache.commons.vfs.FileObject;
>>> +import org.apache.commons.vfs.FileSystemException;
>>> +import org.apache.commons.vfs.FileSystemOptions;
>>> +import org.apache.commons.vfs.provider.AbstractFileProvider;
>>> +import org.apache.commons.vfs.provider.local.DefaultLocalFileProvider;
>>> +
>>> +import org.ofbiz.base.location.FlexibleLocation;
>>> +
>>> +import org.webslinger.commons.vfs.VFSUtil;
>>> +
>>> +public class OfbizHomeProvider extends AbstractFileProvider {
>>> +    public Collection getCapabilities() {
>>> +        return DefaultLocalFileProvider.capabilities;
>>> +    }
>>> +
>>> +    public FileObject findFile(FileObject base, String name,
>>> FileSystemOptions properties) throws FileSystemException {
>>> +        //new Exception("findFile(" + base + ", " + name +
>>> ")").printStackTrace();
>>> +        try {
>>> +            URL location =
>>> FlexibleLocation.resolveLocation("ofbizhome://.");
>>> +            FileObject ofbizBase =
>>> getContext().resolveFile(location.toString(), properties);
>>> +            return
>>> VFSUtil.toFileObject(ofbizBase.getFileSystem().getFileSystemManager(),
>>> ofbizBase.resolveFile(name.substring(13)).getURL().toString(),
>>> properties);
>>> +        } catch (Exception e) {
>>> +            FileSystemException fse = new
>>> FileSystemException(e.getMessage(), null, e);
>>> +            fse.initCause(e);
>>> +            throw fse;
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,78 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.util.HashMap;
>>> +import java.util.Iterator;
>>> +import java.util.Locale;
>>> +import java.util.Map;
>>> +
>>> +import javax.servlet.ServletRequest;
>>> +import javax.servlet.http.HttpServletRequest;
>>> +
>>> +import org.ofbiz.base.util.GeneralException;
>>> +import org.ofbiz.base.util.ObjectType;
>>> +import org.ofbiz.base.util.UtilHttp;
>>> +import org.ofbiz.base.util.UtilMisc;
>>> +import org.ofbiz.base.util.UtilValidate;
>>> +import org.ofbiz.entity.GenericDelegator;
>>> +import org.ofbiz.entity.GenericValue;
>>> +import org.ofbiz.entity.jdbc.SqlJdbcUtil;
>>> +import org.ofbiz.entity.model.ModelEntity;
>>> +import org.ofbiz.entity.model.ModelField;
>>> +import org.ofbiz.entity.model.ModelFieldType;
>>> +
>>> +public class EntityHttpUtil {
>>> +    public static GenericValue makeValidValue(String entityName,
>>> ServletRequest request) throws GeneralException {
>>> +        return makeValidValue(entityName, false, request);
>>> +    }
>>> +
>>> +    public static GenericValue makeValidValue(String entityName, boolean
>>> includePks, ServletRequest request) throws
>>> GeneralException {
>>> +        if (request instanceof HttpServletRequest) return
>>> makeValidValue(entityName, includePks, (HttpServletRequest) request);
>>> +        throw new IllegalArgumentException("Not an HttpServletRequest");
>>> +    }
>>> +
>>> +    public static GenericValue makeValidValue(String entityName,
>>> HttpServletRequest request) throws GeneralException {
>>> +        return makeValidValue(entityName, false, request);
>>> +    }
>>> +
>>> +    public static GenericValue makeValidValue(String entityName, boolean
>>> includePks, HttpServletRequest request) throws
>>> GeneralException {
>>> +        GenericDelegator delegator = (GenericDelegator)
>>> request.getAttribute("delegator");
>>> +        GenericValue value = delegator.makeValue(entityName, (Map)
>>> null);
>>> +        ModelEntity model = value.getModelEntity();
>>> +        Iterator<ModelField> it = includePks ? model.getFieldsIterator()
>>> : model.getNopksIterator();
>>> +        Locale locale = UtilHttp.getLocale(request);
>>> +        while (it.hasNext()) {
>>> +            ModelField field = it.next();
>>> +            String fieldName = field.getName();
>>> +            String parameterValue = request.getParameter(fieldName);
>>> +            Object fieldValue;
>>> +            if (parameterValue == null) {
>>> +                fieldValue = null;
>>> +            } else {
>>> +                ModelFieldType fieldType =
>>> delegator.getEntityFieldType(model, field.getType());
>>> +                String wantedType = fieldType.getJavaType();
>>> +                fieldValue =
>>> ObjectType.simpleTypeConvert(parameterValue, wantedType, null, locale,
>>> true);
>>> +            }
>>> +            value.put(fieldName, fieldValue);
>>> +        }
>>> +        return value;
>>> +    }
>>> +}
>>> +
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,66 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import javax.transaction.Transaction;
>>> +
>>> +import org.ofbiz.entity.transaction.TransactionUtil;
>>> +import java.util.concurrent.Callable;
>>> +
>>> +public class EntityTransactionUtil {
>>> +    public static <V> V doNewTransaction(String ifErrorMessage,
>>> Callable<V> callable) throws Throwable {
>>> +        Transaction tx = TransactionUtil.suspend();
>>> +        try {
>>> +            return doTransaction(ifErrorMessage, callable);
>>> +        } finally {
>>> +            TransactionUtil.resume(tx);
>>> +        }
>>> +    }
>>> +
>>> +    public static <V> V doTransaction(String ifErrorMessage, Callable<V>
>>> callable) throws Throwable {
>>> +        boolean tx = TransactionUtil.begin();
>>> +        Throwable transactionAbortCause = null;
>>> +        try {
>>> +            try {
>>> +                return callable.call();
>>> +            } catch (Throwable t) {
>>> +                while (t.getCause() != null) {
>>> +                    t = t.getCause();
>>> +                }
>>> +                throw t;
>>> +            }
>>> +        } catch (Error e) {
>>> +            transactionAbortCause = e;
>>> +            throw e;
>>> +        } catch (RuntimeException e) {
>>> +            transactionAbortCause = e;
>>> +            throw e;
>>> +        } catch (Throwable t) {
>>> +            transactionAbortCause = t;
>>> +            throw t;
>>> +        } finally {
>>> +            if (transactionAbortCause == null) {
>>> +                TransactionUtil.commit(tx);
>>> +            } else {
>>> +                transactionAbortCause.printStackTrace();
>>> +                TransactionUtil.rollback(tx, ifErrorMessage,
>>> transactionAbortCause);
>>> +            }
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java?rev=753081&view=auto
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>> (added) +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>> Fri Mar 13 01:12:11 2009 @@ -0,0 +1,119 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.util.HashMap;
>>> +import java.util.Iterator;
>>> +import java.util.Map;
>>> +import java.util.concurrent.Callable;
>>> +import java.util.concurrent.ConcurrentHashMap;
>>> +import java.util.concurrent.ScheduledFuture;
>>> +import java.util.concurrent.TimeUnit;
>>> +import java.util.concurrent.atomic.AtomicReference;
>>> +
>>> +import org.ofbiz.entity.GenericDelegator;
>>> +import org.ofbiz.entity.GenericEntityException;
>>> +import org.ofbiz.entity.GenericPK;
>>> +import org.ofbiz.entity.GenericValue;
>>> +
>>> +import org.webslinger.lang.ConcurrentCache;
>>> +import org.webslinger.lang.ExecutionPool;
>>> +
>>> +public class StatsUpdater {
>>> +    private static final Updater UPDATER = new Updater();
>>> +
>>> +    public static void updateStats(GenericDelegator delegator, String
>>> entityName, Map<String, ? extends Object> keyFields,
>>> Map<String, ? extends Long> updateCountFields) throws
>>> GenericEntityException {
>>> +        GenericPK pk = delegator.makePK(entityName, keyFields);
>>> +        Map<String, Long> value = UPDATER.getValue(pk);
>>> +        synchronized (value) {
>>> +            for (Map.Entry<String, ? extends Long> entry:
>>> updateCountFields.entrySet()) {
>>> +                Long oldValue = value.get(entry.getKey());
>>> +                if (oldValue != null) {
>>> +                    value.put(entry.getKey(),
>>> Long.valueOf(oldValue.longValue() + entry.getValue()));
>>> +                } else {
>>> +                    value.put(entry.getKey(), entry.getValue());
>>> +                }
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    private static final class Updater implements Callable<Void> {
>>> +        protected AtomicReference<EntityHolder> entities = new
>>> AtomicReference<EntityHolder>(new EntityHolder(Updater.class,
>>> "entities", null));
>>> +        protected ScheduledFuture<Void> future;
>>> +
>>> +        protected Map<String, Long> getValue(GenericPK pk) throws
>>> GenericEntityException {
>>> +            synchronized (this) {
>>> +                if (future == null || future.isDone()) {
>>> +                    future = ExecutionPool.schedule(this, 1,
>>> TimeUnit.SECONDS);
>>> +                }
>>> +            }
>>> +            try {
>>> +                return entities.get().get(pk);
>>> +            } catch (RuntimeException e) {
>>> +                throw e;
>>> +            } catch (GenericEntityException e) {
>>> +                throw e;
>>> +            } catch (Exception e) {
>>> +                throw (GenericEntityException) new
>>> GenericEntityException(e.getMessage()).initCause(e);
>>> +            }
>>> +        }
>>> +
>>> +        public Void call() {
>>> +            EntityHolder oldEntities;
>>> +            EntityHolder newEntities = new EntityHolder(Updater.class,
>>> "entities", null);
>>> +            do {
>>> +                oldEntities = entities.get();
>>> +            } while (!entities.compareAndSet(oldEntities, newEntities));
>>> +            synchronized (Updater.class) {
>>> +                for (GenericPK pk: oldEntities.keys()) {
>>> +                    try {
>>> +                        Map<String, Long> add = oldEntities.get(pk);
>>> +                        GenericValue existing =
>>> pk.getDelegator().findOne(pk.getEntityName(), pk, false);
>>> +                        if (existing == null) {
>>> +                            existing =
>>> pk.getDelegator().create(pk.getEntityName(), pk);
>>> +                        }
>>> +                        for (Map.Entry<String, Long> entry:
>>> add.entrySet()) {
>>> +                            Long value = entry.getValue();
>>> +                            Long oldValue =
>>> existing.getLong(entry.getKey());
>>> +                            if (oldValue != null) {
>>> +                                existing.put(entry.getKey(),
>>> Long.valueOf(value.longValue() + oldValue.longValue()));
>>> +                            } else {
>>> +                                existing.put(entry.getKey(), value);
>>> +                            }
>>> +                        }
>>> +                        existing.store();
>>> +                    } catch (Exception e) {
>>> +                        e.printStackTrace();
>>> +                    }
>>> +                }
>>> +            }
>>> +            return null;
>>> +        }
>>> +    }
>>> +
>>> +    private static final class EntityHolder extends
>>> ConcurrentCache<GenericPK, Map<String, Long>> {
>>> +        protected EntityHolder(Class<?> owner, String field, String
>>> label) {
>>> +            super(owner, field, label, HARD);
>>> +        }
>>> +
>>> +        protected Map<String, Long> createValue(GenericPK pk) throws
>>> Exception {
>>> +            return new HashMap<String, Long>();
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,58 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.io.IOException;
>>> +import java.util.Map;
>>> +
>>> +import org.apache.bsf.BSFException;
>>> +
>>> +import org.ofbiz.service.DispatchContext;
>>> +import org.ofbiz.service.GenericServiceException;
>>> +import org.ofbiz.service.ModelService;
>>> +import org.ofbiz.service.ServiceDispatcher;
>>> +import org.ofbiz.service.engine.GenericAsyncEngine;
>>> +
>>> +public class WebslingerBSFServiceEngine extends GenericAsyncEngine {
>>> +    private static final String[] paramNames;
>>> +    private static final Class<?>[] paramTypes;
>>> +    static {
>>> +        paramNames = new String[] { "dispatcher", "context" };
>>> +        paramTypes = new Class<?>[] { DispatchContext.class, Map.class
>>> };
>>> +    }
>>> +
>>> +    public WebslingerBSFServiceEngine(ServiceDispatcher dispatcher) {
>>> +        super(dispatcher);
>>> +    }
>>> +
>>> +    public void runSyncIgnore(String localName, ModelService
>>> modelService, Map<String, Object> context) throws
>>> GenericServiceException {
>>> +        runSync(localName, modelService, context);
>>> +    }
>>> +
>>> +    public Map<String, Object> runSync(String localName, ModelService
>>> modelService, Map<String, Object> context) throws
>>> GenericServiceException {
>>> +        Object[] params = new Object[] {
>>> dispatcher.getLocalContext(localName), context };
>>> +        try {
>>> +            return (Map)
>>> WebslingerContainer.runEvent(modelService.engineName, modelService.location,
>>> paramNames, paramTypes,
>>> params);
>>> +        } catch (IOException e) {
>>> +            throw (GenericServiceException) new
>>> GenericServiceException(e.getMessage()).initCause(e);
>>> +        } catch (BSFException e) {
>>> +            throw (GenericServiceException) new
>>> GenericServiceException(e.getMessage()).initCause(e);
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,52 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.io.File;
>>> +
>>> +import org.apache.catalina.Engine;
>>> +import org.apache.catalina.core.StandardEngine;
>>> +
>>> +import org.ofbiz.base.util.UtilValidate;
>>> +import org.ofbiz.base.container.ContainerConfig;
>>> +import org.ofbiz.base.container.ContainerException;
>>> +import org.ofbiz.catalina.container.CatalinaContainer;
>>> +
>>> +import org.webslinger.catalina.WebslingerAccessLogValve;
>>> +
>>> +public class WebslingerCatalinaContainer extends CatalinaContainer {
>>> +    protected Engine createEngine(ContainerConfig.Container.Property
>>> engineConfig) throws ContainerException {
>>> +        Engine engine = super.createEngine(engineConfig);
>>> +        String logDir = ContainerConfig.getPropertyValue(engineConfig,
>>> "access-log-dir", null);
>>> +        if (logDir == null) return engine;
>>> +        WebslingerAccessLogValve al = new WebslingerAccessLogValve();
>>> +        if (!logDir.startsWith("/")) logDir =
>>> System.getProperty("ofbiz.home") + "/" + logDir;
>>> +        File logFile = new File(logDir);
>>> +        if (!logFile.isDirectory()) throw new ContainerException("Log
>>> directory [" + logDir + "] is not available; make sure the
>>> directory is created");
>>> +        al.setDirectory(logFile.getAbsolutePath());
>>> +        String alp2 = ContainerConfig.getPropertyValue(engineConfig,
>>> "access-log-pattern", null);
>>> +        if (!UtilValidate.isEmpty(alp2)) al.setPattern(alp2);
>>> +        String alp3 = ContainerConfig.getPropertyValue(engineConfig,
>>> "access-log-prefix", null);
>>> +        if (!UtilValidate.isEmpty(alp3)) al.setPrefix(alp3);
>>> +
>>>  al.setResolveHosts(ContainerConfig.getPropertyValue(engineConfig,
>>> "access-log-resolve", true));
>>> +        al.setRotatable(ContainerConfig.getPropertyValue(engineConfig,
>>> "access-log-rotate", false));
>>> +        ((StandardEngine) engine).addValve(al);
>>> +        return engine;
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,100 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.io.IOException;
>>> +import java.io.StringWriter;
>>> +import java.io.Writer;
>>> +import java.util.Map;
>>> +
>>> +import org.apache.bsf.BSFException;
>>> +import org.apache.commons.vfs.FileName;
>>> +import org.apache.commons.vfs.FileObject;
>>> +
>>> +import org.ofbiz.base.container.Container;
>>> +import org.ofbiz.base.container.ContainerException;
>>> +import org.ofbiz.commons.vfs.CommonsVfsContainer;
>>> +
>>> +import org.webslinger.bsf.LanguageManager;
>>> +import org.webslinger.template.CompiledTemplate;
>>> +import org.webslinger.template.TemplateManager;
>>> +import org.webslinger.vfs.CommonsVfsFileNameVFSDelegate;
>>> +import org.webslinger.vfs.TypeVFSDelegate;
>>> +
>>> +public class WebslingerContainer implements Container {
>>> +    private static TypeVFSDelegate vfsDelegate;
>>> +    private static LanguageManager languageManager;
>>> +    private static TemplateManager templateManager;
>>> +    private static final String[] templateParamNames = new String[]
>>> {"writer", "context"};
>>> +    private static final Class<?>[] templateParamTypes = new Class<?>[]
>>> {Writer.class, Map.class};
>>> +
>>> +    public void init(String[] args, String configFile) throws
>>> ContainerException {
>>> +    }
>>> +
>>> +    public boolean start() throws ContainerException {
>>> +        ClassLoader loader =
>>> Thread.currentThread().getContextClassLoader();
>>> +        TypeVFSDelegate.Resolver resolver = new
>>> TypeVFSDelegate.Resolver() {
>>> +            public Object resolve(String name) throws IOException {
>>> +                return CommonsVfsContainer.resolveFile(name);
>>> +            }
>>> +        };
>>> +        try {
>>> +            vfsDelegate = new TypeVFSDelegate(resolver);
>>> +            vfsDelegate.addVFSDelegate(FileName.class, new
>>> CommonsVfsFileNameVFSDelegate(vfsDelegate,
>>> CommonsVfsContainer.getFileSystemManager()));
>>> +            languageManager = new LanguageManager(vfsDelegate, null);
>>> +            languageManager.setClassLoader(loader);
>>> +            templateManager = new TemplateManager(vfsDelegate, null);
>>> +            templateManager.setClassLoader(loader);
>>> +        } catch (BSFException e) {
>>> +            throw (ContainerException) new
>>> ContainerException("Initializing StandardFileSystemManager").initCause(e);
>>> +        }
>>> +        return true;
>>> +    }
>>> +
>>> +    public void stop() throws ContainerException {
>>> +    }
>>> +
>>> +    public static LanguageManager getLanguageManager() {
>>> +        return languageManager;
>>> +    }
>>> +
>>> +    public static TemplateManager getTemplateManager() {
>>> +        return templateManager;
>>> +    }
>>> +
>>> +    public static Object runEvent(String language, String name, String[]
>>> paramNames, Class<?>[] paramTypes, Object[] params)
>>> throws BSFException, IOException {
>>> +        return getLanguageManager().apply(language, "top", 0, 0,
>>> CommonsVfsContainer.resolveFile(name), paramNames, params,
>>> paramTypes);
>>> +    }
>>> +
>>> +    public static String runTemplate(String language, String name,
>>> Map<String, Object> context) throws IOException {
>>> +        StringWriter writer = new StringWriter();
>>> +        runTemplate(language, name, writer, context);
>>> +        return writer.toString();
>>> +    }
>>> +
>>> +    public static void runTemplate(String language, String name, Writer
>>> writer, Map<String, Object> context) throws IOException
>>> { +        FileObject file = CommonsVfsContainer.resolveFile(name);
>>> +        CompiledTemplate template = getTemplate(language, file);
>>> +        template.run(file, writer, context);
>>> +    }
>>> +
>>> +    public static CompiledTemplate getTemplate(String language,
>>> FileObject file) throws IOException {
>>> +        return getTemplateManager().compileTemplate(language, "top", 0,
>>> 0, file);
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,206 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.io.File;
>>> +import java.io.IOException;
>>> +import java.lang.ref.SoftReference;
>>> +import java.net.URL;
>>> +import java.util.ArrayList;
>>> +import java.util.HashMap;
>>> +import java.util.HashSet;
>>> +import java.util.Iterator;
>>> +import java.util.List;
>>> +import java.util.Set;
>>> +
>>> +import javax.management.JMException;
>>> +import javax.naming.NamingException;
>>> +import javax.servlet.ServletConfig;
>>> +import javax.servlet.ServletContext;
>>> +import javax.servlet.ServletException;
>>> +import javax.servlet.http.HttpServletRequest;
>>> +import javax.servlet.http.HttpServletResponse;
>>> +import javax.xml.parsers.ParserConfigurationException;
>>> +
>>> +import org.xml.sax.SAXException;
>>> +
>>> +import org.apache.commons.vfs.FileObject;
>>> +import org.apache.commons.vfs.FileSystemException;
>>> +import org.apache.commons.vfs.FileSystemManager;
>>> +import org.apache.commons.vfs.NameScope;
>>> +
>>> +import org.ofbiz.base.util.UtilFormatOut;
>>> +import org.ofbiz.base.util.UtilMisc;
>>> +import org.ofbiz.base.util.UtilProperties;
>>> +import org.ofbiz.base.util.UtilValidate;
>>> +import org.ofbiz.entity.GenericEntity;
>>> +import org.ofbiz.entity.GenericEntityException;
>>> +import org.ofbiz.entity.GenericDelegator;
>>> +import org.ofbiz.entity.GenericValue;
>>> +import org.ofbiz.entity.transaction.TransactionFactory;
>>> +import org.ofbiz.entity.cache.Cache;
>>> +import org.ofbiz.entity.util.EntityUtil;
>>> +import org.ofbiz.security.SecurityFactory;
>>> +import org.ofbiz.service.LocalDispatcher;
>>> +import org.ofbiz.service.WebAppDispatcher;
>>> +
>>> +import org.webslinger.AbstractMappingWebslingerServletContextFactory;
>>> +import org.webslinger.WebslingerServletContext;
>>> +import org.webslinger.container.WebslingerContainer;
>>> +import org.webslinger.lang.ObjectUtil;
>>> +import org.webslinger.servlet.WebslingerServlet;
>>> +import org.webslinger.util.TTLObject;
>>> +import org.webslinger.collections.ArrayUtil;
>>> +import org.webslinger.collections.CollectionUtil;
>>> +
>>> +public class WebslingerContextMapper extends
>>> AbstractMappingWebslingerServletContextFactory {
>>> +    protected ServletContext servletContext;
>>> +    protected GenericDelegator delegator;
>>> +    protected final ArrayList<URL> globalReaderURLs = new
>>> ArrayList<URL>();
>>> +
>>> +    public void init(ServletConfig config) throws ServletException,
>>> IOException {
>>> +
>>>  System.err.println(org.webslinger.commons.vfs.flat.FlatFileProvider.class);
>>> +        servletContext = config.getServletContext();
>>> +        String delegatorName =
>>> servletContext.getInitParameter("entityDelegatorName");
>>> +        delegator = GenericDelegator.getGenericDelegator(delegatorName);
>>> +        String readerFiles =
>>> servletContext.getInitParameter("serviceReaderUrls");
>>> +        if (readerFiles != null) {
>>> +            for (String reader: CollectionUtil.split(readerFiles, ";"))
>>> {
>>> +                URL url =
>>>  config.getServletContext().getResource(reader);
>>> +                if (url != null) globalReaderURLs.add(url);
>>> +            }
>>> +        }
>>> +        super.init(config,
>>> UtilProperties.getPropertyValue("webslinger.properties", "moduleBase"));
>>> +    }
>>> +
>>> +    protected Layout[] getStartLayouts() throws Exception {
>>> +        ArrayList<Layout> layouts = new ArrayList<Layout>();
>>> +        try {
>>> +            for (GenericValue value:
>>> delegator.findByAnd("WebslingerServer", UtilMisc.toMap("loadAtStart", "Y")))
>>> {
>>> +                layouts.add(new OfbizLayout(value));
>>> +            }
>>> +        } catch (GenericEntityException e) {
>>> +        }
>>> +        return layouts.toArray(new Layout[layouts.size()]);
>>> +    }
>>> +
>>> +    public void initializeRequest(WebslingerServletContext context,
>>> HttpServletRequest request) {
>>> +        request.setAttribute("servletContext", context);
>>> +        Object delegator = context.getAttribute("delegator");
>>> +        Object dispatcher = context.getAttribute("dispatcher");
>>> +        Object security = context.getAttribute("security");
>>> +        request.setAttribute("delegator", delegator);
>>> +        request.setAttribute("dispatcher", dispatcher);
>>> +        request.setAttribute("security", security);
>>> +        // FIXME!!! These next two are a hack until proper fake/wrapped
>>> session support is done in webslinger
>>> +        servletContext.setAttribute("delegator", delegator);
>>> +        servletContext.setAttribute("dispatcher", dispatcher);
>>> +        servletContext.setAttribute("security", security);
>>> +    }
>>> +
>>> +    protected void initializeContext(WebslingerServletContext context,
>>> Layout layout) throws Exception {
>>> +        OfbizLayout ofbizLayout = (OfbizLayout) layout;
>>> +        GenericDelegator delegator =
>>> GenericDelegator.getGenericDelegator(ofbizLayout.delegatorName);
>>> +        context.setAttribute("delegator", delegator);
>>> +        context.setAttribute("dispatcher",
>>> createLocalDispatcher(context, layout.getTarget(), delegator));
>>> +        context.setAttribute("security",
>>> SecurityFactory.getInstance(delegator));
>>> +    }
>>> +
>>> +    protected LocalDispatcher
>>> createLocalDispatcher(WebslingerServletContext context, String name,
>>> GenericDelegator delegator)
>>> throws IOException {
>>> +        ArrayList<URL> readerURLs = new
>>> ArrayList<URL>(globalReaderURLs);
>>> +        String readerFiles =
>>> context.getInitParameter("serviceReaderUrls");
>>> +        if (readerFiles != null) {
>>> +            for (String reader: CollectionUtil.split(readerFiles, ";"))
>>> {
>>> +                URL url =  context.getResource(reader);
>>> +                if (url != null) readerURLs.add(url);
>>> +            }
>>> +        }
>>> +        System.err.println(readerURLs);
>>> +        return new WebAppDispatcher(name, delegator, readerURLs);
>>> +    }
>>> +
>>> +    protected Set<String> getSuffixes() throws Exception {
>>> +        Cache cache = delegator.getCache();
>>> +        Set<String> suffixes;
>>> +        synchronized (WebslingerContextMapper.class) {
>>> +            suffixes = (Set<String>) cache.get("WebslingerHostSuffix",
>>> null, "WebslingerContextMapper.Suffixes");
>>> +            if (suffixes == null) {
>>> +                suffixes = new HashSet<String>();
>>> +                for (GenericValue value:
>>> delegator.findList("WebslingerHostSuffix", null, null, null, null, false)) {
>>> +                    suffixes.add(value.getString("hostSuffix"));
>>> +                }
>>> +                cache.put("WebslingerHostSuffix", null,
>>> "WebslingerContextMapper.Suffixes", suffixes);
>>> +            }
>>> +        }
>>> +        return suffixes;
>>> +    }
>>> +
>>> +    protected Layout lookupLayout(String hostName, String contextPath)
>>> throws Exception {
>>> +        GenericValue layout =
>>> EntityUtil.getOnly(delegator.findByAndCache("WebslingerLayout",
>>> UtilMisc.toMap("hostName",
>>> hostName, "contextPath", contextPath)));
>>> +        if (layout == null) return null;
>>> +        return new OfbizLayout(layout);
>>> +    }
>>> +
>>> +    protected class OfbizLayout implements Layout {
>>> +        private final String id;
>>> +        private final String target;
>>> +        private final String[] bases;
>>> +        private final int hashCode;
>>> +        protected final String delegatorName;
>>> +        protected final String dispatcherName;
>>> +
>>> +        protected OfbizLayout(GenericValue server) throws
>>> GenericEntityException {
>>> +            id = server.getString("webslingerServerId");
>>> +            target = server.getString("target");
>>> +            List<GenericValue> baseValues =
>>> server.getRelatedCache("WebslingerServerBase", UtilMisc.toList("seqNum"));
>>> +            bases = new String[baseValues.size()];
>>> +            for (int i = 0; i < bases.length; i++) {
>>> +                GenericValue baseValue = baseValues.get(i);
>>> +                bases[i] = baseValue.getString("baseName");
>>> +            }
>>> +            delegatorName = server.getString("delegatorName");
>>> +            dispatcherName = server.getString("dispatcherName");
>>> +            hashCode = target.hashCode() ^
>>> ObjectUtil.hashCodeHelper(delegatorName) ^ ArrayUtil.hashCodeHelper(bases);
>>> +        }
>>> +
>>> +        public String getId() {
>>> +            return id;
>>> +        }
>>> +
>>> +        public String getTarget() {
>>> +            return target;
>>> +        }
>>> +
>>> +        public String[] getBases() {
>>> +            return bases;
>>> +        }
>>> +
>>> +        public int hashCode() {
>>> +            return hashCode;
>>> +        }
>>> +
>>> +        public boolean equals(Object o) {
>>> +            if (!(o instanceof OfbizLayout)) return false;
>>> +            OfbizLayout other = (OfbizLayout) o;
>>> +            if (!target.equals(other.target)) return false;
>>> +            if (!ObjectUtil.equalsHelper(delegatorName,
>>> other.delegatorName)) return false;
>>> +            return ArrayUtil.equalsHelper(bases, other.bases);
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>> (added)
>>> +++
>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,61 @@
>>>
>>> +/*******************************************************************************
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> +
>>> *******************************************************************************/
>>> +package org.ofbiz.webslinger;
>>> +
>>> +import java.io.IOException;
>>> +import java.io.StringReader;
>>> +import java.io.StringWriter;
>>> +import java.util.Collections;
>>> +import java.util.Map;
>>> +
>>> +import org.ofbiz.base.util.UtilMisc;
>>> +import org.ofbiz.entity.GenericDelegator;
>>> +import org.ofbiz.entity.GenericValue;
>>> +import org.ofbiz.entity.util.EntityUtil;
>>> +import org.ofbiz.service.GenericServiceException;
>>> +import org.ofbiz.service.ModelService;
>>> +import org.ofbiz.service.ServiceDispatcher;
>>> +import org.ofbiz.service.engine.GenericAsyncEngine;
>>> +
>>> +import org.webslinger.WebslingerServletContext;
>>> +
>>> +public class WebslingerServerEngine extends GenericAsyncEngine {
>>> +    public WebslingerServerEngine(ServiceDispatcher dispatcher) {
>>> +        super(dispatcher);
>>> +    }
>>> +
>>> +    public void runSyncIgnore(String localName, ModelService
>>> modelService, Map<String, Object> context) throws
>>> GenericServiceException {
>>> +        runSync(localName, modelService, context);
>>> +    }
>>> +
>>> +    public Map<String, Object> runSync(String localName, ModelService
>>> modelService, Map<String, Object> context) throws
>>> GenericServiceException {
>>> +        GenericDelegator delegator = dispatcher.getDelegator();
>>> +        try {
>>> +            GenericValue found =
>>> EntityUtil.getFirst(delegator.findByAndCache("WebslingerLayout",
>>> UtilMisc.toMap("webslingerServerId", modelService.location)));
>>> +            if (found == null) throw new
>>> GenericServiceException("Couldn't find server mapping for(" +
>>> modelService.location +
>>> ")");
>>> +            return (Map<String, Object>)
>>> WebslingerServletContext.invokeInVM(found.getString("hostName"), 8080,
>>> modelService.invoke, context);
>>> +        } catch (RuntimeException e) {
>>> +            throw e;
>>> +        } catch (GenericServiceException e) {
>>> +            throw e;
>>> +        } catch (Exception e) {
>>> +            throw (GenericServiceException) new
>>> GenericServiceException(e.getMessage()).initCause(e);
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added: ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>> (added)
>>> +++ ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,74 @@
>>> +<?xml version="1.0"?>
>>> +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
>>> 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
>>> +
>>> +<!--
>>> + *  Copyright (c) 2001-2005 The Open For Business Project -
>>> www.ofbiz.org
>>> + *
>>> + *  Permission is hereby granted, free of charge, to any person
>>> obtaining a
>>> + *  copy of this software and associated documentation files (the
>>> "Software"),
>>> + *  to deal in the Software without restriction, including without
>>> limitation
>>> + *  the rights to use, copy, modify, merge, publish, distribute,
>>> sublicense,
>>> + *  and/or sell copies of the Software, and to permit persons to whom
>>> the
>>> + *  Software is furnished to do so, subject to the following conditions:
>>> + *
>>> + *  The above copyright notice and this permission notice shall be
>>> included
>>> + *  in all copies or substantial portions of the Software.
>>> + *
>>> + *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>>> EXPRESS
>>> + *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>>> + *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>> NONINFRINGEMENT.
>>> + *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
>>> + *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
>>> TORT
>>> + *  OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
>>> SOFTWARE OR
>>> + *  THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>>> +-->
>>> +
>>> +<web-app>
>>> +    <display-name>Open For Business - Catalog</display-name>
>>> +    <description>Catalog Module of the Open For Business
>>> Project</description>
>>> +
>>> +    <context-param>
>>> +        <param-name>entityDelegatorName</param-name>
>>> +        <param-value>default</param-value>
>>> +        <description>The Name of the Entity Delegator to use, defined in
>>> entityengine.xml</description>
>>> +    </context-param>
>>> +
>>> +    <context-param>
>>> +        <param-name>ofbiz.webslinger.baseLocation</param-name>
>>> +
>>>  <param-value>ofbiz-component://webslinger/webapp/bases</param-value>
>>> +    </context-param>
>>> +
>>> +    <servlet>
>>> +        <servlet-name>WebslingerServlet</servlet-name>
>>> +        <display-name>WebslingerServlet</display-name>
>>> +        <description>Webslinger Servlet</description>
>>> +
>>>  <servlet-class>org.webslinger.servlet.WebslingerServlet</servlet-class>
>>> +        <init-param>
>>> +            <param-name>ofbiz.mapping.ttl</param-name>
>>> +            <param-value>60000</param-value>
>>> +        </init-param>
>>> +        <init-param>
>>> +
>>>  <param-name>ofbiz.mapping.default-file-system-id</param-name>
>>> +            <param-value>1</param-value>
>>> +        </init-param>
>>> +        <init-param>
>>> +
>>>  <param-name>org.webslinger.servlet.WebslingerServlet.WebslingerServletContextFactory</param-name>
>>> +
>>>  <param-value>org.ofbiz.webslinger.WebslingerContextMapper</param-value>
>>> +        </init-param>
>>> +        <load-on-startup>1</load-on-startup>
>>> +    </servlet>
>>> +    <servlet-mapping>
>>> +        <servlet-name>WebslingerServlet</servlet-name>
>>> +        <url-pattern>/*</url-pattern>
>>> +    </servlet-mapping>
>>> +
>>> +    <session-config>
>>> +        <session-timeout>60</session-timeout> <!-- in minutes -->
>>> +    </session-config>
>>> +
>>> +    <welcome-file-list>
>>> +        <welcome-file>index.jsp</welcome-file>
>>> +        <welcome-file>index.html</welcome-file>
>>> +        <welcome-file>index.htm</welcome-file>
>>> +    </welcome-file-list>
>>> +</web-app>
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>> URL:
>>>
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml?rev=753081&view=auto
>>> ==============================================================================
>>> ---
>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>> (added) +++
>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>> Fri Mar 13 01:12:11 2009 @@ -0,0 +1,22 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<!--
>>> +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.
>>> +-->
>>> +<module-state>
>>> + <module name="defaults"
>>> url="ofbiz-component://webslinger/modules/defaults.zip" enabled="true"/>
>>> +</module-state>
>>>
>>> Propchange: ofbiz/trunk/framework/webslinger/websites/webslinger/Var/
>>>
>>> ------------------------------------------------------------------------------
>>> --- svn:ignore (added)
>>> +++ svn:ignore Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1 @@
>>> +*
>>>
>>> Added:
>>> ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml?rev=753081&view=auto
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>> (added)
>>> +++ ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>> Fri Mar 13 01:12:11 2009
>>> @@ -0,0 +1,12 @@
>>> +<p>
>>> +This page is brought to you by Webslinger!
>>> +</p>
>>> +<p>
>>> +It doesn't do a whole lot yet, but if you've gotten this far, here are
>>> the features that are available:
>>> +</p>
>>> +<ul>
>>> + <li>Extension mapper</li>
>>> + <li>janino/groovy event handler</li>
>>> + <li>velocity template markup</li>
>>> + <li>template/wrapper/section content split</li>
>>> +</ul>
>>>
>>
>
>

Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Jacques Le Roux <ja...@les7arts.com>.
From: "Adam Heath" <do...@brainfood.com>
> On 09/07/2010 05:18 PM, Adam Heath wrote:
>> On 09/05/2010 11:40 AM, Jacques Le Roux wrote:
>>> Yes, it would be great, good idea Bruno!
>>>
>>> Jacques
>>>
>>> Bruno Busco wrote:
>>>> We should definitively have at least a simple demo of webslinger
>>>> application
>>>> in the Example.
>>>> Is someone working on that?
>>
>> Hehe. Things have been quiet from me on this. But I have some good stuff
>> done.
>>
>> I've converted specialpurpose/ofbizwebsite to webslinger.
>>
>> However, that's not quite ready to go, as there is another thing I've
>> been working on(has to do with vaadin, but I shouldn't say more about
>> that until I chop up my code and make it easier to digest).
>>
>> I still need to finish the double-click edit feature, and ajax page
>> load, in the converted ofbizwebsite. It's slower than I'd like, because
>> I am not using Brainfood's internal base module(has too much
>> customer-facing logic).
>>
>> It's looking like this weekend I'll have this all wrapped up. I got
>> finished with my implementations last night, so the rest of the week is
>> just using git rebase to split up 7 large commits that all say 'foo' as
>> their message.
>>
>> I know I've said this in the past, that a webslinger example is Coming
>> Real Soon(tm); but this time it's all actually implemented.
> 
> It's taking a bit longer than I expected to get this done.  Ean said I 
> should follow the 5 minute rule: give it a 'wow' factor, with tons of 
> features, so that those that look at it go gaga when they see it.
> 
> The first version that I had working(ofbizwebsite converted to ofbiz) 
> didn't have the set of features to do that.  Namely, full double-click 
> edit, with partial ajax page loading.  Those features are coming 
> along, but it just takes time.
> 
> I've been working constantly on this in my off hours; it's my primary 
> personal development featureset.


Looking forward to it, take your time Adam, the longer the better :o)

Jacques


Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Adam Heath <do...@brainfood.com>.
On 09/07/2010 05:18 PM, Adam Heath wrote:
> On 09/05/2010 11:40 AM, Jacques Le Roux wrote:
>> Yes, it would be great, good idea Bruno!
>>
>> Jacques
>>
>> Bruno Busco wrote:
>>> We should definitively have at least a simple demo of webslinger
>>> application
>>> in the Example.
>>> Is someone working on that?
>
> Hehe. Things have been quiet from me on this. But I have some good stuff
> done.
>
> I've converted specialpurpose/ofbizwebsite to webslinger.
>
> However, that's not quite ready to go, as there is another thing I've
> been working on(has to do with vaadin, but I shouldn't say more about
> that until I chop up my code and make it easier to digest).
>
> I still need to finish the double-click edit feature, and ajax page
> load, in the converted ofbizwebsite. It's slower than I'd like, because
> I am not using Brainfood's internal base module(has too much
> customer-facing logic).
>
> It's looking like this weekend I'll have this all wrapped up. I got
> finished with my implementations last night, so the rest of the week is
> just using git rebase to split up 7 large commits that all say 'foo' as
> their message.
>
> I know I've said this in the past, that a webslinger example is Coming
> Real Soon(tm); but this time it's all actually implemented.

It's taking a bit longer than I expected to get this done.  Ean said I 
should follow the 5 minute rule: give it a 'wow' factor, with tons of 
features, so that those that look at it go gaga when they see it.

The first version that I had working(ofbizwebsite converted to ofbiz) 
didn't have the set of features to do that.  Namely, full double-click 
edit, with partial ajax page loading.  Those features are coming 
along, but it just takes time.

I've been working constantly on this in my off hours; it's my primary 
personal development featureset.


Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Jacques Le Roux <ja...@les7arts.com>.
Looks great indeed, it looks like Jahia. Bravo Adam (and Brainfood at large)!

For those interested here it is http://www.youtube.com/user/click2build

Jacques

From: "Bruno Busco" <br...@gmail.com>
> Thank you Adam,
> I have seen some video on youtube about webslinger (just search for "ofbiz"
> and they come up) and looks really good.
> 
> 2010/9/8 Adam Heath <do...@brainfood.com>
> 
>> On 09/05/2010 11:40 AM, Jacques Le Roux wrote:
>>
>>> Yes, it would be great, good idea Bruno!
>>>
>>> Jacques
>>>
>>> Bruno Busco wrote:
>>>
>>>> We should definitively have at least a simple demo of webslinger
>>>> application
>>>> in the Example.
>>>> Is someone working on that?
>>>>
>>>
>> Hehe.  Things have been quiet from me on this.  But I have some good stuff
>> done.
>>
>> I've converted specialpurpose/ofbizwebsite to webslinger.
>>
>> However, that's not quite ready to go, as there is another thing I've been
>> working on(has to do with vaadin, but I shouldn't say more about that until
>> I chop up my code and make it easier to digest).
>>
>> I still need to finish the double-click edit feature, and ajax page load,
>> in the converted ofbizwebsite.  It's slower than I'd like, because I am not
>> using Brainfood's internal base module(has too much customer-facing logic).
>>
>> It's looking like this weekend I'll have this all wrapped up.  I got
>> finished with my implementations last night, so the rest of the week is just
>> using git rebase to split up 7 large commits that all say 'foo' as their
>> message.
>>
>> I know I've said this in the past, that a webslinger example is Coming Real
>> Soon(tm); but this time it's all actually implemented.
>>
>


Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Bruno Busco <br...@gmail.com>.
Thank you Adam,
I have seen some video on youtube about webslinger (just search for "ofbiz"
and they come up) and looks really good.

2010/9/8 Adam Heath <do...@brainfood.com>

> On 09/05/2010 11:40 AM, Jacques Le Roux wrote:
>
>> Yes, it would be great, good idea Bruno!
>>
>> Jacques
>>
>> Bruno Busco wrote:
>>
>>> We should definitively have at least a simple demo of webslinger
>>> application
>>> in the Example.
>>> Is someone working on that?
>>>
>>
> Hehe.  Things have been quiet from me on this.  But I have some good stuff
> done.
>
> I've converted specialpurpose/ofbizwebsite to webslinger.
>
> However, that's not quite ready to go, as there is another thing I've been
> working on(has to do with vaadin, but I shouldn't say more about that until
> I chop up my code and make it easier to digest).
>
> I still need to finish the double-click edit feature, and ajax page load,
> in the converted ofbizwebsite.  It's slower than I'd like, because I am not
> using Brainfood's internal base module(has too much customer-facing logic).
>
> It's looking like this weekend I'll have this all wrapped up.  I got
> finished with my implementations last night, so the rest of the week is just
> using git rebase to split up 7 large commits that all say 'foo' as their
> message.
>
> I know I've said this in the past, that a webslinger example is Coming Real
> Soon(tm); but this time it's all actually implemented.
>

Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Tim Ruppert <ti...@hotwaxmedia.com>.
That's awesome Adam - looking forward to it!

Cheers,
Ruppert

On Sep 7, 2010, at 4:18 PM, Adam Heath wrote:

> I know I've said this in the past, that a webslinger example is Coming Real Soon(tm); but this time it's all actually implemented.


Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Adam Heath <do...@brainfood.com>.
On 09/05/2010 11:40 AM, Jacques Le Roux wrote:
> Yes, it would be great, good idea Bruno!
>
> Jacques
>
> Bruno Busco wrote:
>> We should definitively have at least a simple demo of webslinger
>> application
>> in the Example.
>> Is someone working on that?

Hehe.  Things have been quiet from me on this.  But I have some good 
stuff done.

I've converted specialpurpose/ofbizwebsite to webslinger.

However, that's not quite ready to go, as there is another thing I've 
been working on(has to do with vaadin, but I shouldn't say more about 
that until I chop up my code and make it easier to digest).

I still need to finish the double-click edit feature, and ajax page 
load, in the converted ofbizwebsite.  It's slower than I'd like, 
because I am not using Brainfood's internal base module(has too much 
customer-facing logic).

It's looking like this weekend I'll have this all wrapped up.  I got 
finished with my implementations last night, so the rest of the week 
is just using git rebase to split up 7 large commits that all say 
'foo' as their message.

I know I've said this in the past, that a webslinger example is Coming 
Real Soon(tm); but this time it's all actually implemented.

Re: svn commit: r753081 - in /ofbiz/trunk/framework/webslinger: ./ config/ data/ entitydef/ lib/ modules/ modules/ofbiz/ modules/ofbiz/Classes/ modules/ofbiz/Classes/org/ modules/ofbiz/Classes/org/webslinger/ modules/ofbiz/www/ modules/ofbiz/www/WEB-

Posted by Jacques Le Roux <ja...@les7arts.com>.
Yes, it would be great, good idea Bruno!

Jacques

Bruno Busco wrote:
> We should definitively have at least a simple demo of webslinger application
> in the Example.
> Is someone working on that?
>
> -Bruno
>
> 2010/9/5 Jacques Le Roux <ja...@les7arts.com>
>
>> I removed <author>Adam Heath</author> at r992768
>> I'm still waiting an explanation about Webslinger, is there someting else
>> than the code?
>>
>> Thanks
>>
>> Jacques
>>
>> Jacques Le Roux wrote:
>>
>>> I found
>>> <author>Adam Heath</author> by chance.
>>> I wonder if we should keep it in Apache OFBiz...
>>> Also I understand that it's good for BrainFood to have Webslinger in OFBiz
>>> repo, but for OFBiz?
>>> What Webslinger is bringing to the project?
>>>
>>> Thanks to clarify please
>>>
>>> Jacques
>>>
>>> From: <do...@apache.org>
>>>
>>>> Author: doogie
>>>> Date: Fri Mar 13 01:12:11 2009
>>>> New Revision: 753081
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=753081&view=rev
>>>> Log:
>>>> New webslinger component.  This is being added to framework, based
>>>> on the desire to make use of it in a support role.
>>>>
>>>> It is *not* enabled yet, not part of the build, nor used at runtime
>>>> by the server.  That will come shortly.
>>>>
>>>> Added:
>>>>   ofbiz/trunk/framework/webslinger/   (with props)
>>>>   ofbiz/trunk/framework/webslinger/build.xml
>>>>   ofbiz/trunk/framework/webslinger/config/
>>>>   ofbiz/trunk/framework/webslinger/config/webslinger.properties
>>>>   ofbiz/trunk/framework/webslinger/data/
>>>>   ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml
>>>>   ofbiz/trunk/framework/webslinger/entitydef/
>>>>   ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml
>>>>   ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml
>>>>   ofbiz/trunk/framework/webslinger/lib/
>>>>
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar
>>>> (with props)
>>>>
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar
>>>>   (with props)
>>>>
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar
>>>>   (with props)
>>>>
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar
>>>>   (with props)
>>>>   ofbiz/trunk/framework/webslinger/modules/
>>>>   ofbiz/trunk/framework/webslinger/modules/defaults.zip   (with props)
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/www/
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>>> /
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>>> /data-filter
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>>> /type
>>>>   ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>>>   ofbiz/trunk/framework/webslinger/ofbiz-component.xml
>>>>   ofbiz/trunk/framework/webslinger/src/
>>>>   ofbiz/trunk/framework/webslinger/src/META-INF/
>>>>   ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml
>>>>   ofbiz/trunk/framework/webslinger/src/org/
>>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/
>>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/
>>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>>>   ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>>>
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>>>   ofbiz/trunk/framework/webslinger/webapp/
>>>>   ofbiz/trunk/framework/webslinger/webapp/webslinger/
>>>>   ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/
>>>>   ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>>>   ofbiz/trunk/framework/webslinger/websites/
>>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/
>>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/Config/
>>>>
>>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/Var/   (with
>>>> props)
>>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/www/
>>>>   ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>>>
>>>> Propchange: ofbiz/trunk/framework/webslinger/
>>>>
>>>> ------------------------------------------------------------------------------
>>>> --- svn:ignore (added)
>>>> +++ svn:ignore Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1 @@
>>>> +build
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/build.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/build.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/build.xml (added)
>>>> +++ ofbiz/trunk/framework/webslinger/build.xml Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,69 @@
>>>> +<?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.
>>>> +-->
>>>> +
>>>> +<project name="OFBiz - Webslinger" default="jar" basedir=".">
>>>> +    <import file="../../common.xml"/>
>>>> +
>>>> +    <!--
>>>> ================================================================== -->
>>>> +    <!-- Initialization of all property settings
>>>>    -->
>>>> +    <!--
>>>> ================================================================== -->
>>>> +
>>>> +    <property name="desc" value="Webslinger Component"/>
>>>> +    <property name="name" value="ofbiz-webslinger"/>
>>>> +    <property name="ofbiz.home.dir" value="../.."/>
>>>> +
>>>> +    <path id="local.class.path">
>>>> +        <fileset dir="lib" includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/entity/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/entity/build/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib/j2eespecs"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib/commons"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/lib/scripting"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/base/build/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/security/build/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/service/build/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/catalina/build/lib"
>>>> includes="*.jar"/>
>>>> +        <fileset dir="${ofbiz.home.dir}/framework/catalina/lib"
>>>> includes="*.jar"/>
>>>> +        <pathelement
>>>> location="${ofbiz.home.dir}/framework/catalina/build/classes"/>
>>>> +    </path>
>>>> +
>>>> +    <!--
>>>> ================================================================== -->
>>>> +    <!-- Compilation of the source
>>>>      -->
>>>> +    <!--
>>>> ================================================================== -->
>>>> +
>>>> +    <target name="classes" depends="prepare">
>>>> +    <javac15/>
>>>> +    </target>
>>>> +
>>>> +    <!--
>>>> ================================================================== -->
>>>> +    <!-- Build JavaDoc
>>>>    -->
>>>> +    <!--
>>>> ================================================================== -->
>>>> +
>>>> +    <target name="docs" depends="prepare-docs">
>>>> +        <mkdir dir="${build.dir}/javadocs"/>
>>>> +        <javadoc packagenames="org.ofbiz.webslinger.*"
>>>> +                 classpathref="local.class.path"
>>>> +                 destdir="${build.dir}/javadocs"
>>>> +                 Windowtitle="Open for Business - ${desc}">
>>>> +            <sourcepath path="${src.dir}"/>
>>>> +        </javadoc>
>>>> +    </target>
>>>> +</project>
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/config/webslinger.properties
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/config/webslinger.properties?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/config/webslinger.properties (added)
>>>> +++ ofbiz/trunk/framework/webslinger/config/webslinger.properties Fri Mar
>>>> 13 01:12:11 2009
>>>> @@ -0,0 +1,17 @@
>>>> +# 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.
>>>> +moduleBase=ofbiz-component://webslinger/modules
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml (added)
>>>> +++ ofbiz/trunk/framework/webslinger/data/WebslingerSeedData.xml Fri Mar
>>>> 13 01:12:11 2009
>>>> @@ -0,0 +1,28 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<!--
>>>> +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.
>>>> +-->
>>>> +<entity-engine-xml>
>>>> + <WebslingerServer webslingerServerId="WEBSLINGER"
>>>> delegatorName="default" dispatcherName="webslinger" serverName="webslinger"
>>>> target="ofbiz-component://webslinger/websites/webslinger"/>
>>>> +
>>>> + <WebslingerHostMapping hostName="*" contextPath="/webslinger"
>>>> webslingerServerId="WEBSLINGER"/>
>>>> +
>>>> + <WebslingerHostSuffix hostSuffixId="PREVIEW" hostSuffix=".preview"/>
>>>> + <WebslingerHostSuffix hostSuffixId="LOCALHOST"
>>>> hostSuffix=".localhost"/>
>>>> +
>>>> +</entity-engine-xml>
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml (added)
>>>> +++ ofbiz/trunk/framework/webslinger/entitydef/entitygroup.xml Fri Mar 13
>>>> 01:12:11 2009
>>>> @@ -0,0 +1,32 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<!--
>>>> +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.
>>>> +-->
>>>> +<entitygroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +        xsi:noNamespaceSchemaLocation="
>>>> http://www.ofbiz.org/dtds/entitygroup.xsd">
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerServer" />
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerServerBase" />
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerHostMapping" />
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerLayout" />
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerHostSuffix" />
>>>> +    <!--
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerModule" />
>>>> +    <entity-group group="org.ofbiz" entity="WebslingerServerModule" />
>>>> +    <entity-group group="org.ofbiz"
>>>> entity="WebslingerServerModuleLayout" />
>>>> +    -->
>>>> +</entitygroup>
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml (added)
>>>> +++ ofbiz/trunk/framework/webslinger/entitydef/entitymodel.xml Fri Mar 13
>>>> 01:12:11 2009
>>>> @@ -0,0 +1,146 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<!--
>>>> +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.
>>>> +-->
>>>> +<entitymodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +    xsi:noNamespaceSchemaLocation="
>>>> http://www.ofbiz.org/dtds/entitymodel.xsd">
>>>> +    <title></title>
>>>> +    <description></description>
>>>> +    <copyright></copyright>
>>>> +    <author>Adam Heath</author>
>>>> +    <version>0.0</version>
>>>> +
>>>> +    <entity entity-name="WebslingerServer"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="Webslinger Server">
>>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>>> +      <field name="delegatorName" type="name"></field>
>>>> +      <field name="dispatcherName" type="name"></field>
>>>> +      <field name="serverName" type="name"></field>
>>>> +      <field name="webSiteId" type="id"></field>
>>>> +      <field name="target" type="name"></field>
>>>> +      <field name="loadAtStart" type="indicator"></field>
>>>> +      <prim-key field="webslingerServerId"/>
>>>> +      <relation type="one" fk-name="WSS_WS" rel-entity-name="WebSite">
>>>> +          <key-map field-name="webSiteId"/>
>>>> +      </relation>
>>>> +    </entity>
>>>> +
>>>> +    <entity entity-name="WebslingerServerBase"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="Webslinger Server">
>>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>>> +      <field name="baseName" type="name"></field>
>>>> +      <field name="seqNum" type="numeric"></field>
>>>> +      <prim-key field="webslingerServerId"/>
>>>> +      <prim-key field="baseName"/>
>>>> +      <relation type="one" fk-name="WSB_WS"
>>>> rel-entity-name="WebslingerServer">
>>>> +          <key-map field-name="webslingerServerId"/>
>>>> +      </relation>
>>>> +    </entity>
>>>> +
>>>> +    <entity entity-name="WebslingerHostMapping"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="Webslinger Server">
>>>> +      <field name="hostName" type="name"></field>
>>>> +      <field name="contextPath" type="value"></field>
>>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>>> +      <prim-key field="hostName"/>
>>>> +      <prim-key field="contextPath"/>
>>>> +      <relation type="one" fk-name="WHM_WS"
>>>> rel-entity-name="WebslingerServer">
>>>> +          <key-map field-name="webslingerServerId"/>
>>>> +      </relation>
>>>> +    </entity>
>>>> +
>>>> +    <entity entity-name="WebslingerHostSuffix"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="Webslinger Server">
>>>> +      <field name="hostSuffixId" type="id-ne"></field>
>>>> +      <field name="hostSuffix" type="name"></field>
>>>> +      <prim-key field="hostSuffixId"/>
>>>> +    </entity>
>>>> +
>>>> +    <view-entity entity-name="WebslingerLayout"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="WebslingerServer and WebslingerHostMapping View
>>>> Entity">
>>>> +      <member-entity entity-alias="WS" entity-name="WebslingerServer"/>
>>>> +      <member-entity entity-alias="WHM"
>>>> entity-name="WebslingerHostMapping"/>
>>>> +      <alias-all entity-alias="WS"/>
>>>> +      <alias-all entity-alias="WHM">
>>>> +       <exclude field="webslingerServerId"/>
>>>> +      </alias-all>
>>>> +      <view-link entity-alias="WS" rel-entity-alias="WHM">
>>>> +        <key-map field-name="webslingerServerId"/>
>>>> +      </view-link>
>>>> +      <relation type="one" rel-entity-name="WebslingerServer">
>>>> +        <key-map field-name="webslingerServerId"/>
>>>> +      </relation>
>>>> +      <relation type="many" rel-entity-name="WebslingerServerBase">
>>>> +        <key-map field-name="webslingerServerId"/>
>>>> +      </relation>
>>>> +      <relation type="one" rel-entity-name="WebslingerHostMapping">
>>>> +        <key-map field-name="hostName"/>
>>>> +        <key-map field-name="contextPath"/>
>>>> +      </relation>
>>>> +    </view-entity>
>>>> +    <!--
>>>> +    <entity entity-name="WebslingerModule"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="Webslinger Module">
>>>> +      <field name="moduleId" type="id-ne"></field>
>>>> +      <field name="target" type="name"></field>
>>>> +      <prim-key field="moduleId"/>
>>>> +    </entity>
>>>> +
>>>> +    <entity entity-name="WebslingerServerModule"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="Webslinger Server">
>>>> +      <field name="webslingerServerId" type="id-ne"></field>
>>>> +      <field name="moduleId" type="id-ne"></field>
>>>> +      <prim-key field="webslingerServerId"/>
>>>> +      <prim-key field="moduleId"/>
>>>> +      <relation type="one" fk-name="WSM_WM"
>>>> rel-entity-name="WebslingerModule">
>>>> +          <key-map field-name="moduleId"/>
>>>> +      </relation>
>>>> +      <relation type="one" fk-name="WSM_WW"
>>>> rel-entity-name="WebslingerServer">
>>>> +          <key-map field-name="webslingerServerId"/>
>>>> +      </relation>
>>>> +    </entity>
>>>> +
>>>> +    <view-entity entity-name="WebslingerServerModuleLayout"
>>>> +            package-name="org.ofbiz.webslinger"
>>>> +            title="WebslingerModule and WebslingerServerModule View
>>>> Entity">
>>>> +      <member-entity entity-alias="WM" entity-name="WebslingerModule"/>
>>>> +      <member-entity entity-alias="WSM"
>>>> entity-name="WebslingerServerModule"/>
>>>> +      <alias-all entity-alias="WM"/>
>>>> +      <alias-all entity-alias="WSM">
>>>> +       <exclude field="moduleId"/>
>>>> +      </alias-all>
>>>> +      <view-link entity-alias="WM" rel-entity-alias="WSM">
>>>> +        <key-map field-name="moduleId"/>
>>>> +      </view-link>
>>>> +      <relation type="one" rel-entity-name="WebslingerModule">
>>>> +        <key-map field-name="moduleId"/>
>>>> +      </relation>
>>>> +      <relation type="one" rel-entity-name="WebslingerServerModule">
>>>> +        <key-map field-name="webslingerServerId"/>
>>>> +        <key-map field-name="moduleId"/>
>>>> +      </relation>
>>>> +    </view-entity>
>>>> +    -->
>>>> +</entitymodel>
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary file - no diff available.
>>>>
>>>> Propchange:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-20090312-2018a822aa51.jar
>>>>
>>>> ------------------------------------------------------------------------------
>>>>   svn:mime-type = application/octet-stream
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary file - no diff available.
>>>>
>>>> Propchange:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-catalina-20090312-2018a822aa51.jar
>>>>
>>>> ------------------------------------------------------------------------------
>>>>   svn:mime-type = application/octet-stream
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary file - no diff available.
>>>>
>>>> Propchange:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-ext-20090312-2018a822aa51.jar
>>>>
>>>> ------------------------------------------------------------------------------
>>>>   svn:mime-type = application/octet-stream
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary file - no diff available.
>>>>
>>>> Propchange:
>>>> ofbiz/trunk/framework/webslinger/lib/webslinger-launcher-20090312-2018a822aa51.jar
>>>>
>>>> ------------------------------------------------------------------------------
>>>>   svn:mime-type = application/octet-stream
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/modules/defaults.zip
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/defaults.zip?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> Binary file - no diff available.
>>>>
>>>> Propchange: ofbiz/trunk/framework/webslinger/modules/defaults.zip
>>>>
>>>> ------------------------------------------------------------------------------
>>>>   svn:mime-type = application/octet-stream
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/Classes/org/webslinger/mime.types
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,17 @@
>>>> +# 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.
>>>> +application/x-ofbiz-condition ofbiz-condition
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>>   (empty)
>>>>
>>>> Added:
>>>>
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@/data-filter
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition%40/data-filter?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>>> /data-filter
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>>> /data-filter
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1 @@
>>>> +java.lang.String:/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@
>>>> /type
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition%40/type?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@/type
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/DefaultMimeAttributes/application/x-ofbiz-condition@/type
>>>> Fri Mar
>>>> 13 01:12:11 2009
>>>> @@ -0,0 +1 @@
>>>> +java.lang.String:data
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/modules/ofbiz/www/WEB-INF/Events/System/Ofbiz/FilterOfbizConditionData.groovy
>>>> Fri Mar 13
>>>> 01:12:11 2009
>>>> @@ -0,0 +1,46 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * 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.
>>>> +
>>>> *******************************************************************************/
>>>> +import org.ofbiz.entity.condition.EntityCondition
>>>> +import org.ofbiz.entity.condition.EntityConditionList
>>>> +import org.ofbiz.entity.condition.EntityExpr
>>>> +import org.ofbiz.entity.condition.EntityOperator
>>>> +
>>>> +def buildCondition
>>>> +def getValue = { item ->
>>>> + if (item instanceof Map) return buildCondition(item)
>>>> + return item
>>>> +}
>>>> +buildCondition = { item ->
>>>> + switch (item.name) {
>>>> + case "EntityConditionList":
>>>> + def conditions = []
>>>> + for (conditionDef in item.list) {
>>>> + conditions.add(buildCondition(conditionDef))
>>>> + }
>>>> + return new EntityConditionList(conditions,
>>>> EntityOperator.lookup(item.operator))
>>>> + case "EntityExpr":
>>>> + return new EntityExpr(getValue(item.left),
>>>> EntityOperator.lookup(item.operator), getValue(item.right))
>>>> + case "Include":
>>>> + return webslinger.event(item.path)
>>>> + default:
>>>> + throw new InternalError(item.toString())
>>>> + }
>>>> +}
>>>> +
>>>> +return buildCondition(webslinger.payload)
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/ofbiz-component.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/ofbiz-component.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/ofbiz-component.xml (added)
>>>> +++ ofbiz/trunk/framework/webslinger/ofbiz-component.xml Fri Mar 13
>>>> 01:12:11 2009
>>>> @@ -0,0 +1,35 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<!--
>>>> +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.
>>>> +-->
>>>> +<ofbiz-component name="webslinger"
>>>> +        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +        xsi:noNamespaceSchemaLocation="
>>>> http://www.ofbiz.org/dtds/ofbiz-component.xsd">
>>>> +    <resource-loader name="main" type="component"/>
>>>> +    <classpath type="dir" location="config"/>
>>>> +    <classpath type="jar" location="lib/*"/>
>>>> +    <classpath type="jar" location="build/lib/*"/>
>>>> +
>>>> +    <entity-resource type="model" reader-name="main" loader="main"
>>>> location="entitydef/entitymodel.xml"/>
>>>> +    <entity-resource type="group" reader-name="main" loader="main"
>>>> location="entitydef/entitygroup.xml"/>
>>>> +    <entity-resource type="data" reader-name="seed" loader="main"
>>>> location="data/WebslingerSeedData.xml"/>
>>>> +
>>>> +    <webapp name="webslinger" title="Webslinger" server="default-server"
>>>> location="webapp/webslinger"
>>>> +        base-permission="OFBTOOLS,WEBSLINGER"
>>>> mount-point="/webslinger"/>
>>>> +</ofbiz-component>
>>>> +
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml
>>>> (added)
>>>> +++ ofbiz/trunk/framework/webslinger/src/META-INF/vfs-providers.xml Fri
>>>> Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,27 @@
>>>> +<?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.
>>>> +-->
>>>> +<providers>
>>>> + <provider class-name="org.ofbiz.commons.vfs.ofbiz.OfbizHomeProvider">
>>>> +  <scheme name="ofbiz-home"/>
>>>> + </provider>
>>>> + <provider
>>>> class-name="org.ofbiz.commons.vfs.ofbiz.OfbizComponentProvider">
>>>> +  <scheme name="ofbiz-component"/>
>>>> + </provider>
>>>> +</providers>
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/CommonsVfsContainer.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,67 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.commons.vfs;
>>>> +
>>>> +import java.io.File;
>>>> +import java.io.IOException;
>>>> +import java.net.MalformedURLException;
>>>> +
>>>> +import org.apache.commons.vfs.CacheStrategy;
>>>> +import org.apache.commons.vfs.FileObject;
>>>> +import org.apache.commons.vfs.FileSystemException;
>>>> +import org.apache.commons.vfs.FileSystemManager;
>>>> +import org.apache.commons.vfs.impl.StandardFileSystemManager;
>>>> +
>>>> +import org.ofbiz.base.container.Container;
>>>> +import org.ofbiz.base.container.ContainerException;
>>>> +import org.webslinger.commons.vfs.VFSUtil;
>>>> +
>>>> +public class CommonsVfsContainer implements Container {
>>>> +    private static StandardFileSystemManager sfsm;
>>>> +
>>>> +    public void init(String[] args, String configFile) throws
>>>> ContainerException {
>>>> +    }
>>>> +
>>>> +    public boolean start() throws ContainerException {
>>>> +        try {
>>>> +            StandardFileSystemManager sfsm =
>>>> VFSUtil.createStandardFileSystemManager();
>>>> +            FileObject currentDir = sfsm.resolveFile(new
>>>> File(".").toURI().toURL().toString());
>>>> +            sfsm.setBaseFile(currentDir);
>>>> +            CommonsVfsContainer.sfsm = sfsm;
>>>> +        } catch (FileSystemException e) {
>>>> +            throw (ContainerException) new
>>>> ContainerException("Initializing StandardFileSystemManager").initCause(e);
>>>> +        } catch (MalformedURLException e) {
>>>> +            throw (ContainerException) new
>>>> ContainerException("Initializing StandardFileSystemManager").initCause(e);
>>>> +        }
>>>> +        return true;
>>>> +    }
>>>> +
>>>> +    public void stop() throws ContainerException {
>>>> +        sfsm.close();
>>>> +        sfsm = null;
>>>> +    }
>>>> +
>>>> +    public static FileObject resolveFile(String uri) throws IOException
>>>> {
>>>> +        return sfsm.resolveFile(uri);
>>>> +    }
>>>> +
>>>> +    public static FileSystemManager getFileSystemManager() {
>>>> +        return sfsm;
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizComponentProvider.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,59 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.commons.vfs.ofbiz;
>>>> +
>>>> +import java.net.URL;
>>>> +import java.util.Collection;
>>>> +import org.apache.commons.vfs.FileObject;
>>>> +import org.apache.commons.vfs.FileSystemException;
>>>> +import org.apache.commons.vfs.FileSystemOptions;
>>>> +import org.apache.commons.vfs.provider.AbstractFileProvider;
>>>> +import org.apache.commons.vfs.provider.local.DefaultLocalFileProvider;
>>>> +import org.ofbiz.base.location.FlexibleLocation;
>>>> +import org.webslinger.commons.vfs.VFSUtil;
>>>> +
>>>> +public class OfbizComponentProvider extends AbstractFileProvider {
>>>> +    public Collection getCapabilities() {
>>>> +        return DefaultLocalFileProvider.capabilities;
>>>> +    }
>>>> +
>>>> +    public FileObject findFile(FileObject base, String name,
>>>> FileSystemOptions properties) throws FileSystemException {
>>>> +        try {
>>>> +            //name = name.replaceAll("^ofbiz-component://", "");
>>>> +            int nameLength = name.length();
>>>> +            int componentNameStart = 16;
>>>> +            while (componentNameStart < nameLength &&
>>>> name.charAt(componentNameStart) == '/') componentNameStart++;
>>>> +            if (componentNameStart == nameLength) throw new
>>>> IllegalArgumentException("Invalid name(" + name + ")");
>>>> +            int componentNameEnd = componentNameStart;
>>>> +            while (componentNameEnd < nameLength &&
>>>> name.charAt(componentNameEnd) != '/') componentNameEnd++;
>>>> +            if (componentNameEnd == nameLength) throw new
>>>> IllegalArgumentException("Invalid name(" + name + ")");
>>>> +            int restStart = componentNameEnd;
>>>> +            while (restStart < nameLength && name.charAt(restStart) ==
>>>> '/') restStart++;
>>>> +            if (restStart == nameLength) throw new
>>>> IllegalArgumentException("Invalid name(" + name + ")");
>>>> +            String componentName = name.substring(componentNameStart,
>>>> componentNameEnd);
>>>> +            URL location =
>>>> FlexibleLocation.resolveLocation("component://" + componentName + "/.");
>>>> +            FileObject ofbizBase =
>>>> getContext().resolveFile(location.toString(), properties);
>>>> +            return
>>>> VFSUtil.toFileObject(ofbizBase.getFileSystem().getFileSystemManager(),
>>>> ofbizBase.resolveFile(name.substring(restStart)).getURL().toString(),
>>>> properties);
>>>> +        } catch (Exception e) {
>>>> +            FileSystemException fse = new
>>>> FileSystemException(e.getMessage(), null, e);
>>>> +            fse.initCause(e);
>>>> +            throw fse;
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/commons/vfs/ofbiz/OfbizHomeProvider.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,51 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.commons.vfs.ofbiz;
>>>> +
>>>> +import java.net.URL;
>>>> +import java.util.Collection;
>>>> +
>>>> +import org.apache.commons.vfs.FileObject;
>>>> +import org.apache.commons.vfs.FileSystemException;
>>>> +import org.apache.commons.vfs.FileSystemOptions;
>>>> +import org.apache.commons.vfs.provider.AbstractFileProvider;
>>>> +import org.apache.commons.vfs.provider.local.DefaultLocalFileProvider;
>>>> +
>>>> +import org.ofbiz.base.location.FlexibleLocation;
>>>> +
>>>> +import org.webslinger.commons.vfs.VFSUtil;
>>>> +
>>>> +public class OfbizHomeProvider extends AbstractFileProvider {
>>>> +    public Collection getCapabilities() {
>>>> +        return DefaultLocalFileProvider.capabilities;
>>>> +    }
>>>> +
>>>> +    public FileObject findFile(FileObject base, String name,
>>>> FileSystemOptions properties) throws FileSystemException {
>>>> +        //new Exception("findFile(" + base + ", " + name +
>>>> ")").printStackTrace();
>>>> +        try {
>>>> +            URL location =
>>>> FlexibleLocation.resolveLocation("ofbizhome://.");
>>>> +            FileObject ofbizBase =
>>>> getContext().resolveFile(location.toString(), properties);
>>>> +            return
>>>> VFSUtil.toFileObject(ofbizBase.getFileSystem().getFileSystemManager(),
>>>> ofbizBase.resolveFile(name.substring(13)).getURL().toString(),
>>>> properties);
>>>> +        } catch (Exception e) {
>>>> +            FileSystemException fse = new
>>>> FileSystemException(e.getMessage(), null, e);
>>>> +            fse.initCause(e);
>>>> +            throw fse;
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityHttpUtil.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,78 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.util.HashMap;
>>>> +import java.util.Iterator;
>>>> +import java.util.Locale;
>>>> +import java.util.Map;
>>>> +
>>>> +import javax.servlet.ServletRequest;
>>>> +import javax.servlet.http.HttpServletRequest;
>>>> +
>>>> +import org.ofbiz.base.util.GeneralException;
>>>> +import org.ofbiz.base.util.ObjectType;
>>>> +import org.ofbiz.base.util.UtilHttp;
>>>> +import org.ofbiz.base.util.UtilMisc;
>>>> +import org.ofbiz.base.util.UtilValidate;
>>>> +import org.ofbiz.entity.GenericDelegator;
>>>> +import org.ofbiz.entity.GenericValue;
>>>> +import org.ofbiz.entity.jdbc.SqlJdbcUtil;
>>>> +import org.ofbiz.entity.model.ModelEntity;
>>>> +import org.ofbiz.entity.model.ModelField;
>>>> +import org.ofbiz.entity.model.ModelFieldType;
>>>> +
>>>> +public class EntityHttpUtil {
>>>> +    public static GenericValue makeValidValue(String entityName,
>>>> ServletRequest request) throws GeneralException {
>>>> +        return makeValidValue(entityName, false, request);
>>>> +    }
>>>> +
>>>> +    public static GenericValue makeValidValue(String entityName, boolean
>>>> includePks, ServletRequest request) throws
>>>> GeneralException {
>>>> +        if (request instanceof HttpServletRequest) return
>>>> makeValidValue(entityName, includePks, (HttpServletRequest) request);
>>>> +        throw new IllegalArgumentException("Not an HttpServletRequest");
>>>> +    }
>>>> +
>>>> +    public static GenericValue makeValidValue(String entityName,
>>>> HttpServletRequest request) throws GeneralException {
>>>> +        return makeValidValue(entityName, false, request);
>>>> +    }
>>>> +
>>>> +    public static GenericValue makeValidValue(String entityName, boolean
>>>> includePks, HttpServletRequest request) throws
>>>> GeneralException {
>>>> +        GenericDelegator delegator = (GenericDelegator)
>>>> request.getAttribute("delegator");
>>>> +        GenericValue value = delegator.makeValue(entityName, (Map)
>>>> null);
>>>> +        ModelEntity model = value.getModelEntity();
>>>> +        Iterator<ModelField> it = includePks ? model.getFieldsIterator()
>>>>> model.getNopksIterator();
>>>> +        Locale locale = UtilHttp.getLocale(request);
>>>> +        while (it.hasNext()) {
>>>> +            ModelField field = it.next();
>>>> +            String fieldName = field.getName();
>>>> +            String parameterValue = request.getParameter(fieldName);
>>>> +            Object fieldValue;
>>>> +            if (parameterValue == null) {
>>>> +                fieldValue = null;
>>>> +            } else {
>>>> +                ModelFieldType fieldType =
>>>> delegator.getEntityFieldType(model, field.getType());
>>>> +                String wantedType = fieldType.getJavaType();
>>>> +                fieldValue =
>>>> ObjectType.simpleTypeConvert(parameterValue, wantedType, null, locale,
>>>> true);
>>>> +            }
>>>> +            value.put(fieldName, fieldValue);
>>>> +        }
>>>> +        return value;
>>>> +    }
>>>> +}
>>>> +
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/EntityTransactionUtil.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,66 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import javax.transaction.Transaction;
>>>> +
>>>> +import org.ofbiz.entity.transaction.TransactionUtil;
>>>> +import java.util.concurrent.Callable;
>>>> +
>>>> +public class EntityTransactionUtil {
>>>> +    public static <V> V doNewTransaction(String ifErrorMessage,
>>>> Callable<V> callable) throws Throwable {
>>>> +        Transaction tx = TransactionUtil.suspend();
>>>> +        try {
>>>> +            return doTransaction(ifErrorMessage, callable);
>>>> +        } finally {
>>>> +            TransactionUtil.resume(tx);
>>>> +        }
>>>> +    }
>>>> +
>>>> +    public static <V> V doTransaction(String ifErrorMessage, Callable<V>
>>>> callable) throws Throwable {
>>>> +        boolean tx = TransactionUtil.begin();
>>>> +        Throwable transactionAbortCause = null;
>>>> +        try {
>>>> +            try {
>>>> +                return callable.call();
>>>> +            } catch (Throwable t) {
>>>> +                while (t.getCause() != null) {
>>>> +                    t = t.getCause();
>>>> +                }
>>>> +                throw t;
>>>> +            }
>>>> +        } catch (Error e) {
>>>> +            transactionAbortCause = e;
>>>> +            throw e;
>>>> +        } catch (RuntimeException e) {
>>>> +            transactionAbortCause = e;
>>>> +            throw e;
>>>> +        } catch (Throwable t) {
>>>> +            transactionAbortCause = t;
>>>> +            throw t;
>>>> +        } finally {
>>>> +            if (transactionAbortCause == null) {
>>>> +                TransactionUtil.commit(tx);
>>>> +            } else {
>>>> +                transactionAbortCause.printStackTrace();
>>>> +                TransactionUtil.rollback(tx, ifErrorMessage,
>>>> transactionAbortCause);
>>>> +            }
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java?rev=753081&view=auto
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>>> (added) +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/StatsUpdater.java
>>>> Fri Mar 13 01:12:11 2009 @@ -0,0 +1,119 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.util.HashMap;
>>>> +import java.util.Iterator;
>>>> +import java.util.Map;
>>>> +import java.util.concurrent.Callable;
>>>> +import java.util.concurrent.ConcurrentHashMap;
>>>> +import java.util.concurrent.ScheduledFuture;
>>>> +import java.util.concurrent.TimeUnit;
>>>> +import java.util.concurrent.atomic.AtomicReference;
>>>> +
>>>> +import org.ofbiz.entity.GenericDelegator;
>>>> +import org.ofbiz.entity.GenericEntityException;
>>>> +import org.ofbiz.entity.GenericPK;
>>>> +import org.ofbiz.entity.GenericValue;
>>>> +
>>>> +import org.webslinger.lang.ConcurrentCache;
>>>> +import org.webslinger.lang.ExecutionPool;
>>>> +
>>>> +public class StatsUpdater {
>>>> +    private static final Updater UPDATER = new Updater();
>>>> +
>>>> +    public static void updateStats(GenericDelegator delegator, String
>>>> entityName, Map<String, ? extends Object> keyFields,
>>>> Map<String, ? extends Long> updateCountFields) throws
>>>> GenericEntityException {
>>>> +        GenericPK pk = delegator.makePK(entityName, keyFields);
>>>> +        Map<String, Long> value = UPDATER.getValue(pk);
>>>> +        synchronized (value) {
>>>> +            for (Map.Entry<String, ? extends Long> entry:
>>>> updateCountFields.entrySet()) {
>>>> +                Long oldValue = value.get(entry.getKey());
>>>> +                if (oldValue != null) {
>>>> +                    value.put(entry.getKey(),
>>>> Long.valueOf(oldValue.longValue() + entry.getValue()));
>>>> +                } else {
>>>> +                    value.put(entry.getKey(), entry.getValue());
>>>> +                }
>>>> +            }
>>>> +        }
>>>> +    }
>>>> +
>>>> +    private static final class Updater implements Callable<Void> {
>>>> +        protected AtomicReference<EntityHolder> entities = new
>>>> AtomicReference<EntityHolder>(new EntityHolder(Updater.class,
>>>> "entities", null));
>>>> +        protected ScheduledFuture<Void> future;
>>>> +
>>>> +        protected Map<String, Long> getValue(GenericPK pk) throws
>>>> GenericEntityException {
>>>> +            synchronized (this) {
>>>> +                if (future == null || future.isDone()) {
>>>> +                    future = ExecutionPool.schedule(this, 1,
>>>> TimeUnit.SECONDS);
>>>> +                }
>>>> +            }
>>>> +            try {
>>>> +                return entities.get().get(pk);
>>>> +            } catch (RuntimeException e) {
>>>> +                throw e;
>>>> +            } catch (GenericEntityException e) {
>>>> +                throw e;
>>>> +            } catch (Exception e) {
>>>> +                throw (GenericEntityException) new
>>>> GenericEntityException(e.getMessage()).initCause(e);
>>>> +            }
>>>> +        }
>>>> +
>>>> +        public Void call() {
>>>> +            EntityHolder oldEntities;
>>>> +            EntityHolder newEntities = new EntityHolder(Updater.class,
>>>> "entities", null);
>>>> +            do {
>>>> +                oldEntities = entities.get();
>>>> +            } while (!entities.compareAndSet(oldEntities, newEntities));
>>>> +            synchronized (Updater.class) {
>>>> +                for (GenericPK pk: oldEntities.keys()) {
>>>> +                    try {
>>>> +                        Map<String, Long> add = oldEntities.get(pk);
>>>> +                        GenericValue existing =
>>>> pk.getDelegator().findOne(pk.getEntityName(), pk, false);
>>>> +                        if (existing == null) {
>>>> +                            existing =
>>>> pk.getDelegator().create(pk.getEntityName(), pk);
>>>> +                        }
>>>> +                        for (Map.Entry<String, Long> entry:
>>>> add.entrySet()) {
>>>> +                            Long value = entry.getValue();
>>>> +                            Long oldValue =
>>>> existing.getLong(entry.getKey());
>>>> +                            if (oldValue != null) {
>>>> +                                existing.put(entry.getKey(),
>>>> Long.valueOf(value.longValue() + oldValue.longValue()));
>>>> +                            } else {
>>>> +                                existing.put(entry.getKey(), value);
>>>> +                            }
>>>> +                        }
>>>> +                        existing.store();
>>>> +                    } catch (Exception e) {
>>>> +                        e.printStackTrace();
>>>> +                    }
>>>> +                }
>>>> +            }
>>>> +            return null;
>>>> +        }
>>>> +    }
>>>> +
>>>> +    private static final class EntityHolder extends
>>>> ConcurrentCache<GenericPK, Map<String, Long>> {
>>>> +        protected EntityHolder(Class<?> owner, String field, String
>>>> label) {
>>>> +            super(owner, field, label, HARD);
>>>> +        }
>>>> +
>>>> +        protected Map<String, Long> createValue(GenericPK pk) throws
>>>> Exception {
>>>> +            return new HashMap<String, Long>();
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerBSFServiceEngine.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,58 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.io.IOException;
>>>> +import java.util.Map;
>>>> +
>>>> +import org.apache.bsf.BSFException;
>>>> +
>>>> +import org.ofbiz.service.DispatchContext;
>>>> +import org.ofbiz.service.GenericServiceException;
>>>> +import org.ofbiz.service.ModelService;
>>>> +import org.ofbiz.service.ServiceDispatcher;
>>>> +import org.ofbiz.service.engine.GenericAsyncEngine;
>>>> +
>>>> +public class WebslingerBSFServiceEngine extends GenericAsyncEngine {
>>>> +    private static final String[] paramNames;
>>>> +    private static final Class<?>[] paramTypes;
>>>> +    static {
>>>> +        paramNames = new String[] { "dispatcher", "context" };
>>>> +        paramTypes = new Class<?>[] { DispatchContext.class, Map.class
>>>> };
>>>> +    }
>>>> +
>>>> +    public WebslingerBSFServiceEngine(ServiceDispatcher dispatcher) {
>>>> +        super(dispatcher);
>>>> +    }
>>>> +
>>>> +    public void runSyncIgnore(String localName, ModelService
>>>> modelService, Map<String, Object> context) throws
>>>> GenericServiceException {
>>>> +        runSync(localName, modelService, context);
>>>> +    }
>>>> +
>>>> +    public Map<String, Object> runSync(String localName, ModelService
>>>> modelService, Map<String, Object> context) throws
>>>> GenericServiceException {
>>>> +        Object[] params = new Object[] {
>>>> dispatcher.getLocalContext(localName), context };
>>>> +        try {
>>>> +            return (Map)
>>>> WebslingerContainer.runEvent(modelService.engineName, modelService.location,
>>>> paramNames, paramTypes,
>>>> params);
>>>> +        } catch (IOException e) {
>>>> +            throw (GenericServiceException) new
>>>> GenericServiceException(e.getMessage()).initCause(e);
>>>> +        } catch (BSFException e) {
>>>> +            throw (GenericServiceException) new
>>>> GenericServiceException(e.getMessage()).initCause(e);
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerCatalinaContainer.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,52 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.io.File;
>>>> +
>>>> +import org.apache.catalina.Engine;
>>>> +import org.apache.catalina.core.StandardEngine;
>>>> +
>>>> +import org.ofbiz.base.util.UtilValidate;
>>>> +import org.ofbiz.base.container.ContainerConfig;
>>>> +import org.ofbiz.base.container.ContainerException;
>>>> +import org.ofbiz.catalina.container.CatalinaContainer;
>>>> +
>>>> +import org.webslinger.catalina.WebslingerAccessLogValve;
>>>> +
>>>> +public class WebslingerCatalinaContainer extends CatalinaContainer {
>>>> +    protected Engine createEngine(ContainerConfig.Container.Property
>>>> engineConfig) throws ContainerException {
>>>> +        Engine engine = super.createEngine(engineConfig);
>>>> +        String logDir = ContainerConfig.getPropertyValue(engineConfig,
>>>> "access-log-dir", null);
>>>> +        if (logDir == null) return engine;
>>>> +        WebslingerAccessLogValve al = new WebslingerAccessLogValve();
>>>> +        if (!logDir.startsWith("/")) logDir =
>>>> System.getProperty("ofbiz.home") + "/" + logDir;
>>>> +        File logFile = new File(logDir);
>>>> +        if (!logFile.isDirectory()) throw new ContainerException("Log
>>>> directory [" + logDir + "] is not available; make sure the
>>>> directory is created");
>>>> +        al.setDirectory(logFile.getAbsolutePath());
>>>> +        String alp2 = ContainerConfig.getPropertyValue(engineConfig,
>>>> "access-log-pattern", null);
>>>> +        if (!UtilValidate.isEmpty(alp2)) al.setPattern(alp2);
>>>> +        String alp3 = ContainerConfig.getPropertyValue(engineConfig,
>>>> "access-log-prefix", null);
>>>> +        if (!UtilValidate.isEmpty(alp3)) al.setPrefix(alp3);
>>>> +
>>>>  al.setResolveHosts(ContainerConfig.getPropertyValue(engineConfig,
>>>> "access-log-resolve", true));
>>>> +        al.setRotatable(ContainerConfig.getPropertyValue(engineConfig,
>>>> "access-log-rotate", false));
>>>> +        ((StandardEngine) engine).addValve(al);
>>>> +        return engine;
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContainer.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,100 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.io.IOException;
>>>> +import java.io.StringWriter;
>>>> +import java.io.Writer;
>>>> +import java.util.Map;
>>>> +
>>>> +import org.apache.bsf.BSFException;
>>>> +import org.apache.commons.vfs.FileName;
>>>> +import org.apache.commons.vfs.FileObject;
>>>> +
>>>> +import org.ofbiz.base.container.Container;
>>>> +import org.ofbiz.base.container.ContainerException;
>>>> +import org.ofbiz.commons.vfs.CommonsVfsContainer;
>>>> +
>>>> +import org.webslinger.bsf.LanguageManager;
>>>> +import org.webslinger.template.CompiledTemplate;
>>>> +import org.webslinger.template.TemplateManager;
>>>> +import org.webslinger.vfs.CommonsVfsFileNameVFSDelegate;
>>>> +import org.webslinger.vfs.TypeVFSDelegate;
>>>> +
>>>> +public class WebslingerContainer implements Container {
>>>> +    private static TypeVFSDelegate vfsDelegate;
>>>> +    private static LanguageManager languageManager;
>>>> +    private static TemplateManager templateManager;
>>>> +    private static final String[] templateParamNames = new String[]
>>>> {"writer", "context"};
>>>> +    private static final Class<?>[] templateParamTypes = new Class<?>[]
>>>> {Writer.class, Map.class};
>>>> +
>>>> +    public void init(String[] args, String configFile) throws
>>>> ContainerException {
>>>> +    }
>>>> +
>>>> +    public boolean start() throws ContainerException {
>>>> +        ClassLoader loader =
>>>> Thread.currentThread().getContextClassLoader();
>>>> +        TypeVFSDelegate.Resolver resolver = new
>>>> TypeVFSDelegate.Resolver() {
>>>> +            public Object resolve(String name) throws IOException {
>>>> +                return CommonsVfsContainer.resolveFile(name);
>>>> +            }
>>>> +        };
>>>> +        try {
>>>> +            vfsDelegate = new TypeVFSDelegate(resolver);
>>>> +            vfsDelegate.addVFSDelegate(FileName.class, new
>>>> CommonsVfsFileNameVFSDelegate(vfsDelegate,
>>>> CommonsVfsContainer.getFileSystemManager()));
>>>> +            languageManager = new LanguageManager(vfsDelegate, null);
>>>> +            languageManager.setClassLoader(loader);
>>>> +            templateManager = new TemplateManager(vfsDelegate, null);
>>>> +            templateManager.setClassLoader(loader);
>>>> +        } catch (BSFException e) {
>>>> +            throw (ContainerException) new
>>>> ContainerException("Initializing StandardFileSystemManager").initCause(e);
>>>> +        }
>>>> +        return true;
>>>> +    }
>>>> +
>>>> +    public void stop() throws ContainerException {
>>>> +    }
>>>> +
>>>> +    public static LanguageManager getLanguageManager() {
>>>> +        return languageManager;
>>>> +    }
>>>> +
>>>> +    public static TemplateManager getTemplateManager() {
>>>> +        return templateManager;
>>>> +    }
>>>> +
>>>> +    public static Object runEvent(String language, String name, String[]
>>>> paramNames, Class<?>[] paramTypes, Object[] params)
>>>> throws BSFException, IOException {
>>>> +        return getLanguageManager().apply(language, "top", 0, 0,
>>>> CommonsVfsContainer.resolveFile(name), paramNames, params,
>>>> paramTypes);
>>>> +    }
>>>> +
>>>> +    public static String runTemplate(String language, String name,
>>>> Map<String, Object> context) throws IOException {
>>>> +        StringWriter writer = new StringWriter();
>>>> +        runTemplate(language, name, writer, context);
>>>> +        return writer.toString();
>>>> +    }
>>>> +
>>>> +    public static void runTemplate(String language, String name, Writer
>>>> writer, Map<String, Object> context) throws IOException
>>>> { +        FileObject file = CommonsVfsContainer.resolveFile(name);
>>>> +        CompiledTemplate template = getTemplate(language, file);
>>>> +        template.run(file, writer, context);
>>>> +    }
>>>> +
>>>> +    public static CompiledTemplate getTemplate(String language,
>>>> FileObject file) throws IOException {
>>>> +        return getTemplateManager().compileTemplate(language, "top", 0,
>>>> 0, file);
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerContextMapper.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,206 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.io.File;
>>>> +import java.io.IOException;
>>>> +import java.lang.ref.SoftReference;
>>>> +import java.net.URL;
>>>> +import java.util.ArrayList;
>>>> +import java.util.HashMap;
>>>> +import java.util.HashSet;
>>>> +import java.util.Iterator;
>>>> +import java.util.List;
>>>> +import java.util.Set;
>>>> +
>>>> +import javax.management.JMException;
>>>> +import javax.naming.NamingException;
>>>> +import javax.servlet.ServletConfig;
>>>> +import javax.servlet.ServletContext;
>>>> +import javax.servlet.ServletException;
>>>> +import javax.servlet.http.HttpServletRequest;
>>>> +import javax.servlet.http.HttpServletResponse;
>>>> +import javax.xml.parsers.ParserConfigurationException;
>>>> +
>>>> +import org.xml.sax.SAXException;
>>>> +
>>>> +import org.apache.commons.vfs.FileObject;
>>>> +import org.apache.commons.vfs.FileSystemException;
>>>> +import org.apache.commons.vfs.FileSystemManager;
>>>> +import org.apache.commons.vfs.NameScope;
>>>> +
>>>> +import org.ofbiz.base.util.UtilFormatOut;
>>>> +import org.ofbiz.base.util.UtilMisc;
>>>> +import org.ofbiz.base.util.UtilProperties;
>>>> +import org.ofbiz.base.util.UtilValidate;
>>>> +import org.ofbiz.entity.GenericEntity;
>>>> +import org.ofbiz.entity.GenericEntityException;
>>>> +import org.ofbiz.entity.GenericDelegator;
>>>> +import org.ofbiz.entity.GenericValue;
>>>> +import org.ofbiz.entity.transaction.TransactionFactory;
>>>> +import org.ofbiz.entity.cache.Cache;
>>>> +import org.ofbiz.entity.util.EntityUtil;
>>>> +import org.ofbiz.security.SecurityFactory;
>>>> +import org.ofbiz.service.LocalDispatcher;
>>>> +import org.ofbiz.service.WebAppDispatcher;
>>>> +
>>>> +import org.webslinger.AbstractMappingWebslingerServletContextFactory;
>>>> +import org.webslinger.WebslingerServletContext;
>>>> +import org.webslinger.container.WebslingerContainer;
>>>> +import org.webslinger.lang.ObjectUtil;
>>>> +import org.webslinger.servlet.WebslingerServlet;
>>>> +import org.webslinger.util.TTLObject;
>>>> +import org.webslinger.collections.ArrayUtil;
>>>> +import org.webslinger.collections.CollectionUtil;
>>>> +
>>>> +public class WebslingerContextMapper extends
>>>> AbstractMappingWebslingerServletContextFactory {
>>>> +    protected ServletContext servletContext;
>>>> +    protected GenericDelegator delegator;
>>>> +    protected final ArrayList<URL> globalReaderURLs = new
>>>> ArrayList<URL>();
>>>> +
>>>> +    public void init(ServletConfig config) throws ServletException,
>>>> IOException {
>>>> +
>>>>  System.err.println(org.webslinger.commons.vfs.flat.FlatFileProvider.class);
>>>> +        servletContext = config.getServletContext();
>>>> +        String delegatorName =
>>>> servletContext.getInitParameter("entityDelegatorName");
>>>> +        delegator = GenericDelegator.getGenericDelegator(delegatorName);
>>>> +        String readerFiles =
>>>> servletContext.getInitParameter("serviceReaderUrls");
>>>> +        if (readerFiles != null) {
>>>> +            for (String reader: CollectionUtil.split(readerFiles, ";"))
>>>> {
>>>> +                URL url =
>>>>  config.getServletContext().getResource(reader);
>>>> +                if (url != null) globalReaderURLs.add(url);
>>>> +            }
>>>> +        }
>>>> +        super.init(config,
>>>> UtilProperties.getPropertyValue("webslinger.properties", "moduleBase"));
>>>> +    }
>>>> +
>>>> +    protected Layout[] getStartLayouts() throws Exception {
>>>> +        ArrayList<Layout> layouts = new ArrayList<Layout>();
>>>> +        try {
>>>> +            for (GenericValue value:
>>>> delegator.findByAnd("WebslingerServer", UtilMisc.toMap("loadAtStart", "Y")))
>>>> {
>>>> +                layouts.add(new OfbizLayout(value));
>>>> +            }
>>>> +        } catch (GenericEntityException e) {
>>>> +        }
>>>> +        return layouts.toArray(new Layout[layouts.size()]);
>>>> +    }
>>>> +
>>>> +    public void initializeRequest(WebslingerServletContext context,
>>>> HttpServletRequest request) {
>>>> +        request.setAttribute("servletContext", context);
>>>> +        Object delegator = context.getAttribute("delegator");
>>>> +        Object dispatcher = context.getAttribute("dispatcher");
>>>> +        Object security = context.getAttribute("security");
>>>> +        request.setAttribute("delegator", delegator);
>>>> +        request.setAttribute("dispatcher", dispatcher);
>>>> +        request.setAttribute("security", security);
>>>> +        // FIXME!!! These next two are a hack until proper fake/wrapped
>>>> session support is done in webslinger
>>>> +        servletContext.setAttribute("delegator", delegator);
>>>> +        servletContext.setAttribute("dispatcher", dispatcher);
>>>> +        servletContext.setAttribute("security", security);
>>>> +    }
>>>> +
>>>> +    protected void initializeContext(WebslingerServletContext context,
>>>> Layout layout) throws Exception {
>>>> +        OfbizLayout ofbizLayout = (OfbizLayout) layout;
>>>> +        GenericDelegator delegator =
>>>> GenericDelegator.getGenericDelegator(ofbizLayout.delegatorName);
>>>> +        context.setAttribute("delegator", delegator);
>>>> +        context.setAttribute("dispatcher",
>>>> createLocalDispatcher(context, layout.getTarget(), delegator));
>>>> +        context.setAttribute("security",
>>>> SecurityFactory.getInstance(delegator));
>>>> +    }
>>>> +
>>>> +    protected LocalDispatcher
>>>> createLocalDispatcher(WebslingerServletContext context, String name,
>>>> GenericDelegator delegator)
>>>> throws IOException {
>>>> +        ArrayList<URL> readerURLs = new
>>>> ArrayList<URL>(globalReaderURLs);
>>>> +        String readerFiles =
>>>> context.getInitParameter("serviceReaderUrls");
>>>> +        if (readerFiles != null) {
>>>> +            for (String reader: CollectionUtil.split(readerFiles, ";"))
>>>> {
>>>> +                URL url =  context.getResource(reader);
>>>> +                if (url != null) readerURLs.add(url);
>>>> +            }
>>>> +        }
>>>> +        System.err.println(readerURLs);
>>>> +        return new WebAppDispatcher(name, delegator, readerURLs);
>>>> +    }
>>>> +
>>>> +    protected Set<String> getSuffixes() throws Exception {
>>>> +        Cache cache = delegator.getCache();
>>>> +        Set<String> suffixes;
>>>> +        synchronized (WebslingerContextMapper.class) {
>>>> +            suffixes = (Set<String>) cache.get("WebslingerHostSuffix",
>>>> null, "WebslingerContextMapper.Suffixes");
>>>> +            if (suffixes == null) {
>>>> +                suffixes = new HashSet<String>();
>>>> +                for (GenericValue value:
>>>> delegator.findList("WebslingerHostSuffix", null, null, null, null, false)) {
>>>> +                    suffixes.add(value.getString("hostSuffix"));
>>>> +                }
>>>> +                cache.put("WebslingerHostSuffix", null,
>>>> "WebslingerContextMapper.Suffixes", suffixes);
>>>> +            }
>>>> +        }
>>>> +        return suffixes;
>>>> +    }
>>>> +
>>>> +    protected Layout lookupLayout(String hostName, String contextPath)
>>>> throws Exception {
>>>> +        GenericValue layout =
>>>> EntityUtil.getOnly(delegator.findByAndCache("WebslingerLayout",
>>>> UtilMisc.toMap("hostName",
>>>> hostName, "contextPath", contextPath)));
>>>> +        if (layout == null) return null;
>>>> +        return new OfbizLayout(layout);
>>>> +    }
>>>> +
>>>> +    protected class OfbizLayout implements Layout {
>>>> +        private final String id;
>>>> +        private final String target;
>>>> +        private final String[] bases;
>>>> +        private final int hashCode;
>>>> +        protected final String delegatorName;
>>>> +        protected final String dispatcherName;
>>>> +
>>>> +        protected OfbizLayout(GenericValue server) throws
>>>> GenericEntityException {
>>>> +            id = server.getString("webslingerServerId");
>>>> +            target = server.getString("target");
>>>> +            List<GenericValue> baseValues =
>>>> server.getRelatedCache("WebslingerServerBase", UtilMisc.toList("seqNum"));
>>>> +            bases = new String[baseValues.size()];
>>>> +            for (int i = 0; i < bases.length; i++) {
>>>> +                GenericValue baseValue = baseValues.get(i);
>>>> +                bases[i] = baseValue.getString("baseName");
>>>> +            }
>>>> +            delegatorName = server.getString("delegatorName");
>>>> +            dispatcherName = server.getString("dispatcherName");
>>>> +            hashCode = target.hashCode() ^
>>>> ObjectUtil.hashCodeHelper(delegatorName) ^ ArrayUtil.hashCodeHelper(bases);
>>>> +        }
>>>> +
>>>> +        public String getId() {
>>>> +            return id;
>>>> +        }
>>>> +
>>>> +        public String getTarget() {
>>>> +            return target;
>>>> +        }
>>>> +
>>>> +        public String[] getBases() {
>>>> +            return bases;
>>>> +        }
>>>> +
>>>> +        public int hashCode() {
>>>> +            return hashCode;
>>>> +        }
>>>> +
>>>> +        public boolean equals(Object o) {
>>>> +            if (!(o instanceof OfbizLayout)) return false;
>>>> +            OfbizLayout other = (OfbizLayout) o;
>>>> +            if (!target.equals(other.target)) return false;
>>>> +            if (!ObjectUtil.equalsHelper(delegatorName,
>>>> other.delegatorName)) return false;
>>>> +            return ArrayUtil.equalsHelper(bases, other.bases);
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>>> (added)
>>>> +++
>>>> ofbiz/trunk/framework/webslinger/src/org/ofbiz/webslinger/WebslingerServerEngine.java
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,61 @@
>>>>
>>>> +/*******************************************************************************
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License"); you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> +
>>>> *******************************************************************************/
>>>> +package org.ofbiz.webslinger;
>>>> +
>>>> +import java.io.IOException;
>>>> +import java.io.StringReader;
>>>> +import java.io.StringWriter;
>>>> +import java.util.Collections;
>>>> +import java.util.Map;
>>>> +
>>>> +import org.ofbiz.base.util.UtilMisc;
>>>> +import org.ofbiz.entity.GenericDelegator;
>>>> +import org.ofbiz.entity.GenericValue;
>>>> +import org.ofbiz.entity.util.EntityUtil;
>>>> +import org.ofbiz.service.GenericServiceException;
>>>> +import org.ofbiz.service.ModelService;
>>>> +import org.ofbiz.service.ServiceDispatcher;
>>>> +import org.ofbiz.service.engine.GenericAsyncEngine;
>>>> +
>>>> +import org.webslinger.WebslingerServletContext;
>>>> +
>>>> +public class WebslingerServerEngine extends GenericAsyncEngine {
>>>> +    public WebslingerServerEngine(ServiceDispatcher dispatcher) {
>>>> +        super(dispatcher);
>>>> +    }
>>>> +
>>>> +    public void runSyncIgnore(String localName, ModelService
>>>> modelService, Map<String, Object> context) throws
>>>> GenericServiceException {
>>>> +        runSync(localName, modelService, context);
>>>> +    }
>>>> +
>>>> +    public Map<String, Object> runSync(String localName, ModelService
>>>> modelService, Map<String, Object> context) throws
>>>> GenericServiceException {
>>>> +        GenericDelegator delegator = dispatcher.getDelegator();
>>>> +        try {
>>>> +            GenericValue found =
>>>> EntityUtil.getFirst(delegator.findByAndCache("WebslingerLayout",
>>>> UtilMisc.toMap("webslingerServerId", modelService.location)));
>>>> +            if (found == null) throw new
>>>> GenericServiceException("Couldn't find server mapping for(" +
>>>> modelService.location +
>>>> ")");
>>>> +            return (Map<String, Object>)
>>>> WebslingerServletContext.invokeInVM(found.getString("hostName"), 8080,
>>>> modelService.invoke, context);
>>>> +        } catch (RuntimeException e) {
>>>> +            throw e;
>>>> +        } catch (GenericServiceException e) {
>>>> +            throw e;
>>>> +        } catch (Exception e) {
>>>> +            throw (GenericServiceException) new
>>>> GenericServiceException(e.getMessage()).initCause(e);
>>>> +        }
>>>> +    }
>>>> +}
>>>>
>>>> Added: ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>>> (added)
>>>> +++ ofbiz/trunk/framework/webslinger/webapp/webslinger/WEB-INF/web.xml
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,74 @@
>>>> +<?xml version="1.0"?>
>>>> +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
>>>> 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
>>>> +
>>>> +<!--
>>>> + *  Copyright (c) 2001-2005 The Open For Business Project -
>>>> www.ofbiz.org
>>>> + *
>>>> + *  Permission is hereby granted, free of charge, to any person
>>>> obtaining a
>>>> + *  copy of this software and associated documentation files (the
>>>> "Software"),
>>>> + *  to deal in the Software without restriction, including without
>>>> limitation
>>>> + *  the rights to use, copy, modify, merge, publish, distribute,
>>>> sublicense,
>>>> + *  and/or sell copies of the Software, and to permit persons to whom
>>>> the
>>>> + *  Software is furnished to do so, subject to the following conditions:
>>>> + *
>>>> + *  The above copyright notice and this permission notice shall be
>>>> included
>>>> + *  in all copies or substantial portions of the Software.
>>>> + *
>>>> + *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>>>> EXPRESS
>>>> + *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>>>> + *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>>> NONINFRINGEMENT.
>>>> + *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
>>>> + *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
>>>> TORT
>>>> + *  OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
>>>> SOFTWARE OR
>>>> + *  THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>>>> +-->
>>>> +
>>>> +<web-app>
>>>> +    <display-name>Open For Business - Catalog</display-name>
>>>> +    <description>Catalog Module of the Open For Business
>>>> Project</description>
>>>> +
>>>> +    <context-param>
>>>> +        <param-name>entityDelegatorName</param-name>
>>>> +        <param-value>default</param-value>
>>>> +        <description>The Name of the Entity Delegator to use, defined in
>>>> entityengine.xml</description>
>>>> +    </context-param>
>>>> +
>>>> +    <context-param>
>>>> +        <param-name>ofbiz.webslinger.baseLocation</param-name>
>>>> +
>>>>  <param-value>ofbiz-component://webslinger/webapp/bases</param-value>
>>>> +    </context-param>
>>>> +
>>>> +    <servlet>
>>>> +        <servlet-name>WebslingerServlet</servlet-name>
>>>> +        <display-name>WebslingerServlet</display-name>
>>>> +        <description>Webslinger Servlet</description>
>>>> +
>>>>  <servlet-class>org.webslinger.servlet.WebslingerServlet</servlet-class>
>>>> +        <init-param>
>>>> +            <param-name>ofbiz.mapping.ttl</param-name>
>>>> +            <param-value>60000</param-value>
>>>> +        </init-param>
>>>> +        <init-param>
>>>> +
>>>>  <param-name>ofbiz.mapping.default-file-system-id</param-name>
>>>> +            <param-value>1</param-value>
>>>> +        </init-param>
>>>> +        <init-param>
>>>> +
>>>>  <param-name>org.webslinger.servlet.WebslingerServlet.WebslingerServletContextFactory</param-name>
>>>> +
>>>>  <param-value>org.ofbiz.webslinger.WebslingerContextMapper</param-value>
>>>> +        </init-param>
>>>> +        <load-on-startup>1</load-on-startup>
>>>> +    </servlet>
>>>> +    <servlet-mapping>
>>>> +        <servlet-name>WebslingerServlet</servlet-name>
>>>> +        <url-pattern>/*</url-pattern>
>>>> +    </servlet-mapping>
>>>> +
>>>> +    <session-config>
>>>> +        <session-timeout>60</session-timeout> <!-- in minutes -->
>>>> +    </session-config>
>>>> +
>>>> +    <welcome-file-list>
>>>> +        <welcome-file>index.jsp</welcome-file>
>>>> +        <welcome-file>index.html</welcome-file>
>>>> +        <welcome-file>index.htm</welcome-file>
>>>> +    </welcome-file-list>
>>>> +</web-app>
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml?rev=753081&view=auto
>>>> ==============================================================================
>>>> ---
>>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>>> (added) +++
>>>> ofbiz/trunk/framework/webslinger/websites/webslinger/Config/ModuleState.xml
>>>> Fri Mar 13 01:12:11 2009 @@ -0,0 +1,22 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<!--
>>>> +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.
>>>> +-->
>>>> +<module-state>
>>>> + <module name="defaults"
>>>> url="ofbiz-component://webslinger/modules/defaults.zip" enabled="true"/>
>>>> +</module-state>
>>>>
>>>> Propchange: ofbiz/trunk/framework/webslinger/websites/webslinger/Var/
>>>>
>>>> ------------------------------------------------------------------------------
>>>> --- svn:ignore (added)
>>>> +++ svn:ignore Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1 @@
>>>> +*
>>>>
>>>> Added:
>>>> ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>>> URL:
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml?rev=753081&view=auto
>>>>
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>>> (added)
>>>> +++ ofbiz/trunk/framework/webslinger/websites/webslinger/www/index.whtml
>>>> Fri Mar 13 01:12:11 2009
>>>> @@ -0,0 +1,12 @@
>>>> +<p>
>>>> +This page is brought to you by Webslinger!
>>>> +</p>
>>>> +<p>
>>>> +It doesn't do a whole lot yet, but if you've gotten this far, here are
>>>> the features that are available:
>>>> +</p>
>>>> +<ul>
>>>> + <li>Extension mapper</li>
>>>> + <li>janino/groovy event handler</li>
>>>> + <li>velocity template markup</li>
>>>> + <li>template/wrapper/section content split</li>
>>>> +</ul>