diff --git a/tags/turbine-webapp-2.3.3-1.0.0/pom.xml b/tags/turbine-webapp-2.3.3-1.0.0/pom.xml
deleted file mode 100644
index 3190e3d..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>11</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-2.3.3</artifactId>
-  <version>1.0.0</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 2.3.3 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 2.3.3</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-2.3.3-1.0.0</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-2.3.3-1.0.0</developerConnection>
-    <url>http://svn.apache.org/viewcvs/turbine/maven/archetypes/tags/turbine-webapp-2.3.3-1.0.0</url>
-  </scm>
-  
-  <build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>2.1</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>2.1</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/changes/changes.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/changes/changes.xml
deleted file mode 100644
index 236630f..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/changes/changes.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.0" date="in Subversion">
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/META-INF/maven/archetype-metadata.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index fd063c5..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-2.3.3-velocity">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>mysql</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>java:comp/env/jdbc/Turbine</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-
-  <fileSets>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/pom.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 6ef3fbf..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,404 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var
-$label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <resource>
-                <targetPath>#var("project.build.directory")/torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${maven.compile.source}</source>
-                    <target>${maven.compile.target}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>3.3</version>
-                <configuration>
-                    <schemaDir>#var("project.build.directory")/torque/schema</schemaDir>
-
-                    <!-- Define the Override directory location -->
-                    <!-- templatePath>#var("project.build.directory")/torque/templates</templatePath -->
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>om</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>om</goal>
-                        </goals>
-                        <configuration>
-                            <!-- These settings will allow you to customize 
-                                the way your Peer-based object model is created. -->
-                            <targetPackage>${package}.om</targetPackage>
-                            <outputDir>#var("project.build.sourceDirectory")</outputDir>
-                            <baseOutputDir>#var("project.build.directory")/generated-sources/torque</baseOutputDir>
-                            <baseReportFile>report.#var("project.artifact.artifactId").om.base.generation</baseReportFile>
-                            <reportFile>report.#var("project.artifact.artifactId").om.generation</reportFile>
-
-                            <addGetByNameMethod>true</addGetByNameMethod>
-                            <addIntakeRetrievable>true</addIntakeRetrievable>
-                            <addSaveMethod>true</addSaveMethod>
-                            <addTimeStamp>true</addTimeStamp>
-                            <basePrefix>Base</basePrefix>
-                            <complexObjectModel>true</complexObjectModel>
-                            <correctGetters>true</correctGetters>
-                            <useManagers>false</useManagers>
-                            <objectIsCaching>true</objectIsCaching>
-                            <saveException>TorqueException</saveException>
-                            <enableJava5Features>true</enableJava5Features>
-                            <runOnlyOnSchemaChange>true</runOnlyOnSchemaChange>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datadtd torque security</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datadtd</goal>
-                        </goals>
-                        <configuration>
-                            <projectName>torque-security</projectName>
-                            <xmlFile>#var("project.build.directory")/torque/schema/torque-security-schema.xml</xmlFile>
-                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datadtd application specific</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datadtd</goal>
-                        </goals>
-                        <configuration>
-                            <projectName>application</projectName>
-                            <xmlFile>#var("project.build.directory")/torque/schema/application-schema.xml</xmlFile>
-                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>schema sql</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>sql</goal>
-                            <goal>id-table-init-sql</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>datasql torque security</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datasql</goal>
-                        </goals>
-                        <configuration>
-                            <dataXmlFile>#var("project.build.directory")/torque/schema/torque-security-data.xml</dataXmlFile>
-                            <dataDtd>#var("project.build.directory")/torque/schema/torque-security-data.dtd</dataDtd>
-
-                            <reportFile>torque-security-data.sql</reportFile>
-                            <schemaIncludes>torque-security-schema.xml</schemaIncludes>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datasql application specific</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datasql</goal>
-                        </goals>
-                        <configuration>
-                            <dataXmlFile>#var("project.build.directory")/torque/schema/application-data.xml</dataXmlFile>
-                            <dataDtd>#var("project.build.directory")/torque/schema/application-data.dtd</dataDtd>
-                            <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-
-                            <reportFile>application-data.sql</reportFile>
-                            <schemaIncludes>application-schema.xml</schemaIncludes>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                        </manifestEntries>
-                    </archive>
-                    <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-            <version>1.4.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.16</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils-core</artifactId>
-            <version>1.8.0</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-configuration</groupId>
-            <artifactId>commons-configuration</artifactId>
-            <version>1.6</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-beanutils</groupId>
-                    <artifactId>commons-beanutils</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.6</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-email</groupId>
-            <artifactId>commons-email</artifactId>
-            <version>1.0</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>dumbster</groupId>
-                    <artifactId>dumbster</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.1.1</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-pool</groupId>
-            <artifactId>commons-pool</artifactId>
-            <version>1.5.6</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.2.2</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avalon.framework</groupId>
-            <artifactId>avalon-framework-api</artifactId>
-            <version>4.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avalon.framework</groupId>
-            <artifactId>avalon-framework-impl</artifactId>
-            <version>4.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.6.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.fulcrum</groupId>
-            <artifactId>fulcrum-yaafi</artifactId>
-            <version>1.0.6</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.torque</groupId>
-            <artifactId>village</artifactId>
-            <version>3.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.torque</groupId>
-            <artifactId>torque-runtime</artifactId>
-            <version>3.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>avalon-logkit</groupId>
-                    <artifactId>avalon-logkit</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-impl</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xalan</groupId>
-                    <artifactId>xalan</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xerces</groupId>
-                    <artifactId>xercesImpl</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xml-apis</groupId>
-                    <artifactId>xml-apis</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>turbine</groupId>
-            <artifactId>turbine</artifactId>
-            <version>2.3.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>avalon-logkit</groupId>
-                    <artifactId>avalon-logkit</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-impl</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-component</groupId>
-                    <artifactId>excalibur-component</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-instrument</groupId>
-                    <artifactId>excalibur-instrument-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-logger</groupId>
-                    <artifactId>excalibur-logger</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-pool</groupId>
-                    <artifactId>excalibur-pool-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>fulcrum</groupId>
-                    <artifactId>fulcrum-yaafi</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>hsqldb</groupId>
-                    <artifactId>hsqldb</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>stratum</groupId>
-                    <artifactId>stratum</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>torque</groupId>
-                    <artifactId>torque</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>torque</groupId>
-                    <artifactId>village</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>velocity</groupId>
-                    <artifactId>velocity</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>velocity</groupId>
-                    <artifactId>texen</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-    </properties>
-</project>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 60c2677..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-l10nkey=US-English value
\ No newline at end of file
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 8e254b4..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-	/**
-	 * This method is called by the Turbine framework when the
-	 * associated Velocity template, Index.vm is requested
-	 * 
-	 * @param data the Turbine request data
-	 * @param context the Velocity context
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(RunData data, Context context)
-			throws Exception
-	{
-		context.put("success", "Congratulations, it worked!");
-	}
-
-	/**
-	 * This method is called bythe Turbine framework to determine if
-	 * the current user is allowed to use this screen. If this method
-	 * returns false, the doBuildTemplate() method will not be called.
-	 * If a redirect to some "access denied" page is required, do the
-	 * necessary redirect here.
-	 * 
-	 * @param data the Turbine request data
-	 * @return true if this screen may be accessed
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected boolean isAuthorized(RunData data) throws Exception
-	{
-		// use data.getACL() 
-		return true;
-	}
-}
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 2eaa6f3..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml 615328 2008-01-25 20:25:05Z tv $  -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database name="${turbine_database_name}">
-    <table name="table1">
-        <column name="test_col1" type="INTEGER" />
-        <column name="test_col2" type="VARCHAR" size="10" />
-        <!-- Add your database schema here -->
-    </table>
-</database>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 3d845de..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database name="@DATABASE_DEFAULT@"
-  defaultIdMethod="idbroker"
-  defaultJavaType="primitive"
-  defaultJavaNamingMethod="underscore"
-  package="@DATABASE_PACKAGE@">
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 642a72b..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="TurbineAdmin"/>
-  <TurbinePermission PermissionId="2" Name="Turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="TurbineAdmin"/>
-  <TurbineRole RoleId="2" Name="TurbineUser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index a2327f1..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database name="${turbine_database_name}">
-
-  <table name="TURBINE_PERMISSION" idMethod="idbroker">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="idbroker">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="idbroker">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="Name"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <table name="TURBINE_USER" idMethod="idbroker">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="UserName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED" type="TIMESTAMP"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 4a342b0..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-torque.database.default=${turbine_database_name}
-torque.database.turbine.adapter=${turbine_database_adapter}
-
-# Using JNDI
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-
-torque.manager.useCache = true
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index 2035544..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,876 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.ACSYaafiComponentService
-services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.LocalizationService.classname=org.apache.turbine.services.localization.TurbineLocalizationService
-services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.IntakeService.classname=org.apache.turbine.services.intake.TurbineIntakeService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  C A C H E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Interval at which the cache will be checked. The default is
-# 5000ms or 5 seconds.
-
-services.GlobalCacheService.cache.check.frequency = 5000
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-# tool.request.om=org.apache.turbine.om.OMTool
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-# tool.ui.css=skin.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.VelocityService.earlyInit= true
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.runtime.log=/logs/velocity.log
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Must be run early to allow the parser to know about the upload
-# service facility
-services.UploadService.earlyinit=true
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-services.UploadService.automatic=true
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=10240
-
-# -------------------------------------------------------------------
-#
-#  L O C A L I Z A T I O N  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default ResourceBundle and language/country codes used by the
-# TurbineLocalizationService.
-#
-locale.default.bundle=${package}.L10N
-locale.default.language=en
-locale.default.country=US
-
-#
-# This will set the charset= portion of the ContentType: header.
-# Leave commented out unless you want to return stuff as a different
-# charset.
-#
-locale.default.charset=UTF-8
-
-# -------------------------------------------------------------------
-#
-#  M I M E T Y P E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# This property specifies a file containing mappings between MIME
-# content types and the corresponding file name extensions. The
-# service itself contains a hardcoded set of most common mappings.
-# The file must use the same syntax as the mime.types file of
-# the Apache Server, i.e.
-# <mimetype> <ext1> <ext2>...
-#
-# services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types
-
-# This property specifies a file containing mappings between locales
-# and the corresponding character encodings. The service itself
-# contains a hardcoded set of most common mappings.
-# The file should use the Java property file syntax, i.e.
-# <lang_country_variant>=<charset>
-#
-# services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  C R Y P T O   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Standard Unix crypt(3) password encryption.
-#
-services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
-#
-# This providers allows access to the Java Message Digest encryption algorithms
-#
-services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
-#
-# This is a simple, cleartext "encryption" provider.
-#
-services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
-#
-# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
-# compatibility for passwords created with the old Security Service. See the javadocs for
-# OldJavaCrypt
-#
-services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
-#
-# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
-# You need not to have this, it is the default if no algorithms are given. The default
-# provider gives you all the Java MessageDigest Ciphers
-#
-services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.torque.TorqueSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.torque.TorqueUserManager
-
-services.SecurityService.user.class =       org.apache.turbine.services.security.torque.TorqueUser
-services.SecurityService.group.class =      org.apache.turbine.services.security.torque.TorqueGroup
-services.SecurityService.permission.class = org.apache.turbine.services.security.torque.TorquePermission
-services.SecurityService.role.class =       org.apache.turbine.services.security.torque.TorqueRole
-
-services.SecurityService.torque.userPeer.class       = ${package}.om.TurbineUserPeer
-services.SecurityService.torque.groupPeer.class      = ${package}.om.TurbineGroupPeer
-services.SecurityService.torque.permissionPeer.class = ${package}.om.TurbinePermissionPeer
-services.SecurityService.torque.rolePeer.class       = ${package}.om.TurbineRolePeer
-
-# This is the class that implements the ACL interface.
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# -------------------------------------------------------------------
-#
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-# services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-
-# -------------------------------------------------------------------
-#
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-# services.FactoryService.class.loaders=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-# -------------------------------------------------------------------
-#
-#  I N T A K E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of the xml file specifying valid inputs
-#
-# If you need to define multiple definition files, you can should
-# seperate them with commas.
-#
-# Default: WEB-INF/conf/intake.xml
-#
-services.IntakeService.xml.path=WEB-INF/conf/${turbine_intake_file}
-
-# This file is used to cache the XML definitions after they are
-# parsed.  It provides for a small performance gain on startup.
-#
-# Note: Even if you have multiple XML definition files, you will
-# only need one serialization file!
-#
-# Default: WEB-INF/appData.ser
-#
-services.IntakeService.serialize.path=WEB-INF/appData.ser
-
-# --------------------------------------------------------------------
-#
-# P A R A M E T E R  P A R S E R
-#
-# --------------------------------------------------------------------
-#
-# This variable controls the case folding applied to URL variable
-# names.
-#
-# Allowed values: none, lower, upper
-# Default: lower
-#
-
-url.case.folding=lower
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = WEB-INF/conf/containerConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index 3f8c7be..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-</componentConfig>
\ No newline at end of file
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index 5c89bfe..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!DOCTYPE input-data SYSTEM "http://turbine.apache.org/dtd/intake_2_3_3.dtd">
-
-<input-data basePackage="${package}.">
-  <group name="example" key="example" mapToObject="om.Table1">
-    <field name="TestCol2" key="testCol2" type="String"/>
-  </group>
-</input-data>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index 9879a83..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-#
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-#
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = #var("catalina.base")/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = #var("catalina.base")/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = #var("catalina.base")/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = #var("catalina.base")/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = #var("catalina.base")/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index 750436c..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <!-- Add your services here -->
-</role-list>
\ No newline at end of file
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index d499857..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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.
-*#
-<web-app id="WebApp_ID" version="2.4" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- $Id: web.xml 615328 2008-01-25 20:25:05Z tv $                            -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
deleted file mode 100644
index 94c6554..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
deleted file mode 100644
index 95ab364..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
+++ /dev/null
@@ -1,29 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-<html>
-#TurbineHtmlHead()
-<body #TurbineHtmlBodyAttributes() >
-  <table bgcolor="$ui.bgcolor" width="100%">
-    <tr>
-      <td>&nbsp;</td>
-       <td align="right"><img src="$ui.image('turbine-project.png')"/></td>
-    </tr>
-  </table>
-$screen_placeholder
-  <img src="$ui.image('powered-by-logo.gif')"/>
-</body>
-</html>
diff --git a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm b/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
deleted file mode 100644
index 02b21e4..0000000
--- a/tags/turbine-webapp-2.3.3-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-<div align="center"><h1>$success</h1></div>
-
-You're now successfully running a <a
-href="http://turbine.apache.org/">Turbine</a> based
-application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-your web container.<p/>
-
-You can (and should!) change or remove this page at any time. It is
-intended to give you immediate feedback if you just deployed an newly
-setup Turbine application.</p>
diff --git a/tags/turbine-webapp-4.0-1.0.0/pom.xml b/tags/turbine-webapp-4.0-1.0.0/pom.xml
deleted file mode 100644
index 619a716..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>11</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-4.0</artifactId>
-  <version>1.0.0</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 4.0M1 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 4.0M1</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.0</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.0</developerConnection>
-    <url>http://svn.apache.org/viewcvs/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.0</url>
-  </scm>
-  
-  <build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>2.1</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>2.1</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/changes/changes.xml b/tags/turbine-webapp-4.0-1.0.0/src/changes/changes.xml
deleted file mode 100644
index 94aa70b..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/changes/changes.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.0" date="in Subversion">
-      <action dev="tv" type="fix">
-        Fixed missing dependencies and wrong class names as reported on the mailing list
-      </action>
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/META-INF/maven/archetype-metadata.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index e5a8d71..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-4.0-velocity">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>mysql</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>java:comp/env/jdbc/Turbine</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-
-  <fileSets>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/pom.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 664d8e5..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,239 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var $label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <resource>
-                <targetPath>#var("project.build.directory")/torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${maven.compile.source}</source>
-                    <target>${maven.compile.target}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>3.3</version>
-                <configuration>
-                    <schemaDir>#var("project.build.directory")/torque/schema</schemaDir>
-
-                    <!-- Define the Override directory location -->
-                    <!-- templatePath>#var("project.build.directory")/torque/templates</templatePath -->
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>om</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>om</goal>
-                        </goals>
-                        <configuration>
-                            <!-- These settings will allow you to customize 
-                                the way your Peer-based object model is created. -->
-                            <targetPackage>${package}.om</targetPackage>
-                            <outputDir>#var("project.build.sourceDirectory")</outputDir>
-                            <baseOutputDir>#var("project.build.directory")/generated-sources/torque</baseOutputDir>
-                            <baseReportFile>report.#var("project.artifact.artifactId").om.base.generation</baseReportFile>
-                            <reportFile>report.#var("project.artifact.artifactId").om.generation</reportFile>
-
-                            <addGetByNameMethod>true</addGetByNameMethod>
-                            <addIntakeRetrievable>true</addIntakeRetrievable>
-                            <addSaveMethod>true</addSaveMethod>
-                            <addTimeStamp>true</addTimeStamp>
-                            <basePrefix>Base</basePrefix>
-                            <complexObjectModel>true</complexObjectModel>
-                            <correctGetters>true</correctGetters>
-                            <useManagers>false</useManagers>
-                            <objectIsCaching>true</objectIsCaching>
-                            <saveException>TorqueException</saveException>
-                            <enableJava5Features>true</enableJava5Features>
-                            <runOnlyOnSchemaChange>true</runOnlyOnSchemaChange>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datadtd torque security</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datadtd</goal>
-                        </goals>
-                        <configuration>
-                            <projectName>torque-security</projectName>
-                            <xmlFile>#var("project.build.directory")/torque/schema/torque-security-schema.xml</xmlFile>
-                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datadtd application specific</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datadtd</goal>
-                        </goals>
-                        <configuration>
-                            <projectName>application</projectName>
-                            <xmlFile>#var("project.build.directory")/torque/schema/application-schema.xml</xmlFile>
-                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>schema sql</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>sql</goal>
-                            <goal>id-table-init-sql</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>datasql torque security</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datasql</goal>
-                        </goals>
-                        <configuration>
-                            <dataXmlFile>#var("project.build.directory")/torque/schema/torque-security-data.xml</dataXmlFile>
-                            <dataDtd>#var("project.build.directory")/torque/schema/torque-security-data.dtd</dataDtd>
-
-                            <reportFile>torque-security-data.sql</reportFile>
-                            <schemaIncludes>torque-security-schema.xml</schemaIncludes>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datasql application specific</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datasql</goal>
-                        </goals>
-                        <configuration>
-                            <dataXmlFile>#var("project.build.directory")/torque/schema/application-data.xml</dataXmlFile>
-                            <dataDtd>#var("project.build.directory")/torque/schema/application-data.dtd</dataDtd>
-                            <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-
-                            <reportFile>application-data.sql</reportFile>
-                            <schemaIncludes>application-schema.xml</schemaIncludes>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                        </manifestEntries>
-                    </archive>
-                    <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-            <version>1.4.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.torque</groupId>
-            <artifactId>village</artifactId>
-            <version>3.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.turbine</groupId>
-            <artifactId>turbine</artifactId>
-            <version>4.0-M1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.fulcrum</groupId>
-            <artifactId>fulcrum-yaafi</artifactId>
-            <version>1.0.6</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.fulcrum</groupId>
-            <artifactId>fulcrum-cache</artifactId>
-            <version>1.1.0</version>
-         </dependency>
-        <dependency>
-            <groupId>org.apache.fulcrum</groupId>
-            <artifactId>fulcrum-upload</artifactId>
-            <version>1.0.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-    </properties>
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 60c2677..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-l10nkey=US-English value
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 8e254b4..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-	/**
-	 * This method is called by the Turbine framework when the
-	 * associated Velocity template, Index.vm is requested
-	 * 
-	 * @param data the Turbine request data
-	 * @param context the Velocity context
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(RunData data, Context context)
-			throws Exception
-	{
-		context.put("success", "Congratulations, it worked!");
-	}
-
-	/**
-	 * This method is called bythe Turbine framework to determine if
-	 * the current user is allowed to use this screen. If this method
-	 * returns false, the doBuildTemplate() method will not be called.
-	 * If a redirect to some "access denied" page is required, do the
-	 * necessary redirect here.
-	 * 
-	 * @param data the Turbine request data
-	 * @return true if this screen may be accessed
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected boolean isAuthorized(RunData data) throws Exception
-	{
-		// use data.getACL() 
-		return true;
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 2eaa6f3..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml 615328 2008-01-25 20:25:05Z tv $  -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database name="${turbine_database_name}">
-    <table name="table1">
-        <column name="test_col1" type="INTEGER" />
-        <column name="test_col2" type="VARCHAR" size="10" />
-        <!-- Add your database schema here -->
-    </table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 3d845de..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database name="@DATABASE_DEFAULT@"
-  defaultIdMethod="idbroker"
-  defaultJavaType="primitive"
-  defaultJavaNamingMethod="underscore"
-  package="@DATABASE_PACKAGE@">
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 642a72b..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="TurbineAdmin"/>
-  <TurbinePermission PermissionId="2" Name="Turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="TurbineAdmin"/>
-  <TurbineRole RoleId="2" Name="TurbineUser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index a2327f1..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database name="${turbine_database_name}">
-
-  <table name="TURBINE_PERMISSION" idMethod="idbroker">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="idbroker">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="idbroker">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="Name"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <table name="TURBINE_USER" idMethod="idbroker">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="UserName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED" type="TIMESTAMP"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 4a342b0..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-torque.database.default=${turbine_database_name}
-torque.database.turbine.adapter=${turbine_database_adapter}
-
-# Using JNDI
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-
-torque.manager.useCache = true
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index 219c448..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,679 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  P I P E L I N E
-#
-# -------------------------------------------------------------------
-pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-# tool.ui.css=skin.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.VelocityService.earlyInit= true
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.runtime.log=/logs/velocity.log
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.torque.TorqueSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.torque.TorqueUserManager
-
-services.SecurityService.user.class =       org.apache.turbine.services.security.torque.TorqueUser
-services.SecurityService.group.class =      org.apache.turbine.services.security.torque.TorqueGroup
-services.SecurityService.permission.class = org.apache.turbine.services.security.torque.TorquePermission
-services.SecurityService.role.class =       org.apache.turbine.services.security.torque.TorqueRole
-
-services.SecurityService.torque.userPeer.class       = ${package}.om.TurbineUserPeer
-services.SecurityService.torque.groupPeer.class      = ${package}.om.TurbineGroupPeer
-services.SecurityService.torque.permissionPeer.class = ${package}.om.TurbinePermissionPeer
-services.SecurityService.torque.rolePeer.class       = ${package}.om.TurbineRolePeer
-
-# This is the class that implements the ACL interface.
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = #var("applicationRoot")/WEB-INF/conf/containerConfiguration.xml
-services.AvalonComponentService.earlyInit= true
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index e001001..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-        <unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-    <localization>
-      <bundles>
-        <bundle>${package}.L10N</bundle>
-      </bundles>
-    </localization>
-    <intake>
-      <serialDataPath>WEB-INF/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>WEB-INF/conf/${turbine_intake_file}</xmlPath>
-      </xmlPaths>
-    </intake>
-    <factory/>
-    <pool/>
-    <parser>
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-    <upload repository="/tmp" sizeMax="1048576" sizeThreshold="10240"/>
-</componentConfig>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index d1329ff..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!DOCTYPE input-data SYSTEM "http://turbine.apache.org/dtd/intake_2_4.dtd">
-
-<input-data basePackage="${package}.">
-  <group name="example" key="example" mapToObject="om.Table1">
-    <field name="TestCol2" key="testCol2" type="String"/>
-  </group>
-</input-data>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index 9879a83..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-#
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-#
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = #var("catalina.base")/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = #var("catalina.base")/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = #var("catalina.base")/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = #var("catalina.base")/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = #var("catalina.base")/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index 73e6f6d..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.upload.UploadService"
-        shorthand="upload"
-        default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-       
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-
-    <!-- Add your services here -->
-</role-list>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
deleted file mode 100644
index 1cb9053..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<org.apache.turbine.pipeline.TurbinePipeline>
-  <valves>
-    <org.apache.turbine.pipeline.DetermineActionValve/>
-    <org.apache.turbine.pipeline.DetermineTargetValve/>
-    <org.apache.turbine.pipeline.DefaultSessionTimeoutValve/>
-    <org.apache.turbine.pipeline.DefaultLoginValve/>
-    <org.apache.turbine.pipeline.DefaultSessionValidationValve/>
-    <org.apache.turbine.pipeline.DefaultACLCreationValve/>
-    <org.apache.turbine.pipeline.ExecutePageValve/>
-    <org.apache.turbine.pipeline.CleanUpValve/>
-    <org.apache.turbine.pipeline.DetermineRedirectRequestedValve/>
-  </valves>
-</org.apache.turbine.pipeline.TurbinePipeline>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index d499857..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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.
-*#
-<web-app id="WebApp_ID" version="2.4" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- $Id: web.xml 615328 2008-01-25 20:25:05Z tv $                            -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
deleted file mode 100644
index 94c6554..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
deleted file mode 100644
index 95ab364..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
+++ /dev/null
@@ -1,29 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-<html>
-#TurbineHtmlHead()
-<body #TurbineHtmlBodyAttributes() >
-  <table bgcolor="$ui.bgcolor" width="100%">
-    <tr>
-      <td>&nbsp;</td>
-       <td align="right"><img src="$ui.image('turbine-project.png')"/></td>
-    </tr>
-  </table>
-$screen_placeholder
-  <img src="$ui.image('powered-by-logo.gif')"/>
-</body>
-</html>
diff --git a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm b/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
deleted file mode 100644
index 02b21e4..0000000
--- a/tags/turbine-webapp-4.0-1.0.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-<div align="center"><h1>$success</h1></div>
-
-You're now successfully running a <a
-href="http://turbine.apache.org/">Turbine</a> based
-application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-your web container.<p/>
-
-You can (and should!) change or remove this page at any time. It is
-intended to give you immediate feedback if you just deployed an newly
-setup Turbine application.</p>
diff --git a/tags/turbine-webapp-4.0-1.0.1/LICENSE b/tags/turbine-webapp-4.0-1.0.1/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/tags/turbine-webapp-4.0-1.0.1/NOTICE b/tags/turbine-webapp-4.0-1.0.1/NOTICE
deleted file mode 100644
index a43064b..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Turbine Webapp Component
-Copyright 2006-2016 The Apache Software Foundation.
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/tags/turbine-webapp-4.0-1.0.1/README b/tags/turbine-webapp-4.0-1.0.1/README
deleted file mode 100644
index d7e9268..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/README
+++ /dev/null
@@ -1,5 +0,0 @@
-If you get that goal integration-test of maven-archetype-plugin fails with 
-
-'Cannot run additions goals." cft. https://issues.apache.org/jira/browse/ARCHETYPE-488.
-
-Fastest workaround (Dez 2016) ist to copy  mvn.cmd to mvn.bat.
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/pom.xml b/tags/turbine-webapp-4.0-1.0.1/pom.xml
deleted file mode 100644
index ab0c389..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/pom.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-    <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>18</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-4.0</artifactId>
-  <version>1.0.1</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 4.0M2 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 4.0M2</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.1</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.1</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.1</url>
-  </scm>
-  
-<build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>2.4</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>2.4</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/changes/changes.xml b/tags/turbine-webapp-4.0-1.0.1/src/changes/changes.xml
deleted file mode 100644
index c231563..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/changes/changes.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-   <release version="1.0.1" date="in Subversion">
-       <action dev="gk" type="add">
-       Password change action, Check anonymous login
-      </action>
-      <action dev="gk" type="update">
-       JNDI Jetty Update
-      </action>
-      <action dev="tv" type="add">
-       Add testing in place with "integration-test"
-      </action>
-      <action dev="tv" type="update">
-       Turbine annotations, use auto detect Torque adapter
-      </action>
-       <action dev="gk" type="update">
-       Fulcrum Torque Security added manager, om classes
-      </action>
-      <action dev="painter" type="add">
-       Added readme, docs, helper sql..
-      </action>
-       <action dev="painter" type="update">
-       MySQL is now default
-      </action>
-      <action dev="gk" type="update">
-       Update schema to torque / intake 4.0, dependencies, configurations
-       Update to MemoryGroupManagerImpl, Fulcrum     
-      </action>
-      <action dev="gk" type="add">
-        Jetty support
-      </action>
-      <action dev="tv" type="fix">
-        TRB-95
-      </action>
-      <action dev="gk" type="update ">
-        Update to Turbine 4-M2
-      </action>
-    </release>
-    <release version="1.0.0" date="2012-11-06">
-      <action dev="tv" type="fix">
-        Fixed missing dependencies and wrong class names as reported on the mailing list
-      </action>
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/META-INF/maven/archetype-metadata.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index b6481b5..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-4.0-velocity">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>auto</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>jdbc/turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_driver">
-      <defaultValue>com.mysql.jdbc.Driver</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_url">
-      <defaultValue>jdbc:mysql://localhost:3306/</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_user">
-      <defaultValue>db_user</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_password">
-      <defaultValue>db_password</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-  <fileSets>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>docs</directory>
-      <includes>
-        <include>**/*.txt</include>
-        <include>**/*.sql</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/README.txt b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/README.txt
deleted file mode 100644
index 46b5d28..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/README.txt
+++ /dev/null
@@ -1,123 +0,0 @@
-#*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*#
-
-Notice
-
-About this archetype 
- 
-Turbine Version: Turbine 4.0-M2. 
-
-Quick Guide to using the new Turbine 4.0-M2 maven archetype 
-for skeleton application generation
-
-You should have a local database installed and configured prior to 
-beginning the application setup below.
-
-
-You can invoke the Maven archetype for turbine-webapp-4.0 from 
-the command line as shown below - please update values starting 
-with 'groupId' as appropriate.
-
-mvn archetype:generate \
-    -DarchetypeGroupId=org.apache.turbine \
-    -DarchetypeArtifactId=turbine-webapp-4.0 \
-    -DarchetypeVersion=1.0.1-SNAPSHOT \
-    -DgroupId=com.mycompany.webapp \
-    -DartifactId=helloWorld \
-    -Dversion=1.0 \
-    -Dturbine_app_name=HelloWorld \
-    -Dturbine_database_adapter=mysql \
-    -Dturbine_database_user=db_username \
-    -Dturbine_database_password=db_password \
-    -Dturbine_database_name=helloWorld \
-    -Dturbine_database_url=jdbc:mysql://localhost:3306/ \
-    -Dgoals=generate-sources,sql:execute
-
-Notes
-
-When invoking archetype:generate, you can already set mvn commands and you can then skip them later.
-Be aware, when you set both mvn commands goals (-Dgoals=generate-sources, sql:execute), 
-you have to create the database (see below) BEFORE finishing the (interactive) archetype commands.
-
-Note that the database URL (turbine_database_url) 
-will be appended with your database name
-in the final pom.xml, so you do not need to specify that in 
-the configuration.
-
-Next, you need to create the database in MySQL
-
- mysql -u <user> -p
- mysql> create database helloWorld;
- mysql> \q
-
-
-cd helloWorld
-
-# if not already done 
-mvn generate-sources  ## This will generate the OM layer and SQL 
-					  ## code for creating the corresponding
-					  ## database tables
-	
-# if not already done   
-mvn sql:execute       ## This executes the SQL code to create 
-					  ## the application schema defined 
-					  ## in src/main/torque-schema
-
-You should now check the database tables and if some data is missing
-insert the sample data file provided 
-as Torque 4.0 has disabled the datasql task.
-
-mvn jetty:run         ## Now you can launch your new Turbine application
-
-Open a web browser to http://localhost:8081/app
-
-Login should work with user admin/password or user/password.
-
-Background:
-
-By default Intake is used as an validation mechanism for authentication. You can change to the default login by settings
-
-action.login=LoginUser in TurbineResources.properties and changing Login.vm appropriately (commented form)
-
-To enable application development in Eclipse, run the following command 
-and then import the project into Eclipse.
-
-mvn eclipse:eclipse
-
-Once imported, update your project to be managed by Maven 
-  -> Right click on the proejct name
-  -> Configure 
-  -> Convert to Maven project
-
-To test the application can be deployed by Eclipse, select the run
-configuration "Run On Server" if you have a container configured with
-your eclipse environment.
-
-Starting developing
-
-Be aware of settings and some smaller restrictions, which mostly will be fixed in the upcoming releases.
-
-- Keep groups/roles lower case (which should be fixed in Fulcrum Security 1.1.1/Turbine 4.0)
-- abstract classes and managers are included (because of some minor bugs in Fulcrum Security 1.1.0, same as above)
-- LogoutUser action is included (fix in Turbine 4.0, getUserFromSession)
-- LoginUser action is included (to check for anonymous user, may be fixed in future release)
-- OM (Torque Object Mapper) stub classes are included (until configurable in schema with Torque version 2.1)
-- TurbineConfiguration returns a Commons configuration object, even if field is not assignable (will be fixed in Turbine 4.0, you can then assign e.g. to String instead, cft. SecureScreen)
-- Database connection is done initially by default with JNDI. If you want to change it, check Torque.properties and jetty-env.xml.  
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
deleted file mode 100644
index f605246..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-
-##
-## application-data.sql
-##
-## Torque will not autogenerate these files anymore - please run
-## this SQL code maually to get your application up and running
-##
-
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (1, 'Donald', 'Knuth');
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (2, 'Mickey', 'Mouse' );
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (3, 'Bill', 'Bryson' );
-
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 1, 1, 'The Art of Computer Programming', 'Computer Science');
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 2, 2, 'Disney: Behind the Scenes', 'Fiction' );
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 3, 3, 'A Walk in the Woods', 'Fiction');
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
deleted file mode 100644
index db0775a..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
+++ /dev/null
@@ -1,40 +0,0 @@
-##
-## turbine-security-data.sql
-##
-## Torque will not autogenerate these files anymore - please run
-## this SQL code maually to get your application up and running
-##
-SET FOREIGN_KEY_CHECKS=0;
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (1,'admin','password','','Admin');
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (2,'user','password','','User');
-    
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (3,'anon','nopw','','Anon');
-
-INSERT INTO `turbine_permission` (`PERMISSION_ID`, `PERMISSION_NAME`) VALUES
-(2, 'Turbine'),
-(1, 'TurbineAdmin');
-
-INSERT INTO `turbine_role` (`ROLE_ID`, `ROLE_NAME`) VALUES
-(1, 'turbineadmin'),
-(2, 'turbineuser');
-
-INSERT INTO `turbine_group` (`GROUP_ID`, `GROUP_NAME`) VALUES
-(1, 'global'),
-(2, 'Turbine');
-
-INSERT INTO `turbine_role_permission` (`ROLE_ID`, `PERMISSION_ID`) VALUES
-(1, 1),
-(2, 2);
-
-INSERT INTO `turbine_user_group_role` (`USER_ID`, `GROUP_ID`, `ROLE_ID`) VALUES
-(1, 1, 1),
-(1, 2, 1),
-(2, 2, 2),
-(2, 1, 2);
-    
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/pom.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 1c6e32c..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,290 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var $label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <!-- (target) resource and filtering is not used  at all ? 
-            at least removed setting absolute path e.g. with #var("project.build.directory"), 
-            which does thrown an exception with mvn eclipse:eclipse - path is then incorrectly relativized.
-                --> 
-            <resource> 
-                <targetPath>../torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.5.1</version>
-                <configuration>
-                    <source>${maven.compile.source}</source>
-                    <target>${maven.compile.target}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-            
-             <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>4.0</version>
-                <configuration>
-                    <schemaDir>#var("project.basedir")/src/main/torque-schema</schemaDir>
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-          <execution>
-            <id>torque-om</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>generate</goal>
-            </goals>
-            <configuration>
-              <packaging>classpath</packaging>
-              <configPackage>org.apache.torque.templates.om</configPackage>
-              <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-              <loglevel>error</loglevel>
-              <options>
-                <torque.database>${turbine_database_adapter}</torque.database>
-                <torque.om.package>${package}.om</torque.om.package>
-                <torque.om.addGetByNameMethods>false</torque.om.addGetByNameMethods>
-                <torque.om.save.saveException>TorqueException</torque.om.save.saveException>
-                <torque.om.useIsForBooleanGetters>true</torque.om.useIsForBooleanGetters>
-                <torque.om.useManagers>false</torque.om.useManagers>
-                <torque.om.addTimeStamp>true</torque.om.addTimeStamp>
-                <torque.om.objectIsCaching>true</torque.om.objectIsCaching>
-                <torque.om.save.addSaveMethods>true</torque.om.save.addSaveMethods>
-                <torque.om.addGetByNameMethods>true</torque.om.addGetByNameMethods>
-                <torque.om.complexObjectModel>true</torque.om.complexObjectModel>
-              </options>
-              <outputDirMap>
-                <modifiable>#var("project.build.sourceDirectory")</modifiable>
-              </outputDirMap>
-            </configuration>
-          </execution>
-          <execution>
-            <id>torque-sql-mysql</id><!-- ${turbine_database_adapter} -->
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>generate</goal>
-            </goals>
-            <configuration>
-              <packaging>classpath</packaging>
-              <configPackage>org.apache.torque.templates.sql</configPackage>
-              <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-              <defaultOutputDir>#var("project.build.directory")/generated-sql/torque/mysql</defaultOutputDir>
-              <defaultOutputDirUsage>none</defaultOutputDirUsage>
-              <loglevel>error</loglevel>
-              <options>
-                <torque.database>mysql</torque.database>
-              </options>
-            </configuration>
-          </execution>
-                </executions>
-                <dependencies>
-                  <dependency>
-                    <groupId>org.apache.torque</groupId>
-                    <artifactId>torque-templates</artifactId>
-                    <version>4.0</version>
-                  </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                 <version>2.3</version>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                        </manifestEntries>
-                    </archive>
-                    <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-                </configuration>
-            </plugin>
-
-
-      <!-- Required to execute torque database build -->
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>sql-maven-plugin</artifactId>
-        <version>1.5</version>
-        <configuration>
-
-          <!-- Please update with your database configuration -->
-          <driver>${turbine_database_driver}</driver>
-          <url>${turbine_database_url}${turbine_database_name}</url>
-          <username>${turbine_database_user}</username>
-          <password>${turbine_database_password}</password>
-          <onError>continue</onError>
-          <autocommit>true</autocommit>
-          <orderFile>descending</orderFile>
-          <!-- this is mysql specific -->
-          <fileset>
-              <basedir>${project.build.directory}/generated-sql/torque/mysql</basedir>
-              <!-- basedir>${basedir}/target/generated-sql</basedir -->
-              <includes>
-                <include>*.sql</include>
-              </includes>
-           </fileset>
-           <srcFiles>
-              <srcFile>${basedir}/docs/sample-mysql-data/_application-data.sql</srcFile>
-              <srcFile>${basedir}/docs/sample-mysql-data/_turbine-security-data.sql</srcFile>
-           </srcFiles>
-        </configuration>
-        
-        <!-- update with your database driver dependency -->
-        
-        <dependencies>
-          <dependency>
-            <artifactId>mysql-connector-java</artifactId>
-            <groupId>mysql</groupId>
-            <version>5.1.40</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-
-            <!-- jetty:run checks deployed war http://localhost:8081/app/ 
-            
-            Using jetty 8 as supporting java 6. Other specs cft. http://www.eclipse.org/jetty/documentation/9.3.0.v20150612/what-jetty-version.html
-            -->
-            <plugin>
-               <groupId>org.mortbay.jetty</groupId>
-               <artifactId>jetty-maven-plugin</artifactId>
-               <version>8.1.16.v20140903</version>
-              <configuration>
-                <scanIntervalSeconds>10</scanIntervalSeconds>
-                <dumpOnStart>true</dumpOnStart>
-                <connectors>
-                <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
-                  <port>8081</port>
-                </connector>
-                </connectors>
-                <!--webApp>
-                  <contextPath>/app</contextPath>
-                </webApp-->
-              </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-    
-    <!-- update with the database driver of your choice -->
-    <dependency>
-      <artifactId>mysql-connector-java</artifactId>
-      <groupId>mysql</groupId>
-      <version>5.1.40</version>
-    </dependency>    
-        <dependency>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-            <version>1.4.5</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.turbine</groupId>
-            <artifactId>turbine</artifactId>
-            <version>4.0-M2</version>
-        </dependency>
-        <!-- yaafi is optional. NOTICE: 1.0.7 has group org.apache.turbine not org.apache.fulcrum  -->
-        <dependency>
-          <groupId>org.apache.turbine</groupId>
-          <artifactId>fulcrum-yaafi</artifactId>
-          <version>1.0.7</version>
-        </dependency>
-        <!-- if using intake -->
-        <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-intake</artifactId>
-          <version>1.2.2</version>
-         </dependency>
-         <!-- include some optional dependencies required in example componentConfiguration.xml -->
-        <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-cache</artifactId>
-          <version>1.1.0</version>
-        </dependency>
-         <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-upload</artifactId>
-          <version>1.0.5</version>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-security-memory</artifactId>
-          <version>1.1.0</version>
-        </dependency>
-         <dependency>             
-            <groupId>org.apache.fulcrum</groupId>
-            <artifactId>fulcrum-security-torque</artifactId>
-            <version>1.1.0</version>
-        </dependency>	
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.11</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-    </properties>
-    
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N.properties
deleted file mode 100644
index 0a6bd1d..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-l10nkey=Default value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
deleted file mode 100644
index c5c771c..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
-#*
-# 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.
-
-l10nkey = German value
-
-password_msg = Bitte ein Passwort eingeben
-
-username_mask_msg = Geben Sie als Benutzername eine E-Mail-Adresse ein
-
-username_min_length_msg = Es m\u00FCssen {0} Zeichen eingegeben werden
-
-username_required_msg = Bitte einen Benutzernamen eingeben
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 0ceed48..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-l10nkey=US-English value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/TorqueAbstractUserManager.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/TorqueAbstractUserManager.java
deleted file mode 100644
index 5509438..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/TorqueAbstractUserManager.java
+++ /dev/null
@@ -1,400 +0,0 @@
-package  ${package}.fulcrum.security.torque;
-
-#*
-* 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 java.sql.Connection;
-import java.util.List;
-
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.fulcrum.security.entity.User;
-import org.apache.fulcrum.security.spi.AbstractUserManager;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.security.util.UserSet;
-import org.apache.torque.NoRowsException;
-import org.apache.torque.TooManyRowsException;
-import org.apache.torque.TorqueException;
-import org.apache.torque.util.Transaction;
-
-import  org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity;
-/**
- * This implementation persists to a database via Torque.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public abstract class TorqueAbstractUserManager extends AbstractUserManager
-{
-    private Boolean customPeer = false;  //  used for torque which uses per object peer classes
-    
-    private String peerClassName;
-    private static final String PEER_CLASS_NAME_KEY = "peerClassName";
-    
-    /**
-     * Avalon Service lifecycle method
-     */
-    public void configure(Configuration conf) throws ConfigurationException
-    {
-       super.configure( conf );
-       
-        peerClassName = conf.getChild( PEER_CLASS_NAME_KEY).getValue( null );
-        if (peerClassName != null) {
-            setPeerClassName( peerClassName );
-            setCustomPeer(true);
-        } 
-    }
-    
-    public Boolean getCustomPeer()
-    {
-        return customPeer;
-    }
-
-    public void setCustomPeer( Boolean customPeer )
-    {
-        this.customPeer = customPeer;
-    }
-
-    public String getPeerClassName()
-    {
-        return peerClassName;
-    }
-
-    public void setPeerClassName( String peerClassName )
-    {
-        this.peerClassName = peerClassName;
-    }
-    /**
-     * Get all specialized Users
-     *
-     * @param con a database connection
-     *
-     * @return a List of User instances
-     *
-     * @throws TorqueException if any database error occurs
-     */
-    protected abstract <T extends User> List<T> doSelectAllUsers(Connection con)
-        throws TorqueException;
-
-    /**
-     * Get a specialized User by name
-     *
-     * @param name the name of the group
-     * @param con a database connection
-     *
-     * @return a User instance
-     *
-     * @throws NoRowsException if no such group exists
-     * @throws TooManyRowsException if multiple groups with the given name exist
-     * @throws TorqueException if any other database error occurs
-     */
-    protected abstract <T extends User> T doSelectByName(String name, Connection con)
-        throws NoRowsException, TooManyRowsException, TorqueException;
-
-    /**
-     * Get a specialized User by id
-     *
-     * @param id the id of the group
-     * @param con a database connection
-     *
-     * @return a User instance
-     *
-     * @throws NoRowsException if no such group exists
-     * @throws TooManyRowsException if multiple groups with the given id exist
-     * @throws TorqueException if any other database error occurs
-     */
-    protected abstract <T extends User> T doSelectById(Integer id, Connection con)
-        throws NoRowsException, TooManyRowsException, TorqueException;
-
-    /**
-    * Removes an user account from the system.
-    *
-    * @param user the object describing the account to be removed.
-    * @throws DataBackendException if there was an error accessing the data
-    *         backend.
-    * @throws UnknownEntityException if the user account is not present.
-    */
-    public synchronized void removeUser(User user) throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            ((TorqueAbstractSecurityEntity)user).delete();
-        }
-        catch (TorqueException e)
-        {
-            throw new DataBackendException("Removing User '" + user.getName() + "' failed", e);
-        }
-    }
-
-    /**
-       * Creates new user account with specified attributes.
-       *
-       * @param user the object describing account to be created.
-       *
-       * @throws DataBackendException if there was an error accessing the
-       *         data backend.
-       * @throws EntityExistsException if the user account already exists.
-       */
-    protected synchronized <T extends User> T persistNewUser(T user) throws DataBackendException
-    {
-        try
-        {
-            ((TorqueAbstractSecurityEntity)user).save();
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Adding User '" + user.getName() + "' failed", e);
-        }
-
-        return user;
-    }
-
-    /**
-       * Stores User attributes. The User is required to exist in the system.
-       *
-       * @param user The User to be stored.
-       * @throws DataBackendException if there was an error accessing the data
-       *         backend.
-       * @throws UnknownEntityException if the role does not exist.
-       */
-    public synchronized void saveUser(User user) throws DataBackendException, UnknownEntityException
-    {
-        if (checkExists(user))
-        {
-            try
-            {
-                TorqueAbstractSecurityEntity u = (TorqueAbstractSecurityEntity)user;
-                u.setNew(false);
-                u.save();
-            }
-            catch (Exception e)
-            {
-                throw new DataBackendException("Saving User '" + user.getName() + "' failed", e);
-            }
-        }
-        else
-        {
-            throw new UnknownEntityException("Unknown user '" + user + "'");
-        }
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing
-     *         the data backend.
-     */
-    public boolean checkExists(String userName) throws DataBackendException
-    {
-        boolean exists = false;
-
-        Connection con = null;
-
-        try
-        {
-            con = Transaction.begin(((TorqueAbstractSecurityEntity)getUserInstance()).getDatabaseName());
-
-            doSelectByName(userName, con);
-
-            Transaction.commit(con);
-            con = null;
-
-            exists = true;
-        }
-        catch (NoRowsException e)
-        {
-            exists = false;
-        }
-        catch (TooManyRowsException e)
-        {
-            throw new DataBackendException("Multiple Users with same username '" + userName + "'");
-        }
-        catch (TorqueException e)
-        {
-            throw new DataBackendException("Error retrieving user information", e);
-        }
-        finally
-        {
-            if (con != null)
-            {
-                Transaction.safeRollback(con);
-            }
-        }
-
-        return exists;
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param userName the name of the user.
-     * @return an User object.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public <T extends User> T getUser(String userName) throws UnknownEntityException, DataBackendException
-    {
-        T user = null;
-        Connection con = null;
-
-        try
-        {
-            System.out.println("transaction for database: " +((TorqueAbstractSecurityEntity)getUserInstance()).getDatabaseName());
-            con = Transaction.begin(((TorqueAbstractSecurityEntity)getUserInstance()).getDatabaseName());
-
-            user = doSelectByName(userName.toLowerCase(), con);
-
-            // Add attached objects if they exist
-            ((TorqueAbstractSecurityEntity)user).retrieveAttachedObjects(con);
-
-            Transaction.commit(con);
-            con = null;
-        }
-        catch (NoRowsException e)
-        {
-            throw new UnknownEntityException("Unknown user '" + userName + "'",e);
-        }
-        catch (TooManyRowsException e)
-        {
-            throw new DataBackendException("Multiple Users with same username '" + userName + "'");
-        }
-        catch (TorqueException e)
-        {
-            throw new DataBackendException("Error retrieving user information", e);
-        }
-        finally
-        {
-            if (con != null)
-            {
-                Transaction.safeRollback(con);
-            }
-        }
-
-        return user;
-    }
-
-    /**
-       * Retrieves all users defined in the system.
-       *
-       * @return the names of all users defined in the system.
-       * @throws DataBackendException if there was an error accessing the data
-       *         backend.
-       */
-    public UserSet getAllUsers() throws DataBackendException
-    {
-        UserSet userSet = new UserSet();
-        Connection con = null;
-
-        try
-        {
-            con = Transaction.begin(((TorqueAbstractSecurityEntity)getUserInstance()).getDatabaseName());
-
-            List<User> users = doSelectAllUsers(con);
-
-            for (User user : users)
-            {
-                // Add attached objects if they exist
-                ((TorqueAbstractSecurityEntity)user).retrieveAttachedObjects(con);
-
-                userSet.add(user);
-            }
-
-            Transaction.commit(con);
-            con = null;
-        }
-        catch (TorqueException e)
-        {
-            throw new DataBackendException("Error retrieving all users", e);
-        }
-        finally
-        {
-            if (con != null)
-            {
-                Transaction.safeRollback(con);
-            }
-        }
-
-        return userSet;
-    }
-
-    /**
-     * Retrieve a User object with specified id.
-     *
-     * @param id
-     *            the id of the User.
-     * @return an object representing the User with specified id.
-     * @throws DataBackendException
-     *             if there was an error accessing the data backend.
-     * @throws UnknownEntityException
-     *             if the user does not exist.
-     */
-    public <T extends User> T getUserById(Object id) throws DataBackendException, UnknownEntityException
-    {
-        T user;
-
-        if (id != null && id instanceof Integer)
-        {
-            Connection con = null;
-
-            try
-            {
-                con = Transaction.begin(((TorqueAbstractSecurityEntity)getUserInstance()).getDatabaseName());
-
-                user = doSelectById((Integer)id, con);
-
-                // Add attached objects if they exist
-                ((TorqueAbstractSecurityEntity)user).retrieveAttachedObjects(con);
-
-                Transaction.commit(con);
-                con = null;
-            }
-            catch (NoRowsException e)
-            {
-                throw new UnknownEntityException("User with id '" + id + "' does not exist.", e);
-            }
-            catch (TorqueException e)
-            {
-                throw new DataBackendException("Error retrieving user information", e);
-            }
-            finally
-            {
-                if (con != null)
-                {
-                    Transaction.safeRollback(con);
-                }
-            }
-        }
-        else
-        {
-            throw new UnknownEntityException("Invalid user id '" + id + "'");
-        }
-
-        return user;
-    }
-    
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineGroup.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineGroup.java
deleted file mode 100644
index f236106..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineGroup.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-#*
-* 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 java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineGroup;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineUserGroupRole;
-import org.apache.fulcrum.security.torque.turbine.TorqueAbstractTurbineTurbineSecurityEntity;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-import org.apache.torque.om.SimpleKey;
-
-import ${package}.om.TurbineGroupPeer;
-import ${package}.om.TurbineUserGroupRolePeer;
-/**
- * This abstract class provides the SecurityInterface to the managers.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public abstract class TorqueAbstractTurbineGroup extends TorqueAbstractTurbineTurbineSecurityEntity
-    implements TurbineGroup
-{
-    /** Serial version */
-	private static final long serialVersionUID = -6230312046016785990L;
-
-    /**
-     * Forward reference to generated code
-     *
-     * Get a list of association objects, pre-populated with their TurbineRole
-     * objects.
-     *
-     * @param criteria Criteria to define the selection of records
-     * @param con a database connection
-     * @throws TorqueException
-     *
-     * @return a list of User/Group/Role relations
-     */
-    protected List<${package}.om.TurbineUserGroupRole> getTurbineUserGroupRolesJoinTurbineRole(Criteria criteria, Connection con)
-        throws TorqueException
-    {
-        criteria.and(TurbineUserGroupRolePeer.GROUP_ID, getEntityId() );
-        return TurbineUserGroupRolePeer.doSelectJoinTurbineRole(criteria, con);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#getDatabaseName()
-     */
-    @Override
-	public String getDatabaseName()
-    {
-        return TurbineGroupPeer.DATABASE_NAME;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
-
-        List<${package}.om.TurbineUserGroupRole> ugrs = getTurbineUserGroupRolesJoinTurbineRole(new Criteria(), con);
-
-        for (${package}.om.TurbineUserGroupRole ttugr : ugrs)
-        {
-            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-            ugr.setGroup(this);
-            ugr.setRole(ttugr.getTurbineRole());
-            ugr.setUser(ttugr.getTurbineUser(con));
-            userGroupRoleSet.add(ugr);
-        }
-
-        setUserGroupRoleSet(userGroupRoleSet);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#update(java.sql.Connection)
-     */
-    @Override
-	public void update(Connection con) throws TorqueException
-    {
-    	Set<TurbineUserGroupRole> userGroupRoleSet = getUserGroupRoleSet();
-        if (userGroupRoleSet != null)
-        {
-            Criteria criteria = new Criteria();
-
-            /* remove old entries */
-            criteria.where(TurbineUserGroupRolePeer.GROUP_ID, getEntityId());
-            TurbineUserGroupRolePeer.doDelete(criteria, con);
-
-            for (TurbineUserGroupRole ugr : userGroupRoleSet)
-            {
-            	TorqueTurbineUserGroupRole ttugr = new TorqueTurbineUserGroupRole();
-                ttugr.setGroupId((Integer)ugr.getGroup().getId());
-                ttugr.setUserId((Integer)ugr.getUser().getId());
-                ttugr.setRoleId((Integer)ugr.getRole().getId());
-                ttugr.save(con);
-            }
-        }
-
-        try
-        {
-            save(con);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException(e);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#delete()
-     */
-    @Override
-	public void delete() throws TorqueException
-    {
-        TurbineGroupPeer.doDelete(SimpleKey.keyFor(getEntityId()));
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbinePermission.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbinePermission.java
deleted file mode 100644
index 0a0a032..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbinePermission.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-/*
- * 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 java.sql.Connection;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.entity.TurbinePermission;
-import org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineRolePermission;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-import org.apache.torque.om.SimpleKey;
-
-import ${package}.om.TurbinePermissionPeer;
-import ${package}.om.TurbineRolePermission;
-import ${package}.om.TurbineRolePermissionPeer;
-/**
- * This abstract class provides the SecurityInterface to the managers.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public abstract class TorqueAbstractTurbinePermission extends TorqueAbstractSecurityEntity
-    implements TurbinePermission
-{
-    /** Serial version */
-	private static final long serialVersionUID = -5313324873688923207L;
-
-	/** a cache of role objects */
-    private Set<Role> roleSet = null;
-
-    /**
-     * Forward reference to generated code
-     *
-     * Get a list of association objects, pre-populated with their TorqueTurbineRole
-     * objects.
-     *
-     * @param criteria Criteria to define the selection of records
-     * @param con a database connection
-     * @throws TorqueException
-     *
-     * @return a list of Role/Permission relations
-     */
-    protected List<TurbineRolePermission> getTurbineRolePermissionsJoinTurbineRole(Criteria criteria, Connection con)
-        throws TorqueException
-    {
-        criteria.and(TurbineRolePermissionPeer.PERMISSION_ID, getEntityId() );
-        return TurbineRolePermissionPeer.doSelectJoinTurbineRole(criteria, con);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#addRole(org.apache.fulcrum.security.entity.Role)
-     */
-    @Override
-	public void addRole(Role role)
-    {
-        getRoles().add(role);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#getRoles()
-     */
-    @Override
-	public RoleSet getRoles()
-    {
-        if (roleSet == null)
-        {
-            roleSet = new RoleSet();
-        }
-        else if(!(roleSet instanceof RoleSet))
-        {
-            roleSet = new RoleSet(roleSet);
-        }
-
-        return (RoleSet)roleSet;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#getRolesAsSet()
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	public <T extends Role> Set<T> getRolesAsSet()
-    {
-        return (Set<T>)roleSet;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#removeRole(org.apache.fulcrum.security.entity.Role)
-     */
-    @Override
-	public void removeRole(Role role)
-    {
-        getRoles().remove(role);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#setRoles(org.apache.fulcrum.security.util.RoleSet)
-     */
-    @Override
-	public void setRoles(RoleSet roleSet)
-    {
-        if (roleSet != null)
-        {
-            this.roleSet = roleSet;
-        }
-        else
-        {
-            this.roleSet = new RoleSet();
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#setRolesAsSet(java.util.Set)
-     */
-    @Override
-	public <T extends Role> void setRolesAsSet(Set<T> roles)
-    {
-        setRoles(new RoleSet(roles));
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#getDatabaseName()
-     */
-    @Override
-	public String getDatabaseName()
-    {
-        return TurbinePermissionPeer.DATABASE_NAME;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        this.roleSet = new RoleSet();
-
-        List<TurbineRolePermission> rolepermissions = getTurbineRolePermissionsJoinTurbineRole(new Criteria(), con);
-
-        for (TurbineRolePermission ttrp : rolepermissions)
-        {
-            roleSet.add(ttrp.getTurbineRole());
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#update(java.sql.Connection)
-     */
-    @Override
-	public void update(Connection con) throws TorqueException
-    {
-        if (roleSet != null)
-        {
-            Criteria criteria = new Criteria();
-
-            /* remove old entries */
-            criteria.where(TurbineRolePermissionPeer.PERMISSION_ID, getEntityId());
-            TurbineRolePermissionPeer.doDelete(criteria, con);
-
-            for (Role r : roleSet)
-            {
-                TorqueTurbineRolePermission rp = new TorqueTurbineRolePermission();
-                rp.setRoleId((Integer)r.getId());
-                rp.setPermissionId(getEntityId());
-                rp.save(con);
-            }
-        }
-
-        try
-        {
-            save(con);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException(e);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#delete()
-     */
-    @Override
-	public void delete() throws TorqueException
-    {
-        TurbinePermissionPeer.doDelete(SimpleKey.keyFor(getEntityId()));
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineRole.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineRole.java
deleted file mode 100644
index 7f04c42..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineRole.java
+++ /dev/null
@@ -1,264 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-/*
- * 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 java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineRolePermission;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineUserGroupRole;
-import org.apache.fulcrum.security.torque.turbine.TorqueAbstractTurbineTurbineSecurityEntity;
-import org.apache.fulcrum.security.util.PermissionSet;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-import org.apache.torque.om.SimpleKey;
-
-import ${package}.om.TurbineRolePeer;
-import ${package}.om.TurbineRolePermission;
-import ${package}.om.TurbineRolePermissionPeer;
-import ${package}.om.TurbineUserGroupRolePeer;
-/**
- * This abstract class provides the SecurityInterface to the managers.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public abstract class TorqueAbstractTurbineRole extends TorqueAbstractTurbineTurbineSecurityEntity
-    implements TurbineRole
-{
-    /** Serial version */
-	private static final long serialVersionUID = -1782236723198646728L;
-
-	/** a cache of permission objects */
-    private Set<Permission> permissionSet = null;
-
-    /**
-     * Forward reference to generated code
-     *
-     * Get a list of association objects, pre-populated with their TorqueTurbinePermission
-     * objects.
-     *
-     * @param criteria Criteria to define the selection of records
-     * @param con a database connection
-     * @throws TorqueException
-     *
-     * @return a list of Role/Permission relations
-     */
-    protected List<TurbineRolePermission> getTurbineRolePermissionsJoinTurbinePermission(Criteria criteria, Connection con)
-        throws TorqueException
-    {
-        criteria.and(TurbineRolePermissionPeer.ROLE_ID, getEntityId() );
-        return TurbineRolePermissionPeer.doSelectJoinTurbinePermission(criteria, con);
-    }
-
-    /**
-     * Forward reference to generated code
-     *
-     * Get a list of association objects, pre-populated with their TurbineGroup
-     * objects.
-     *
-     * @param criteria Criteria to define the selection of records
-     * @param con a database connection
-     * @throws TorqueException
-     *
-     * @return a list of User/Group/Role relations
-     */
-    protected List<${package}.om.TurbineUserGroupRole> getTurbineUserGroupRolesJoinTurbineGroup(Criteria criteria, Connection con)
-        throws TorqueException
-    {
-        criteria.and(TurbineUserGroupRolePeer.ROLE_ID, getEntityId() );
-        return TurbineUserGroupRolePeer.doSelectJoinTurbineGroup(criteria, con);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbineRole#addPermission(org.apache.fulcrum.security.entity.Permission)
-     */
-    @Override
-	public void addPermission(Permission permission)
-    {
-        getPermissions().add(permission);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbineRole#getPermissions()
-     */
-    @Override
-	public PermissionSet getPermissions()
-    {
-        if (permissionSet == null)
-        {
-            permissionSet = new PermissionSet();
-        }
-        else if(!(permissionSet instanceof PermissionSet))
-        {
-            permissionSet = new PermissionSet(permissionSet);
-        }
-
-        return (PermissionSet)permissionSet;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbineRole#getPermissionsAsSet()
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	public <T extends Permission> Set<T> getPermissionsAsSet()
-    {
-        return (Set<T>)permissionSet;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbineRole#removePermission(org.apache.fulcrum.security.entity.Permission)
-     */
-    @Override
-	public void removePermission(Permission permission)
-    {
-        getPermissions().remove(permission);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbineRole#setPermissions(org.apache.fulcrum.security.util.PermissionSet)
-     */
-    @Override
-	public void setPermissions(PermissionSet permissionSet)
-    {
-        if (permissionSet != null)
-        {
-            this.permissionSet = permissionSet;
-        }
-        else
-        {
-            this.permissionSet = new PermissionSet();
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.model.turbine.entity.TurbineRole#setPermissionsAsSet(java.util.Set)
-     */
-    @Override
-	public <T extends Permission> void setPermissionsAsSet(Set<T> permissions)
-    {
-        setPermissions(new PermissionSet(permissions));
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#getDatabaseName()
-     */
-    @Override
-	public String getDatabaseName()
-    {
-        return TurbineRolePeer.DATABASE_NAME;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        this.permissionSet = new PermissionSet();
-
-        List<TurbineRolePermission> rolepermissions = getTurbineRolePermissionsJoinTurbinePermission(new Criteria(), con);
-
-        for (TurbineRolePermission ttrp : rolepermissions)
-        {
-            permissionSet.add(ttrp.getTurbinePermission());
-        }
-
-        Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
-
-        List<${package}.om.TurbineUserGroupRole> ugrs = getTurbineUserGroupRolesJoinTurbineGroup(new Criteria(), con);
-
-        for (${package}.om.TurbineUserGroupRole ttugr : ugrs)
-        {
-            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-            ugr.setRole(this);
-            ugr.setGroup(ttugr.getTurbineGroup());
-            ugr.setUser(ttugr.getTurbineUser(con));
-            userGroupRoleSet.add(ugr);
-        }
-
-        setUserGroupRoleSet(userGroupRoleSet);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#update(java.sql.Connection)
-     */
-    @Override
-	public void update(Connection con) throws TorqueException
-    {
-        if (permissionSet != null)
-        {
-            Criteria criteria = new Criteria();
-
-            /* remove old entries */
-            criteria.where(TurbineRolePermissionPeer.ROLE_ID, getEntityId());
-            TurbineRolePermissionPeer.doDelete(criteria, con);
-
-            for (Permission p : permissionSet)
-            {
-            	TorqueTurbineRolePermission rp = new TorqueTurbineRolePermission();
-                rp.setPermissionId((Integer)p.getId());
-                rp.setRoleId(getEntityId());
-                rp.save(con);
-            }
-        }
-
-    	Set<TurbineUserGroupRole> userGroupRoleSet = getUserGroupRoleSet();
-        if (userGroupRoleSet != null)
-        {
-            Criteria criteria = new Criteria();
-
-            /* remove old entries */
-            criteria.where(TurbineUserGroupRolePeer.ROLE_ID, getEntityId());
-            TurbineUserGroupRolePeer.doDelete(criteria, con);
-
-            for (TurbineUserGroupRole ugr : userGroupRoleSet)
-            {
-                TorqueTurbineUserGroupRole ttugr = new TorqueTurbineUserGroupRole();
-                ttugr.setGroupId((Integer)ugr.getGroup().getId());
-                ttugr.setUserId((Integer)ugr.getUser().getId());
-                ttugr.setRoleId((Integer)ugr.getRole().getId());
-                ttugr.save(con);
-            }
-        }
-
-        try
-        {
-            save(con);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException(e);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#delete()
-     */
-    @Override
-	public void delete() throws TorqueException
-    {
-        TurbineRolePeer.doDelete(SimpleKey.keyFor(getEntityId()));
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineUser.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineUser.java
deleted file mode 100644
index b080de1..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueAbstractTurbineUser.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-#*
-* 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 java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineUserGroupRole;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineUserGroupRolePeer;
-import org.apache.fulcrum.security.torque.om.TorqueTurbineUserPeer;
-import org.apache.fulcrum.security.torque.turbine.TorqueAbstractTurbineTurbineSecurityEntity;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-import org.apache.torque.om.SimpleKey;
-/**
- * This abstract class provides the SecurityInterface to the managers.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public abstract class TorqueAbstractTurbineUser extends TorqueAbstractTurbineTurbineSecurityEntity
-    implements TurbineUser
-{
-    /** Serial version */
-	private static final long serialVersionUID = -7255623655281852566L;
-
-    /**
-     * Forward reference to generated code
-     *
-     * Get a list of association objects, pre-populated with their TorqueTurbineRole
-     * objects.
-     *
-     * @param criteria Criteria to define the selection of records
-     * @param con a database connection
-     * @throws TorqueException
-     *
-     * @return a list of User/Group/Role relations
-     */
-    protected List<TorqueTurbineUserGroupRole> getTorqueTurbineUserGroupRolesJoinTorqueTurbineRole(Criteria criteria, Connection con)
-        throws TorqueException
-    {
-        criteria.and(TorqueTurbineUserGroupRolePeer.USER_ID, getEntityId() );
-        return TorqueTurbineUserGroupRolePeer.doSelectJoinTorqueTurbineRole(criteria, con);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#getDatabaseName()
-     */
-    @Override
-	public String getDatabaseName()
-    {
-        return TorqueTurbineUserPeer.DATABASE_NAME;
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
-
-        List<TorqueTurbineUserGroupRole> ugrs = getTorqueTurbineUserGroupRolesJoinTorqueTurbineRole(new Criteria(), con);
-
-        for (TorqueTurbineUserGroupRole ttugr : ugrs)
-        {
-            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-            ugr.setUser(this);
-            ugr.setRole(ttugr.getTorqueTurbineRole());
-            ugr.setGroup(ttugr.getTorqueTurbineGroup(con));
-            userGroupRoleSet.add(ugr);
-        }
-
-        setUserGroupRoleSet(userGroupRoleSet);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#update(java.sql.Connection)
-     */
-    @Override
-	public void update(Connection con) throws TorqueException
-    {
-    	Set<TurbineUserGroupRole> userGroupRoleSet = getUserGroupRoleSet();
-        if (userGroupRoleSet != null)
-        {
-            Criteria criteria = new Criteria();
-
-            /* remove old entries */
-            criteria.where(TorqueTurbineUserGroupRolePeer.USER_ID, getEntityId());
-            TorqueTurbineUserGroupRolePeer.doDelete(criteria, con);
-
-            for (TurbineUserGroupRole ugr : userGroupRoleSet)
-            {
-                TorqueTurbineUserGroupRole ttugr = new TorqueTurbineUserGroupRole();
-                ttugr.setGroupId((Integer)ugr.getGroup().getId());
-                ttugr.setUserId((Integer)ugr.getUser().getId());
-                ttugr.setRoleId((Integer)ugr.getRole().getId());
-                ttugr.save(con);
-            }
-        }
-
-        try
-        {
-            save(con);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException(e);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#delete()
-     */
-    @Override
-	public void delete() throws TorqueException
-    {
-        TorqueTurbineUserPeer.doDelete(SimpleKey.keyFor(getEntityId()));
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineGroupManagerImpl.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineGroupManagerImpl.java
deleted file mode 100644
index 1826e0d..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineGroupManagerImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-#*
-* 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 java.sql.Connection;
-import java.util.List;
-
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.torque.TorqueAbstractGroupManager;
-import org.apache.fulcrum.security.torque.peer.Peer;
-import org.apache.fulcrum.security.torque.peer.PeerManagable;
-import org.apache.fulcrum.security.torque.peer.PeerManager;
-import org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.torque.NoRowsException;
-import org.apache.torque.TooManyRowsException;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-
-import ${package}.om.TurbineGroupPeer;
-/**
- * This implementation persists to a database via Torque.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public class TorqueTurbineGroupManagerImpl extends TorqueAbstractGroupManager implements PeerManagable
-{
-    
-    PeerManager peerManager;
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractGroupManager#doSelectAllGroups(java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends Group> List<T> doSelectAllGroups(Connection con) throws TorqueException
-    {
-        Criteria criteria = new Criteria(TurbineGroupPeer.DATABASE_NAME);
-        
-        if ( (getCustomPeer())) {
-            try
-            {
-                return ((TorqueTurbinePeer<T>)getPeerInstance()).doSelect( criteria, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            return (List<T>) TurbineGroupPeer.doSelect(criteria, con);
-        }
-
-
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractGroupManager#doSelectById(java.lang.Integer, java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends Group> T doSelectById(Integer id, Connection con) throws NoRowsException, TooManyRowsException, TorqueException
-    {
-        if ( (getCustomPeer())) {
-            try
-            {
-                return ((TorqueTurbinePeer<T>) getPeerInstance()).retrieveByPK( id, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            return  (T)  TurbineGroupPeer.retrieveByPK(id, con);
-        }
-
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractGroupManager#doSelectByName(java.lang.String, java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends Group> T doSelectByName(String name, Connection con) throws NoRowsException, TooManyRowsException, TorqueException
-    {
-        Criteria criteria = new Criteria(TurbineGroupPeer.DATABASE_NAME);
-        criteria.where(TurbineGroupPeer.GROUP_NAME, name);
-        criteria.setIgnoreCase(true);
-        criteria.setSingleRecord(true);
-        List<T> groups = null;
-        
-        if ( (getCustomPeer())) {
-            try
-            {
-                
-                groups = ((TorqueTurbinePeer<T>) getPeerInstance()).doSelect( criteria, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            groups = (List<T>) TurbineGroupPeer.doSelect(criteria, con);
-        }
-
-        if (groups.isEmpty())
-        {
-            throw new NoRowsException(name);
-        }
-
-        return groups.get(0);
-    }
-    
-    public Peer getPeerInstance() throws DataBackendException {
-        return getPeerManager().getPeerInstance(getPeerClassName(), TorqueTurbinePeer.class, getClassName());
-    }
-    
-    /**
-     * @return Returns the persistenceHelper.
-     */
-    @Override
-	public PeerManager getPeerManager()
-    {
-        if (peerManager == null)
-        {
-            peerManager = (PeerManager) resolve(PeerManager.ROLE);
-        }
-        return peerManager;
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineRoleManagerImpl.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineRoleManagerImpl.java
deleted file mode 100644
index 80816f9..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineRoleManagerImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-#*
-* 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 java.sql.Connection;
-import java.util.List;
-
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.torque.TorqueAbstractRoleManager;
-import org.apache.fulcrum.security.torque.peer.Peer;
-import org.apache.fulcrum.security.torque.peer.PeerManagable;
-import org.apache.fulcrum.security.torque.peer.PeerManager;
-import org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.torque.NoRowsException;
-import org.apache.torque.TooManyRowsException;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-
-import ${package}.om.TurbineRolePeer;
-/**
- * This implementation persists to a database via Torque.
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id:$
- */
-public class TorqueTurbineRoleManagerImpl extends TorqueAbstractRoleManager implements PeerManagable
-{
-    PeerManager peerManager;
-    
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractRoleManager#doSelectAllRoles(java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends Role> List<T> doSelectAllRoles(Connection con) throws TorqueException
-    {
-        Criteria criteria = new Criteria(TurbineRolePeer.DATABASE_NAME);
-
-        if ( (getCustomPeer())) {
-            try
-            {
-                return ((TorqueTurbinePeer<T>) getPeerInstance()).doSelect( criteria, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            return (List<T>) TurbineRolePeer.doSelect(criteria, con);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractRoleManager#doSelectById(java.lang.Integer, java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends Role> T doSelectById(Integer id, Connection con) throws NoRowsException, TooManyRowsException, TorqueException
-    {
-        if ( (getCustomPeer())) {
-            try
-            {
-                return ((TorqueTurbinePeer<T>) getPeerInstance()).retrieveByPK( id, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            return  (T)  TurbineRolePeer.retrieveByPK(id, con);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractRoleManager#doSelectByName(java.lang.String, java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends Role> T doSelectByName(String name, Connection con) throws NoRowsException, TooManyRowsException, TorqueException
-    {
-        Criteria criteria = new Criteria(TurbineRolePeer.DATABASE_NAME);
-        criteria.where(TurbineRolePeer.ROLE_NAME, name);
-        criteria.setIgnoreCase(true);
-        criteria.setSingleRecord(true);
-        
-        List<T> roles = null;
-        if ( (getCustomPeer())) {
-            try
-            {
-                roles = ((TorqueTurbinePeer<T>)getPeerInstance()).doSelect( criteria, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            roles =  (List<T>) TurbineRolePeer.doSelect(criteria, con);
-        }
-
-        if (roles.isEmpty())
-        {
-            throw new NoRowsException(name);
-        }
-
-        return roles.get(0);
-    }
-    
-    public Peer getPeerInstance() throws DataBackendException {
-        return getPeerManager().getPeerInstance(getPeerClassName(), TorqueTurbinePeer.class, getClassName());
-    }
-    
-    /**
-     * @return Returns the persistenceHelper.
-     */
-    @Override
-	public PeerManager getPeerManager()
-    {
-        if (peerManager == null)
-        {
-            peerManager = (PeerManager) resolve(PeerManager.ROLE);
-        }
-        return peerManager;
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
deleted file mode 100644
index 7b42d23..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/fulcrum/security/torque/turbine/TorqueTurbineUserManagerImpl.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package ${package}.fulcrum.security.torque.turbine;
-#*
-* 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 java.sql.Connection;
-import java.util.List;
-
-import org.apache.fulcrum.security.entity.User;
-import org.apache.fulcrum.security.model.turbine.TurbineUserManager;
-
-import ${package}.fulcrum.security.torque.TorqueAbstractUserManager;
-
-import org.apache.fulcrum.security.torque.om.TorqueTurbineUserPeer;
-import org.apache.fulcrum.security.torque.peer.Peer;
-import org.apache.fulcrum.security.torque.peer.PeerManagable;
-import org.apache.fulcrum.security.torque.peer.PeerManager;
-import org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.torque.NoRowsException;
-import org.apache.torque.TooManyRowsException;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-
-import ${package}.om.TurbineUserPeer;
-import ${package}.om.TurbineUserPeerImpl;
-
-/**
- * This implementation persists to a database via Torque.
- * 
- *
- * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
- * @version $Id$
- */
-public class TorqueTurbineUserManagerImpl extends TorqueAbstractUserManager implements TurbineUserManager, PeerManagable
-{
-    PeerManager peerManager;
-    private static final String ANON = "anon";
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractUserManager#doSelectAllUsers(java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends User> List<T> doSelectAllUsers(Connection con) throws TorqueException
-    {
-        Criteria criteria = new Criteria();
-        
-        if ( (getCustomPeer())) {
-            try
-            {
-                return ((TorqueTurbinePeer<T>) getPeerInstance()).doSelect( criteria, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            return (List<T>) TorqueTurbineUserPeer.doSelect(criteria, con);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractUserManager#doSelectById(java.lang.Integer, java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends User> T doSelectById(Integer id, Connection con) throws NoRowsException, TooManyRowsException, TorqueException
-    {
-        if ( (getCustomPeer())) {
-            try
-            {
-                return ((TorqueTurbinePeer<T>) getPeerInstance()).retrieveByPK( id, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            return  (T)  TorqueTurbineUserPeer.retrieveByPK(id, con);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractUserManager#doSelectByName(java.lang.String, java.sql.Connection)
-     */
-    @Override
-	@SuppressWarnings("unchecked")
-	protected <T extends User> T doSelectByName(String name, Connection con) throws NoRowsException, TooManyRowsException, TorqueException
-    {
-        Criteria criteria = new Criteria();
-        criteria.setIgnoreCase(true);
-        //criteria.setSingleRecord(true);
-        
-        List<T> users = null;
-        if ( (getCustomPeer())) {
-            try
-            {
-              System.out.println("criteria dbname is "+  criteria.getDbName());
-              TorqueTurbinePeer<T> peerInstance = (TorqueTurbinePeer<T>)getPeerInstance();
-              criteria.where( 
-            		TurbineUserPeer.LOGIN_NAME,
-                  name);
-              System.out.println("peerInstance is "+  peerInstance);
-              System.out.println("databae is "+  ((TurbineUserPeerImpl)peerInstance).getDatabaseName());
-
-              System.out.println("checkuser is "+  criteria.toString());
-              users = peerInstance.doSelect( criteria, con );
-            }
-            catch ( DataBackendException e )
-            {
-                throw new TorqueException( e );
-            }
-        } else {
-            //users = (List<T>) TorqueTurbineUserPeer.doSelect(criteria, con);
-        }
-
-         System.out.println("users is "+  users);
-
-        if (users.isEmpty())
-        {
-            throw new NoRowsException(name);
-        }
-
-        System.out.println("user is "+  users.get(0));
-        return users.get(0);
-    }
-
-    /**
-     * Default implementation.
-     */
-    @Override
-    public <T extends User> T getAnonymousUser()
-        throws UnknownEntityException
-    {
-        try
-        {
-            T anonUser =  getUser( ANON );
-            // add more, if needed
-            return anonUser;
-        }
-        catch ( DataBackendException e )
-        {
-            throw new UnknownEntityException( "Failed to load anonymous user",e);
-        } 
-    }
-
-    /**
-     * Default implementation.
-     */
-    @Override
-    public boolean isAnonymousUser( User u )
-    {
-        try
-        {
-            User anon = getAnonymousUser();
-            if (u.equals( anon )) 
-                {
-                 return true;
-                }
-        }
-        catch ( Exception e )
-        {
-            getLogger().error( "Failed to check user:" + e.getMessage(),e);
-        }
-        return false;
-    }
-    
-    public Peer getPeerInstance() throws DataBackendException {
-        return getPeerManager().getPeerInstance(getPeerClassName(), TorqueTurbinePeer.class, getClassName());
-    }
-    
-    /**
-     * @return Returns the persistenceHelper.
-     */
-    @Override
-    public PeerManager getPeerManager()
-    {
-        if (peerManager == null)
-        {
-            peerManager = (PeerManager) resolve(PeerManager.ROLE);
-        }
-        return peerManager;
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
deleted file mode 100644
index c8f4d1b..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.security.util.PasswordMismatchException;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Change Password action.
- *
- */
-public class ChangePasswordAction extends SecureAction 
-
-{
-	
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-	
-	
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-    @Override
-    public void doPerform(PipelineData data)
-            throws Exception 
-            {
-
-		User user = getRunData(data).getUser();
-		
-    RunData rundata = getRunData(data);
-    String oldPassword = rundata.getParameters().getString("oldpassword", "");
-    String newPassword = rundata.getParameters().getString("newpassword", "");
-		
-    try {
-        security.changePassword(user, oldPassword, newPassword); 
-        rundata.setMessage("Password changed!");
-    }
-    catch (PasswordMismatchException e) 
-    {
-      rundata.setMessage(e.getMessage());
-      rundata.setScreenTemplate("Password.vm");
-    }
-		
-    
-	}
-    
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	@Override
-	public void doPerform(PipelineData data, Context context) throws Exception 
-	{
-
-		context.put("success", "Password changed!!");
-	}
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
deleted file mode 100644
index 3018954..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LoginUser.java 1725011 2016-01-16 17:38:47Z tv $
- */
-public class LoginUser
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUser.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        String username = data.getParameters().getString(LoginUser.CGI_USERNAME, "");
-
-        if (StringUtils.isEmpty(username))
-        {
-            return;
-        }
-
-    	if (username.equals(security.getAnonymousUser().getName()))
-        {
-            data.setMessage("Anonymous user cannot login");
-            reset(data);
-            return;
-        }
-    	
-       super.doPerform(pipelineData);
-
-    }
-
-
-
-	private void reset(RunData data) throws UnknownEntityException {
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-
-		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-		{
-		    // We're running in a templating solution
-		    data.setScreenTemplate(
-		    		conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-		}
-		else
-		{
-		    data.setScreen(
-		    		conf.getString(TurbineConstants.SCREEN_LOGIN));
-		}
-	}
-
-}
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
deleted file mode 100644
index 272d47b..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.intake.model.Group;
-import org.apache.fulcrum.intake.IntakeException;
-import org.apache.turbine.services.intake.IntakeTool;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LoginUserIntake
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUserIntake.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        	
-       try
-        {
-          // Get intake group
-          IntakeTool intake =  new IntakeTool();//(IntakeTool)context.get("intake");
-          intake.init(data);
-          Group group = intake.get("Login", IntakeTool.DEFAULT_KEY);
-          String username = (String)group.get("Username").getValue();
-          if (StringUtils.isEmpty(username))
-            {
-                return;
-            }
-
-          if (username.equals(security.getAnonymousUser().getName()))
-            {
-                data.setMessage("Anonymous user cannot login");
-                reset(data);
-                return;
-            }
-            
-        	if (username.equals(security.getAnonymousUser().getName()))
-            {
-                throw new Exception("Anonymous user cannot login");
-            }
-        	
-            String password = (String)group.get("Password").getValue();
-            // Authenticate the user and get the object.
-            User user = security.getAuthenticatedUser(username, password);
-
-            // Store the user object.
-            data.setUser(user);
-
-            // Mark the user as being logged in.
-            user.setHasLoggedIn(Boolean.TRUE);
-
-            // Set the last_login date in the database.
-            user.updateLastLogin();
-
-            // This only happens if the user is valid; otherwise, we
-            // will get a valueBound in the User object when we don't
-            // want to because the username is not set yet.  Save the
-            // User object into the session.
-            data.save();
-
-            /*
-             * If the setPage("template.vm") method has not
-             * been used in the template to authenticate the
-             * user (usually Login.vm), then the user will
-             * be forwarded to the template that is specified
-             * by the "template.home" property as listed in
-             * TR.props for the webapp.
-             */
-
-        }
-        catch (Exception e)
-        {
-            if (e instanceof DataBackendException || e instanceof IntakeException)
-            {
-                log.error(e);
-            }
-
-            // Set Error Message and clean out the user.
-            data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
-            User anonymousUser = security.getAnonymousUser();
-            data.setUser(anonymousUser);
-            
-            String loginTemplate = conf.getString(
-                    TurbineConstants.TEMPLATE_LOGIN);
-
-            if (StringUtils.isNotEmpty(loginTemplate))
-            {
-                // We're running in a templating solution
-                data.setScreenTemplate(loginTemplate);
-            }
-            else
-            {
-                data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-            }
-        }
-    }
-
-
-
-	private void reset(RunData data) throws UnknownEntityException {
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-
-		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-		{
-		    // We're running in a templating solution
-		    data.setScreenTemplate(
-		    		conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-		}
-		else
-		{
-		    data.setScreen(
-		    		conf.getString(TurbineConstants.SCREEN_LOGIN));
-		}
-	}
-
-}
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
deleted file mode 100644
index 2fea6dd..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This action removes a user from the session. It makes sure to save
- * the User object in the session.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LogoutUser.java 1706239 2015-10-01 13:18:35Z tv $
- */
-public class LogoutUser
-        extends Action
-{
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-    /**
-     * Clears the PipelineData user object back to an anonymous status not
-     * logged in, and with a null ACL.  If the tr.props ACTION_LOGIN
-     * is anything except "LogoutUser", flow is transfered to the
-     * SCREEN_HOMEPAGE
-     *
-     * If this action name is the value of action.logout then we are
-     * being run before the session validator, so we don't need to
-     * set the screen (we assume that the session validator will handle
-     * that). This is basically still here simply to preserve old behaviour
-     * - it is recommended that action.logout is set to "LogoutUser" and
-     * that the session validator does handle setting the screen/template
-     * for a logged out (read not-logged-in) user.
-     *
-     * @param pipelineData Turbine information.
-     * @exception FulcrumSecurityException a problem occurred in the security
-     *            service.
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        // Session validator did not run, so RunData is not populated
-        User user = data.getUserFromSession();
-
-        if (user != null && !security.isAnonymousUser(user))
-        {
-            // Make sure that the user has really logged in...
-            if (!user.hasLoggedIn())
-            {
-                return;
-            }
-
-            user.setHasLoggedIn(Boolean.FALSE);
-            security.saveUser(user);
-        }
-
-        data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
-
-        // This will cause the acl to be removed from the session in
-        // the Turbine servlet code.
-        data.setACL(null);
-
-        // Retrieve an anonymous user.
-        User anonymousUser = security.getAnonymousUser();
-        data.setUser(anonymousUser);
-        data.save();
-
-        // In the event that the current screen or related navigations
-        // require acl info, we cannot wait for Turbine to handle
-        // regenerating acl.
-        data.getSession().removeAttribute(TurbineConstants.ACL_SESSION_KEY);
-
-        // If this action name is the value of action.logout then we are
-        // being run before the session validator, so we don't need to
-        // set the screen (we assume that the session validator will handle
-        // that). This is basically still here simply to preserve old behavior
-        // - it is recommended that action.logout is set to "LogoutUser" and
-        // that the session validator does handle setting the screen/template
-        // for a logged out (read not-logged-in) user.
-        if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY,
-                            TurbineConstants.ACTION_LOGOUT_DEFAULT)
-            .equals(TurbineConstants.ACTION_LOGOUT_DEFAULT))
-        {
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-        }
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
deleted file mode 100644
index f612181..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.modules.actions.VelocitySecureAction;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity Secure action.
- *
- * Always performs a Security Check that you've defined before executing the
- * doPerform().
- */
-public class SecureAction extends VelocitySecureAction 
-{
-	/**
-	 * This currently only checks to make sure that user is allowed to view the
-	 * storage area. If you create an action that requires more security then
-	 * override this method.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @return True if the user is authorized to access the screen.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception 
-	{
-		boolean isAuthorized = false;
-
-		// Who is our current user?
-		User user = getRunData(data).getUser();
-
-		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = getRunData(data).getACL();
-
-		if (acl == null || ! ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") ) ) 
-		{
-			getRunData(data).setMessage("You do not have permission to access this action");
-			isAuthorized = false;
-		} 
-		else if ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") )
-		{
-			isAuthorized = true;
-		}
-
-		return isAuthorized;
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	public void doPerform(PipelineData data, Context context) throws Exception 
-	{
-
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 4990038..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.turbine.pipeline.PipelineData;
-import org.apache.velocity.context.Context;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-	/**
-	 * This method is called by the Turbine framework when the
-	 * associated Velocity template, Index.vm is requested
-	 * 
-	 * @param data the Turbine request data
-	 * @param context the Velocity context
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(PipelineData data, Context context)
-			throws Exception
-	{
-		context.put("success", "Congratulations, it worked!");
-	}
-
-	/**
-	 * This method is called bythe Turbine framework to determine if
-	 * the current user is allowed to use this screen. If this method
-	 * returns false, the doBuildTemplate() method will not be called.
-	 * If a redirect to some "access denied" page is required, do the
-	 * necessary redirect here.
-	 * 
-	 * @param data the Turbine request data
-	 * @return true if this screen may be accessed
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception
-	{
-		// use data.getACL() 
-		return true;
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
deleted file mode 100644
index 9028874..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package ${package}.modules.screens;
-
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample extending a secured screen
- */
-public class Password extends SecureScreen 
-{
-
-	/**
-	 * This method is called by the Turbine framework when the
-	 * associated Velocity template, Index.vm is requested
-	 * 
-	 * @param data the Turbine request data
-	 * @param context the Velocity context
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(PipelineData data, Context context)
-			throws Exception
-	{
-		
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
deleted file mode 100644
index 74a4b49..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample implementation for creating a secured screen
- */
-public class SecureScreen extends VelocitySecureScreen 
-{
-	@TurbineService
-	protected SecurityService securityService;
-	
-  @TurbineConfiguration( TurbineConstants.TEMPLATE_LOGIN )
-  private Configuration templateLogin;
-
-  @TurbineConfiguration( TurbineConstants.TEMPLATE_HOMEPAGE )
-  private Configuration templateHomepage;
-
-	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception 
-	{
-		boolean isAuthorized = false;
-
-		// Who is our current user?
-		User user = getRunData(data).getUser();
-
-		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = getRunData(data).getACL();
-
-		if (acl == null)
-		{
-      // commons configuration getProperty: prefix removed, the key for the value .. is an empty string, the result an object
-			getRunData(data).setScreenTemplate( (String) templateLogin.getProperty("") );
-			isAuthorized = false;
-		} 
-		else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin"))
-		{
-			isAuthorized = true;
-		}
-		else 
-		{
-			getRunData(data).setScreenTemplate( (String) templateHomepage.getProperty("") );
-			getRunData(data).setMessage("You do not have access to this part of the site.");
-			isAuthorized = false;
-		}
-		return isAuthorized;
-	}
-
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param data
-     *            Turbine information.
-     * @param context
-     *            Context for web pages.
-     * @exception Exception,
-     *                a generic exception.
-     */
-	@Override
-	protected void doBuildTemplate(PipelineData data, Context context) throws Exception 
-	{
-
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
deleted file mode 100644
index d82f6ba..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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 java.util.ArrayList;
-import java.util.List;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.velocity.context.Context;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class TestSecure extends SecureScreen
-{
-	/**
-	 * This method is called by the Turbine framework when the
-	 * associated Velocity template, Index.vm is requested
-	 * 
-	 * @param data the Turbine request data
-	 * @param context the Velocity context
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(PipelineData data, Context context)
-			throws Exception
-	{
-		context.put("success", "Congratulations, it worked!");
-	}
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroup.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroup.java
deleted file mode 100644
index eadb5eb..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroup.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package ${package}.om;
-
-import org.apache.torque.TorqueException;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface and default implementations 
- * @author gk
- *
- */
-public  class TurbineGroup
-    extends ${package}.om.BaseTurbineGroup implements org.apache.fulcrum.security.entity.Group, org.apache.fulcrum.security.model.turbine.entity.TurbineGroup
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437121L;
-
-    /**
-     * Get the value of id.
-     *
-     * @return Object
-     */
-    @Override
-	public Object getId() 
-    {
-        
-        return getGroupId();
-    }
-
-    /**
-     * Set the value of id.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setId(Object v)
-    {
-        setGroupId( (Integer)v);
-
-    }
-    
-        /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-    }
-    
-	@Override
-	public Integer getEntityId() {
-		return getGroupId();
-	}
-
-	@Override
-	public void setEntityId(Integer id) throws TorqueException {
-		setGroupId(id);
-	}
-
-    @Override
-    public String getDatabaseName()
-    {
-      return "default";
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
deleted file mode 100644
index d54dcf1..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeer
-    extends ${package}.om.BaseTurbineGroupPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
deleted file mode 100644
index 94c681d..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeerImpl
-    extends ${package}.om.BaseTurbineGroupPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineGroup>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbinePermission.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbinePermission.java
deleted file mode 100644
index 6a38306..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbinePermission.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package ${package}.om;
-
-import org.apache.torque.TorqueException;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface and default implementations 
- * @author gk
- *
- */
-public  class TurbinePermission
-    extends ${package}.om.BaseTurbinePermission implements org.apache.fulcrum.security.entity.Permission, org.apache.fulcrum.security.model.turbine.entity.TurbinePermission
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437105L;
-
-	@Override
-	public Integer getEntityId() {
-		return getPermissionId();
-	}
-
-	@Override
-	public void setEntityId(Integer id) throws TorqueException {
-		setPermissionId(id);
-	}
-
-	 /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRole.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRole.java
deleted file mode 100644
index aee193e..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRole.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package ${package}.om;
-
-import java.sql.Connection;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.SimpleKey;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface and default implementations 
- * @author gk
- *
- */
-public  class TurbineRole
-    extends ${package}.om.BaseTurbineRole implements org.apache.fulcrum.security.entity.Role, org.apache.fulcrum.security.model.turbine.entity.TurbineRole
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437121L;
-
-    
-    /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-
-    }
-
-	@Override
-	public Integer getEntityId() {
-		return getRoleId();
-	}
-
-	@Override
-	public void setEntityId(Integer id) throws TorqueException {
-		setRoleId(id);
-	}
-
-	/**
-	 * @TODO
-	 */
-	@Override
-	public void update(Connection con) throws TorqueException {
-    	Set<TurbineUserGroupRole> userGroupRoleSet = getUserGroupRoleSet();
-        if (userGroupRoleSet != null)
-        {
-
-
-        }
-
-        try
-        {
-            save(con);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException(e);
-        }
-	}
-
-	@Override
-	public String getDatabaseName() {
-		return "default";
-	}
-
-	@Override
-	public void delete() throws TorqueException {
-		TurbineRolePeer.doDelete(SimpleKey.keyFor(getEntityId()));
-		
-	}
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
deleted file mode 100644
index 739597f..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeer
-    extends ${package}.om.BaseTurbineRolePeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
deleted file mode 100644
index 91d307f..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeerImpl
-    extends ${package}.om.BaseTurbineRolePeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineRole>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
deleted file mode 100644
index a26f32e..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public  class TurbineRolePermission
-    extends ${package}.om.BaseTurbineRolePermission
-{
-    /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
deleted file mode 100644
index 8caa282..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package ${package}.om;
-
-import java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.torque.TorqueException;
-import org.apache.torque.criteria.Criteria;
-import org.apache.torque.om.SimpleKey;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public  class TurbineUser
-    extends ${package}.om.BaseTurbineUser implements org.apache.fulcrum.security.model.turbine.entity.TurbineUser
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437136L;
-    
-   /**
-     * Get the value of id.
-     *
-     * @return Object
-     */
-    @Override
-	public Object getId() 
-    {
-        
-        return getEntityId();
-    }
-
-    /**
-     * Set the value of id.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setId(Object v)
-    {
-        setEntityId( (Integer) v);
-
-    }
-    
-        /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-
-    }
-    
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#getDatabaseName()
-     */
-    @Override
-    public String getDatabaseName()
-    {
-      return "default";
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
-
-        List<${package}.om.TurbineUserGroupRole> ugrs = getTurbineUserGroupRolesJoinTurbineUser(new Criteria(), con);
-
-        for (${package}.om.TurbineUserGroupRole ttugr : ugrs)
-        {
-            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-            ugr.setUser(this);
-            ugr.setRole(ttugr.getTurbineRole());
-            ugr.setGroup(ttugr.getTurbineGroup(con));
-            userGroupRoleSet.add(ugr);
-        }
-
-        setUserGroupRoleSet(userGroupRoleSet);
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#update(java.sql.Connection)
-     * 
-     * @TODO
-     */
-    @Override
-	public void update(Connection con) throws TorqueException
-    {
-    	Set<TurbineUserGroupRole> userGroupRoleSet = getUserGroupRoleSet();
-        if (userGroupRoleSet != null)
-        {
-
-
-        }
-
-        try
-        {
-            save(con);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException(e);
-        }
-    }
-
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity#delete()
-     */
-    @Override
-	public void delete() throws TorqueException
-    {
-        TurbineUserPeer.doDelete(SimpleKey.keyFor(getEntityId()));
-    }
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
deleted file mode 100644
index 4c330e2..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-
-public class TurbineUserPeer
-    extends ${package}.om.BaseTurbineUserPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
deleted file mode 100644
index 38d7984..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineUserPeerImpl
-    extends ${package}.om.BaseTurbineUserPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineUser>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 8e867d5..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml                                          -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-
-	<!--  Simple author/book database example -->
-	<table name="AUTHOR" idMethod="idbroker">
-		<column name="AUTH_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="FIRST_NAME"  required="true" size="64" type="VARCHAR" />
-		<column name="LAST_NAME"   required="true" size="64" type="VARCHAR" />
-	</table>
-
-    <table name="BOOK" idMethod="idbroker">
-		<column name="BOOK_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="AUTH_ID"     required="true" type="INTEGER" />
-		<column name="TITLE"       required="true" size="64" type="VARCHAR" />
-		<column name="SUBJECT"     required="true" size="64" type="VARCHAR" />
-		<foreign-key foreignTable="AUTHOR">
-			<reference local="AUTH_ID" foreign="AUTH_ID"></reference>
-		</foreign-key>		
-	</table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 5002f21..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 8503f8f..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="turbineadmin"/>
-  <TurbinePermission PermissionId="2" Name="turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="turbineadmin"/>
-  <TurbineRole RoleId="2" Name="turbineuser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index 84cbd6b..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="idbroker">
-
-
-  <table name="TURBINE_PERMISSION" idMethod="idbroker" baseClass="${package}.fulcrum.security.torque.turbine.TorqueAbstractTurbinePermission">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER" javaType="object"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="idbroker" baseClass="${package}.fulcrum.security.torque.turbine.TorqueAbstractTurbineRole">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER" javaType="object"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="idbroker" baseClass="${package}.fulcrum.security.torque.turbine.TorqueAbstractTurbineGroup">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER" javaType="object"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <!-- org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity -->
-  <table name="TURBINE_USER" idMethod="idbroker" baseClass="org.apache.fulcrum.security.torque.turbine.TorqueAbstractTurbineTurbineSecurityEntity"
-  interface="org.apache.fulcrum.security.model.turbine.entity.TurbineUser">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED_DATE" type="TIMESTAMP" javaName="ModifiedDate"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 023ef76..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,126 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-
-
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=${turbine_database_name}
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-#torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-#torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-#torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-torque.manager.useCache = true
-
-# Determines if IDBroker should prefetch IDs or not.  If set to false
-# this property has the effect of shutting off the housekeeping thread
-# that attempts to prefetch the id's.  It also sets the # of id's grabbed
-# per request to 1 regardless of the settings in the database.
-# Default: true
-torque.idbroker.prefetch = true
-
-# Controls the starting id of table entries when creating SQL for 
-# the id-table. If you have two projects that use the same id-table 
-# in the same database with different tables, make sure that they have 
-# different initialID settings and the ranges (initialID is incremented 
-# for every new table) don't overlap.
-torque.idbroker.initialId = 101 
-
-# The start value of the ID broker for supplying IDs to Torque. This value 
-# is incremented every time Torque requests ID keys from the broker. If you 
-# pre-load your table straight from SQL, make sure that you don't accidentially 
-# overlap with this setting, because Torque doesn't keep record of what IDs are 
-# already taken in the database. If you overlap, inserting new objects will fail 
-# because the ID assigned by Torque is already taken.
-torque.idBroker.initialIdValue = 100
-
-# For performance reasons, the ID Broker does not request a single ID at a time
-# but fetches a whole range and increments the current next ID Value in the ID
-# Table by this step. If you have to do lots of inserts straight in a row, increment
-# this value to get slightly better performance.
-torque.idbroker.initialIdStep = 500
-
-# IDBroker can grab its own connection from the pool to use when retrieving
-# more id's to minimize the amount of time ID_TABLE will be locked.
-# Some usage of IDBroker or assumptions made by connection pools or jdbc
-# drivers may disallow this optimization in which case the property
-# should be set to false.
-torque.idbroker.usenewconnection = true
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
-
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
deleted file mode 100644
index 4c6407e..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<configuration>
-   <header>
-    <!-- Meta data about the resulting combined configuration -->
-  </header>
-  <override><!-- only allowed configurations are user and turbine, realtive paths   -->
-    <properties config-name="user" fileName="WEB-INF/conf/usersettings.properties" config-optional="true" config-forceCreate="true"/> 
-    <!-- xml fileName="conf/test/TurbineResources.xml"/-->
-    <properties config-name="turbine" fileName="WEB-INF/conf/TurbineResources.properties" throwExceptionOnMissing="true"/>
-   </override>
-  <additional>
-    <!-- Configuration declarations that form a union configuration, always provide a unique config-name attribute  -->
-  </additional>
-</configuration>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index e24decf..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,652 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  P I P E L I N E
-#
-# -------------------------------------------------------------------
-pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explicitly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUserIntake
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-# tool.ui.css=skin.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm,macros/applicationMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been initialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager
-
-services.SecurityService.user.class=org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl
-
-
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = /WEB-INF/conf/containerConfiguration.xml
-#
-# Name and location to the configuration file for the component roles.
-#
-#services.AvalonComponentService.componentRoles =  /WEB-INF/conf/roleConfiguration.xml
-#
-#services.AvalonComponentService.componentConfiguration = /WEB-INF/conf/componentConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index 7502ca4..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-        <unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-    <localization>
-      <bundles>
-        <bundle>${package}.L10N</bundle>
-      </bundles>
-    </localization>
-    <!-- Disable if you experience startup problems with Java8 -->
-    <intake>
-      <serialDataPath>WEB-INF/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>WEB-INF/conf/${turbine_intake_file}</xmlPath>
-      </xmlPaths>
-    </intake>
-    <factory/>
-    <pool/>
-    <parser>
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-    <upload repository="/tmp" sizeMax="1048576" sizeThreshold="10240"/>
-        <!-- These components belong to the Fulcrum-Security services -->        
-    <securityService/>
-    <authenticator/>
-    <modelManager/>
-    <aclFactory/>
-    
-    <!--  
-       Fulcrum Components, e.g. json, XmlRpcServerComponent, cft. Fulcrum Component Configurations 
-     -->
-       
-     
-     <!--  
-     Pure Fulcrum Model
-    -->
-    <!--
-     <userManager> 
-       <className>org.apache.fulcrum.security.torque.om.TorqueTurbineUser</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineGroup</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineRole</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbinePermission</className>
-    </permissionManager>
-    -->
- 
-     <!-- 
-     Default classes implementing org.apache.fulcrum.security.model.turbine.entity interfaces 
-     -->
-    <!--userManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineGroupImpl</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineRoleImpl</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbinePermissionImpl</className>
-    </permissionManager -->
-    
-    <!-- 
-     Custom Turbine ORM Torque classes could not yet be used: 
-     - requires Torque 4.1 or if using Torque 4.0 reqires manually adding the interfaces in T-classes
-     - requires attribute baseClass in fulcrum-turbine-schema.xml table elements set to appropriate org.apache.fulcrum.security.model.turbine.entity interfaces
-     - requires attribute peerClass in fulcrum-turbine-schema.xml table elements set to org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer 
-     -->
-     
-     <userManager>
-     <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-    </userManager>
-    <groupManager>
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager>
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-     
-</componentConfig>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index 7c00de2..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<input-data xmlns="http://turbine.apache.org/schema/intake/4.0"
-    basePackage="${package}.">
-    <group name="example" key="example" mapToObject="om.Table1">
-        <field name="TestCol2" key="testCol2" type="String"/>
-    </group>
-    <group name="Login" key="login">
-    <field name="Username" key="u" type="String">
-      <!-- l10n keys -->
-      <rule name="required" value="true">username_required_msg</rule>
-      <rule name="minLength" value="4">username_min_length_msg</rule>
-      <!--rule name="mask" value=".+@.+\..+">username_mask_msg</rule-->
-    </field>
-    <field name="Password" key="p" type="String">
-      <rule name="required" value="true">password_msg</rule>
-    </field>
-</group>
-</input-data>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index f29d85a..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = ${applicationRoot}/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = ${applicationRoot}/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = ${applicationRoot}/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = ${applicationRoot}/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = ${applicationRoot}/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index a0886a4..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-	<!-- Disable if you experience startup problems with Java8 -->
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.upload.UploadService"
-        shorthand="upload"
-        default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-       
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-        
-         <!-- These components belong to the Fulcrum-Security services -->        
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-    <role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="${package}.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="${package}.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="${package}.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.memory.MemoryPermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-        
-    <!-- optionally five memory managers : remove later and .. -->
-   <!-- 
-    <role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.memory.turbine.MemoryTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.memory.MemoryGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.memory.MemoryRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.memory.MemoryPermissionManagerImpl"/>
-     -->
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.memory.turbine.MemoryTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-        
-    <!-- use torque managers for database mysql et al. -->
-    <!--   <role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/-->
-            
-     <!-- role
-        name="org.apache.fulcrum.json.JsonService"
-        shorthand="json"
-        default-class="org.apache.fulcrum.json.jackson.Jackson2MapperService"/-->
-
-    <!-- Add your services here -->
-        
-</role-list>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
deleted file mode 100644
index 1cb9053..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<org.apache.turbine.pipeline.TurbinePipeline>
-  <valves>
-    <org.apache.turbine.pipeline.DetermineActionValve/>
-    <org.apache.turbine.pipeline.DetermineTargetValve/>
-    <org.apache.turbine.pipeline.DefaultSessionTimeoutValve/>
-    <org.apache.turbine.pipeline.DefaultLoginValve/>
-    <org.apache.turbine.pipeline.DefaultSessionValidationValve/>
-    <org.apache.turbine.pipeline.DefaultACLCreationValve/>
-    <org.apache.turbine.pipeline.ExecutePageValve/>
-    <org.apache.turbine.pipeline.CleanUpValve/>
-    <org.apache.turbine.pipeline.DetermineRedirectRequestedValve/>
-  </valves>
-</org.apache.turbine.pipeline.TurbinePipeline>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
deleted file mode 100644
index e69de29..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
+++ /dev/null
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
deleted file mode 100644
index 64f7b2c..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Configure class="org.eclipse.jetty.webapp.WebAppContext">
-  <New id="Turbine" class="org.eclipse.jetty.plus.jndi.Resource">
-    <Arg></Arg> <!-- reference to WebAppContext requires jetty 9.x only  -->
-    <Arg>${turbine_database_jndipath}</Arg>
-    <Arg>
-        <New class="org.apache.commons.dbcp.BasicDataSource">
-           <Set name="driverClassName">${turbine_database_driver}</Set>
-            <Set name="url">${turbine_database_url}${turbine_database_name}</Set>
-            <Set name="username">${turbine_database_user}</Set>
-            <Set name="password">${turbine_database_password}</Set>
-            <Set name="validationQuery">SELECT 1</Set>
-        </New>
-    </Arg>
-  </New>
-</Configure>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 7241e9d..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?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.
--->
-<web-app id="WebApp_ID" version="2.5" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_2_5.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-  
-  
- <!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- JNDI Ressource                                                           -->
-<!-- ======================================================================== -->
-  
-   <resource-ref>
-    <res-ref-name>${turbine_database_jndipath}</res-ref-name>
-    <res-type>javax.sql.DataSource</res-type>
-    <res-auth>Container</res-auth>
-  </resource-ref>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
deleted file mode 100644
index 94c6554..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
deleted file mode 100644
index c9f94d0..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
+++ /dev/null
@@ -1,57 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-$page.addStyleSheet("http://www.w3schools.com/lib/w3.css")
-$page.addStyleSheet("http://www.w3schools.com/lib/w3-theme-blue-grey.css")
-$page.setTitle("Sample Apache Turbine Application")
-
-
-<html>
-
-#TurbineHtmlHead()
-
-<body #TurbineHtmlBodyAttributes() class="w3-theme-l4">
-
-	<div class="w3-wrapper">
-
-		<!-- Header -->
-		<header class="w3-container w3-center w3-padding-32 w3-theme">
-        	<img class="w3-right" src="$ui.image('turbine-project.png')" /> 
-	        #if ( $data.getUser().hasLoggedIn() ) 
-		        #set ( $u = $data.getUser() )
-		        <div class="w3-right">
-					<h5>Hello $!u.FirstName</h5>
-		        </div>
-			#end
-		</header>
-
-        <!-- Default Menu -->
-        $navigation.setTemplate("/Menu.vm")
-
-        <!-- Content -->
-        <div class="w3-left w3-padding" id="content">
-                $screen_placeholder
-        </div>
-
-        <!-- Footer -->
-        <footer class="w3-bottom">
-			<p>Powered by <img src="$ui.image('powered-by-logo.gif')"/></p>
-        </footer>
-	</div>
-
-</body>
-</html>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm
deleted file mode 100644
index 9acccea..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm
+++ /dev/null
@@ -1,151 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## $Id: TurbineMacros.vm 222027 2016-10-20 16:11:37Z painter $
-##
-## Put your Application macros in this file.
-##
-
-#* ------------------------------------------------------------------
-#    Global Macros
-*# ------------------------------------------------------------------
-
-#* ------------------------------------------------------------------
-#    Drop down select option for yes/no questions
-*# ------------------------------------------------------------------
-#macro (selectYesNo $label $selection)
-	<select name="$label">
-		#if ( $selection == "true" )
-			<option value="1" selected>Yes</option>
-			<option value="0">No</option>
-		#else
-			<option value="1">Yes</option>
-			<option value="0" selected>No</option>
-		#end
-	</select>
-#end
-
-
-#* ------------------------------------------------------------------
-#    Standard action form controls - Using w3.css styling
-*# ------------------------------------------------------------------
-
-#macro (insert)
-    <input type="submit" name="eventSubmit_doInsert" value="Insert"/>
-#end
-
-#macro (save)
-    <input type="submit" name="eventSubmit_doUpdate" value="Update"/>
-#end
-
-#macro (remove)
-    <input type="submit" name="eventSubmit_doDelete" value="Remove"/>
-#end
-
-
-#macro (warning $msg)
-<div class="w3-panel w3-orange w3-card-8">
-	$msg
-</div>
-#end
-
-#macro (error $msg)
-<div class="w3-panel w3-red w3-card-8">
-	$msg
-</div>
-#end
-
-#macro(info $msg)
-<div class="w3-panel w3-blue w3-card-8">
-	$msg
-</div>
-#end
-
-
-#* ------------------------------------------------------------------
-#
-# Macros that are used for displaying input forms. Using w3.css styling
-#
-*# ------------------------------------------------------------------
-
-#macro (formLabel $label)
-	<label>$!label</label>
-#end
-
-#macro (fileUpload $label $name)
-	<label>$!label</label>
-	<input class="w3-input" type="file" name="$!name">
-#end
-
-#macro (formCheckBox $label $name $checked)
-   #formLabel( $label )
-   #checkBox( $name $checked )
-#end
-
-#macro (checkBox $name $checked)
-	<input id="$!name" class="w3-check" type="checkbox" checked="$!checked">
-#end
-
-#macro (formLabelRequired $label)
-	<label class="w3-label w3-validate">$!label</label>
-#end
-
-#macro (formTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (smallFormTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textareaField $label $name $value)
-	<p>
-		<label class="w3-label">$label</label>
-		<textarea class="w3-input" style="width:90%" rows="6" name="$name" required>$!value</textarea>
-	</p>
-	
-#end
-
-#macro (formPasswordCell $label $name $value)
-	<p>
-	#formLabel( $label )
-	<input class="w3-input" type="password" name="$!name" value="$!value">
-	</p>
-#end
-
-#macro (formCellRequired $label $name $value)
-	<p>
-	  #formLabelRequired($label)
-  	  #formTextField($name $value)
-  	</p>
-#end
-
-#macro (formCell $label $name $value)
-  #formLabel($label)
-  #formTextField($name $value)
-#end
-
-#macro (smallFormCell $label $name $value)
-  #formLabel($label)
-  #smallFormTextField($name $value)
-#end
-
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm
deleted file mode 100644
index 4742b1f..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm
+++ /dev/null
@@ -1,45 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-#if ( $data.getUser().hasLoggedIn() )
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-dropdown-hover">
-            <a href="#">Administration <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-              ## every user can change their password
-          <a href="$link.setPage("Password.vm")">Update Password <i class="fa fa-unlock"></i></a>
-          
-          #if ( $data.getACL().hasRole("turbineadmin") )
-              <a href="$link.setPage("user,FluxUserList.vm")">User List <div class="w3-right"><i class="fa fa-users"></i></div></a>
-              <a href="$link.setPage("role,FluxRoleList.vm")">User Roles <div class="w3-right"><i class="fa fa-user-plus"></i></div></a>
-              <a href="$link.setPage("user,FluxUserForm.vm")?mode=insert">Add User <div class="w3-right"><i class="fa fa-user"></i></div></a>
-              #end
-            </div>
-          </li>
-
-          <li class="w3-right"><a href="$link.setAction("LogoutUser")">Logout</a></li>
-          
-</nav>
-#else
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-right"><a href="$link.setPage("Login.vm")">Login</a></li>
-</nav>
-
-#end
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm
deleted file mode 100644
index 897e5f1..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm
+++ /dev/null
@@ -1,7 +0,0 @@
-E R R O R 
-
-$message
-
-$error
-
-$exception
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
deleted file mode 100644
index f1eb477..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
+++ /dev/null
@@ -1,39 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-
-
-#if ( $data.getMessage() )
-        #info( $data.getMessage() )
-#end
-
-     <div align="center"><h1>$success</h1></div>
-
-     <p>
-             You're now successfully running a <a href="http://turbine.apache.org/">Turbine</a> based
-             application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-             your web container.
-     </p>
-
-     <p>
-             You can (and should!) change or remove this page at any time. It is
-             intended to give you immediate feedback if you just deployed an newly
-             setup Turbine application.
-     </p>
-
-     <a href="$link.setPage("TestSecure.vm")">Test a secure access page</a>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm
deleted file mode 100644
index 71fc50a..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm
+++ /dev/null
@@ -1,101 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## If you want to use intake to process the data, uncomment below
-##
-
-#set ( $loginGroup = $intake.Login.Default )
-  
-#set ( $valid = true )  
-#if (!$loginGroup.Username.isValid() ) 
-    ## this should be improved ...
-    #if ("$loginGroup.Username.Message" == "username_min_length_msg") 
-       #info( $l10n.format("$loginGroup.Username.Message","4") )
-    #else
-      #info( $l10n.get("$loginGroup.Username.Message") )
-    #end
-    #set ( $valid = false )
- #end
- 
- #if ( !$loginGroup.Password.isValid() ) 
-    #info( $l10n.get("$loginGroup.Password.Message") )
-    #set ( $valid = false )
- #end
-
-<p/>
-  #if (! $data.user.hasLoggedIn()) 
-  
-  <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-
-		<form class="w3-container w3-light-grey" name="login" method="post" enctype="application/x-www-form-urlencoded" action="$link.setAction("LoginUserIntake").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-        
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="$loginGroup.Username.Key" value="$!loginGroup.Username" tabindex="1" autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="$loginGroup.Password.Key" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">#if (! $valid ) Retry #else Sign in #end</button>
-                
-                <p/>
-    ##$intake.declareGroups()
-        
-      </div>
-    </form>
-    
-    <!--  default login without Intake  -->
-    <!-- 
-    		<form class="w3-container w3-light-grey" name="login" method="post" action="$link.setAction("LoginUser").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-       
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="username" value="" tabindex="1"  autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="password" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">Sign in</button>
-                
-                <p/>
-
-      </div>
-    </form>
-    
-    
-    
-    -->
-
-
-    <div class="w3-container w3-border-top w3-padding-16 w3-light-grey">
-          <span class="w3-right w3-padding w3-hide-small">Forgot <a href="#">password?</a></span>
-    </div>
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end 
-
-    </div>
-  #end             
-
-## $intake.declareGroups()
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm
deleted file mode 100644
index c5c2b83..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-    <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-  
-    <form class="w3-container w3-light-grey" name="password_change" method="post" action="$link.setAction("ChangePasswordAction").setPage("Index.vm")">
-          <div class="w3-section">
-        
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Old Password" type="password" name="oldpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="New Password" type="password" name="newpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple">Change Password</button>
-                
-                <button type="button" name="cancel" id="cancel" value="cancel" class="w3-ripple" onCLick="doCancel()">Cancel</button>
-                
-                <script>
-                function doCancel() { 
-                	location.href="$link.setPage('TestSecure.vm')"; 
-                	return false;
-                }
-                </script>
-
-                <p/>
-
-        
-      </div>
-    </form>
-
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end 
-
-    </div>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm b/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm
deleted file mode 100644
index e15f318..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm
+++ /dev/null
@@ -1,5 +0,0 @@
-#if ( $data.getMessage() )
-	#info( $data.getMessage() )
-#end
-
-<h1> Secured Access Page </h1>
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/test/resources/projects/first/archetype.properties b/tags/turbine-webapp-4.0-1.0.1/src/test/resources/projects/first/archetype.properties
deleted file mode 100644
index 0a96356..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/test/resources/projects/first/archetype.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-groupId=org.apache.turbine.test
-artifactId=integrationtest
-version=1.0.0-SNAPSHOT
-package=org.apache.turbine.test.integrationtest
-turbine_app_name=My Turbine Web Application
-turbine_intake_file=intake.xml
-turbine_database_name=turbine
-turbine_database_adapter=auto
-turbine_database_jndipath=jdbc/turbine
-turbine_database_driver=com.mysql.jdbc.Driver
-turbine_database_url=jdbc:mysql://localhost:3306/
-turbine_database_user=db_user
-turbine_database_password=db_password
diff --git a/tags/turbine-webapp-4.0-1.0.1/src/test/resources/projects/first/goal.txt b/tags/turbine-webapp-4.0-1.0.1/src/test/resources/projects/first/goal.txt
deleted file mode 100644
index 597acc7..0000000
--- a/tags/turbine-webapp-4.0-1.0.1/src/test/resources/projects/first/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-package
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/LICENSE b/tags/turbine-webapp-4.0-1.0.2/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/tags/turbine-webapp-4.0-1.0.2/NOTICE b/tags/turbine-webapp-4.0-1.0.2/NOTICE
deleted file mode 100644
index a43064b..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Turbine Webapp Component
-Copyright 2006-2016 The Apache Software Foundation.
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/tags/turbine-webapp-4.0-1.0.2/README b/tags/turbine-webapp-4.0-1.0.2/README
deleted file mode 100644
index d7e9268..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/README
+++ /dev/null
@@ -1,5 +0,0 @@
-If you get that goal integration-test of maven-archetype-plugin fails with 
-
-'Cannot run additions goals." cft. https://issues.apache.org/jira/browse/ARCHETYPE-488.
-
-Fastest workaround (Dez 2016) ist to copy  mvn.cmd to mvn.bat.
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/pom.xml b/tags/turbine-webapp-4.0-1.0.2/pom.xml
deleted file mode 100644
index 211ff9d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-    <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>18</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-4.0</artifactId>
-  <version>1.0.2</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 4.0 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 4.0</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.2</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.2</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.2</url>
-  </scm>
-  
-<build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>3.0.1</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>3.0.1</version>
-           <!-- skip tests in generated archetype's pom, here the integration-test would be skipped -->
-          <!--configuration>
-            <skip>true</skip>
-          </configuration-->   
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/changes/changes.xml b/tags/turbine-webapp-4.0-1.0.2/src/changes/changes.xml
deleted file mode 100644
index daeae8a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/changes/changes.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.2" date="in Subversion">
-      <action type="update" dev="gk" due-to="Jeffery Painter">
-         Added security test to show Turbine Fulcrum Torque consistency
-      </action>
-      <action type="fix" dev="gk" due-to="Jeffery Painter">
-         Fix OM classes and schema, SQL autoincrement by default used
-      </action>
-      <action type="update" dev="gk">
-        war plugin 3.2, mysql connector 5.1.44 Update
-      </action>
-      <action type="update" dev="gk">
-        Integrate JSON, Localization, Model Examples
-      </action>
-      <action type="update" dev="gk">
-        Using Torque Services, Code Cleanup, Removing Classes
-      </action>
-      <action type="update" dev="gk">
-        Turbine 4.0, JUNit 4.12
-      </action>
-    </release> 
-   <release version="1.0.1" date="in Subversion">
-       <action dev="gk" type="add">
-       Password change action, Check anonymous login
-      </action>
-      <action dev="gk" type="update">
-       JNDI Jetty Update
-      </action>
-      <action dev="tv" type="add">
-       Add testing in place with "integration-test"
-      </action>
-      <action dev="tv" type="update">
-       Turbine annotations, use auto detect Torque adapter
-      </action>
-       <action dev="gk" type="update">
-       Fulcrum Torque Security added manager, om classes
-      </action>
-      <action dev="painter" type="add">
-       Added readme, docs, helper sql..
-      </action>
-       <action dev="painter" type="update">
-       MySQL is now default
-      </action>
-      <action dev="gk" type="update">
-       Update schema to torque / intake 4.0, dependencies, configurations
-       Update to MemoryGroupManagerImpl, Fulcrum     
-      </action>
-      <action dev="gk" type="add">
-        Jetty support
-      </action>
-      <action dev="tv" type="fix">
-        TRB-95
-      </action>
-      <action dev="gk" type="update ">
-        Update to Turbine 4-M2
-      </action>
-    </release>
-    <release version="1.0.0" date="2012-11-06">
-      <action dev="tv" type="fix">
-        Fixed missing dependencies and wrong class names as reported on the mailing list
-      </action>
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/META-INF/maven/archetype-metadata.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 2ca3c72..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-4.0-velocity">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>auto</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>jdbc/turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_driver">
-      <defaultValue>com.mysql.jdbc.Driver</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_url">
-      <defaultValue>jdbc:mysql://localhost:3306/</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_user">
-      <defaultValue>db_user</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_password">
-      <defaultValue>db_password</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-  <fileSets>
-    <fileSet filtered="true" packaged="true">
-        <directory>src/test/java</directory>
-        <includes>
-          <include>**/*.java</include>
-        </includes>
-    </fileSet>
-   <fileSet filtered="true" packaged="false">
-        <directory>src/test/resources</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false">
-        <directory>src/test/logs</directory>
-        <includes>
-          <include>**/*.log</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false">
-        <directory>src/test/conf</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>docs</directory>
-      <includes>
-        <include>**/*.txt</include>
-        <include>**/*.sql</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/README.txt b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/README.txt
deleted file mode 100644
index f53acf0..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/README.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-#*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*#
-
-Notice
-
-About this archetype 
-
-Turbine Version: Turbine 4.0. 
-
-# Quick Guide to using the new Turbine 4.0 maven archetype 
-for skeleton application generation
-
-## Local database Setup
-
-First, you should have a local database installed and configured prior to 
-beginning the application setup below.
-
-As we are using MySQL bey default you need to create the database in MySQL, e.g. with
-
-mysql -u <user> -p
-mysql> create database helloWorld;
-mysql> \q
-
-or other tools. The database should have been started and the database user granted enough rights.
-
-## Maven archetype 
-
-Next, you can invoke the Maven archetype for turbine-webapp-4.0 from 
-the command line as shown below - please update values starting 
-with 'groupId' as appropriate.
-
-mvn archetype:generate \
-  -DarchetypeGroupId=org.apache.turbine \
-  -DarchetypeArtifactId=turbine-webapp-4.0 \
-  -DarchetypeVersion=1.0.1-SNAPSHOT \
-  -DgroupId=com.mycompany.webapp \
-  -DartifactId=myhelloworld \
-  -Dversion=1.0 \
-  -Dturbine_app_name=HelloWorld \
-  -Dturbine_database_adapter=mysql \
-  -Dturbine_database_user=db_username \
-  -Dturbine_database_password=db_password \
-  -Dturbine_database_name=helloworld \
-  -Dturbine_database_url=jdbc:mysql://localhost:3306/ \
-  -Dgoals=generate-sources,pre-integration-test
-
-### Notes
-
-When invoking archetype:generate like above, you already have set Turbine goals generate-sources,pre-integration-test 
-and you can then skip them later.
-
-Be aware, when you set both mvn commands goals (which are maven phases actually), i.e  with
-
--Dgoals=generate-sources, pre-integration-test 
-
-you have to create the database (see above) before finishing the (interactive) archetype commands. 
-Otherwise you could catch up doing this later and after that is done calling the phases afterwards as mentioned below.
-
-#### turbine_database_url
-
-Note that the database URL (turbine_database_url) 
-will be appended with your database name
-in the final pom.xml, so you do not need to specify that in 
-the configuration.
-
-## Project Start and Usage
-
-Next, change into the newly generated project folder, in our case
-
-cd myhelloworld
-
-Skip next two steps, if the build was successfull
-mvn generate-sources  ## This will generate the OM layer and SQL 
-          ## code for creating the corresponding
-          ## database tables
-
-mvn integration-test      ## This executes the SQL code to create 
-          ## the application schema defined 
-          ## in src/main/torque-schema
-
-You should now check the database tables and if some data is missing
-insert the sample data file in sample-mysql-data (Torque 4.0 has disabled the datasql task).
-
-mvn clean install 
-
-If you get an error like "The driver has not received any packets" probably the database is not up and running or the port may be another one.
-
-Last step on the command line is run the server by invoking 
-mvn jetty:run         ## Now you can launch your new Turbine application
-
-### Logs 
-
-Find the Logs in src/main/webapp/logs and
-
-### Application
-
-Open a web browser to http://localhost:8081/app
-
-Login should work with user admin/password or user/password.
-
-## Background
-
-By default Intake is used as an validation mechanism for authentication. You can change to the default login by setting
-
-action.login=LoginUser in TurbineResources.properties and changing Login.vm appropriately (commented form)
-
-## Tests
-
-Prerequisites
-- at least Turbine version 4.0.1 
-- database was build successfully e.g. with archetype.
-- running mysql
-
-If running from integration test, check/update
-- in pom.xml turbine.core property,
-- target/test-classes/projects/first/project/integrationtest/src/test/conf/torque/TorqueTest.properties or
-  META-INF/maven/archetype-metadata.xml
-
-The security test is by default skipped as it requires a running mysql. It tests many of the Fulcrum Torque Turbine security aspects, 
-activate it by calling
-
-mvn test -DskipTests=false
-
-CAVEAT: If initialization fails, double check your database credentials! If invalid the error might be somewhat hidden behind a
- Torque exception!
-
-## Eclipse
-
-To enable application development in Eclipse, run the following command 
-and then import the project into Eclipse.
-
-mvn eclipse:eclipse
-
-Once imported, update your project to be managed by Maven 
--> Right click on the project name
--> Configure 
--> Convert to Maven project
-
-To test the application can be deployed by Eclipse, select the run
-configuration "Run On Server" if you have a container configured with
-your eclipse environment.
-
-### Eclipse Debugging
-
-You even could debug the app by setting the environment variable to something like this
-
-set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
-
-before running the jetty server.
-
-## Starting developing
-
-Be aware of settings and some smaller restrictions, which mostly will be fixed in the upcoming releases.
-
-- Keep groups/roles lower case (which should be fixed in Fulcrum Security 1.1.1/Turbine 4.0)
-- abstract classes and managers are included (because of some minor bugs in Fulcrum Security 1.1.0, same as above)
-- LogoutUser action is included (fix in Turbine 4.0, getUserFromSession)
-- LoginUser action is included (to check for anonymous user, may be fixed in future release)
-- OM (Torque Object Mapper) stub classes are included (until configurable in schema with Torque version 2.1)
-- TurbineConfiguration returns a Commons configuration object, even if field is not assignable (will be fixed in Turbine 4.0, you can then assign e.g. to String instead, cft. SecureScreen)
-- Database connection is done initially by default with JNDI. If you want to change it, check Torque.properties and jetty-env.xml.  
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
deleted file mode 100644
index f605246..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-
-##
-## application-data.sql
-##
-## Torque will not autogenerate these files anymore - please run
-## this SQL code maually to get your application up and running
-##
-
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (1, 'Donald', 'Knuth');
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (2, 'Mickey', 'Mouse' );
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (3, 'Bill', 'Bryson' );
-
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 1, 1, 'The Art of Computer Programming', 'Computer Science');
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 2, 2, 'Disney: Behind the Scenes', 'Fiction' );
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 3, 3, 'A Walk in the Woods', 'Fiction');
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
deleted file mode 100644
index 9477b43..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
+++ /dev/null
@@ -1,51 +0,0 @@
-##
-## turbine-security-data.sql
-##
-## Torque will not autogenerate these files anymore - but sql-maven-plugin!
-## If not, please run
-## this SQL code manually to get your application up and running
-##
-SET FOREIGN_KEY_CHECKS=0;
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (1,'admin','password','','Admin');
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (2,'user','password','','User');
-    
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (3,'anon','nopw','','Anon');
-
-INSERT INTO `turbine_permission` (`PERMISSION_ID`, `PERMISSION_NAME`) VALUES
-(2, 'Turbine'),
-(1, 'TurbineAdmin');
-
-INSERT INTO `turbine_role` (`ROLE_ID`, `ROLE_NAME`) VALUES
-(1, 'turbineadmin'),
-(2, 'turbineuser');
-
-INSERT INTO `turbine_group` (`GROUP_ID`, `GROUP_NAME`) VALUES
-(1, 'global'),
-(2, 'Turbine');
-
-INSERT INTO `turbine_role_permission` (`ROLE_ID`, `PERMISSION_ID`) VALUES
-(1, 1),
-(2, 2);
-
-INSERT INTO `turbine_user_group_role` (`USER_ID`, `GROUP_ID`, `ROLE_ID`) VALUES
-(1, 1, 1),
-(1, 2, 1),
-(2, 2, 2),
-(2, 1, 2);
-
--- 
-ALTER TABLE TURBINE_USER MODIFY COLUMN USER_ID INT auto_increment;
-ALTER TABLE turbine_permission MODIFY COLUMN PERMISSION_ID INT auto_increment;
-ALTER TABLE turbine_role MODIFY COLUMN ROLE_ID INT auto_increment;
-ALTER TABLE turbine_group MODIFY COLUMN GROUP_ID INT auto_increment;
-
-
-##-- use ID_TABLE  witk idMethod="idbroker" and set appropriate start_id and end_id 
-##-- INSERT INTO ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1,'TURBINE_USER',start_id, end_id);
-    
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/pom.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 60eea5a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,423 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var $label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <!-- (target) resource and filtering is not used  at all ? 
-            at least removed setting absolute path e.g. with #var("project.build.directory"), 
-            which does thrown an exception with mvn eclipse:eclipse - path is then incorrectly relativized.
-                --> 
-            <resource> 
-                <targetPath>../torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <testSourceDirectory>src/test/java</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test/resources</directory>
-                <includes>
-                    <include>*.xml</include>
-                    <include>*.properties</include>
-                </includes>
-            </testResource>
-        </testResources>
-        <plugins>
-            <!-- test will not fail in turbien 4.0.1 -->
-            <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-surefire-plugin</artifactId>
-              <version>2.20.1</version>
-              <configuration>
-                <skipTests>#var("skipTests")</skipTests>
-              </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.5.1</version>
-                <configuration>
-                    <source>#var("maven.compile.source")</source>
-                    <target>#var("maven.compile.target")</target>
-                    <encoding>#var("project.build.sourceEncoding")</encoding>
-                </configuration>
-            </plugin>
-             <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>4.0</version>
-                <configuration>
-                    <schemaDir>#var("project.basedir")/src/main/torque-schema</schemaDir>
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-                  <execution>
-                    <id>torque-om</id>
-                    <phase>generate-sources</phase>
-                    <goals>
-                      <goal>generate</goal>
-                    </goals>
-                    <configuration>
-                      <packaging>classpath</packaging>
-                      <configPackage>org.apache.torque.templates.om</configPackage>
-                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-                      <loglevel>error</loglevel>
-                      <options>
-                        <torque.database>${turbine_database_adapter}</torque.database>
-                        <torque.om.package>${package}.om</torque.om.package>
-                        <torque.om.addGetByNameMethods>false</torque.om.addGetByNameMethods>
-                        <torque.om.save.saveException>TorqueException</torque.om.save.saveException>
-                        <torque.om.useIsForBooleanGetters>true</torque.om.useIsForBooleanGetters>
-                        <torque.om.useManagers>false</torque.om.useManagers>
-                        <torque.om.addTimeStamp>true</torque.om.addTimeStamp>
-                        <torque.om.objectIsCaching>true</torque.om.objectIsCaching>
-                        <torque.om.save.addSaveMethods>true</torque.om.save.addSaveMethods>
-                        <torque.om.addGetByNameMethods>true</torque.om.addGetByNameMethods>
-                        <torque.om.complexObjectModel>true</torque.om.complexObjectModel>
-                      </options>
-                      <!-- keeping defaultOutputDir in default ${project.build.directory}/generated-sources will havee the base classes there -->
-                      <!-- we want the classes, which may be custumoized in the source directory. Ignore the warning about generated-java -->
-                      <outputDirMap>
-                        <modifiable>#var("project.build.sourceDirectory")</modifiable>
-                      </outputDirMap>
-                    </configuration>
-                  </execution>
-                  <execution>
-                    <id>torque-sql-mysql</id><!-- ${turbine_database_adapter} -->
-                    <phase>generate-sources</phase>
-                    <goals>
-                      <goal>generate</goal>
-                    </goals>
-                    <configuration>
-                      <packaging>classpath</packaging>
-                      <configPackage>org.apache.torque.templates.sql</configPackage>
-                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-                      <defaultOutputDir>#var("project.build.directory")/generated-sql/torque/mysql</defaultOutputDir>
-                      <defaultOutputDirUsage>none</defaultOutputDirUsage>
-                      <loglevel>error</loglevel>
-                      <options>
-                        <torque.database>mysql</torque.database>
-                      </options>
-                    </configuration>
-                  </execution>
-              </executions>
-              <dependencies>
-                 <dependency>
-                    <groupId>org.apache.torque</groupId>
-                    <artifactId>torque-templates</artifactId>
-                    <version>4.0</version>
-                  </dependency>
-              </dependencies>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-war-plugin</artifactId>
-            <version>3.2.0</version>
-            <configuration>
-                <archive>
-                    <manifestEntries>
-                        <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                        <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                    </manifestEntries>
-                </archive>
-                <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-            </configuration>
-          </plugin>
-        <!-- Required to execute torque database build -->
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>sql-maven-plugin</artifactId>
-          <version>1.5</version>
-          <configuration>
-            <!-- Please update with your database configuration -->
-            <driver>${turbine_database_driver}</driver>
-            <url>${turbine_database_url}${turbine_database_name}</url>
-            <username>${turbine_database_user}</username>
-            <password>${turbine_database_password}</password>
-            <onError>continue</onError>
-            <autocommit>true</autocommit>
-            <orderFile>descending</orderFile>
-          </configuration>
-          <!-- update with your database driver dependency -->
-          <!-- this is mysql specific -->
-          <dependencies>
-            <dependency>
-              <artifactId>mysql-connector-java</artifactId>
-              <groupId>mysql</groupId>
-              <version>5.1.40</version>
-            </dependency>
-          </dependencies>
-          <!-- this is mysql specific -->
-          <executions>
-            <execution>
-                <id>create-db</id>
-                <phase>pre-integration-test</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <orderFile>ascending</orderFile>
-                  <fileset>
-                    <basedir>#var("project.build.directory")/generated-sql/torque/mysql</basedir>
-                    <!-- basedir>${basedir}/target/generated-sql</basedir -->
-                    <includes>
-                      <include>*.sql</include>
-                    </includes>
-                  </fileset>
-              </configuration>
-            </execution>
-            <execution>
-              <id>create-data</id>
-              <phase>pre-integration-test</phase>
-              <goals>
-                <goal>execute</goal>
-              </goals>
-              <configuration>
-                <orderFile>ascending</orderFile>
-                <srcFiles>
-                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_application-data.sql</srcFile>
-                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_turbine-security-data.sql</srcFile>
-                </srcFiles>              
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <!-- jetty:run checks deployed war http://localhost:8081/app/ 
-           Using jetty 8 as supporting java 6. Other specs cft. http://www.eclipse.org/jetty/documentation/9.3.0.v20150612/what-jetty-version.html  -->
-        <plugin>
-           <groupId>org.mortbay.jetty</groupId>
-           <artifactId>jetty-maven-plugin</artifactId>
-           <version>8.1.16.v20140903</version>
-          <configuration>
-            <scanIntervalSeconds>10</scanIntervalSeconds>
-            <dumpOnStart>true</dumpOnStart>
-            <reload>manual</reload>
-            <connectors>
-            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
-              <port>8081</port>
-            </connector>
-            </connectors>
-            <!--webApp>
-              <contextPath>/app</contextPath>
-            </webApp-->
-          </configuration>
-        </plugin>
-      </plugins>
-    </build>
-
-    <dependencies>
-    
-    <!-- update with the database driver of your choice -->
-    <dependency>
-      <artifactId>mysql-connector-java</artifactId>
-      <groupId>mysql</groupId>
-      <version>5.1.44</version>
-    </dependency>    
-      <dependency>
-          <groupId>javax.activation</groupId>
-          <artifactId>activation</artifactId>
-          <version>1.1.1</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-          <version>1.4.5</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>javax.servlet</groupId>
-          <artifactId>servlet-api</artifactId>
-          <version>2.5</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.turbine</groupId>
-          <artifactId>turbine</artifactId>
-          <version>#var("turbine.core")</version>
-      </dependency>
-      <!-- slf4j still optional in 4.0 -->
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-       <dependency>     <!-- delegate slf4j to log4j -->
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
-        <version>${slf4j.version}</version>
-       </dependency>
-       <dependency>     <!-- redirect JCL to slf4j -->
-        <groupId>org.slf4j</groupId>
-        <artifactId>jcl-over-slf4j</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <!-- yaafi is optional. NOTICE: 1.0.7 has group org.apache.turbine not org.apache.fulcrum  -->
-      <dependency>
-        <groupId>org.apache.turbine</groupId>
-        <artifactId>fulcrum-yaafi</artifactId>
-        <version>1.0.7</version>
-      </dependency>
-      <!-- if using intake -->
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-intake</artifactId>
-        <version>1.2.2</version>
-       </dependency>
-       <!-- include some optional dependencies required in example componentConfiguration.xml -->
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-cache</artifactId>
-        <version>1.1.0</version>
-      </dependency>
-       <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-upload</artifactId>
-        <version>1.0.5</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-memory</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-       <dependency>             
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-torque</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-api</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-json-jackson2</artifactId>
-        <version>#var("fulcrum.json")</version>
-      </dependency>
-      <dependency>
-        <groupId>com.fasterxml.jackson.datatype</groupId>
-        <artifactId>jackson-datatype-json-org</artifactId>
-        <!-- version>$dollar{jackson.version}</version-->
-        <!--  2.7.x has Java 7 baseline, but not compiled with Java 6 support (version 51 error:), cft. https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.7 Changes: compatibility: ..  should still be possible to use Jackson 2.7 on Java 6, but not compile, build. With Jackson 2.8, Java 7 languages features will be allowed -->
-        <version>2.6.6</version>
-      </dependency>
-      <!-- if activating useJsonPath include jayway dependency  -->
-      <!-- dependency>
-            <groupId>com.jayway.jsonpath</groupId>
-            <artifactId>json-path</artifactId>
-            <version>2.3.0</version>
-            <exclusions>
-              <exclusion>
-                <groupId>net.minidev</groupId>
-                <artifactId>json-smart</artifactId>
-              </exclusion>
-            </exclusions>
-        </dependency-->
-        
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-testcontainer</artifactId>
-          <version>1.0.7</version>
-          <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-        <fulcrum.json>1.1.1</fulcrum.json>
-        <fulcrum.security>1.1.1</fulcrum.security>
-        <turbine.core>4.0</turbine.core>
-        <slf4j.version>1.7.25</slf4j.version>
-        <skipTests>true</skipTests>
-    </properties>
-    
-    
-    <profiles>
-        <profile>
-            <id>jetty</id>
-            <build>
-                <defaultGoal>jetty:run</defaultGoal>
-                <plugins>
-                    <plugin>
-                        <groupId>org.mortbay.jetty</groupId>
-                        <artifactId>maven-jetty-plugin</artifactId>
-                        <configuration>
-                            <connectors>
-                                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-                                    <port>15000</port>
-                                    <maxIdleTime>60000</maxIdleTime>
-                                </connector>
-                            </connectors>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-       <profile>
-            <id>tomcat</id>
-            <build>
-                <defaultGoal>tomcat:run</defaultGoal>
-                <finalName>#var("project.artifactId")</finalName>
-                <plugins>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>tomcat-maven-plugin</artifactId>
-                        <configuration>
-                            <port>15000</port>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-    
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N.properties
deleted file mode 100644
index f9f58dd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-l10nkey=Default value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
-no_permission=You do not have permission, login required.
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
deleted file mode 100644
index 1921853..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
-#
-# 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.
-
-l10nkey = German value
-
-password_msg = Bitte ein Passwort eingeben
-
-username_mask_msg = Geben Sie als Benutzername eine E-Mail-Adresse ein
-
-username_min_length_msg = Es m\u00FCssen {0} Zeichen eingegeben werden
-
-username_required_msg = Bitte einen Benutzernamen eingeben
-
-no_permission=Unautorisierte Aktion erfordert Login.
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 44120d1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-l10nkey=US-English value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
deleted file mode 100644
index ca7255b..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.security.util.PasswordMismatchException;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Change Password action.
- *
- */
-public class ChangePasswordAction extends SecureAction 
-
-{
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    public void doPerform(PipelineData data)
-            throws Exception 
-            {
-
-    User user = getRunData(data).getUser();
-    
-    RunData rundata = getRunData(data);
-    String oldPassword = rundata.getParameters().getString("oldpassword", "");
-    String newPassword = rundata.getParameters().getString("newpassword", "");
-    
-    try {
-        security.changePassword(user, oldPassword, newPassword); 
-        rundata.setMessage("Password changed!");
-    }
-    catch (PasswordMismatchException e) 
-    {
-      rundata.setMessage(e.getMessage());
-      rundata.setScreenTemplate("Password.vm");
-    }
-    
-    
-  }
-    
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  @Override
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-
-    context.put("success", "Password changed!!");
-  }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
deleted file mode 100644
index 3018954..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LoginUser.java 1725011 2016-01-16 17:38:47Z tv $
- */
-public class LoginUser
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUser.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        String username = data.getParameters().getString(LoginUser.CGI_USERNAME, "");
-
-        if (StringUtils.isEmpty(username))
-        {
-            return;
-        }
-
-    	if (username.equals(security.getAnonymousUser().getName()))
-        {
-            data.setMessage("Anonymous user cannot login");
-            reset(data);
-            return;
-        }
-    	
-       super.doPerform(pipelineData);
-
-    }
-
-
-
-	private void reset(RunData data) throws UnknownEntityException {
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-
-		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-		{
-		    // We're running in a templating solution
-		    data.setScreenTemplate(
-		    		conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-		}
-		else
-		{
-		    data.setScreen(
-		    		conf.getString(TurbineConstants.SCREEN_LOGIN));
-		}
-	}
-
-}
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
deleted file mode 100644
index 4dca1f0..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.pool.PoolService;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.intake.model.Group;
-import org.apache.fulcrum.intake.IntakeException;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.intake.IntakeTool;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LoginUserIntake
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUserIntake.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        	
-       try
-        {
-          // Get intake group          
-    	    // context only available after ExecutePageValve, could not invoke (IntakeTool)context.get("intake") using pook service instead
-          PoolService poolService =  (PoolService)TurbineServices.getInstance().getService(PoolService.ROLE);
-          IntakeTool intake = (IntakeTool) poolService.getInstance(IntakeTool.class);
-          
-          intake.init(data);
-          Group group = intake.get("Login", IntakeTool.DEFAULT_KEY);
-          String username = (String)group.get("Username").getValue();
-          if (StringUtils.isEmpty(username))
-            {
-                return;
-            }
-
-          if (username.equals(security.getAnonymousUser().getName()))
-            {
-                data.setMessage("Anonymous user cannot login");
-                reset(data);
-                return;
-            }
-            
-        	if (username.equals(security.getAnonymousUser().getName()))
-            {
-                throw new Exception("Anonymous user cannot login");
-            }
-        	
-            String password = (String)group.get("Password").getValue();
-            // Authenticate the user and get the object.
-            User user = security.getAuthenticatedUser(username, password);
-
-            // Store the user object.
-            data.setUser(user);
-
-            // Mark the user as being logged in.
-            user.setHasLoggedIn(Boolean.TRUE);
-
-            // Set the last_login date in the database.
-            user.updateLastLogin();
-
-            // This only happens if the user is valid; otherwise, we
-            // will get a valueBound in the User object when we don't
-            // want to because the username is not set yet.  Save the
-            // User object into the session.
-            data.save();
-
-            /*
-             * If the setPage("template.vm") method has not
-             * been used in the template to authenticate the
-             * user (usually Login.vm), then the user will
-             * be forwarded to the template that is specified
-             * by the "template.home" property as listed in
-             * TR.props for the webapp.
-             */
-
-        }
-        catch (Exception e)
-        {
-            if (e instanceof DataBackendException || e instanceof IntakeException)
-            {
-                log.error(e);
-            }
-
-            // Set Error Message and clean out the user.
-            data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
-            User anonymousUser = security.getAnonymousUser();
-            data.setUser(anonymousUser);
-            
-            String loginTemplate = conf.getString(
-                    TurbineConstants.TEMPLATE_LOGIN);
-
-            if (StringUtils.isNotEmpty(loginTemplate))
-            {
-                // We're running in a templating solution
-                data.setScreenTemplate(loginTemplate);
-            }
-            else
-            {
-                data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-            }
-        }
-    }
-
-  private void reset(RunData data) throws UnknownEntityException {
-    User anonymousUser = security.getAnonymousUser();
-    data.setUser(anonymousUser);
-
-    if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-    {
-        // We're running in a templating solution
-        data.setScreenTemplate(
-            conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-    }
-    else
-    {
-        data.setScreen(
-            conf.getString(TurbineConstants.SCREEN_LOGIN));
-    }
-  }
-
-}
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
deleted file mode 100644
index 2fea6dd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This action removes a user from the session. It makes sure to save
- * the User object in the session.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LogoutUser.java 1706239 2015-10-01 13:18:35Z tv $
- */
-public class LogoutUser
-        extends Action
-{
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-    /**
-     * Clears the PipelineData user object back to an anonymous status not
-     * logged in, and with a null ACL.  If the tr.props ACTION_LOGIN
-     * is anything except "LogoutUser", flow is transfered to the
-     * SCREEN_HOMEPAGE
-     *
-     * If this action name is the value of action.logout then we are
-     * being run before the session validator, so we don't need to
-     * set the screen (we assume that the session validator will handle
-     * that). This is basically still here simply to preserve old behaviour
-     * - it is recommended that action.logout is set to "LogoutUser" and
-     * that the session validator does handle setting the screen/template
-     * for a logged out (read not-logged-in) user.
-     *
-     * @param pipelineData Turbine information.
-     * @exception FulcrumSecurityException a problem occurred in the security
-     *            service.
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        // Session validator did not run, so RunData is not populated
-        User user = data.getUserFromSession();
-
-        if (user != null && !security.isAnonymousUser(user))
-        {
-            // Make sure that the user has really logged in...
-            if (!user.hasLoggedIn())
-            {
-                return;
-            }
-
-            user.setHasLoggedIn(Boolean.FALSE);
-            security.saveUser(user);
-        }
-
-        data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
-
-        // This will cause the acl to be removed from the session in
-        // the Turbine servlet code.
-        data.setACL(null);
-
-        // Retrieve an anonymous user.
-        User anonymousUser = security.getAnonymousUser();
-        data.setUser(anonymousUser);
-        data.save();
-
-        // In the event that the current screen or related navigations
-        // require acl info, we cannot wait for Turbine to handle
-        // regenerating acl.
-        data.getSession().removeAttribute(TurbineConstants.ACL_SESSION_KEY);
-
-        // If this action name is the value of action.logout then we are
-        // being run before the session validator, so we don't need to
-        // set the screen (we assume that the session validator will handle
-        // that). This is basically still here simply to preserve old behavior
-        // - it is recommended that action.logout is set to "LogoutUser" and
-        // that the session validator does handle setting the screen/template
-        // for a logged out (read not-logged-in) user.
-        if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY,
-                            TurbineConstants.ACTION_LOGOUT_DEFAULT)
-            .equals(TurbineConstants.ACTION_LOGOUT_DEFAULT))
-        {
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-        }
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
deleted file mode 100644
index c25fae5..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.localization.LocalizationService;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.actions.VelocitySecureAction;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity Secure action.
- *
- * Always performs a Security Check that you've defined before executing the
- * doPerform().
- */
-public class SecureAction extends VelocitySecureAction 
-{
-    
-    @TurbineService
-    private LocalizationService localizationService;
-  /**
-   * This currently only checks to make sure that user is allowed to view the
-   * storage area. If you create an action that requires more security then
-   * override this method.
-   *
-   * @param data
-   *            Turbine information.
-   * @return True if the user is authorized to access the screen.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-    
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-    
-        if (acl == null || ! ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") ) ) 
-        {
-           String msg =  localizationService.getString(localizationService.getDefaultBundleName(), 
-                                          localizationService.getLocale( ((RunData) data).getRequest()), "no_permission");
-            
-            getRunData(data).setMessage(msg);
-    
-            log.debug( "call not permitted for template: " + getRunData(data).getScreenTemplate() + " and action " + getRunData(data).getAction() );
-             getRunData(data).setScreenTemplate( "Login.vm" );
-            isAuthorized = false;
-        } 
-        else if ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") )
-        {
-            isAuthorized = true;
-        }
-    
-        return isAuthorized;
-    }
-
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-    User user = getRunData(data).getUser();
-    context.put("user",user);
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
deleted file mode 100644
index 0ec8a8f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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 java.util.List;
-
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.om.Author;
-import ${package}.om.AuthorPeer;
-
-public class ShowRecords  extends SecureAction 
-{
-
-	@Override
-	public void doPerform( PipelineData pipelineData, Context context )
-	    throws Exception
-	{
-	    super.doPerform( pipelineData, context );
-	    List<Author> authors = AuthorPeer.doSelect( new Criteria() );//all
-	    context.put( "authors", authors );
-	    RunData data = getRunData(pipelineData);
-	    data.setScreenTemplate(Character.toLowerCase(getClass().getSimpleName().charAt(0)) + 
-	    		getClass().getSimpleName().substring(1) + ".vm"
-	    ); 
-	    
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 6f6fa70..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.fulcrum.json.JsonService;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.velocity.context.Context;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-    
-    JsonService jsonService = (JsonService)TurbineServices.getInstance().getService(JsonService.ROLE);
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-    		throws Exception
-    {
-    	context.put("success", "Congratulations, it worked!");
-    }
-    
-    /**
-     * This method is called bythe Turbine framework to determine if
-     * the current user is allowed to use this screen. If this method
-     * returns false, the doBuildTemplate() method will not be called.
-     * If a redirect to some "access denied" page is required, do the
-     * necessary redirect here.
-     * 
-     * return always <code>true</code>true, to show this screen as default
-     */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception
-    {
-    	// use data.getACL() 
-    	return true;
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
deleted file mode 100644
index aff1b2a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package ${package}.modules.screens;
-
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample extending a secured screen
- */
-public class Password extends SecureScreen 
-{
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-    		throws Exception
-    {
-    	
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
deleted file mode 100644
index 2f90b62..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample implementation for creating a secured screen
- */
-public class SecureScreen extends VelocitySecureScreen 
-{
-   	@TurbineService
-   	protected SecurityService securityService;
-    	
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_LOGIN )
-    private Configuration templateLogin;
-    
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_HOMEPAGE )
-    private Configuration templateHomepage;
-    
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-        
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-        
-        if (acl == null)
-        {
-          // commons configuration getProperty: prefix removed, the key for the value .. is an empty string, the result an object
-        getRunData(data).setScreenTemplate( (String) templateLogin.getProperty("") );
-        	isAuthorized = false;
-        } 
-        else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin"))
-        {
-            isAuthorized = true;
-        }
-        else 
-        {
-            getRunData(data).setScreenTemplate( (String) templateHomepage.getProperty("") );
-            getRunData(data).setMessage("You do not have access to this part of the site.");
-            isAuthorized = false;
-        }
-        return isAuthorized;
-    }
-
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param data
-     *            Turbine information.
-     * @param context
-     *            Context for web pages.
-     * @exception Exception,
-     *                a generic exception.
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context) throws Exception 
-    {
-    
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
deleted file mode 100644
index 55ba3b1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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 java.util.ArrayList;
-import java.util.List;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.velocity.context.Context;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class TestSecure extends SecureScreen
-{
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-                    throws Exception
-    {
-      context.put("success", "Congratulations, it worked here too!");
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
deleted file mode 100644
index d54dcf1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeer
-    extends ${package}.om.BaseTurbineGroupPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
deleted file mode 100644
index 94c681d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeerImpl
-    extends ${package}.om.BaseTurbineGroupPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineGroup>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
deleted file mode 100644
index bdbdf0f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Thu Sep 04 12:20:05 CEST 2014]
- *
- *  You should add additional methods to this class to meet the
- *  application requirements.  This class will only be generated as
- *  long as it does not already exist in the output directory.
- */
-public class TurbinePermissionPeer
-    extends ${package}.om.BaseTurbinePermissionPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
deleted file mode 100644
index 19bd132..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Mon Nov 25 16:49:55 CET 2013]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public class TurbinePermissionPeerImpl
-    extends ${package}.om.BaseTurbinePermissionPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbinePermission>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 138394595924L;
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
deleted file mode 100644
index 739597f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeer
-    extends ${package}.om.BaseTurbineRolePeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
deleted file mode 100644
index 91d307f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeerImpl
-    extends ${package}.om.BaseTurbineRolePeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineRole>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
deleted file mode 100644
index a26f32e..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public  class TurbineRolePermission
-    extends ${package}.om.BaseTurbineRolePermission
-{
-    /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
deleted file mode 100644
index 5416761..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package ${package}.om;
-
-import java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.torque.TorqueException;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- * #set( $H = '#' )
- * Added Interface
- * @author gk
- *
- */
-public  class TurbineUser
-    extends ${package}.om.BaseTurbineUser implements org.apache.fulcrum.security.model.turbine.entity.TurbineUser
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437136L;
-    
-   /**
-     * Get the value of id.
-     *
-     * @return Object
-     */
-    @Override
-	public Object getId() 
-    {
-        
-        return getEntityId();
-    }
-
-    /**
-     * Set the value of id.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setId(Object v)
-    {
-        setEntityId( (Integer) v);
-
-    }
-    
-        /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-
-    }
-    
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity$HretrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
-
-        List<${package}.om.TurbineUserGroupRole> ugrs = getTurbineUserGroupRoles();
-
-        for (${package}.om.TurbineUserGroupRole ttugr : ugrs)
-        {
-            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-            ugr.setUser(this);
-            ugr.setRole(ttugr.getTurbineRole());
-            ugr.setGroup(ttugr.getTurbineGroup(con));
-            userGroupRoleSet.add(ugr);
-        }
-
-        setUserGroupRoleSet(userGroupRoleSet);
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
deleted file mode 100644
index 4c330e2..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-
-public class TurbineUserPeer
-    extends ${package}.om.BaseTurbineUserPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
deleted file mode 100644
index 38d7984..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineUserPeerImpl
-    extends ${package}.om.BaseTurbineUserPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineUser>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
deleted file mode 100644
index f529e20..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package ${package}.services.pull;
-
-#*
-* 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 java.util.HashSet;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.json.JsonService;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.pull.RunDataApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.services.security.SecurityService;
-
-
-public class RelatedTool implements RunDataApplicationTool {
-  
-  /** Logging */
-  private static Log log = LogFactory.getLog(RelatedTool.class);
-    
-  private RunData data = null;
-
-  @Override
-  public void init(Object data) {
-    this.data = (RunData) data;
-
-  }
-  
-  @Override
-  public void refresh(RunData data) {
-    this.data = data;
-  }
-  
-  public String getUserrole() {
-    try {
-      User user = data.getUser();
-      Role role = null;
-      if (user != null && user.getName() != null) {
-          log.info("reading role for: "+user.getName());
-          if (data.getACL() != null && data.getACL() instanceof TurbineAccessControlList) {
-            RoleSet roles = ((TurbineAccessControlList)data.getACL()).getRoles();
-            if (roles != null && roles.getSet().size() == 1) {
-              Role fulcrumRole = roles.getSet().iterator().next();
-                log.debug("acl role is: "+fulcrumRole.getName());
-                return fulcrumRole.getName();
-            }
-          } else {
-            SecurityService securityService = (SecurityService) TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
-            RoleSet roles = securityService.getAllRoles();   				
-          }
-      } else if (user != null) {
-        SecurityService securityService = (SecurityService) TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
-          role = securityService.getRoleByName("user");
-              //.retrieveRole("anon");				
-      }
-      return (role != null)? role.getName(): null;
-    } catch (Exception e) {
-      log.error("RelatedTool - failure in reading role: ", e);
-      return null;
-    }
-  }
-  
-  @SuppressWarnings( "unchecked" )
-    public <T> Object getJson(Object src, String className, String mixinCN, Boolean refresh, String... props ) {
-        String result= null;
-        JsonService jsonService = (JsonService)TurbineServices
-        .getInstance().getService(JsonService.ROLE);
-        try
-        {
-            log.info( "refresh is:"+ refresh );
-            log.info( "jsonService:"+ jsonService );
-            log.info( "source class is:"+ className );
-            log.info( "target object is:"+ src );
-            Class clazz = Class.forName(className);
-            if (props != null) {
-                log.info( "props length:"+ props.length);
-                  for ( int i = 0; i < props.length; i++ )
-                {
-                      log.debug( "props:"+ props[i]);
-                }
-            }
-            if (mixinCN != null ) {
-               Class mixin = Class.forName(mixinCN);
-               if (mixin != null ) {
-                 Set<Class> mixins = new HashSet<Class>();
-                 mixins.add( mixin );
-                   log.info( "adding adapter mixinCN:"+ mixinCN);
-                   jsonService.addAdapter( mixinCN, clazz, mixin );
-               }
-            }
-            String serialized =  jsonService.serializeOnlyFilter( src, clazz, refresh, props );
-            log.debug( "serialized:"+serialized );
-            return serialized;
-        }
-        catch ( Exception e )
-        {
-            log.error(e.getMessage(),e );
-            result = e.getMessage();
-        }
-        return result;
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
deleted file mode 100644
index bf2cf0a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ${package}.wrapper;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.turbine.om.security.DefaultUserImpl;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-/**
- * Custom Wrapper instead fo default Turbine wrapper class {@link DefaultUserImpl} to allow for annotations, 
- * - th single requirment for wrappers is to implement a constructor with parameter {@link TurbineUser}
- *
- */
- @JsonIgnoreProperties( {"permStorage", "type","objectdata" } )
-public  class TurbineUserWrapper
-    extends DefaultUserImpl
-{
-   public TurbineUserWrapper(TurbineUser user) {
-      super(user);
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 8e867d5..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml                                          -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-
-	<!--  Simple author/book database example -->
-	<table name="AUTHOR" idMethod="idbroker">
-		<column name="AUTH_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="FIRST_NAME"  required="true" size="64" type="VARCHAR" />
-		<column name="LAST_NAME"   required="true" size="64" type="VARCHAR" />
-	</table>
-
-    <table name="BOOK" idMethod="idbroker">
-		<column name="BOOK_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="AUTH_ID"     required="true" type="INTEGER" />
-		<column name="TITLE"       required="true" size="64" type="VARCHAR" />
-		<column name="SUBJECT"     required="true" size="64" type="VARCHAR" />
-		<foreign-key foreignTable="AUTHOR">
-			<reference local="AUTH_ID" foreign="AUTH_ID"></reference>
-		</foreign-key>		
-	</table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 5002f21..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 8503f8f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="turbineadmin"/>
-  <TurbinePermission PermissionId="2" Name="turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="turbineadmin"/>
-  <TurbineRole RoleId="2" Name="turbineuser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index 8b51af0..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!--  Schema documentation                                                    -->
-<!--  http://db.apache.org/torque/torque-4.0/documentation/orm-reference/database-4-0-strict.xsd -->
-<!--  http://db.apache.org/torque/torque-4.0/documentation/orm-reference/database-4-0.xsd -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="none">
-
-
-  <table name="TURBINE_PERMISSION" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbinePermission" interface="org.apache.fulcrum.security.model.turbine.entity.TurbinePermission">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineRole" interface="org.apache.fulcrum.security.model.turbine.entity.TurbineRole">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineGroup" interface="org.apache.fulcrum.security.model.turbine.entity.TurbineGroup">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <!-- Turbine service revokeAll(role) manages removal, but you might want to handle it just with onDelete="cascade" -->
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <!-- org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity -->
-  <table name="TURBINE_USER" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineUser"
-  interface="org.apache.fulcrum.security.model.turbine.entity.TurbineUser">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED_DATE" type="TIMESTAMP" javaName="ModifiedDate"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <!-- Turbine service revokeAll(user) manages removal, but you might want to handle it just with onDelete="cascade" -->
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 023ef76..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,126 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-
-
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=${turbine_database_name}
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-#torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-#torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-#torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-torque.manager.useCache = true
-
-# Determines if IDBroker should prefetch IDs or not.  If set to false
-# this property has the effect of shutting off the housekeeping thread
-# that attempts to prefetch the id's.  It also sets the # of id's grabbed
-# per request to 1 regardless of the settings in the database.
-# Default: true
-torque.idbroker.prefetch = true
-
-# Controls the starting id of table entries when creating SQL for 
-# the id-table. If you have two projects that use the same id-table 
-# in the same database with different tables, make sure that they have 
-# different initialID settings and the ranges (initialID is incremented 
-# for every new table) don't overlap.
-torque.idbroker.initialId = 101 
-
-# The start value of the ID broker for supplying IDs to Torque. This value 
-# is incremented every time Torque requests ID keys from the broker. If you 
-# pre-load your table straight from SQL, make sure that you don't accidentially 
-# overlap with this setting, because Torque doesn't keep record of what IDs are 
-# already taken in the database. If you overlap, inserting new objects will fail 
-# because the ID assigned by Torque is already taken.
-torque.idBroker.initialIdValue = 100
-
-# For performance reasons, the ID Broker does not request a single ID at a time
-# but fetches a whole range and increments the current next ID Value in the ID
-# Table by this step. If you have to do lots of inserts straight in a row, increment
-# this value to get slightly better performance.
-torque.idbroker.initialIdStep = 500
-
-# IDBroker can grab its own connection from the pool to use when retrieving
-# more id's to minimize the amount of time ID_TABLE will be locked.
-# Some usage of IDBroker or assumptions made by connection pools or jdbc
-# drivers may disallow this optimization in which case the property
-# should be set to false.
-torque.idbroker.usenewconnection = true
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
-
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
deleted file mode 100644
index 4c6407e..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<configuration>
-   <header>
-    <!-- Meta data about the resulting combined configuration -->
-  </header>
-  <override><!-- only allowed configurations are user and turbine, realtive paths   -->
-    <properties config-name="user" fileName="WEB-INF/conf/usersettings.properties" config-optional="true" config-forceCreate="true"/> 
-    <!-- xml fileName="conf/test/TurbineResources.xml"/-->
-    <properties config-name="turbine" fileName="WEB-INF/conf/TurbineResources.properties" throwExceptionOnMissing="true"/>
-   </override>
-  <additional>
-    <!-- Configuration declarations that form a union configuration, always provide a unique config-name attribute  -->
-  </additional>
-</configuration>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index a883250..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,655 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  P I P E L I N E
-#
-# -------------------------------------------------------------------
-pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explicitly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUserIntake
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-tool.request.related=${package}.services.pull.RelatedTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-tool.ui.css=page.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm,macros/applicationMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been initialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager
-
-services.SecurityService.user.class=org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl
-# define custom wrapper
-services.SecurityService.wrapper.class = ${package}.wrapper.TurbineUserWrapper
-
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = /WEB-INF/conf/containerConfiguration.xml
-#
-# Name and location to the configuration file for the component roles.
-#
-#services.AvalonComponentService.componentRoles =  /WEB-INF/conf/roleConfiguration.xml
-#
-#services.AvalonComponentService.componentConfiguration = /WEB-INF/conf/componentConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index bed2c7d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-        <unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-    <localization>
-      <bundles>
-        <bundle>${package}.L10N</bundle>
-      </bundles>
-    </localization>
-    <!-- Disable if you experience startup problems with Java8 -->
-    <intake>
-      <serialDataPath>WEB-INF/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>WEB-INF/conf/${turbine_intake_file}</xmlPath>
-      </xmlPaths>
-    </intake>
-    <factory/>
-    <pool/>
-    <parser>
-        <!-- <urlCaseFolding>lower</urlCaseFolding> -->
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-    <!-- defining specific inspectors -->
-    <json>
-       <annotationInspectors>
-            <primary>org.apache.fulcrum.json.jackson.SimpleNameIntrospector</primary>
-            <secondary>com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector</secondary>
-            <features>
-              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">FAIL_ON_EMPTY_BEANS</feature>
-              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">INDENT_OUTPUT</feature>
-              <feature value="true" type="com.fasterxml.jackson.core.JsonParser">ALLOW_UNQUOTED_FIELD_NAMES</feature>
-            </features>
-        </annotationInspectors>
-        <dateFormat>MM/dd/yyyy</dateFormat>
-        <cacheFilters>true</cacheFilters>
-        <!-- security feature -->
-        <escapeCharsGlobal>true</escapeCharsGlobal>
-        <!--  escapeCharsClass>net.example.EscapeCharClass</escapeCharsClass -->
-        <defaultTyping type="OBJECT_AND_NON_CONCRETE" key="type"/><!-- defaultTyping type="NON_FINAL" key="type"/-->
-        <!-- requires com.jayway dependency in pom -->
-        <!-- useJsonPath>true</useJsonPath -->
-    </json>
-    
-    <upload repository="/tmp" sizeMax="1048576" sizeThreshold="10240"/>
-        <!-- These components belong to the Fulcrum-Security services -->        
-    <securityService/>
-    <authenticator/>
-    <!--   <authenticator>
-          <algorithm>java</algorithm>
-          <cipher>SHA1</cipher>    </authenticator>   -->
-
-    <modelManager/>
-    <aclFactory/>
-    
-    <!--  
-       Fulcrum Components, e.g. json, XmlRpcServerComponent, cft. Fulcrum Component Configurations 
-     -->
-       
-     
-     <!--  
-     Pure Fulcrum Model
-    -->
-    <!--
-     <userManager> 
-       <className>org.apache.fulcrum.security.torque.om.TorqueTurbineUser</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineGroup</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineRole</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbinePermission</className>
-    </permissionManager>
-    -->
- 
-     <!-- 
-     Default classes implementing org.apache.fulcrum.security.model.turbine.entity interfaces 
-     -->
-    <!--userManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineGroupImpl</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineRoleImpl</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbinePermissionImpl</className>
-    </permissionManager -->
-    
-    <!-- 
-     Custom Turbine ORM Torque classes could not yet be used: 
-     - requires Torque 4.1 or if using Torque 4.0 reqires manually adding the interfaces in T-classes
-     - requires attribute baseClass in fulcrum-turbine-schema.xml table elements set to appropriate org.apache.fulcrum.security.model.turbine.entity interfaces
-     - requires attribute peerClass in fulcrum-turbine-schema.xml table elements set to org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer 
-     -->
-     
-     <userManager>
-     <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-    </userManager>
-    <groupManager>
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager>
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-     
-</componentConfig>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index 7c00de2..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<input-data xmlns="http://turbine.apache.org/schema/intake/4.0"
-    basePackage="${package}.">
-    <group name="example" key="example" mapToObject="om.Table1">
-        <field name="TestCol2" key="testCol2" type="String"/>
-    </group>
-    <group name="Login" key="login">
-    <field name="Username" key="u" type="String">
-      <!-- l10n keys -->
-      <rule name="required" value="true">username_required_msg</rule>
-      <rule name="minLength" value="4">username_min_length_msg</rule>
-      <!--rule name="mask" value=".+@.+\..+">username_mask_msg</rule-->
-    </field>
-    <field name="Password" key="p" type="String">
-      <rule name="required" value="true">password_msg</rule>
-    </field>
-</group>
-</input-data>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index b1b2301..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = DEBUG, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = ${applicationRoot}/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = ${applicationRoot}/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = ${applicationRoot}/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = ${applicationRoot}/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = ${applicationRoot}/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index d4ea1a3..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-	<!-- Disable if you experience startup problems with Java8 -->
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.upload.UploadService"
-        shorthand="upload"
-        default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-        
-     <!-- using Jackson as mapper by default -->
-    <role
-        name="org.apache.fulcrum.json.JsonService"
-        shorthand="json"
-        default-class="org.apache.fulcrum.json.jackson.Jackson2MapperService"/>
-        
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-        
-         <!-- These components belong to the Fulcrum-Security services -->        
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-    <role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-        
-
-    <!-- Add your services here -->
-        
-</role-list>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
deleted file mode 100644
index bd8f3fd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<pipeline>
-  <valves>
-  <valve>org.apache.turbine.pipeline.DetermineActionValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineTargetValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionTimeoutValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultLoginValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionValidationValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultACLCreationValve</valve>
-    <valve>org.apache.turbine.pipeline.ExecutePageValve</valve>
-    <valve>org.apache.turbine.pipeline.CleanUpValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineRedirectRequestedValve</valve>
-  </valves>
-</pipeline>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
deleted file mode 100644
index e69de29..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
+++ /dev/null
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
deleted file mode 100644
index 64f7b2c..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Configure class="org.eclipse.jetty.webapp.WebAppContext">
-  <New id="Turbine" class="org.eclipse.jetty.plus.jndi.Resource">
-    <Arg></Arg> <!-- reference to WebAppContext requires jetty 9.x only  -->
-    <Arg>${turbine_database_jndipath}</Arg>
-    <Arg>
-        <New class="org.apache.commons.dbcp.BasicDataSource">
-           <Set name="driverClassName">${turbine_database_driver}</Set>
-            <Set name="url">${turbine_database_url}${turbine_database_name}</Set>
-            <Set name="username">${turbine_database_user}</Set>
-            <Set name="password">${turbine_database_password}</Set>
-            <Set name="validationQuery">SELECT 1</Set>
-        </New>
-    </Arg>
-  </New>
-</Configure>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 7241e9d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?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.
--->
-<web-app id="WebApp_ID" version="2.5" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_2_5.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-  
-  
- <!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- JNDI Ressource                                                           -->
-<!-- ======================================================================== -->
-  
-   <resource-ref>
-    <res-ref-name>${turbine_database_jndipath}</res-ref-name>
-    <res-type>javax.sql.DataSource</res-type>
-    <res-auth>Container</res-auth>
-  </resource-ref>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
deleted file mode 100644
index 5439b20..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
deleted file mode 100644
index f19c013..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
deleted file mode 100644
index 420260e..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
+++ /dev/null
@@ -1,121 +0,0 @@
-/* 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*/
-
-book {
-  display: flex;
-  flex-direction: column;
-}
-
-@supports(display: grid) {
-  book {
-    width: auto;
-  }
-}
-
-book:nth-of-type(2) {
-  grid-column: 2;
-  grid-row: 2 / span 2;
-} 
-
-h3 {
-  order: 0;
-}
-
-footer {
-  background-color: #9E2064;
-  text-align: right;
-  padding-right: 20px;
-}
-
-section {
-  background-color: #dfe5e8;
-  display: grid;
-  grid-template: [header-left] "head head" 30px [header-right]
-                 [main-left]   "nav  main" 1fr  [main-right]
-                 [gridfooter-left] "nav  foot" 30px [gridfooter-right];
-  grid-gap: 0.5em;
-  width: 100%;
-  height: 250px;
-}
-
-section:after {
-  clear: both;
-  content: "";
-  display: table;
-}
-
-header {
-  background-color: #F69923;
-  grid-area: head;
-}
-
-nav {
-  background-color: #F79A23;
-  grid-area: nav;
-}
-
-main {
-  background-color: #E97826;
-  grid-area: main;
-}
-
-gridfooter {
-  background-color: #9E2064;
-  text-align: center;
-  grid-column: foot;  
-}
-
-.tabs-nav-container {
-  display: flex;
-  flex-direction: column;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-.tabs-nav {
-  text-align: center;
-}
-
-.tabs-nav:hover {
-  color: #6d6d6d;
-}
-
-.tabs-nav.is-active {
-  color: white;
-  background-color: #C92037;
-  min-width: 400px;
-}
-
-.tabs-nav span {
-  display: none;
-}
-
-.tab {
-  display: none;
-  background-color: #dfe5e8;
-}
-
-.tab.is-active {
-  display: block;
-}
-
-.tab-content {
-  padding: 0.5em;
-}
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
deleted file mode 100644
index e3e0bdd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*/
-(function() {
- //TODO
-})();
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
deleted file mode 100644
index 798ecba..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
+++ /dev/null
@@ -1,58 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-$page.addStyleSheet("http://www.w3schools.com/lib/w3.css")
-$page.addStyleSheet("http://www.w3schools.com/lib/w3-theme-blue-grey.css")
-$page.setTitle("Sample Apache Turbine Application")
-$page.addScript($ui.getScript("page.js"))
-<html>
-
-#TurbineHtmlHead()
-
-<link href="$ui.getStylecss()" rel="stylesheet" type="text/css" />
-
-<body #TurbineHtmlBodyAttributes() class="w3-theme-l4">
-
-	<div class="w3-wrapper">
-
-    <!-- Header -->
-    <header class="w3-container w3-center w3-padding-32 w3-theme">
-          <img class="w3-right" src="$ui.image('turbine4-project.png')" /> 
-          #if ( $data.getUser().hasLoggedIn() ) 
-            #set ( $u = $data.getUser() )
-            <div class="w3-right">
-          <h5>Hello $!u.FirstName</h5>
-            </div>
-      #end
-    </header>
-
-        <!-- Default Menu -->
-        $navigation.setTemplate("/Menu.vm")
-
-        <!-- Content -->
-        <div class="w3-left w3-padding" id="content">
-                $screen_placeholder
-        </div>
-
-        <!-- Footer -->
-        <footer class="w3-bottom">
-			<p>Powered by <img src="$ui.image('pb-turbine100px.png')"/></p>
-        </footer>
-	</div>
-
-</body>
-</html>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm
deleted file mode 100644
index 9acccea..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm
+++ /dev/null
@@ -1,151 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## $Id: TurbineMacros.vm 222027 2016-10-20 16:11:37Z painter $
-##
-## Put your Application macros in this file.
-##
-
-#* ------------------------------------------------------------------
-#    Global Macros
-*# ------------------------------------------------------------------
-
-#* ------------------------------------------------------------------
-#    Drop down select option for yes/no questions
-*# ------------------------------------------------------------------
-#macro (selectYesNo $label $selection)
-	<select name="$label">
-		#if ( $selection == "true" )
-			<option value="1" selected>Yes</option>
-			<option value="0">No</option>
-		#else
-			<option value="1">Yes</option>
-			<option value="0" selected>No</option>
-		#end
-	</select>
-#end
-
-
-#* ------------------------------------------------------------------
-#    Standard action form controls - Using w3.css styling
-*# ------------------------------------------------------------------
-
-#macro (insert)
-    <input type="submit" name="eventSubmit_doInsert" value="Insert"/>
-#end
-
-#macro (save)
-    <input type="submit" name="eventSubmit_doUpdate" value="Update"/>
-#end
-
-#macro (remove)
-    <input type="submit" name="eventSubmit_doDelete" value="Remove"/>
-#end
-
-
-#macro (warning $msg)
-<div class="w3-panel w3-orange w3-card-8">
-	$msg
-</div>
-#end
-
-#macro (error $msg)
-<div class="w3-panel w3-red w3-card-8">
-	$msg
-</div>
-#end
-
-#macro(info $msg)
-<div class="w3-panel w3-blue w3-card-8">
-	$msg
-</div>
-#end
-
-
-#* ------------------------------------------------------------------
-#
-# Macros that are used for displaying input forms. Using w3.css styling
-#
-*# ------------------------------------------------------------------
-
-#macro (formLabel $label)
-	<label>$!label</label>
-#end
-
-#macro (fileUpload $label $name)
-	<label>$!label</label>
-	<input class="w3-input" type="file" name="$!name">
-#end
-
-#macro (formCheckBox $label $name $checked)
-   #formLabel( $label )
-   #checkBox( $name $checked )
-#end
-
-#macro (checkBox $name $checked)
-	<input id="$!name" class="w3-check" type="checkbox" checked="$!checked">
-#end
-
-#macro (formLabelRequired $label)
-	<label class="w3-label w3-validate">$!label</label>
-#end
-
-#macro (formTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (smallFormTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textareaField $label $name $value)
-	<p>
-		<label class="w3-label">$label</label>
-		<textarea class="w3-input" style="width:90%" rows="6" name="$name" required>$!value</textarea>
-	</p>
-	
-#end
-
-#macro (formPasswordCell $label $name $value)
-	<p>
-	#formLabel( $label )
-	<input class="w3-input" type="password" name="$!name" value="$!value">
-	</p>
-#end
-
-#macro (formCellRequired $label $name $value)
-	<p>
-	  #formLabelRequired($label)
-  	  #formTextField($name $value)
-  	</p>
-#end
-
-#macro (formCell $label $name $value)
-  #formLabel($label)
-  #formTextField($name $value)
-#end
-
-#macro (smallFormCell $label $name $value)
-  #formLabel($label)
-  #smallFormTextField($name $value)
-#end
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm
deleted file mode 100644
index ba6d0c7..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm
+++ /dev/null
@@ -1,52 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-#if ( $data.getUser().hasLoggedIn() )
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-dropdown-hover">
-            <a href="#">Administration <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-              ## every user can change their password
-               <a href="$link.setPage("Password.vm")">Update Password <i class="fa fa-unlock"></i></a>
-          #if ( $data.getACL().hasRole("turbineadmin") )
-              <a href="$link.setPage("user,FluxUserList.vm")">User List <div class="w3-right"><i class="fa fa-users"></i></div></a>
-              <a href="$link.setPage("role,FluxRoleList.vm")">User Roles <div class="w3-right"><i class="fa fa-user-plus"></i></div></a>
-              <a href="$link.setPage("user,FluxUserForm.vm")?mode=insert">Add User <div class="w3-right"><i class="fa fa-user"></i></div></a>
-              #end
-            </div>
-          </li>
-          #if ( $data.getACL().hasRole("turbineuser") )
-          <li class="w3-dropdown-hover">
-            <a href="#">Records <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-               <a href="$link.setAction("ShowRecords")">Show Records <i class="fa fa-unlock"></i></a>
-            </div>
-          </li>
-          #end
-          
-          <li class="w3-right"><a href="$link.setAction("LogoutUser")">Logout</a></li>
-          
-</nav>
-#else
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-right"><a href="$link.setPage("Login.vm")">Login</a></li>
-</nav>
-
-#end
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm
deleted file mode 100644
index 897e5f1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm
+++ /dev/null
@@ -1,7 +0,0 @@
-E R R O R 
-
-$message
-
-$error
-
-$exception
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
deleted file mode 100644
index 578e66f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
+++ /dev/null
@@ -1,45 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-
-#if ( $data.getMessage() )
-        #info( $data.getMessage() )
-#end
-
-#if ($!success) <div align="center"><h1>$success</h1></div> 
-       <p>
-               You're now successfully running a <a href="http://turbine.apache.org/">Turbine</a> based
-               application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-               your web container.
-       </p>
-      
-       <p>
-               You can (and should!) change or remove this page at any time. It is
-               intended to give you immediate feedback if you just deployed an newly
-               setup Turbine application.
-       </p>
-#end
-    
-     ## including a secured does not trigger the security check, as it is just handled by velocity, not turbine
-     #parse("/screens/TestSecure.vm")
-     
-     ## trigger the security check, but without all context
-     ## <a href="$link.setPage("TestSecure.vm")">Test a secure access without context</a>
-     ## trigger the security check
-     <a href="$link.setPage("TestSecure.vm").addPathInfo("action","SecureAction")">Test a secure access with context</a>
-     
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm
deleted file mode 100644
index 7a9b423..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm
+++ /dev/null
@@ -1,104 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## If you want to use intake to process the data, uncomment below
-##
-
-#set ( $loginGroup = $intake.Login.Default )
-  
-#set ( $valid = true )  
-#if (!$loginGroup.Username.isValid() ) 
-    ## this should be improved ...
-    #if ("$loginGroup.Username.Message" == "username_min_length_msg") 
-       #info( $l10n.format("$loginGroup.Username.Message","4") )
-    #else
-      #info( $l10n.get("$loginGroup.Username.Message") )
-    #end
-    #set ( $valid = false )
- #end
- 
- #if ( !$loginGroup.Password.isValid() ) 
-    #info( $l10n.get("$loginGroup.Password.Message") )
-    #set ( $valid = false )
- #end
-
-<p/>
-  #if (! $data.user.hasLoggedIn()) 
-  
-  <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-
-		<form class="w3-container w3-light-grey" name="login" method="post" enctype="application/x-www-form-urlencoded" action="$link.setAction("LoginUserIntake").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-        
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="$loginGroup.Username.Key" value="$!loginGroup.Username" tabindex="1" autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="$loginGroup.Password.Key" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">#if (! $valid ) Retry #else Sign in #end</button>
-                
-                <p/>
-    ##$intake.declareGroups()
-        
-      </div>
-    </form>
-    
-    <!--  default login without Intake  -->
-    <!-- 
-    		<form class="w3-container w3-light-grey" name="login" method="post" action="$link.setAction("LoginUser").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-       
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="username" value="" tabindex="1"  autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="password" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">Sign in</button>
-                
-                <p/>
-
-      </div>
-    </form>
-    
-    
-    
-    -->
-
-
-    <div class="w3-container w3-border-top w3-padding-16 w3-light-grey">
-          <span class="w3-right w3-padding w3-hide-small">Forgot <a href="#">password?</a></span>
-    </div>
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end
-        
-
-    </div>
-  #else
-      #parse("/screens/Index.vm")
-  #end
-
-## $intake.declareGroups()
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm
deleted file mode 100644
index c5c2b83..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-    <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-  
-    <form class="w3-container w3-light-grey" name="password_change" method="post" action="$link.setAction("ChangePasswordAction").setPage("Index.vm")">
-          <div class="w3-section">
-        
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Old Password" type="password" name="oldpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="New Password" type="password" name="newpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple">Change Password</button>
-                
-                <button type="button" name="cancel" id="cancel" value="cancel" class="w3-ripple" onCLick="doCancel()">Cancel</button>
-                
-                <script>
-                function doCancel() { 
-                	location.href="$link.setPage('TestSecure.vm')"; 
-                	return false;
-                }
-                </script>
-
-                <p/>
-
-        
-      </div>
-    </form>
-
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end 
-
-    </div>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm
deleted file mode 100644
index dc2ffed..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-#if ( $data.getMessage() )
-	#info( $data.getMessage() )
-#end
-
-## its null for anon 
-#if ( $!related.getUserrole() )
-<h1> Secured #if ($!user) User#else Role #end Access Page </h1>
-     #if ($!user && $!success)<div align="center"><h1>$success</h1></div>#end
-     <p>   
-          #if ($user)
-             Hi "$user.firstName, $user.lastName"
-          #else
-          Role: $related.getUserrole()
-          #end
-         <script type="text/javascript">
-          var jsonObject;
-          #if ($user)
-           jsonObject = $related.getJson($user,"org.apache.turbine.om.security.User", null, true,"lastLogin", "permStorage");
-           if (jsonObject != undefined && jsonObject.permStorage == undefined) {
-              alert("successfully read JSON:" + jsonObject.lastLogin);
-           } else {
-              alert("error json object not as expected" + JSON.stringify(jsonObject));
-           }
-         #end
-        </script>
-     </p>
-#end
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/showRecords.vm b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/showRecords.vm
deleted file mode 100644
index b4a5618..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/main/webapp/templates/screens/showRecords.vm
+++ /dev/null
@@ -1,51 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License. 
-   <div id="tabs" class="no-js">
-  #foreach ($author in $authors)
-    <div class="tabs-nav-container">
-      <a href="#" class="tabs-nav #if($velocityCount ==1)is-active#end">$author.firstName $author.lastName</a>
-    </div>
-  #end
-  #foreach ($author in $authors)
-     <div class="tab #if($velocityCount ==1)is-active#end">
-       <div class="tab-content"> 
-        <section>
-            <header>Author´s Book Record Box</header>
-            <nav>$author.firstName $author.lastName</nav>
-            #set($books = $author.books)
-             <main> 
-               #foreach ($book in $books)
-               <book><a href="#">
-                $book.title 
-               </a>  (subject: $book.subject)
-               </book>
-               #end
-              </main>
-              <footer>$velocityCount</footer>
-        </section>
-        </div>
-    </div>
-  #end
-  
-   </div>
-   
-    <p>Authors: $authors.size()</p>
-   
-   <script>
-  /* 
-  */
-</script>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
deleted file mode 100644
index 5375724..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
+++ /dev/null
@@ -1,83 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-torque.applicationRoot = .
-#pipeline.default.descriptor = src/test/conf/torque/turbine-classic-pipeline.xml
-# torque.defaults.pool.defaultMaxActive=30
-torque.defaults.pool.testOnBorrow=true
-torque.defaults.pool.validationQuery=SELECT 1
-
-torque.idbroker.cleverquantity=true
-torque.idbroker.prefetch=true
-torque.idbroker.usenewconnection=true
-
-#torque.database.default=default
-torque.database.schema =
-
-# supported auto, hsqldb, mysql..
-#torque.database.default.adapter=hsqldb
-
-#torque.dsfactory.default.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-
-#torque.dsfactory.default.pool.testOnBorrow=true
-#torque.dsfactory.default.pool.validationQuery=SELECT 1 from INFORMATION_SCHEMA.SYSTEM_USERS
-#torque.dsfactory.default.connection.driver = org.hsqldb.jdbcDriver
-#torque.dsfactory.default.connection.url = jdbc:hsqldb:.
-#torque.dsfactory.default.connection.user = sa
-#torque.dsfactory.default.connection.password =
-
-##################
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-#torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-#torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=turbine
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
deleted file mode 100644
index 612e0a8..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?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.
--->
-<!--
-	This configuration file for Avalon components is used for testing the Fulcrum components
-	with Turbine.
--->
-
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>src/test/conf/torque/TorqueTest.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-      	<unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-  
-    <factory/>
-    <pool/>
-    <parser>
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-
-    <!-- These components belong to the Fulcrum-Security services -->
-    <securityService/>
-    <authenticator/>
-    <modelManager/>
-    <aclFactory/>
-     
-   <userManager>
-     <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-    </userManager>
-    <groupManager>
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager>
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-
-  
-
-</componentConfig>
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
deleted file mode 100644
index 9187ccb..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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.
--->
-<!--
-	This configuration file for Avalon components is used for testing the Fulcrum Components with
-	Turbine.
--->
-
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent" />
-
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-
-    <!-- These components belong to the Fulcrum-Security services -->
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-<role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-
-   
-
-</role-list>
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/java/services/security/AbstractTurbineTorqueModelManagerTest.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/java/services/security/AbstractTurbineTorqueModelManagerTest.java
deleted file mode 100644
index 888ee78..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/java/services/security/AbstractTurbineTorqueModelManagerTest.java
+++ /dev/null
@@ -1,488 +0,0 @@
-package ${package}.services.security;
-
-/*
- * 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 static org.junit.Assert.*;
-
-import java.util.Set;
-
-import org.apache.fulcrum.security.GroupManager;
-import org.apache.fulcrum.security.PermissionManager;
-import org.apache.fulcrum.security.RoleManager;
-import org.apache.fulcrum.security.SecurityService;
-import org.apache.fulcrum.security.UserManager;
-import org.apache.fulcrum.security.entity.ExtendedUser;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.entity.User;
-import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineGroup;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.PermissionSet;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.testcontainer.BaseUnit4Test;
-import org.apache.torque.ConstraintViolationException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Initialization of services in implementing tests
- * 
- * @author gkallidis
- * @version $Id$
- * 
- */
-public abstract class AbstractTurbineTorqueModelManagerTest extends BaseUnit4Test
-{
-    protected Role role;
-
-    protected TurbineModelManager modelManager;
-
-    protected RoleManager roleManager;
-
-    protected GroupManager groupManager;
-
-    protected PermissionManager permissionManager;
-
-    protected UserManager userManager;
-
-    protected SecurityService securityService;
-    
-    boolean onDeleteCascade = true;
-    
-     // By default org.slf4j.LoggerFactory is optional in 4.0, but included in webapp 
-    Logger log = LoggerFactory.getLogger( getClass().getName() );
-
-    @Before
-    public void setUp() throws Exception
-    {
-        securityService  = (SecurityService) lookup(SecurityService.ROLE);
-        roleManager = securityService.getRoleManager();
-        userManager = securityService.getUserManager();
-        groupManager = securityService.getGroupManager();
-        permissionManager = securityService.getPermissionManager();
-        modelManager = (TurbineModelManager) securityService.getModelManager();
-    }
-
-    @Override
-    @After
-      public void tearDown()
-    {
-        modelManager = null;
-        securityService = null;
-    }
-
-    @Test
-    public void testGetGlobalGroup() throws Exception
-    {
-        Group global = modelManager.getGlobalGroup();
-        assertNotNull(global);
-        assertEquals(global.getName(), modelManager.getGlobalGroupName());
-    }
-    @Test
-    public void testGrantRolePermission() throws Exception
-    {
-        Permission permission = permissionManager.getPermissionInstance();
-        permission.setName("ANSWER_PHONE");
-        checkAndAddPermission( permission );
-        role = roleManager.getRoleInstance("RECEPTIONIST");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(1, permissions.size());
-        assertTrue(((TurbineRole) role).getPermissions().contains(permission));
-        
-        checkAndRevoke( permission );
-        deletePermission( permission );
-        deleteRole();
-    }
-
-    @Test
-    public void testRevokeRolePermission() throws Exception
-    {
-        Permission permission = securityService.getPermissionManager().getPermissionInstance();
-        permission.setName("ANSWER_FAX");
-        checkAndAddPermission( permission );
-        role = roleManager.getRoleInstance("SECRETARY");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(1, permissions.size());
-        checkAndRevoke( permission );
-        role = roleManager.getRoleById(role.getId());
-        permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(0, permissions.size());
-        assertFalse(((TurbineRole) role).getPermissions().contains(permission));
-        deletePermission( permission );
-        deleteRole();
-    }
-    @Test
-    public void testRevokeAllRole() throws Exception
-    {
-        Permission permission = securityService.getPermissionManager().getPermissionInstance();
-        Permission permission2 = securityService.getPermissionManager().getPermissionInstance();
-        permission.setName("SEND_SPAM");
-        permission2.setName("ANSWER_EMAIL");
-        checkAndAddPermission( permission );
-        checkAndAddPermission( permission2 );
-        role = roleManager.getRoleInstance("HELPER");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        checkAndGrant( permission2);
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(2, permissions.size());
-        try {
-            modelManager.revokeAll(role);
-        } catch (Exception e) {
-            log.info( "Might fail " + e.getMessage() );
-        }
-        role = roleManager.getRoleById(role.getId());
-        permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(0, permissions.size());
-        checkAndRevoke( permission );
-        checkAndRevoke( permission2 );
-        deletePermission( permission );
-        deletePermission( permission2 );
-        deleteRole();
-    }
-
-    @Test
-    public void testRevokeAllUser() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_REVOKEALLUSER_GROUP");
-        group = checkAndAddGroup( group );
-        
-        role = securityService.getRoleManager().getRoleInstance();
-        role.setName("TEST_REVOKEALLUSER_ROLE");
-        checkAndAddRole( role );
-
-        User user = userManager.getUserInstance("calvin");
-        user = checkAndAddUser( user, "calvin" );
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-
-        group = groupManager.getGroupById(group.getId());
-        Set<TurbineUserGroupRole> userGroupRoleSet = ((TurbineGroup) group).getUserGroupRoleSet();
-        assertEquals(1, userGroupRoleSet.size());
-        Set<TurbineUserGroupRole> userGroupRoleSet2 = ((TurbineGroup) group).getUserGroupRoleSet();
-        assertEquals(1, userGroupRoleSet2.size());
-
-        try {
-            modelManager.revokeAll(user);
-        } catch (Exception e) {
-            log.info( "error due to " + e.getMessage() );
-        }
-        group = groupManager.getGroupById(group.getId());
-        assertEquals(0, ((TurbineGroup) group).getUserGroupRoleSet().size());
-        role = securityService.getRoleManager().getRoleByName("TEST_REVOKEALLUSER_ROLE");
-
-        // assertFalse(((TurbineRole) role).getGroups().contains(group));
-        // cleanup ;
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-
-    }
-
-    @Test
-    public void testGrantUserGroupRole() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_GROUP");
-        group = checkAndAddGroup( group );
-        role = roleManager.getRoleInstance();
-        role.setName("TEST_Role");
-        checkAndAddRole( role );
-        User user = userManager.getUserInstance("Clint");
-       
-        user = checkAndAddUser( user, "clint" );
-
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        boolean ugrFound = false;
-        TurbineUserGroupRole ugrTest = null;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                ugrTest = ugr;
-                break;
-            }
-        }
-        assertTrue(ugrFound);
-        assertTrue(ugrTest.getGroup().equals(group));
-        assertTrue(ugrTest.getUser().equals(user));
-        
-        try {
-            modelManager.revoke(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-    }
-    @Test
-    public void testRevokeUserGroupRole() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_REVOKE");
-        group = checkAndAddGroup( group );
-        User user = userManager.getUserInstance("Lima");
-        
-        user = checkAndAddUser( user, "pet" );
-        role = roleManager.getRoleInstance();
-        role.setName("TEST_REVOKE_ROLE");
-        checkAndAddRole( role );
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        try {
-            modelManager.revoke(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        boolean ugrFound = false;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                break;
-            }
-        }
-        assertFalse(ugrFound);
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-       
-    }
-
-    private void checkAndAddPermission( Permission permission )
-                    throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        // cleanup if using real db
-        Permission dbPermission;
-        if (securityService.getPermissionManager().checkExists( permission )) {
-            dbPermission =  securityService.getPermissionManager().getPermissionByName( permission.getName() );
-            // this might fail as it is referenced
-//            try {
-//                securityService.getPermissionManager().removePermission(  permission );
-//            } catch (Exception e) {
-//                System.out.println("removing permission failed" +  e.getMessage() );
-//            }
-        } else {
-            dbPermission =securityService.getPermissionManager().addPermission(permission);            
-        }
-        permission.setId( dbPermission.getId() );
-
-    }
-    
-    // adds user 
-    private User checkAndAddUser( User user, String password )
-        throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        if (user instanceof ExtendedUser) {
-            // set first last name which might be required  (cft. schema definition)
-            ((ExtendedUser)user).setFirstName( user.getName() );
-            ((ExtendedUser)user).setLastName(  user.getName() );
-        }
-        if (userManager.checkExists( user )) {
-            return userManager.getUser( user.getName() );
-            //userManager.removeUser( dbUser );
-        } else {
-            return userManager.addUser(user, password ); 
-        }
-    }
-    
-    private Group checkAndAddGroup( Group group )
-                    throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        // cleanup if using real db
-        if (securityService.getGroupManager().checkExists( group )) {
-            return securityService.getGroupManager().getGroupByName( group.getName() );
-            // might fail as it is referenced
-//            try {
-//                securityService.getGroupManager().removeGroup( group );
-//            }  catch (Exception e) {
-//                System.out.println("removing group failed" +  e.getMessage() );
-//            }
-        } else {
-            return securityService.getGroupManager().addGroup(group);
-        }
-    }
-
-
-    private void checkAndAddRole( Role role )
-        throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        Role dbRole;
-        // cleanup if using real db
-        if (securityService.getRoleManager().checkExists( role )) {
-            dbRole = securityService.getRoleManager().getRoleByName( role.getName() );
-            // might fail as it is referenced
-//            try {
-//                securityService.getRoleManager().removeRole( role );
-//            } catch (Exception e) {
-//                System.out.println("removing role failed " +  e.getMessage() );
-//            }
-        } else {
-            dbRole = securityService.getRoleManager().addRole(role); 
-        }
-        if (this.role != null) {
-            this.role.setId( dbRole.getId() );
-        } else {
-            this.role =dbRole;
-        }
-    }
-    
-    private void checkAndGrant( Permission permission )
-                    throws UnknownEntityException
-    {
-        // short cut if duplicate entry use acl ...
-        try {
-            modelManager.grant(role, permission);
-        } catch (DataBackendException e) {
-            log.info( "Might be duplicate TODO ACL check" + e.getMessage() );
-        }
-    }
-    
-    private void checkAndRevoke( Permission permission )
-                    throws UnknownEntityException
-    {
-        // short cut if duplicate entry use acl ...
-        try {
-            modelManager.revoke(role, permission);
-        } catch (DataBackendException e) {
-            log.info( "Might be duplicate TODO ACL check" + e.getMessage() );
-        }
-    }
-    
-    private void deleteUser( User user )
-    {
-        if (onDeleteCascade) {
-            try {
-               userManager.removeUser( user );
-               log.info( "try to delete user " + user.getName() );
-             } catch (Exception e) {
-               log.error( "deleting user " + user.getName() + " failed. " + e.getMessage());
-               if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                    log.info( "error due to " + e.getCause().getMessage() );
-                } else {
-                    log.info( "error due to " + e.getMessage() );
-                }
-             }
-        } else {
-            log.info( "onDeleteCascade false, user " + user.getName() + " not deleted!");
-        }
-    }
-    
-    private void deleteRole()
-    {
-        log.info("deleting role ");
-        if (role != null) {
-            try
-            {
-                log.info("deleting role "+ role.getName());
-                roleManager.removeRole( role );
-                role =null;
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-
-    private void deletePermission(Permission permission)
-    {
-        log.info("deleting permission *");
-        if (role != null) {
-            try
-            {
-                log.info("deleting permission "+ permission.getName());
-                permissionManager.removePermission(  permission );
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-    
-    private void deleteGroup(Group group)
-    {
-        log.info("deleting group *");
-        if (role != null) {
-            try
-            {
-                log.info("deleting group "+ group.getName());
-                groupManager.removeGroup(  group );
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/java/services/security/TurbineTorqueDefaultModelManagerTest.java b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/java/services/security/TurbineTorqueDefaultModelManagerTest.java
deleted file mode 100644
index 5ecfd06..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/java/services/security/TurbineTorqueDefaultModelManagerTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package ${package}.services.security;
-/*
- * 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 static org.junit.Assert.fail;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.Ignore;
-
-/**
- * Test Fulcrum Integration.
- *
- * Stub for further tests, relying on Fulcrum.
- *
- * @author gkallidis
- * @version $Id$
- */
-public class TurbineTorqueDefaultModelManagerTest
-    extends AbstractTurbineTorqueModelManagerTest
-{
-
-    @Override
-    @Before
-    public void setUp() throws Exception
-    {
-        try
-        {
-        	// just Fulcrum
-            setConfigurationFileName("src/test/conf/torque/fulcrumComponentConfiguration.xml");
-            setRoleFileName("src/test/conf/torque/fulcrumRoleConfiguration.xml");
-            super.setUp();
-    
-        }
-        catch (Exception e)
-        {
-            fail(e.toString());
-        }
-    }
-    
-    @Test
-    public void testDummy() {
-    	// all tests in abstract
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/resources/log4j.properties b/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/resources/log4j.properties
deleted file mode 100644
index c10e34c..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/main/resources/archetype-resources/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,75 +0,0 @@
-
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-
-log4j.logger.${package} = DEBUG, app, console
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app, console
-log4j.additivity.avalon = false
-
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-
-# #
-# Logfile definitions
-#
-
-# application.log
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.file = src/test/logs/application.log
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = true
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = src/test/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = src/test/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/test/resources/projects/first/archetype.properties b/tags/turbine-webapp-4.0-1.0.2/src/test/resources/projects/first/archetype.properties
deleted file mode 100644
index 0a96356..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/test/resources/projects/first/archetype.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-groupId=org.apache.turbine.test
-artifactId=integrationtest
-version=1.0.0-SNAPSHOT
-package=org.apache.turbine.test.integrationtest
-turbine_app_name=My Turbine Web Application
-turbine_intake_file=intake.xml
-turbine_database_name=turbine
-turbine_database_adapter=auto
-turbine_database_jndipath=jdbc/turbine
-turbine_database_driver=com.mysql.jdbc.Driver
-turbine_database_url=jdbc:mysql://localhost:3306/
-turbine_database_user=db_user
-turbine_database_password=db_password
diff --git a/tags/turbine-webapp-4.0-1.0.2/src/test/resources/projects/first/goal.txt b/tags/turbine-webapp-4.0-1.0.2/src/test/resources/projects/first/goal.txt
deleted file mode 100644
index 597acc7..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/src/test/resources/projects/first/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-package
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/LICENSE b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/NOTICE b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/NOTICE
deleted file mode 100644
index a43064b..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Turbine Webapp Component
-Copyright 2006-2016 The Apache Software Foundation.
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/README b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/README
deleted file mode 100644
index d7e9268..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/README
+++ /dev/null
@@ -1,5 +0,0 @@
-If you get that goal integration-test of maven-archetype-plugin fails with 
-
-'Cannot run additions goals." cft. https://issues.apache.org/jira/browse/ARCHETYPE-488.
-
-Fastest workaround (Dez 2016) ist to copy  mvn.cmd to mvn.bat.
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/pom.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/pom.xml
deleted file mode 100644
index 211ff9d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-    <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>18</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-4.0</artifactId>
-  <version>1.0.2</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 4.0 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 4.0</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.2</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.2</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/tags/turbine-webapp-4.0-1.0.2</url>
-  </scm>
-  
-<build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>3.0.1</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>3.0.1</version>
-           <!-- skip tests in generated archetype's pom, here the integration-test would be skipped -->
-          <!--configuration>
-            <skip>true</skip>
-          </configuration-->   
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/changes/changes.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/changes/changes.xml
deleted file mode 100644
index daeae8a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/changes/changes.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.2" date="in Subversion">
-      <action type="update" dev="gk" due-to="Jeffery Painter">
-         Added security test to show Turbine Fulcrum Torque consistency
-      </action>
-      <action type="fix" dev="gk" due-to="Jeffery Painter">
-         Fix OM classes and schema, SQL autoincrement by default used
-      </action>
-      <action type="update" dev="gk">
-        war plugin 3.2, mysql connector 5.1.44 Update
-      </action>
-      <action type="update" dev="gk">
-        Integrate JSON, Localization, Model Examples
-      </action>
-      <action type="update" dev="gk">
-        Using Torque Services, Code Cleanup, Removing Classes
-      </action>
-      <action type="update" dev="gk">
-        Turbine 4.0, JUNit 4.12
-      </action>
-    </release> 
-   <release version="1.0.1" date="in Subversion">
-       <action dev="gk" type="add">
-       Password change action, Check anonymous login
-      </action>
-      <action dev="gk" type="update">
-       JNDI Jetty Update
-      </action>
-      <action dev="tv" type="add">
-       Add testing in place with "integration-test"
-      </action>
-      <action dev="tv" type="update">
-       Turbine annotations, use auto detect Torque adapter
-      </action>
-       <action dev="gk" type="update">
-       Fulcrum Torque Security added manager, om classes
-      </action>
-      <action dev="painter" type="add">
-       Added readme, docs, helper sql..
-      </action>
-       <action dev="painter" type="update">
-       MySQL is now default
-      </action>
-      <action dev="gk" type="update">
-       Update schema to torque / intake 4.0, dependencies, configurations
-       Update to MemoryGroupManagerImpl, Fulcrum     
-      </action>
-      <action dev="gk" type="add">
-        Jetty support
-      </action>
-      <action dev="tv" type="fix">
-        TRB-95
-      </action>
-      <action dev="gk" type="update ">
-        Update to Turbine 4-M2
-      </action>
-    </release>
-    <release version="1.0.0" date="2012-11-06">
-      <action dev="tv" type="fix">
-        Fixed missing dependencies and wrong class names as reported on the mailing list
-      </action>
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/META-INF/maven/archetype-metadata.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 2ca3c72..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-4.0-velocity">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>auto</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>jdbc/turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_driver">
-      <defaultValue>com.mysql.jdbc.Driver</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_url">
-      <defaultValue>jdbc:mysql://localhost:3306/</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_user">
-      <defaultValue>db_user</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_password">
-      <defaultValue>db_password</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-  <fileSets>
-    <fileSet filtered="true" packaged="true">
-        <directory>src/test/java</directory>
-        <includes>
-          <include>**/*.java</include>
-        </includes>
-    </fileSet>
-   <fileSet filtered="true" packaged="false">
-        <directory>src/test/resources</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false">
-        <directory>src/test/logs</directory>
-        <includes>
-          <include>**/*.log</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false">
-        <directory>src/test/conf</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>docs</directory>
-      <includes>
-        <include>**/*.txt</include>
-        <include>**/*.sql</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/README.txt b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/README.txt
deleted file mode 100644
index 8352962..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/README.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-#*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*#
-
-Notice
-
-About this archetype 
-
-Turbine Version: Turbine 4.0. 
-
-# Quick Guide to using the new Turbine 4.0 maven archetype 
-for skeleton application generation
-
-## Local database Setup
-
-First, you should have a local database installed and configured prior to 
-beginning the application setup below.
-
-As we are using MySQL bey default you need to create the database in MySQL, e.g. with
-
-mysql -u <user> -p
-mysql> create database helloWorld;
-mysql> \q
-
-or other tools. The database should have been started and the database user granted enough rights.
-
-## Maven archetype 
-
-Next, you can invoke the Maven archetype for turbine-webapp-4.0 from 
-the command line as shown below - please update values starting 
-with 'groupId' as appropriate.
-
-mvn archetype:generate \
-  -DarchetypeGroupId=org.apache.turbine \
-  -DarchetypeArtifactId=turbine-webapp-4.0 \
-  -DarchetypeVersion=1.0.1-SNAPSHOT \
-  -DgroupId=com.mycompany.webapp \
-  -DartifactId=myhelloworld \
-  -Dversion=1.0 \
-  -Dturbine_app_name=HelloWorld \
-  -Dturbine_database_adapter=mysql \
-  -Dturbine_database_user=db_username \
-  -Dturbine_database_password=db_password \
-  -Dturbine_database_name=helloworld \
-  -Dturbine_database_url=jdbc:mysql://localhost:3306/ \
-  -Dgoals=generate-sources,pre-integration-test
-
-### Notes
-
-When invoking archetype:generate like above, you already have set Turbine goals generate-sources,pre-integration-test 
-and you can then skip them later.
-
-Be aware, when you set both mvn commands goals (which are maven phases actually), i.e  with
-
--Dgoals=generate-sources, pre-integration-test 
-
-you have to create the database (see above) before finishing the (interactive) archetype commands. 
-Otherwise you could catch up doing this later and after that is done calling the phases afterwards as mentioned below.
-
-#### turbine_database_url
-
-Note that the database URL (turbine_database_url) 
-will be appended with your database name
-in the final pom.xml, so you do not need to specify that in 
-the configuration.
-
-## Project Start and Usage
-
-Next, change into the newly generated project folder, in our case
-
-cd myhelloworld
-
-Skip next two steps, if the build was successfull
-mvn generate-sources  ## This will generate the OM layer and SQL 
-          ## code for creating the corresponding
-          ## database tables
-
-mvn integration-test      ## This executes the SQL code to create 
-          ## the application schema defined 
-          ## in src/main/torque-schema
-
-You should now check the database tables and if some data is missing
-insert the sample data file in sample-mysql-data (Torque 4.0 has disabled the datasql task).
-
-mvn clean install 
-
-If you get an error like "The driver has not received any packets" probably the database is not up and running or the port may be another one.
-
-Last step on the command line is run the server by invoking 
-mvn jetty:run         ## Now you can launch your new Turbine application
-
-### Logs 
-
-Find the Logs in src/main/webapp/logs and
-
-### Application
-
-Open a web browser to http://localhost:8081/app
-
-Login should work with user admin/password or user/password.
-
-## Background
-
-By default Intake is used as an validation mechanism for authentication. You can change to the default login by setting
-
-action.login=LoginUser in TurbineResources.properties and changing Login.vm appropriately (commented form)
-
-## Tests
-
-Prerequisites
-- ignored tests require at least Turbine version 4.0.1 
-- database was build successfully e.g. with archetype.
-- running mysql
-
-If running from integration test, check/update
-- in pom.xml turbine.core property,
-- target/test-classes/projects/first/project/integrationtest/src/test/conf/torque/TorqueTest.properties or
-  META-INF/maven/archetype-metadata.xml
-
-The security test is by default skipped as it requires a running mysql. It tests many of the Fulcrum Torque Turbine security aspects, 
-activate it by calling
-
-mvn test -DskipTests=false
-
-CAVEAT: If initialization fails, double check your database credentials! If invalid the error might be somewhat hidden behind a
- Torque exception!
-
-## Eclipse
-
-To enable application development in Eclipse, run the following command 
-and then import the project into Eclipse.
-
-mvn eclipse:eclipse
-
-Once imported, update your project to be managed by Maven 
--> Right click on the project name
--> Configure 
--> Convert to Maven project
-
-To test the application can be deployed by Eclipse, select the run
-configuration "Run On Server" if you have a container configured with
-your eclipse environment.
-
-### Eclipse Debugging
-
-You even could debug the app by setting the environment variable to something like this
-
-set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
-
-before running the jetty server.
-
-## Starting developing
-
-Be aware of settings and some smaller restrictions, which mostly will be fixed in the upcoming releases.
-
-- Keep groups/roles lower case (which should be fixed in Fulcrum Security 1.1.1/Turbine 4.0)
-- abstract classes and managers are included (because of some minor bugs in Fulcrum Security 1.1.0, same as above)
-- LogoutUser action is included (fix in Turbine 4.0, getUserFromSession)
-- LoginUser action is included (to check for anonymous user, may be fixed in future release)
-- OM (Torque Object Mapper) stub classes are included (until configurable in schema with Torque version 2.1)
-- TurbineConfiguration returns a Commons configuration object, even if field is not assignable (will be fixed in Turbine 4.0, you can then assign e.g. to String instead, cft. SecureScreen)
-- Database connection is done initially by default with JNDI. If you want to change it, check Torque.properties and jetty-env.xml.  
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
deleted file mode 100644
index f605246..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-
-##
-## application-data.sql
-##
-## Torque will not autogenerate these files anymore - please run
-## this SQL code maually to get your application up and running
-##
-
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (1, 'Donald', 'Knuth');
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (2, 'Mickey', 'Mouse' );
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (3, 'Bill', 'Bryson' );
-
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 1, 1, 'The Art of Computer Programming', 'Computer Science');
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 2, 2, 'Disney: Behind the Scenes', 'Fiction' );
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 3, 3, 'A Walk in the Woods', 'Fiction');
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
deleted file mode 100644
index 9477b43..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
+++ /dev/null
@@ -1,51 +0,0 @@
-##
-## turbine-security-data.sql
-##
-## Torque will not autogenerate these files anymore - but sql-maven-plugin!
-## If not, please run
-## this SQL code manually to get your application up and running
-##
-SET FOREIGN_KEY_CHECKS=0;
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (1,'admin','password','','Admin');
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (2,'user','password','','User');
-    
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (3,'anon','nopw','','Anon');
-
-INSERT INTO `turbine_permission` (`PERMISSION_ID`, `PERMISSION_NAME`) VALUES
-(2, 'Turbine'),
-(1, 'TurbineAdmin');
-
-INSERT INTO `turbine_role` (`ROLE_ID`, `ROLE_NAME`) VALUES
-(1, 'turbineadmin'),
-(2, 'turbineuser');
-
-INSERT INTO `turbine_group` (`GROUP_ID`, `GROUP_NAME`) VALUES
-(1, 'global'),
-(2, 'Turbine');
-
-INSERT INTO `turbine_role_permission` (`ROLE_ID`, `PERMISSION_ID`) VALUES
-(1, 1),
-(2, 2);
-
-INSERT INTO `turbine_user_group_role` (`USER_ID`, `GROUP_ID`, `ROLE_ID`) VALUES
-(1, 1, 1),
-(1, 2, 1),
-(2, 2, 2),
-(2, 1, 2);
-
--- 
-ALTER TABLE TURBINE_USER MODIFY COLUMN USER_ID INT auto_increment;
-ALTER TABLE turbine_permission MODIFY COLUMN PERMISSION_ID INT auto_increment;
-ALTER TABLE turbine_role MODIFY COLUMN ROLE_ID INT auto_increment;
-ALTER TABLE turbine_group MODIFY COLUMN GROUP_ID INT auto_increment;
-
-
-##-- use ID_TABLE  witk idMethod="idbroker" and set appropriate start_id and end_id 
-##-- INSERT INTO ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1,'TURBINE_USER',start_id, end_id);
-    
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 60eea5a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,423 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var $label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <!-- (target) resource and filtering is not used  at all ? 
-            at least removed setting absolute path e.g. with #var("project.build.directory"), 
-            which does thrown an exception with mvn eclipse:eclipse - path is then incorrectly relativized.
-                --> 
-            <resource> 
-                <targetPath>../torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <testSourceDirectory>src/test/java</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test/resources</directory>
-                <includes>
-                    <include>*.xml</include>
-                    <include>*.properties</include>
-                </includes>
-            </testResource>
-        </testResources>
-        <plugins>
-            <!-- test will not fail in turbien 4.0.1 -->
-            <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-surefire-plugin</artifactId>
-              <version>2.20.1</version>
-              <configuration>
-                <skipTests>#var("skipTests")</skipTests>
-              </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.5.1</version>
-                <configuration>
-                    <source>#var("maven.compile.source")</source>
-                    <target>#var("maven.compile.target")</target>
-                    <encoding>#var("project.build.sourceEncoding")</encoding>
-                </configuration>
-            </plugin>
-             <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>4.0</version>
-                <configuration>
-                    <schemaDir>#var("project.basedir")/src/main/torque-schema</schemaDir>
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-                  <execution>
-                    <id>torque-om</id>
-                    <phase>generate-sources</phase>
-                    <goals>
-                      <goal>generate</goal>
-                    </goals>
-                    <configuration>
-                      <packaging>classpath</packaging>
-                      <configPackage>org.apache.torque.templates.om</configPackage>
-                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-                      <loglevel>error</loglevel>
-                      <options>
-                        <torque.database>${turbine_database_adapter}</torque.database>
-                        <torque.om.package>${package}.om</torque.om.package>
-                        <torque.om.addGetByNameMethods>false</torque.om.addGetByNameMethods>
-                        <torque.om.save.saveException>TorqueException</torque.om.save.saveException>
-                        <torque.om.useIsForBooleanGetters>true</torque.om.useIsForBooleanGetters>
-                        <torque.om.useManagers>false</torque.om.useManagers>
-                        <torque.om.addTimeStamp>true</torque.om.addTimeStamp>
-                        <torque.om.objectIsCaching>true</torque.om.objectIsCaching>
-                        <torque.om.save.addSaveMethods>true</torque.om.save.addSaveMethods>
-                        <torque.om.addGetByNameMethods>true</torque.om.addGetByNameMethods>
-                        <torque.om.complexObjectModel>true</torque.om.complexObjectModel>
-                      </options>
-                      <!-- keeping defaultOutputDir in default ${project.build.directory}/generated-sources will havee the base classes there -->
-                      <!-- we want the classes, which may be custumoized in the source directory. Ignore the warning about generated-java -->
-                      <outputDirMap>
-                        <modifiable>#var("project.build.sourceDirectory")</modifiable>
-                      </outputDirMap>
-                    </configuration>
-                  </execution>
-                  <execution>
-                    <id>torque-sql-mysql</id><!-- ${turbine_database_adapter} -->
-                    <phase>generate-sources</phase>
-                    <goals>
-                      <goal>generate</goal>
-                    </goals>
-                    <configuration>
-                      <packaging>classpath</packaging>
-                      <configPackage>org.apache.torque.templates.sql</configPackage>
-                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-                      <defaultOutputDir>#var("project.build.directory")/generated-sql/torque/mysql</defaultOutputDir>
-                      <defaultOutputDirUsage>none</defaultOutputDirUsage>
-                      <loglevel>error</loglevel>
-                      <options>
-                        <torque.database>mysql</torque.database>
-                      </options>
-                    </configuration>
-                  </execution>
-              </executions>
-              <dependencies>
-                 <dependency>
-                    <groupId>org.apache.torque</groupId>
-                    <artifactId>torque-templates</artifactId>
-                    <version>4.0</version>
-                  </dependency>
-              </dependencies>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-war-plugin</artifactId>
-            <version>3.2.0</version>
-            <configuration>
-                <archive>
-                    <manifestEntries>
-                        <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                        <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                    </manifestEntries>
-                </archive>
-                <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-            </configuration>
-          </plugin>
-        <!-- Required to execute torque database build -->
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>sql-maven-plugin</artifactId>
-          <version>1.5</version>
-          <configuration>
-            <!-- Please update with your database configuration -->
-            <driver>${turbine_database_driver}</driver>
-            <url>${turbine_database_url}${turbine_database_name}</url>
-            <username>${turbine_database_user}</username>
-            <password>${turbine_database_password}</password>
-            <onError>continue</onError>
-            <autocommit>true</autocommit>
-            <orderFile>descending</orderFile>
-          </configuration>
-          <!-- update with your database driver dependency -->
-          <!-- this is mysql specific -->
-          <dependencies>
-            <dependency>
-              <artifactId>mysql-connector-java</artifactId>
-              <groupId>mysql</groupId>
-              <version>5.1.40</version>
-            </dependency>
-          </dependencies>
-          <!-- this is mysql specific -->
-          <executions>
-            <execution>
-                <id>create-db</id>
-                <phase>pre-integration-test</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <orderFile>ascending</orderFile>
-                  <fileset>
-                    <basedir>#var("project.build.directory")/generated-sql/torque/mysql</basedir>
-                    <!-- basedir>${basedir}/target/generated-sql</basedir -->
-                    <includes>
-                      <include>*.sql</include>
-                    </includes>
-                  </fileset>
-              </configuration>
-            </execution>
-            <execution>
-              <id>create-data</id>
-              <phase>pre-integration-test</phase>
-              <goals>
-                <goal>execute</goal>
-              </goals>
-              <configuration>
-                <orderFile>ascending</orderFile>
-                <srcFiles>
-                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_application-data.sql</srcFile>
-                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_turbine-security-data.sql</srcFile>
-                </srcFiles>              
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <!-- jetty:run checks deployed war http://localhost:8081/app/ 
-           Using jetty 8 as supporting java 6. Other specs cft. http://www.eclipse.org/jetty/documentation/9.3.0.v20150612/what-jetty-version.html  -->
-        <plugin>
-           <groupId>org.mortbay.jetty</groupId>
-           <artifactId>jetty-maven-plugin</artifactId>
-           <version>8.1.16.v20140903</version>
-          <configuration>
-            <scanIntervalSeconds>10</scanIntervalSeconds>
-            <dumpOnStart>true</dumpOnStart>
-            <reload>manual</reload>
-            <connectors>
-            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
-              <port>8081</port>
-            </connector>
-            </connectors>
-            <!--webApp>
-              <contextPath>/app</contextPath>
-            </webApp-->
-          </configuration>
-        </plugin>
-      </plugins>
-    </build>
-
-    <dependencies>
-    
-    <!-- update with the database driver of your choice -->
-    <dependency>
-      <artifactId>mysql-connector-java</artifactId>
-      <groupId>mysql</groupId>
-      <version>5.1.44</version>
-    </dependency>    
-      <dependency>
-          <groupId>javax.activation</groupId>
-          <artifactId>activation</artifactId>
-          <version>1.1.1</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-          <version>1.4.5</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>javax.servlet</groupId>
-          <artifactId>servlet-api</artifactId>
-          <version>2.5</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.turbine</groupId>
-          <artifactId>turbine</artifactId>
-          <version>#var("turbine.core")</version>
-      </dependency>
-      <!-- slf4j still optional in 4.0 -->
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-       <dependency>     <!-- delegate slf4j to log4j -->
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
-        <version>${slf4j.version}</version>
-       </dependency>
-       <dependency>     <!-- redirect JCL to slf4j -->
-        <groupId>org.slf4j</groupId>
-        <artifactId>jcl-over-slf4j</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <!-- yaafi is optional. NOTICE: 1.0.7 has group org.apache.turbine not org.apache.fulcrum  -->
-      <dependency>
-        <groupId>org.apache.turbine</groupId>
-        <artifactId>fulcrum-yaafi</artifactId>
-        <version>1.0.7</version>
-      </dependency>
-      <!-- if using intake -->
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-intake</artifactId>
-        <version>1.2.2</version>
-       </dependency>
-       <!-- include some optional dependencies required in example componentConfiguration.xml -->
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-cache</artifactId>
-        <version>1.1.0</version>
-      </dependency>
-       <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-upload</artifactId>
-        <version>1.0.5</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-memory</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-       <dependency>             
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-torque</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-api</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-json-jackson2</artifactId>
-        <version>#var("fulcrum.json")</version>
-      </dependency>
-      <dependency>
-        <groupId>com.fasterxml.jackson.datatype</groupId>
-        <artifactId>jackson-datatype-json-org</artifactId>
-        <!-- version>$dollar{jackson.version}</version-->
-        <!--  2.7.x has Java 7 baseline, but not compiled with Java 6 support (version 51 error:), cft. https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.7 Changes: compatibility: ..  should still be possible to use Jackson 2.7 on Java 6, but not compile, build. With Jackson 2.8, Java 7 languages features will be allowed -->
-        <version>2.6.6</version>
-      </dependency>
-      <!-- if activating useJsonPath include jayway dependency  -->
-      <!-- dependency>
-            <groupId>com.jayway.jsonpath</groupId>
-            <artifactId>json-path</artifactId>
-            <version>2.3.0</version>
-            <exclusions>
-              <exclusion>
-                <groupId>net.minidev</groupId>
-                <artifactId>json-smart</artifactId>
-              </exclusion>
-            </exclusions>
-        </dependency-->
-        
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-testcontainer</artifactId>
-          <version>1.0.7</version>
-          <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-        <fulcrum.json>1.1.1</fulcrum.json>
-        <fulcrum.security>1.1.1</fulcrum.security>
-        <turbine.core>4.0</turbine.core>
-        <slf4j.version>1.7.25</slf4j.version>
-        <skipTests>true</skipTests>
-    </properties>
-    
-    
-    <profiles>
-        <profile>
-            <id>jetty</id>
-            <build>
-                <defaultGoal>jetty:run</defaultGoal>
-                <plugins>
-                    <plugin>
-                        <groupId>org.mortbay.jetty</groupId>
-                        <artifactId>maven-jetty-plugin</artifactId>
-                        <configuration>
-                            <connectors>
-                                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-                                    <port>15000</port>
-                                    <maxIdleTime>60000</maxIdleTime>
-                                </connector>
-                            </connectors>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-       <profile>
-            <id>tomcat</id>
-            <build>
-                <defaultGoal>tomcat:run</defaultGoal>
-                <finalName>#var("project.artifactId")</finalName>
-                <plugins>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>tomcat-maven-plugin</artifactId>
-                        <configuration>
-                            <port>15000</port>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-    
-</project>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N.properties
deleted file mode 100644
index f9f58dd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-l10nkey=Default value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
-no_permission=You do not have permission, login required.
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
deleted file mode 100644
index 1921853..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
-#
-# 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.
-
-l10nkey = German value
-
-password_msg = Bitte ein Passwort eingeben
-
-username_mask_msg = Geben Sie als Benutzername eine E-Mail-Adresse ein
-
-username_min_length_msg = Es m\u00FCssen {0} Zeichen eingegeben werden
-
-username_required_msg = Bitte einen Benutzernamen eingeben
-
-no_permission=Unautorisierte Aktion erfordert Login.
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 44120d1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-l10nkey=US-English value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
deleted file mode 100644
index ca7255b..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.security.util.PasswordMismatchException;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Change Password action.
- *
- */
-public class ChangePasswordAction extends SecureAction 
-
-{
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    public void doPerform(PipelineData data)
-            throws Exception 
-            {
-
-    User user = getRunData(data).getUser();
-    
-    RunData rundata = getRunData(data);
-    String oldPassword = rundata.getParameters().getString("oldpassword", "");
-    String newPassword = rundata.getParameters().getString("newpassword", "");
-    
-    try {
-        security.changePassword(user, oldPassword, newPassword); 
-        rundata.setMessage("Password changed!");
-    }
-    catch (PasswordMismatchException e) 
-    {
-      rundata.setMessage(e.getMessage());
-      rundata.setScreenTemplate("Password.vm");
-    }
-    
-    
-  }
-    
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  @Override
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-
-    context.put("success", "Password changed!!");
-  }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
deleted file mode 100644
index 3018954..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LoginUser.java 1725011 2016-01-16 17:38:47Z tv $
- */
-public class LoginUser
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUser.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        String username = data.getParameters().getString(LoginUser.CGI_USERNAME, "");
-
-        if (StringUtils.isEmpty(username))
-        {
-            return;
-        }
-
-    	if (username.equals(security.getAnonymousUser().getName()))
-        {
-            data.setMessage("Anonymous user cannot login");
-            reset(data);
-            return;
-        }
-    	
-       super.doPerform(pipelineData);
-
-    }
-
-
-
-	private void reset(RunData data) throws UnknownEntityException {
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-
-		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-		{
-		    // We're running in a templating solution
-		    data.setScreenTemplate(
-		    		conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-		}
-		else
-		{
-		    data.setScreen(
-		    		conf.getString(TurbineConstants.SCREEN_LOGIN));
-		}
-	}
-
-}
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
deleted file mode 100644
index 4dca1f0..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.pool.PoolService;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.intake.model.Group;
-import org.apache.fulcrum.intake.IntakeException;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.intake.IntakeTool;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LoginUserIntake
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUserIntake.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        	
-       try
-        {
-          // Get intake group          
-    	    // context only available after ExecutePageValve, could not invoke (IntakeTool)context.get("intake") using pook service instead
-          PoolService poolService =  (PoolService)TurbineServices.getInstance().getService(PoolService.ROLE);
-          IntakeTool intake = (IntakeTool) poolService.getInstance(IntakeTool.class);
-          
-          intake.init(data);
-          Group group = intake.get("Login", IntakeTool.DEFAULT_KEY);
-          String username = (String)group.get("Username").getValue();
-          if (StringUtils.isEmpty(username))
-            {
-                return;
-            }
-
-          if (username.equals(security.getAnonymousUser().getName()))
-            {
-                data.setMessage("Anonymous user cannot login");
-                reset(data);
-                return;
-            }
-            
-        	if (username.equals(security.getAnonymousUser().getName()))
-            {
-                throw new Exception("Anonymous user cannot login");
-            }
-        	
-            String password = (String)group.get("Password").getValue();
-            // Authenticate the user and get the object.
-            User user = security.getAuthenticatedUser(username, password);
-
-            // Store the user object.
-            data.setUser(user);
-
-            // Mark the user as being logged in.
-            user.setHasLoggedIn(Boolean.TRUE);
-
-            // Set the last_login date in the database.
-            user.updateLastLogin();
-
-            // This only happens if the user is valid; otherwise, we
-            // will get a valueBound in the User object when we don't
-            // want to because the username is not set yet.  Save the
-            // User object into the session.
-            data.save();
-
-            /*
-             * If the setPage("template.vm") method has not
-             * been used in the template to authenticate the
-             * user (usually Login.vm), then the user will
-             * be forwarded to the template that is specified
-             * by the "template.home" property as listed in
-             * TR.props for the webapp.
-             */
-
-        }
-        catch (Exception e)
-        {
-            if (e instanceof DataBackendException || e instanceof IntakeException)
-            {
-                log.error(e);
-            }
-
-            // Set Error Message and clean out the user.
-            data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
-            User anonymousUser = security.getAnonymousUser();
-            data.setUser(anonymousUser);
-            
-            String loginTemplate = conf.getString(
-                    TurbineConstants.TEMPLATE_LOGIN);
-
-            if (StringUtils.isNotEmpty(loginTemplate))
-            {
-                // We're running in a templating solution
-                data.setScreenTemplate(loginTemplate);
-            }
-            else
-            {
-                data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-            }
-        }
-    }
-
-  private void reset(RunData data) throws UnknownEntityException {
-    User anonymousUser = security.getAnonymousUser();
-    data.setUser(anonymousUser);
-
-    if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-    {
-        // We're running in a templating solution
-        data.setScreenTemplate(
-            conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-    }
-    else
-    {
-        data.setScreen(
-            conf.getString(TurbineConstants.SCREEN_LOGIN));
-    }
-  }
-
-}
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
deleted file mode 100644
index 2fea6dd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This action removes a user from the session. It makes sure to save
- * the User object in the session.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LogoutUser.java 1706239 2015-10-01 13:18:35Z tv $
- */
-public class LogoutUser
-        extends Action
-{
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-    /**
-     * Clears the PipelineData user object back to an anonymous status not
-     * logged in, and with a null ACL.  If the tr.props ACTION_LOGIN
-     * is anything except "LogoutUser", flow is transfered to the
-     * SCREEN_HOMEPAGE
-     *
-     * If this action name is the value of action.logout then we are
-     * being run before the session validator, so we don't need to
-     * set the screen (we assume that the session validator will handle
-     * that). This is basically still here simply to preserve old behaviour
-     * - it is recommended that action.logout is set to "LogoutUser" and
-     * that the session validator does handle setting the screen/template
-     * for a logged out (read not-logged-in) user.
-     *
-     * @param pipelineData Turbine information.
-     * @exception FulcrumSecurityException a problem occurred in the security
-     *            service.
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        // Session validator did not run, so RunData is not populated
-        User user = data.getUserFromSession();
-
-        if (user != null && !security.isAnonymousUser(user))
-        {
-            // Make sure that the user has really logged in...
-            if (!user.hasLoggedIn())
-            {
-                return;
-            }
-
-            user.setHasLoggedIn(Boolean.FALSE);
-            security.saveUser(user);
-        }
-
-        data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
-
-        // This will cause the acl to be removed from the session in
-        // the Turbine servlet code.
-        data.setACL(null);
-
-        // Retrieve an anonymous user.
-        User anonymousUser = security.getAnonymousUser();
-        data.setUser(anonymousUser);
-        data.save();
-
-        // In the event that the current screen or related navigations
-        // require acl info, we cannot wait for Turbine to handle
-        // regenerating acl.
-        data.getSession().removeAttribute(TurbineConstants.ACL_SESSION_KEY);
-
-        // If this action name is the value of action.logout then we are
-        // being run before the session validator, so we don't need to
-        // set the screen (we assume that the session validator will handle
-        // that). This is basically still here simply to preserve old behavior
-        // - it is recommended that action.logout is set to "LogoutUser" and
-        // that the session validator does handle setting the screen/template
-        // for a logged out (read not-logged-in) user.
-        if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY,
-                            TurbineConstants.ACTION_LOGOUT_DEFAULT)
-            .equals(TurbineConstants.ACTION_LOGOUT_DEFAULT))
-        {
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-        }
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
deleted file mode 100644
index c25fae5..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.localization.LocalizationService;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.actions.VelocitySecureAction;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity Secure action.
- *
- * Always performs a Security Check that you've defined before executing the
- * doPerform().
- */
-public class SecureAction extends VelocitySecureAction 
-{
-    
-    @TurbineService
-    private LocalizationService localizationService;
-  /**
-   * This currently only checks to make sure that user is allowed to view the
-   * storage area. If you create an action that requires more security then
-   * override this method.
-   *
-   * @param data
-   *            Turbine information.
-   * @return True if the user is authorized to access the screen.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-    
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-    
-        if (acl == null || ! ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") ) ) 
-        {
-           String msg =  localizationService.getString(localizationService.getDefaultBundleName(), 
-                                          localizationService.getLocale( ((RunData) data).getRequest()), "no_permission");
-            
-            getRunData(data).setMessage(msg);
-    
-            log.debug( "call not permitted for template: " + getRunData(data).getScreenTemplate() + " and action " + getRunData(data).getAction() );
-             getRunData(data).setScreenTemplate( "Login.vm" );
-            isAuthorized = false;
-        } 
-        else if ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") )
-        {
-            isAuthorized = true;
-        }
-    
-        return isAuthorized;
-    }
-
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-    User user = getRunData(data).getUser();
-    context.put("user",user);
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
deleted file mode 100644
index 0ec8a8f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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 java.util.List;
-
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.om.Author;
-import ${package}.om.AuthorPeer;
-
-public class ShowRecords  extends SecureAction 
-{
-
-	@Override
-	public void doPerform( PipelineData pipelineData, Context context )
-	    throws Exception
-	{
-	    super.doPerform( pipelineData, context );
-	    List<Author> authors = AuthorPeer.doSelect( new Criteria() );//all
-	    context.put( "authors", authors );
-	    RunData data = getRunData(pipelineData);
-	    data.setScreenTemplate(Character.toLowerCase(getClass().getSimpleName().charAt(0)) + 
-	    		getClass().getSimpleName().substring(1) + ".vm"
-	    ); 
-	    
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 6f6fa70..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.fulcrum.json.JsonService;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.velocity.context.Context;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-    
-    JsonService jsonService = (JsonService)TurbineServices.getInstance().getService(JsonService.ROLE);
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-    		throws Exception
-    {
-    	context.put("success", "Congratulations, it worked!");
-    }
-    
-    /**
-     * This method is called bythe Turbine framework to determine if
-     * the current user is allowed to use this screen. If this method
-     * returns false, the doBuildTemplate() method will not be called.
-     * If a redirect to some "access denied" page is required, do the
-     * necessary redirect here.
-     * 
-     * return always <code>true</code>true, to show this screen as default
-     */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception
-    {
-    	// use data.getACL() 
-    	return true;
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
deleted file mode 100644
index aff1b2a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package ${package}.modules.screens;
-
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample extending a secured screen
- */
-public class Password extends SecureScreen 
-{
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-    		throws Exception
-    {
-    	
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
deleted file mode 100644
index 2f90b62..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample implementation for creating a secured screen
- */
-public class SecureScreen extends VelocitySecureScreen 
-{
-   	@TurbineService
-   	protected SecurityService securityService;
-    	
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_LOGIN )
-    private Configuration templateLogin;
-    
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_HOMEPAGE )
-    private Configuration templateHomepage;
-    
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-        
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-        
-        if (acl == null)
-        {
-          // commons configuration getProperty: prefix removed, the key for the value .. is an empty string, the result an object
-        getRunData(data).setScreenTemplate( (String) templateLogin.getProperty("") );
-        	isAuthorized = false;
-        } 
-        else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin"))
-        {
-            isAuthorized = true;
-        }
-        else 
-        {
-            getRunData(data).setScreenTemplate( (String) templateHomepage.getProperty("") );
-            getRunData(data).setMessage("You do not have access to this part of the site.");
-            isAuthorized = false;
-        }
-        return isAuthorized;
-    }
-
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param data
-     *            Turbine information.
-     * @param context
-     *            Context for web pages.
-     * @exception Exception,
-     *                a generic exception.
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context) throws Exception 
-    {
-    
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
deleted file mode 100644
index 55ba3b1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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 java.util.ArrayList;
-import java.util.List;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.velocity.context.Context;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class TestSecure extends SecureScreen
-{
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-                    throws Exception
-    {
-      context.put("success", "Congratulations, it worked here too!");
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
deleted file mode 100644
index d54dcf1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeer
-    extends ${package}.om.BaseTurbineGroupPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
deleted file mode 100644
index 94c681d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeerImpl
-    extends ${package}.om.BaseTurbineGroupPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineGroup>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
deleted file mode 100644
index bdbdf0f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Thu Sep 04 12:20:05 CEST 2014]
- *
- *  You should add additional methods to this class to meet the
- *  application requirements.  This class will only be generated as
- *  long as it does not already exist in the output directory.
- */
-public class TurbinePermissionPeer
-    extends ${package}.om.BaseTurbinePermissionPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
deleted file mode 100644
index 19bd132..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Mon Nov 25 16:49:55 CET 2013]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public class TurbinePermissionPeerImpl
-    extends ${package}.om.BaseTurbinePermissionPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbinePermission>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 138394595924L;
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
deleted file mode 100644
index 739597f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeer
-    extends ${package}.om.BaseTurbineRolePeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
deleted file mode 100644
index 91d307f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeerImpl
-    extends ${package}.om.BaseTurbineRolePeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineRole>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
deleted file mode 100644
index a26f32e..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public  class TurbineRolePermission
-    extends ${package}.om.BaseTurbineRolePermission
-{
-    /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
deleted file mode 100644
index 5416761..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package ${package}.om;
-
-import java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.torque.TorqueException;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- * #set( $H = '#' )
- * Added Interface
- * @author gk
- *
- */
-public  class TurbineUser
-    extends ${package}.om.BaseTurbineUser implements org.apache.fulcrum.security.model.turbine.entity.TurbineUser
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437136L;
-    
-   /**
-     * Get the value of id.
-     *
-     * @return Object
-     */
-    @Override
-	public Object getId() 
-    {
-        
-        return getEntityId();
-    }
-
-    /**
-     * Set the value of id.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setId(Object v)
-    {
-        setEntityId( (Integer) v);
-
-    }
-    
-        /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-
-    }
-    
-    /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity$HretrieveAttachedObjects(java.sql.Connection)
-     */
-    @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
-    {
-        Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
-
-        List<${package}.om.TurbineUserGroupRole> ugrs = getTurbineUserGroupRoles();
-
-        for (${package}.om.TurbineUserGroupRole ttugr : ugrs)
-        {
-            TurbineUserGroupRole ugr = new TurbineUserGroupRole();
-            ugr.setUser(this);
-            ugr.setRole(ttugr.getTurbineRole());
-            ugr.setGroup(ttugr.getTurbineGroup(con));
-            userGroupRoleSet.add(ugr);
-        }
-
-        setUserGroupRoleSet(userGroupRoleSet);
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
deleted file mode 100644
index 4c330e2..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-
-public class TurbineUserPeer
-    extends ${package}.om.BaseTurbineUserPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
deleted file mode 100644
index 38d7984..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineUserPeerImpl
-    extends ${package}.om.BaseTurbineUserPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineUser>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
deleted file mode 100644
index f529e20..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package ${package}.services.pull;
-
-#*
-* 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 java.util.HashSet;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.json.JsonService;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.pull.RunDataApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.services.security.SecurityService;
-
-
-public class RelatedTool implements RunDataApplicationTool {
-  
-  /** Logging */
-  private static Log log = LogFactory.getLog(RelatedTool.class);
-    
-  private RunData data = null;
-
-  @Override
-  public void init(Object data) {
-    this.data = (RunData) data;
-
-  }
-  
-  @Override
-  public void refresh(RunData data) {
-    this.data = data;
-  }
-  
-  public String getUserrole() {
-    try {
-      User user = data.getUser();
-      Role role = null;
-      if (user != null && user.getName() != null) {
-          log.info("reading role for: "+user.getName());
-          if (data.getACL() != null && data.getACL() instanceof TurbineAccessControlList) {
-            RoleSet roles = ((TurbineAccessControlList)data.getACL()).getRoles();
-            if (roles != null && roles.getSet().size() == 1) {
-              Role fulcrumRole = roles.getSet().iterator().next();
-                log.debug("acl role is: "+fulcrumRole.getName());
-                return fulcrumRole.getName();
-            }
-          } else {
-            SecurityService securityService = (SecurityService) TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
-            RoleSet roles = securityService.getAllRoles();   				
-          }
-      } else if (user != null) {
-        SecurityService securityService = (SecurityService) TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
-          role = securityService.getRoleByName("user");
-              //.retrieveRole("anon");				
-      }
-      return (role != null)? role.getName(): null;
-    } catch (Exception e) {
-      log.error("RelatedTool - failure in reading role: ", e);
-      return null;
-    }
-  }
-  
-  @SuppressWarnings( "unchecked" )
-    public <T> Object getJson(Object src, String className, String mixinCN, Boolean refresh, String... props ) {
-        String result= null;
-        JsonService jsonService = (JsonService)TurbineServices
-        .getInstance().getService(JsonService.ROLE);
-        try
-        {
-            log.info( "refresh is:"+ refresh );
-            log.info( "jsonService:"+ jsonService );
-            log.info( "source class is:"+ className );
-            log.info( "target object is:"+ src );
-            Class clazz = Class.forName(className);
-            if (props != null) {
-                log.info( "props length:"+ props.length);
-                  for ( int i = 0; i < props.length; i++ )
-                {
-                      log.debug( "props:"+ props[i]);
-                }
-            }
-            if (mixinCN != null ) {
-               Class mixin = Class.forName(mixinCN);
-               if (mixin != null ) {
-                 Set<Class> mixins = new HashSet<Class>();
-                 mixins.add( mixin );
-                   log.info( "adding adapter mixinCN:"+ mixinCN);
-                   jsonService.addAdapter( mixinCN, clazz, mixin );
-               }
-            }
-            String serialized =  jsonService.serializeOnlyFilter( src, clazz, refresh, props );
-            log.debug( "serialized:"+serialized );
-            return serialized;
-        }
-        catch ( Exception e )
-        {
-            log.error(e.getMessage(),e );
-            result = e.getMessage();
-        }
-        return result;
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
deleted file mode 100644
index bf2cf0a..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ${package}.wrapper;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.turbine.om.security.DefaultUserImpl;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-/**
- * Custom Wrapper instead fo default Turbine wrapper class {@link DefaultUserImpl} to allow for annotations, 
- * - th single requirment for wrappers is to implement a constructor with parameter {@link TurbineUser}
- *
- */
- @JsonIgnoreProperties( {"permStorage", "type","objectdata" } )
-public  class TurbineUserWrapper
-    extends DefaultUserImpl
-{
-   public TurbineUserWrapper(TurbineUser user) {
-      super(user);
-	}
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 8e867d5..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml                                          -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-
-	<!--  Simple author/book database example -->
-	<table name="AUTHOR" idMethod="idbroker">
-		<column name="AUTH_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="FIRST_NAME"  required="true" size="64" type="VARCHAR" />
-		<column name="LAST_NAME"   required="true" size="64" type="VARCHAR" />
-	</table>
-
-    <table name="BOOK" idMethod="idbroker">
-		<column name="BOOK_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="AUTH_ID"     required="true" type="INTEGER" />
-		<column name="TITLE"       required="true" size="64" type="VARCHAR" />
-		<column name="SUBJECT"     required="true" size="64" type="VARCHAR" />
-		<foreign-key foreignTable="AUTHOR">
-			<reference local="AUTH_ID" foreign="AUTH_ID"></reference>
-		</foreign-key>		
-	</table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 5002f21..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 8503f8f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="turbineadmin"/>
-  <TurbinePermission PermissionId="2" Name="turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="turbineadmin"/>
-  <TurbineRole RoleId="2" Name="turbineuser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index 8b51af0..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!--  Schema documentation                                                    -->
-<!--  http://db.apache.org/torque/torque-4.0/documentation/orm-reference/database-4-0-strict.xsd -->
-<!--  http://db.apache.org/torque/torque-4.0/documentation/orm-reference/database-4-0.xsd -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="none">
-
-
-  <table name="TURBINE_PERMISSION" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbinePermission" interface="org.apache.fulcrum.security.model.turbine.entity.TurbinePermission">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineRole" interface="org.apache.fulcrum.security.model.turbine.entity.TurbineRole">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineGroup" interface="org.apache.fulcrum.security.model.turbine.entity.TurbineGroup">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <!-- Turbine service revokeAll(role) manages removal, but you might want to handle it just with onDelete="cascade" -->
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <!-- org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity -->
-  <table name="TURBINE_USER" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineUser"
-  interface="org.apache.fulcrum.security.model.turbine.entity.TurbineUser">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED_DATE" type="TIMESTAMP" javaName="ModifiedDate"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <!-- Turbine service revokeAll(user) manages removal, but you might want to handle it just with onDelete="cascade" -->
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 023ef76..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,126 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-
-
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=${turbine_database_name}
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-#torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-#torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-#torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-torque.manager.useCache = true
-
-# Determines if IDBroker should prefetch IDs or not.  If set to false
-# this property has the effect of shutting off the housekeeping thread
-# that attempts to prefetch the id's.  It also sets the # of id's grabbed
-# per request to 1 regardless of the settings in the database.
-# Default: true
-torque.idbroker.prefetch = true
-
-# Controls the starting id of table entries when creating SQL for 
-# the id-table. If you have two projects that use the same id-table 
-# in the same database with different tables, make sure that they have 
-# different initialID settings and the ranges (initialID is incremented 
-# for every new table) don't overlap.
-torque.idbroker.initialId = 101 
-
-# The start value of the ID broker for supplying IDs to Torque. This value 
-# is incremented every time Torque requests ID keys from the broker. If you 
-# pre-load your table straight from SQL, make sure that you don't accidentially 
-# overlap with this setting, because Torque doesn't keep record of what IDs are 
-# already taken in the database. If you overlap, inserting new objects will fail 
-# because the ID assigned by Torque is already taken.
-torque.idBroker.initialIdValue = 100
-
-# For performance reasons, the ID Broker does not request a single ID at a time
-# but fetches a whole range and increments the current next ID Value in the ID
-# Table by this step. If you have to do lots of inserts straight in a row, increment
-# this value to get slightly better performance.
-torque.idbroker.initialIdStep = 500
-
-# IDBroker can grab its own connection from the pool to use when retrieving
-# more id's to minimize the amount of time ID_TABLE will be locked.
-# Some usage of IDBroker or assumptions made by connection pools or jdbc
-# drivers may disallow this optimization in which case the property
-# should be set to false.
-torque.idbroker.usenewconnection = true
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
-
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
deleted file mode 100644
index 4c6407e..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<configuration>
-   <header>
-    <!-- Meta data about the resulting combined configuration -->
-  </header>
-  <override><!-- only allowed configurations are user and turbine, realtive paths   -->
-    <properties config-name="user" fileName="WEB-INF/conf/usersettings.properties" config-optional="true" config-forceCreate="true"/> 
-    <!-- xml fileName="conf/test/TurbineResources.xml"/-->
-    <properties config-name="turbine" fileName="WEB-INF/conf/TurbineResources.properties" throwExceptionOnMissing="true"/>
-   </override>
-  <additional>
-    <!-- Configuration declarations that form a union configuration, always provide a unique config-name attribute  -->
-  </additional>
-</configuration>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index a883250..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,655 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  P I P E L I N E
-#
-# -------------------------------------------------------------------
-pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explicitly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUserIntake
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-tool.request.related=${package}.services.pull.RelatedTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-tool.ui.css=page.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm,macros/applicationMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been initialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager
-
-services.SecurityService.user.class=org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl
-# define custom wrapper
-services.SecurityService.wrapper.class = ${package}.wrapper.TurbineUserWrapper
-
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = /WEB-INF/conf/containerConfiguration.xml
-#
-# Name and location to the configuration file for the component roles.
-#
-#services.AvalonComponentService.componentRoles =  /WEB-INF/conf/roleConfiguration.xml
-#
-#services.AvalonComponentService.componentConfiguration = /WEB-INF/conf/componentConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index bed2c7d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-        <unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-    <localization>
-      <bundles>
-        <bundle>${package}.L10N</bundle>
-      </bundles>
-    </localization>
-    <!-- Disable if you experience startup problems with Java8 -->
-    <intake>
-      <serialDataPath>WEB-INF/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>WEB-INF/conf/${turbine_intake_file}</xmlPath>
-      </xmlPaths>
-    </intake>
-    <factory/>
-    <pool/>
-    <parser>
-        <!-- <urlCaseFolding>lower</urlCaseFolding> -->
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-    <!-- defining specific inspectors -->
-    <json>
-       <annotationInspectors>
-            <primary>org.apache.fulcrum.json.jackson.SimpleNameIntrospector</primary>
-            <secondary>com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector</secondary>
-            <features>
-              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">FAIL_ON_EMPTY_BEANS</feature>
-              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">INDENT_OUTPUT</feature>
-              <feature value="true" type="com.fasterxml.jackson.core.JsonParser">ALLOW_UNQUOTED_FIELD_NAMES</feature>
-            </features>
-        </annotationInspectors>
-        <dateFormat>MM/dd/yyyy</dateFormat>
-        <cacheFilters>true</cacheFilters>
-        <!-- security feature -->
-        <escapeCharsGlobal>true</escapeCharsGlobal>
-        <!--  escapeCharsClass>net.example.EscapeCharClass</escapeCharsClass -->
-        <defaultTyping type="OBJECT_AND_NON_CONCRETE" key="type"/><!-- defaultTyping type="NON_FINAL" key="type"/-->
-        <!-- requires com.jayway dependency in pom -->
-        <!-- useJsonPath>true</useJsonPath -->
-    </json>
-    
-    <upload repository="/tmp" sizeMax="1048576" sizeThreshold="10240"/>
-        <!-- These components belong to the Fulcrum-Security services -->        
-    <securityService/>
-    <authenticator/>
-    <!--   <authenticator>
-          <algorithm>java</algorithm>
-          <cipher>SHA1</cipher>    </authenticator>   -->
-
-    <modelManager/>
-    <aclFactory/>
-    
-    <!--  
-       Fulcrum Components, e.g. json, XmlRpcServerComponent, cft. Fulcrum Component Configurations 
-     -->
-       
-     
-     <!--  
-     Pure Fulcrum Model
-    -->
-    <!--
-     <userManager> 
-       <className>org.apache.fulcrum.security.torque.om.TorqueTurbineUser</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineGroup</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineRole</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbinePermission</className>
-    </permissionManager>
-    -->
- 
-     <!-- 
-     Default classes implementing org.apache.fulcrum.security.model.turbine.entity interfaces 
-     -->
-    <!--userManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineGroupImpl</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineRoleImpl</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbinePermissionImpl</className>
-    </permissionManager -->
-    
-    <!-- 
-     Custom Turbine ORM Torque classes could not yet be used: 
-     - requires Torque 4.1 or if using Torque 4.0 reqires manually adding the interfaces in T-classes
-     - requires attribute baseClass in fulcrum-turbine-schema.xml table elements set to appropriate org.apache.fulcrum.security.model.turbine.entity interfaces
-     - requires attribute peerClass in fulcrum-turbine-schema.xml table elements set to org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer 
-     -->
-     
-     <userManager>
-     <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-    </userManager>
-    <groupManager>
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager>
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-     
-</componentConfig>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index 7c00de2..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<input-data xmlns="http://turbine.apache.org/schema/intake/4.0"
-    basePackage="${package}.">
-    <group name="example" key="example" mapToObject="om.Table1">
-        <field name="TestCol2" key="testCol2" type="String"/>
-    </group>
-    <group name="Login" key="login">
-    <field name="Username" key="u" type="String">
-      <!-- l10n keys -->
-      <rule name="required" value="true">username_required_msg</rule>
-      <rule name="minLength" value="4">username_min_length_msg</rule>
-      <!--rule name="mask" value=".+@.+\..+">username_mask_msg</rule-->
-    </field>
-    <field name="Password" key="p" type="String">
-      <rule name="required" value="true">password_msg</rule>
-    </field>
-</group>
-</input-data>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index b1b2301..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = DEBUG, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = ${applicationRoot}/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = ${applicationRoot}/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = ${applicationRoot}/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = ${applicationRoot}/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = ${applicationRoot}/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index d4ea1a3..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-	<!-- Disable if you experience startup problems with Java8 -->
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.upload.UploadService"
-        shorthand="upload"
-        default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-        
-     <!-- using Jackson as mapper by default -->
-    <role
-        name="org.apache.fulcrum.json.JsonService"
-        shorthand="json"
-        default-class="org.apache.fulcrum.json.jackson.Jackson2MapperService"/>
-        
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-        
-         <!-- These components belong to the Fulcrum-Security services -->        
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-    <role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-        
-
-    <!-- Add your services here -->
-        
-</role-list>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
deleted file mode 100644
index bd8f3fd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<pipeline>
-  <valves>
-  <valve>org.apache.turbine.pipeline.DetermineActionValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineTargetValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionTimeoutValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultLoginValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionValidationValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultACLCreationValve</valve>
-    <valve>org.apache.turbine.pipeline.ExecutePageValve</valve>
-    <valve>org.apache.turbine.pipeline.CleanUpValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineRedirectRequestedValve</valve>
-  </valves>
-</pipeline>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
deleted file mode 100644
index e69de29..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
+++ /dev/null
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
deleted file mode 100644
index 64f7b2c..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Configure class="org.eclipse.jetty.webapp.WebAppContext">
-  <New id="Turbine" class="org.eclipse.jetty.plus.jndi.Resource">
-    <Arg></Arg> <!-- reference to WebAppContext requires jetty 9.x only  -->
-    <Arg>${turbine_database_jndipath}</Arg>
-    <Arg>
-        <New class="org.apache.commons.dbcp.BasicDataSource">
-           <Set name="driverClassName">${turbine_database_driver}</Set>
-            <Set name="url">${turbine_database_url}${turbine_database_name}</Set>
-            <Set name="username">${turbine_database_user}</Set>
-            <Set name="password">${turbine_database_password}</Set>
-            <Set name="validationQuery">SELECT 1</Set>
-        </New>
-    </Arg>
-  </New>
-</Configure>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 7241e9d..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?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.
--->
-<web-app id="WebApp_ID" version="2.5" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_2_5.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-  
-  
- <!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- JNDI Ressource                                                           -->
-<!-- ======================================================================== -->
-  
-   <resource-ref>
-    <res-ref-name>${turbine_database_jndipath}</res-ref-name>
-    <res-type>javax.sql.DataSource</res-type>
-    <res-auth>Container</res-auth>
-  </resource-ref>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
deleted file mode 100644
index 5439b20..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
deleted file mode 100644
index f19c013..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
+++ /dev/null
Binary files differ
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
deleted file mode 100644
index 420260e..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
+++ /dev/null
@@ -1,121 +0,0 @@
-/* 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*/
-
-book {
-  display: flex;
-  flex-direction: column;
-}
-
-@supports(display: grid) {
-  book {
-    width: auto;
-  }
-}
-
-book:nth-of-type(2) {
-  grid-column: 2;
-  grid-row: 2 / span 2;
-} 
-
-h3 {
-  order: 0;
-}
-
-footer {
-  background-color: #9E2064;
-  text-align: right;
-  padding-right: 20px;
-}
-
-section {
-  background-color: #dfe5e8;
-  display: grid;
-  grid-template: [header-left] "head head" 30px [header-right]
-                 [main-left]   "nav  main" 1fr  [main-right]
-                 [gridfooter-left] "nav  foot" 30px [gridfooter-right];
-  grid-gap: 0.5em;
-  width: 100%;
-  height: 250px;
-}
-
-section:after {
-  clear: both;
-  content: "";
-  display: table;
-}
-
-header {
-  background-color: #F69923;
-  grid-area: head;
-}
-
-nav {
-  background-color: #F79A23;
-  grid-area: nav;
-}
-
-main {
-  background-color: #E97826;
-  grid-area: main;
-}
-
-gridfooter {
-  background-color: #9E2064;
-  text-align: center;
-  grid-column: foot;  
-}
-
-.tabs-nav-container {
-  display: flex;
-  flex-direction: column;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-.tabs-nav {
-  text-align: center;
-}
-
-.tabs-nav:hover {
-  color: #6d6d6d;
-}
-
-.tabs-nav.is-active {
-  color: white;
-  background-color: #C92037;
-  min-width: 400px;
-}
-
-.tabs-nav span {
-  display: none;
-}
-
-.tab {
-  display: none;
-  background-color: #dfe5e8;
-}
-
-.tab.is-active {
-  display: block;
-}
-
-.tab-content {
-  padding: 0.5em;
-}
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
deleted file mode 100644
index e3e0bdd..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*/
-(function() {
- //TODO
-})();
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
deleted file mode 100644
index 798ecba..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
+++ /dev/null
@@ -1,58 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-$page.addStyleSheet("http://www.w3schools.com/lib/w3.css")
-$page.addStyleSheet("http://www.w3schools.com/lib/w3-theme-blue-grey.css")
-$page.setTitle("Sample Apache Turbine Application")
-$page.addScript($ui.getScript("page.js"))
-<html>
-
-#TurbineHtmlHead()
-
-<link href="$ui.getStylecss()" rel="stylesheet" type="text/css" />
-
-<body #TurbineHtmlBodyAttributes() class="w3-theme-l4">
-
-	<div class="w3-wrapper">
-
-    <!-- Header -->
-    <header class="w3-container w3-center w3-padding-32 w3-theme">
-          <img class="w3-right" src="$ui.image('turbine4-project.png')" /> 
-          #if ( $data.getUser().hasLoggedIn() ) 
-            #set ( $u = $data.getUser() )
-            <div class="w3-right">
-          <h5>Hello $!u.FirstName</h5>
-            </div>
-      #end
-    </header>
-
-        <!-- Default Menu -->
-        $navigation.setTemplate("/Menu.vm")
-
-        <!-- Content -->
-        <div class="w3-left w3-padding" id="content">
-                $screen_placeholder
-        </div>
-
-        <!-- Footer -->
-        <footer class="w3-bottom">
-			<p>Powered by <img src="$ui.image('pb-turbine100px.png')"/></p>
-        </footer>
-	</div>
-
-</body>
-</html>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm
deleted file mode 100644
index 9acccea..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/macros/applicationMacros.vm
+++ /dev/null
@@ -1,151 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## $Id: TurbineMacros.vm 222027 2016-10-20 16:11:37Z painter $
-##
-## Put your Application macros in this file.
-##
-
-#* ------------------------------------------------------------------
-#    Global Macros
-*# ------------------------------------------------------------------
-
-#* ------------------------------------------------------------------
-#    Drop down select option for yes/no questions
-*# ------------------------------------------------------------------
-#macro (selectYesNo $label $selection)
-	<select name="$label">
-		#if ( $selection == "true" )
-			<option value="1" selected>Yes</option>
-			<option value="0">No</option>
-		#else
-			<option value="1">Yes</option>
-			<option value="0" selected>No</option>
-		#end
-	</select>
-#end
-
-
-#* ------------------------------------------------------------------
-#    Standard action form controls - Using w3.css styling
-*# ------------------------------------------------------------------
-
-#macro (insert)
-    <input type="submit" name="eventSubmit_doInsert" value="Insert"/>
-#end
-
-#macro (save)
-    <input type="submit" name="eventSubmit_doUpdate" value="Update"/>
-#end
-
-#macro (remove)
-    <input type="submit" name="eventSubmit_doDelete" value="Remove"/>
-#end
-
-
-#macro (warning $msg)
-<div class="w3-panel w3-orange w3-card-8">
-	$msg
-</div>
-#end
-
-#macro (error $msg)
-<div class="w3-panel w3-red w3-card-8">
-	$msg
-</div>
-#end
-
-#macro(info $msg)
-<div class="w3-panel w3-blue w3-card-8">
-	$msg
-</div>
-#end
-
-
-#* ------------------------------------------------------------------
-#
-# Macros that are used for displaying input forms. Using w3.css styling
-#
-*# ------------------------------------------------------------------
-
-#macro (formLabel $label)
-	<label>$!label</label>
-#end
-
-#macro (fileUpload $label $name)
-	<label>$!label</label>
-	<input class="w3-input" type="file" name="$!name">
-#end
-
-#macro (formCheckBox $label $name $checked)
-   #formLabel( $label )
-   #checkBox( $name $checked )
-#end
-
-#macro (checkBox $name $checked)
-	<input id="$!name" class="w3-check" type="checkbox" checked="$!checked">
-#end
-
-#macro (formLabelRequired $label)
-	<label class="w3-label w3-validate">$!label</label>
-#end
-
-#macro (formTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (smallFormTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textareaField $label $name $value)
-	<p>
-		<label class="w3-label">$label</label>
-		<textarea class="w3-input" style="width:90%" rows="6" name="$name" required>$!value</textarea>
-	</p>
-	
-#end
-
-#macro (formPasswordCell $label $name $value)
-	<p>
-	#formLabel( $label )
-	<input class="w3-input" type="password" name="$!name" value="$!value">
-	</p>
-#end
-
-#macro (formCellRequired $label $name $value)
-	<p>
-	  #formLabelRequired($label)
-  	  #formTextField($name $value)
-  	</p>
-#end
-
-#macro (formCell $label $name $value)
-  #formLabel($label)
-  #formTextField($name $value)
-#end
-
-#macro (smallFormCell $label $name $value)
-  #formLabel($label)
-  #smallFormTextField($name $value)
-#end
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm
deleted file mode 100644
index ba6d0c7..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/navigations/Menu.vm
+++ /dev/null
@@ -1,52 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-#if ( $data.getUser().hasLoggedIn() )
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-dropdown-hover">
-            <a href="#">Administration <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-              ## every user can change their password
-               <a href="$link.setPage("Password.vm")">Update Password <i class="fa fa-unlock"></i></a>
-          #if ( $data.getACL().hasRole("turbineadmin") )
-              <a href="$link.setPage("user,FluxUserList.vm")">User List <div class="w3-right"><i class="fa fa-users"></i></div></a>
-              <a href="$link.setPage("role,FluxRoleList.vm")">User Roles <div class="w3-right"><i class="fa fa-user-plus"></i></div></a>
-              <a href="$link.setPage("user,FluxUserForm.vm")?mode=insert">Add User <div class="w3-right"><i class="fa fa-user"></i></div></a>
-              #end
-            </div>
-          </li>
-          #if ( $data.getACL().hasRole("turbineuser") )
-          <li class="w3-dropdown-hover">
-            <a href="#">Records <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-               <a href="$link.setAction("ShowRecords")">Show Records <i class="fa fa-unlock"></i></a>
-            </div>
-          </li>
-          #end
-          
-          <li class="w3-right"><a href="$link.setAction("LogoutUser")">Logout</a></li>
-          
-</nav>
-#else
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-right"><a href="$link.setPage("Login.vm")">Login</a></li>
-</nav>
-
-#end
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm
deleted file mode 100644
index 897e5f1..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Error.vm
+++ /dev/null
@@ -1,7 +0,0 @@
-E R R O R 
-
-$message
-
-$error
-
-$exception
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
deleted file mode 100644
index 578e66f..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
+++ /dev/null
@@ -1,45 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-
-#if ( $data.getMessage() )
-        #info( $data.getMessage() )
-#end
-
-#if ($!success) <div align="center"><h1>$success</h1></div> 
-       <p>
-               You're now successfully running a <a href="http://turbine.apache.org/">Turbine</a> based
-               application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-               your web container.
-       </p>
-      
-       <p>
-               You can (and should!) change or remove this page at any time. It is
-               intended to give you immediate feedback if you just deployed an newly
-               setup Turbine application.
-       </p>
-#end
-    
-     ## including a secured does not trigger the security check, as it is just handled by velocity, not turbine
-     #parse("/screens/TestSecure.vm")
-     
-     ## trigger the security check, but without all context
-     ## <a href="$link.setPage("TestSecure.vm")">Test a secure access without context</a>
-     ## trigger the security check
-     <a href="$link.setPage("TestSecure.vm").addPathInfo("action","SecureAction")">Test a secure access with context</a>
-     
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm
deleted file mode 100644
index 7a9b423..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Login.vm
+++ /dev/null
@@ -1,104 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## If you want to use intake to process the data, uncomment below
-##
-
-#set ( $loginGroup = $intake.Login.Default )
-  
-#set ( $valid = true )  
-#if (!$loginGroup.Username.isValid() ) 
-    ## this should be improved ...
-    #if ("$loginGroup.Username.Message" == "username_min_length_msg") 
-       #info( $l10n.format("$loginGroup.Username.Message","4") )
-    #else
-      #info( $l10n.get("$loginGroup.Username.Message") )
-    #end
-    #set ( $valid = false )
- #end
- 
- #if ( !$loginGroup.Password.isValid() ) 
-    #info( $l10n.get("$loginGroup.Password.Message") )
-    #set ( $valid = false )
- #end
-
-<p/>
-  #if (! $data.user.hasLoggedIn()) 
-  
-  <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-
-		<form class="w3-container w3-light-grey" name="login" method="post" enctype="application/x-www-form-urlencoded" action="$link.setAction("LoginUserIntake").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-        
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="$loginGroup.Username.Key" value="$!loginGroup.Username" tabindex="1" autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="$loginGroup.Password.Key" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">#if (! $valid ) Retry #else Sign in #end</button>
-                
-                <p/>
-    ##$intake.declareGroups()
-        
-      </div>
-    </form>
-    
-    <!--  default login without Intake  -->
-    <!-- 
-    		<form class="w3-container w3-light-grey" name="login" method="post" action="$link.setAction("LoginUser").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-       
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="username" value="" tabindex="1"  autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="password" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">Sign in</button>
-                
-                <p/>
-
-      </div>
-    </form>
-    
-    
-    
-    -->
-
-
-    <div class="w3-container w3-border-top w3-padding-16 w3-light-grey">
-          <span class="w3-right w3-padding w3-hide-small">Forgot <a href="#">password?</a></span>
-    </div>
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end
-        
-
-    </div>
-  #else
-      #parse("/screens/Index.vm")
-  #end
-
-## $intake.declareGroups()
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm
deleted file mode 100644
index c5c2b83..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Password.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-    <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-  
-    <form class="w3-container w3-light-grey" name="password_change" method="post" action="$link.setAction("ChangePasswordAction").setPage("Index.vm")">
-          <div class="w3-section">
-        
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Old Password" type="password" name="oldpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="New Password" type="password" name="newpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple">Change Password</button>
-                
-                <button type="button" name="cancel" id="cancel" value="cancel" class="w3-ripple" onCLick="doCancel()">Cancel</button>
-                
-                <script>
-                function doCancel() { 
-                	location.href="$link.setPage('TestSecure.vm')"; 
-                	return false;
-                }
-                </script>
-
-                <p/>
-
-        
-      </div>
-    </form>
-
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end 
-
-    </div>
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm
deleted file mode 100644
index dc2ffed..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/TestSecure.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-#if ( $data.getMessage() )
-	#info( $data.getMessage() )
-#end
-
-## its null for anon 
-#if ( $!related.getUserrole() )
-<h1> Secured #if ($!user) User#else Role #end Access Page </h1>
-     #if ($!user && $!success)<div align="center"><h1>$success</h1></div>#end
-     <p>   
-          #if ($user)
-             Hi "$user.firstName, $user.lastName"
-          #else
-          Role: $related.getUserrole()
-          #end
-         <script type="text/javascript">
-          var jsonObject;
-          #if ($user)
-           jsonObject = $related.getJson($user,"org.apache.turbine.om.security.User", null, true,"lastLogin", "permStorage");
-           if (jsonObject != undefined && jsonObject.permStorage == undefined) {
-              alert("successfully read JSON:" + jsonObject.lastLogin);
-           } else {
-              alert("error json object not as expected" + JSON.stringify(jsonObject));
-           }
-         #end
-        </script>
-     </p>
-#end
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/showRecords.vm b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/showRecords.vm
deleted file mode 100644
index b4a5618..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/screens/showRecords.vm
+++ /dev/null
@@ -1,51 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License. 
-   <div id="tabs" class="no-js">
-  #foreach ($author in $authors)
-    <div class="tabs-nav-container">
-      <a href="#" class="tabs-nav #if($velocityCount ==1)is-active#end">$author.firstName $author.lastName</a>
-    </div>
-  #end
-  #foreach ($author in $authors)
-     <div class="tab #if($velocityCount ==1)is-active#end">
-       <div class="tab-content"> 
-        <section>
-            <header>Author´s Book Record Box</header>
-            <nav>$author.firstName $author.lastName</nav>
-            #set($books = $author.books)
-             <main> 
-               #foreach ($book in $books)
-               <book><a href="#">
-                $book.title 
-               </a>  (subject: $book.subject)
-               </book>
-               #end
-              </main>
-              <footer>$velocityCount</footer>
-        </section>
-        </div>
-    </div>
-  #end
-  
-   </div>
-   
-    <p>Authors: $authors.size()</p>
-   
-   <script>
-  /* 
-  */
-</script>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
deleted file mode 100644
index 5375724..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
+++ /dev/null
@@ -1,83 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-torque.applicationRoot = .
-#pipeline.default.descriptor = src/test/conf/torque/turbine-classic-pipeline.xml
-# torque.defaults.pool.defaultMaxActive=30
-torque.defaults.pool.testOnBorrow=true
-torque.defaults.pool.validationQuery=SELECT 1
-
-torque.idbroker.cleverquantity=true
-torque.idbroker.prefetch=true
-torque.idbroker.usenewconnection=true
-
-#torque.database.default=default
-torque.database.schema =
-
-# supported auto, hsqldb, mysql..
-#torque.database.default.adapter=hsqldb
-
-#torque.dsfactory.default.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-
-#torque.dsfactory.default.pool.testOnBorrow=true
-#torque.dsfactory.default.pool.validationQuery=SELECT 1 from INFORMATION_SCHEMA.SYSTEM_USERS
-#torque.dsfactory.default.connection.driver = org.hsqldb.jdbcDriver
-#torque.dsfactory.default.connection.url = jdbc:hsqldb:.
-#torque.dsfactory.default.connection.user = sa
-#torque.dsfactory.default.connection.password =
-
-##################
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-#torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-#torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=turbine
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
deleted file mode 100644
index 612e0a8..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?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.
--->
-<!--
-	This configuration file for Avalon components is used for testing the Fulcrum components
-	with Turbine.
--->
-
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>src/test/conf/torque/TorqueTest.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-      	<unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-  
-    <factory/>
-    <pool/>
-    <parser>
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-
-    <!-- These components belong to the Fulcrum-Security services -->
-    <securityService/>
-    <authenticator/>
-    <modelManager/>
-    <aclFactory/>
-     
-   <userManager>
-     <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-    </userManager>
-    <groupManager>
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager>
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-
-  
-
-</componentConfig>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
deleted file mode 100644
index 9187ccb..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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.
--->
-<!--
-	This configuration file for Avalon components is used for testing the Fulcrum Components with
-	Turbine.
--->
-
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent" />
-
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-
-    <!-- These components belong to the Fulcrum-Security services -->
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-<role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-
-   
-
-</role-list>
-
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties
deleted file mode 100644
index d5de6fc..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties
+++ /dev/null
@@ -1,631 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# resource relative to context
-pipeline.default.descriptor = /src/test/conf/torque/turbine/turbine-classic-pipeline.xml
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = /src/test/resources/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=org.apache.turbine.modules, org.apache.turbine.services.template.modules, org.apache.turbine.services.template.modules.screens.existing.dflt
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-
-# Choose between the two available implementations of an Avalon container - ECM or YAAFI
-
-# services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineAvalonComponentService
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
-# Default
-services.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-# services.SessionService.classname=org.apache.turbine.services.session.TurbineSessionService
-
-# Turn on the appropriate template service.
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-# services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.python.PythonScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-#
-# These are the mapper classes responsible for the lookup of Page, Screen, Layout and Navigation classes according
-# to the supplied template Name. They also map template names on the Layout and Screen file names to be used.
-#
-# services.TemplateService.mapper.page.class            = org.apache.turbine.services.template.mapper.DirectTemplateMapper
-# services.TemplateService.mapper.screen.class          = org.apache.turbine.services.template.mapper.ClassMapper
-# services.TemplateService.mapper.layout.class          = org.apache.turbine.services.template.mapper.ClassMapper
-# services.TemplateService.mapper.navigation.class      = org.apache.turbine.services.template.mapper.ClassMapper
-# services.TemplateService.mapper.layout.template.class = org.apache.turbine.services.template.mapper.LayoutTemplateMapper
-# services.TemplateService.mapper.screen.template.class = org.apache.turbine.services.template.mapper.ScreenTemplateMapper
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-services.PullService.tools.resources.dir=/conf/test/turbine-resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UIManager would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the TemplatePageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# or "session" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-# tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# This pull tool can be used to provide skins to an application
-tool.global.ui = org.apache.turbine.services.pull.tools.UITool
-
-# # These properties apply to both the old UIManager and the newer UIService
-tool.ui.dir.skin = /turbine-skins/
-tool.ui.dir.image = /turbine-images/
-tool.ui.skin = myskin
-tool.ui.css = skins.css
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behavior if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = false
-tool.link.want.relative = false
-
-# Set the retriever factory for OMTool
-tool.om.factory=org.apache.turbine.om.MockRetrieverFactory
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-
-services.VelocityService.earlyInit = true
-services.VelocityService.template.extension = vm
-
-services.VelocityService.default.page            = VelocityPage
-services.VelocityService.default.screen          = VelocityScreen
-services.VelocityService.default.layout          = VelocityOnlyLayout
-services.VelocityService.default.navigation      = VelocityNavigation
-services.VelocityService.default.layout.template = Default.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path  = src/templates/test
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-# -------------------------------------------------------------------
-#
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page = JspPage
-services.JspService.default.screen=BaseJspScreen
-services.JspService.default.layout = JspLayout
-services.JspService.default.navigation=BaseJspNavigation
-services.JspService.default.error.screen = JspErrorScreen
-services.JspService.default.layout.template = Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the UserManager interface to
-# manage User objects. Default is the PassiveUserManager
-#
-# Override this setting if you want your User information stored
-# on a different medium (LDAP directory is a good example).
-#
-# Adjust this setting if you change the Setting of the SecurityService class (see above).
-
-# Default: org.apache.turbine.services.security.passive.PassiveUserManager
-# The MockUserManager is used in testing...
-services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the container.
-#
-services.AvalonComponentService.containerConfiguration = /src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  S E S S I O N   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.SessionService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
deleted file mode 100644
index e0b4bf7..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
--->
-
-<fulcrum-yaafi>
-  <componentRoles>
-    <location>/src/test/conf/torque/fulcrumRoleConfiguration.xml</location>
-  </componentRoles>
-  <componentConfiguration>
-    <location>/src/test/conf/torque/fulcrumComponentConfiguration.xml</location>
-  </componentConfiguration>
-</fulcrum-yaafi>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml
deleted file mode 100644
index f8457b0..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<pipeline name="default">
-  <valves>
-    <valve>org.apache.turbine.pipeline.DetermineActionValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineTargetValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionTimeoutValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultLoginValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionValidationValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultACLCreationValve</valve>
-    <valve>org.apache.turbine.pipeline.ExecutePageValve</valve>
-    <valve>org.apache.turbine.pipeline.CleanUpValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineRedirectRequestedValve</valve>
-  </valves>
-</pipeline>
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java
deleted file mode 100644
index 2ffc5de..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java
+++ /dev/null
@@ -1,488 +0,0 @@
-package ${package}.services.security;
-
-/*
- * 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 static org.junit.Assert.*;
-
-import java.util.Set;
-
-import org.apache.fulcrum.security.GroupManager;
-import org.apache.fulcrum.security.PermissionManager;
-import org.apache.fulcrum.security.RoleManager;
-import org.apache.fulcrum.security.SecurityService;
-import org.apache.fulcrum.security.UserManager;
-import org.apache.fulcrum.security.entity.ExtendedUser;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.entity.User;
-import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineGroup;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.PermissionSet;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.testcontainer.BaseUnit4Test;
-import org.apache.torque.ConstraintViolationException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Initialization of services in implementing tests
- * 
- * @author gkallidis
- * @version $Id$
- * 
- */
-public abstract class AbstractFulcrumTorqueModelManagerTest extends BaseUnit4Test
-{
-    protected Role role;
-
-    protected TurbineModelManager modelManager;
-
-    protected RoleManager roleManager;
-
-    protected GroupManager groupManager;
-
-    protected PermissionManager permissionManager;
-
-    protected UserManager userManager;
-
-    protected SecurityService securityService;
-    
-    boolean onDeleteCascade = true;
-    
-     // By default org.slf4j.LoggerFactory is optional in 4.0, but included in webapp 
-    Logger log = LoggerFactory.getLogger( getClass().getName() );
-
-    @Before
-    public void setUp() throws Exception
-    {
-        securityService  = (SecurityService) lookup(SecurityService.ROLE);
-        roleManager = securityService.getRoleManager();
-        userManager = securityService.getUserManager();
-        groupManager = securityService.getGroupManager();
-        permissionManager = securityService.getPermissionManager();
-        modelManager = (TurbineModelManager) securityService.getModelManager();
-    }
-
-    @Override
-    @After
-      public void tearDown()
-    {
-        modelManager = null;
-        securityService = null;
-    }
-
-    @Test
-    public void testGetGlobalGroup() throws Exception
-    {
-        Group global = modelManager.getGlobalGroup();
-        assertNotNull(global);
-        assertEquals(global.getName(), modelManager.getGlobalGroupName());
-    }
-    @Test
-    public void testGrantRolePermission() throws Exception
-    {
-        Permission permission = permissionManager.getPermissionInstance();
-        permission.setName("ANSWER_PHONE");
-        checkAndAddPermission( permission );
-        role = roleManager.getRoleInstance("RECEPTIONIST");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(1, permissions.size());
-        assertTrue(((TurbineRole) role).getPermissions().contains(permission));
-        
-        checkAndRevoke( permission );
-        deletePermission( permission );
-        deleteRole();
-    }
-
-    @Test
-    public void testRevokeRolePermission() throws Exception
-    {
-        Permission permission = securityService.getPermissionManager().getPermissionInstance();
-        permission.setName("ANSWER_FAX");
-        checkAndAddPermission( permission );
-        role = roleManager.getRoleInstance("SECRETARY");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(1, permissions.size());
-        checkAndRevoke( permission );
-        role = roleManager.getRoleById(role.getId());
-        permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(0, permissions.size());
-        assertFalse(((TurbineRole) role).getPermissions().contains(permission));
-        deletePermission( permission );
-        deleteRole();
-    }
-    @Test
-    public void testRevokeAllRole() throws Exception
-    {
-        Permission permission = securityService.getPermissionManager().getPermissionInstance();
-        Permission permission2 = securityService.getPermissionManager().getPermissionInstance();
-        permission.setName("SEND_SPAM");
-        permission2.setName("ANSWER_EMAIL");
-        checkAndAddPermission( permission );
-        checkAndAddPermission( permission2 );
-        role = roleManager.getRoleInstance("HELPER");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        checkAndGrant( permission2);
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(2, permissions.size());
-        try {
-            modelManager.revokeAll(role);
-        } catch (Exception e) {
-            log.info( "Might fail " + e.getMessage() );
-        }
-        role = roleManager.getRoleById(role.getId());
-        permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(0, permissions.size());
-        checkAndRevoke( permission );
-        checkAndRevoke( permission2 );
-        deletePermission( permission );
-        deletePermission( permission2 );
-        deleteRole();
-    }
-
-    @Test
-    public void testRevokeAllUser() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_REVOKEALLUSER_GROUP");
-        group = checkAndAddGroup( group );
-        
-        role = securityService.getRoleManager().getRoleInstance();
-        role.setName("TEST_REVOKEALLUSER_ROLE");
-        checkAndAddRole( role );
-
-        User user = userManager.getUserInstance("calvin");
-        user = checkAndAddUser( user, "calvin" );
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-
-        group = groupManager.getGroupById(group.getId());
-        Set<TurbineUserGroupRole> userGroupRoleSet = ((TurbineGroup) group).getUserGroupRoleSet();
-        assertEquals(1, userGroupRoleSet.size());
-        Set<TurbineUserGroupRole> userGroupRoleSet2 = ((TurbineGroup) group).getUserGroupRoleSet();
-        assertEquals(1, userGroupRoleSet2.size());
-
-        try {
-            modelManager.revokeAll(user);
-        } catch (Exception e) {
-            log.info( "error due to " + e.getMessage() );
-        }
-        group = groupManager.getGroupById(group.getId());
-        assertEquals(0, ((TurbineGroup) group).getUserGroupRoleSet().size());
-        role = securityService.getRoleManager().getRoleByName("TEST_REVOKEALLUSER_ROLE");
-
-        // assertFalse(((TurbineRole) role).getGroups().contains(group));
-        // cleanup ;
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-
-    }
-
-    @Test
-    public void testGrantUserGroupRole() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_GROUP");
-        group = checkAndAddGroup( group );
-        role = roleManager.getRoleInstance();
-        role.setName("TEST_Role");
-        checkAndAddRole( role );
-        User user = userManager.getUserInstance("Clint");
-       
-        user = checkAndAddUser( user, "clint" );
-
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        boolean ugrFound = false;
-        TurbineUserGroupRole ugrTest = null;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                ugrTest = ugr;
-                break;
-            }
-        }
-        assertTrue(ugrFound);
-        assertTrue(ugrTest.getGroup().equals(group));
-        assertTrue(ugrTest.getUser().equals(user));
-        
-        try {
-            modelManager.revoke(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-    }
-    @Test
-    public void testRevokeUserGroupRole() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_REVOKE");
-        group = checkAndAddGroup( group );
-        User user = userManager.getUserInstance("Lima");
-        
-        user = checkAndAddUser( user, "pet" );
-        role = roleManager.getRoleInstance();
-        role.setName("TEST_REVOKE_ROLE");
-        checkAndAddRole( role );
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        try {
-            modelManager.revoke(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        boolean ugrFound = false;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                break;
-            }
-        }
-        assertFalse(ugrFound);
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-       
-    }
-
-    private void checkAndAddPermission( Permission permission )
-                    throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        // cleanup if using real db
-        Permission dbPermission;
-        if (securityService.getPermissionManager().checkExists( permission )) {
-            dbPermission =  securityService.getPermissionManager().getPermissionByName( permission.getName() );
-            // this might fail as it is referenced
-//            try {
-//                securityService.getPermissionManager().removePermission(  permission );
-//            } catch (Exception e) {
-//                System.out.println("removing permission failed" +  e.getMessage() );
-//            }
-        } else {
-            dbPermission =securityService.getPermissionManager().addPermission(permission);            
-        }
-        permission.setId( dbPermission.getId() );
-
-    }
-    
-    // adds user 
-    private User checkAndAddUser( User user, String password )
-        throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        if (user instanceof ExtendedUser) {
-            // set first last name which might be required  (cft. schema definition)
-            ((ExtendedUser)user).setFirstName( user.getName() );
-            ((ExtendedUser)user).setLastName(  user.getName() );
-        }
-        if (userManager.checkExists( user )) {
-            return userManager.getUser( user.getName() );
-            //userManager.removeUser( dbUser );
-        } else {
-            return userManager.addUser(user, password ); 
-        }
-    }
-    
-    private Group checkAndAddGroup( Group group )
-                    throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        // cleanup if using real db
-        if (securityService.getGroupManager().checkExists( group )) {
-            return securityService.getGroupManager().getGroupByName( group.getName() );
-            // might fail as it is referenced
-//            try {
-//                securityService.getGroupManager().removeGroup( group );
-//            }  catch (Exception e) {
-//                System.out.println("removing group failed" +  e.getMessage() );
-//            }
-        } else {
-            return securityService.getGroupManager().addGroup(group);
-        }
-    }
-
-
-    private void checkAndAddRole( Role role )
-        throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        Role dbRole;
-        // cleanup if using real db
-        if (securityService.getRoleManager().checkExists( role )) {
-            dbRole = securityService.getRoleManager().getRoleByName( role.getName() );
-            // might fail as it is referenced
-//            try {
-//                securityService.getRoleManager().removeRole( role );
-//            } catch (Exception e) {
-//                System.out.println("removing role failed " +  e.getMessage() );
-//            }
-        } else {
-            dbRole = securityService.getRoleManager().addRole(role); 
-        }
-        if (this.role != null) {
-            this.role.setId( dbRole.getId() );
-        } else {
-            this.role =dbRole;
-        }
-    }
-    
-    private void checkAndGrant( Permission permission )
-                    throws UnknownEntityException
-    {
-        // short cut if duplicate entry use acl ...
-        try {
-            modelManager.grant(role, permission);
-        } catch (DataBackendException e) {
-            log.info( "Might be duplicate TODO ACL check" + e.getMessage() );
-        }
-    }
-    
-    private void checkAndRevoke( Permission permission )
-                    throws UnknownEntityException
-    {
-        // short cut if duplicate entry use acl ...
-        try {
-            modelManager.revoke(role, permission);
-        } catch (DataBackendException e) {
-            log.info( "Might be duplicate TODO ACL check" + e.getMessage() );
-        }
-    }
-    
-    private void deleteUser( User user )
-    {
-        if (onDeleteCascade) {
-            try {
-               userManager.removeUser( user );
-               log.info( "try to delete user " + user.getName() );
-             } catch (Exception e) {
-               log.error( "deleting user " + user.getName() + " failed. " + e.getMessage());
-               if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                    log.info( "error due to " + e.getCause().getMessage() );
-                } else {
-                    log.info( "error due to " + e.getMessage() );
-                }
-             }
-        } else {
-            log.info( "onDeleteCascade false, user " + user.getName() + " not deleted!");
-        }
-    }
-    
-    private void deleteRole()
-    {
-        log.info("deleting role ");
-        if (role != null) {
-            try
-            {
-                log.info("deleting role "+ role.getName());
-                roleManager.removeRole( role );
-                role =null;
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-
-    private void deletePermission(Permission permission)
-    {
-        log.info("deleting permission *");
-        if (role != null) {
-            try
-            {
-                log.info("deleting permission "+ permission.getName());
-                permissionManager.removePermission(  permission );
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-    
-    private void deleteGroup(Group group)
-    {
-        log.info("deleting group *");
-        if (role != null) {
-            try
-            {
-                log.info("deleting group "+ group.getName());
-                groupManager.removeGroup(  group );
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java
deleted file mode 100644
index 67f5781..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package ${package}.services.security;
-/*
- * 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 static org.junit.Assert.fail;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.Ignore;
-
-/**
- * Test Fulcrum Integration.
- *
- * Stub for further tests, relying on Fulcrum.
- *
- * @author gkallidis
- * @version $Id$
- */
-public class FulcrumTorqueDefaultModelManagerTest
-    extends AbstractFulcrumTorqueModelManagerTest
-{
-
-    @Override
-    @Before
-    public void setUp() throws Exception
-    {
-        try
-        {
-        	// just Fulcrum
-            setConfigurationFileName("src/test/conf/torque/fulcrumComponentConfiguration.xml");
-            setRoleFileName("src/test/conf/torque/fulcrumRoleConfiguration.xml");
-            super.setUp();
-    
-        }
-        catch (Exception e)
-        {
-            fail(e.toString());
-        }
-    }
-    
-    @Test
-    public void testDummy() {
-    	// all tests in abstract
-    }
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
deleted file mode 100644
index 9017ede..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package ${package}.services.security;
-
-/*
- * 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 static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.apache.fulcrum.security.SecurityService;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.testcontainer.BaseUnit4Test;
-import org.apache.turbine.om.security.TurbineUserDelegate;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.TurbineConfig;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * Test that the SecurityService works properly by comparing behaviour of Turbine and Fulcrum security services using Torque and Turbine user manager.
- *
- *
- * @author gkallidis
- * @version $Id$
- */
-
-public class TurbineSecurityServiceTest extends BaseUnit4Test
-{
-
-    SecurityService fulcrumSecurityService;
-    org.apache.turbine.services.security.SecurityService turbineSecurityService;
-    static TurbineConfig tc;
-
-
-    @BeforeClass
-    public static void init() throws Exception
-    {
-        tc = new TurbineConfig(".", "src/test/conf/torque/turbine/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-
-    @Before
-    public void setUpBefore() throws Exception
-    {
-    
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        //
-        fulcrumSecurityService = (SecurityService) serviceManager.getService(SecurityService.ROLE);
-    
-        turbineSecurityService = (org.apache.turbine.services.security.SecurityService)
-        		TurbineServices.getInstance().getService(org.apache.turbine.services.security.SecurityService.SERVICE_NAME);
-    }
-    
-    @Test
-    public void testAccountExists() throws Exception
-    {
-    
-        User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl());
-        user.setAccessCounter(5);
-        assertFalse(turbineSecurityService.accountExists(user));
-        assertFalse(fulcrumSecurityService.getUserManager().checkExists(user));
-    
-    }
-    
-    @Test
-    @Ignore(value="Turbine security service supported requires Turbine 4.0.1")
-    public void testCreateUser() throws Exception
-    {
-    
-    	User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl());
-    	user.setAccessCounter(5);
-    	user.setName("ringo");
-    	turbineSecurityService.addUser(user,"fakepasswrod");
-    	assertTrue(turbineSecurityService.accountExists(user));
-    	assertTrue(fulcrumSecurityService.getUserManager().checkExists(user));
-    
-    }
-    
-    /**
-     * Tests Turbine and Fulcrum.
-     *
-     * Fulcrum part is similar/duplicated from {@link AbstractTurbineModelManagerTest#testGrantUserGroupRole()}
-     *
-     *
-     * @throws Exception
-     */
-    @Test
-    @Ignore(value="Turbine security service supported requires Turbine 4.0.1")
-    public void testGrantUserGroupRole() throws Exception
-    {
-        Group group = fulcrumSecurityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_GROUP");
-        fulcrumSecurityService.getGroupManager().addGroup(group);
-        Role role = fulcrumSecurityService.getRoleManager().getRoleInstance();
-        role.setName("TEST_Role");
-        fulcrumSecurityService.getRoleManager().addRole(role);
-    
-        //  Turbine security service returns a wrapped instance: org.apache.turbine.om.security.DefaultUserImpl
-        // which implements org.apache.turbine.om.security.User and contains
-        User user = turbineSecurityService.getUserInstance("Clint");
-    	// memory
-        turbineSecurityService.addUser(user, "clint");
-        turbineSecurityService.grant(user, group, role);
-    
-        // this cast may not be required any more in turbine 4.0.1
-    	addUserAndCheck(group, role, ( (TurbineUserDelegate) user).getUserDelegate());
-    
-        // Fulcrum security service returns a raw org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl,
-    	org.apache.fulcrum.security.UserManager  userManager = fulcrumSecurityService.getUserManager();
-    	TurbineUser fulcrumUser = userManager.getUserInstance("Clint2");
-        userManager.addUser(fulcrumUser, "clint2");         // memory
-        ((TurbineModelManager)fulcrumSecurityService.getModelManager()).grant(fulcrumUser, group, role);
-    
-        addUserAndCheck(group, role, fulcrumUser);
-    
-    }
-
-    /**
-     * Fulcrum contract check
-     *
-     * @param group Fulcrum interface
-     * @param role Fulcrum interface
-     * @param user Fulcrum interface
-     * @throws EntityExistsException
-     * @throws DataBackendException
-     * @throws UnknownEntityException
-     */
-    private void addUserAndCheck(Group group, Role role, TurbineUser user)
-        throws EntityExistsException, DataBackendException,
-        UnknownEntityException
-    {
-    
-        boolean ugrFound = false;
-        TurbineUserGroupRole ugrTest = null;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                ugrTest = ugr;
-                break;
-            }
-        }
-        assertTrue(ugrFound);
-        assertTrue(ugrTest.getGroup().equals(group));
-        assertTrue(ugrTest.getUser().equals(user));
-    }
-    
-    
-    @AfterClass
-    public static void setupAfter()
-    {
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        serviceManager.shutdownService(org.apache.turbine.services.security.SecurityService.SERVICE_NAME);
-        serviceManager.shutdownServices();
-        // TODO cleanup added users, roles, permissions ..
-    }
-
-
-}
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/resources/log4j.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/resources/log4j.properties
deleted file mode 100644
index 651c914..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,89 +0,0 @@
-
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-
-log4j.logger.${package} = DEBUG, app, console
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app, console
-log4j.additivity.avalon = false
-
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-# turbine log
-# allows TRACE
-log4j.logger.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-
-# #
-# Logfile definitions
-#
-
-# application.log
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.file = src/test/logs/application.log
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = true
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = src/test/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = src/test/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = src/test/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
\ No newline at end of file
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/test/resources/projects/first/archetype.properties b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/test/resources/projects/first/archetype.properties
deleted file mode 100644
index 0a96356..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/test/resources/projects/first/archetype.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-groupId=org.apache.turbine.test
-artifactId=integrationtest
-version=1.0.0-SNAPSHOT
-package=org.apache.turbine.test.integrationtest
-turbine_app_name=My Turbine Web Application
-turbine_intake_file=intake.xml
-turbine_database_name=turbine
-turbine_database_adapter=auto
-turbine_database_jndipath=jdbc/turbine
-turbine_database_driver=com.mysql.jdbc.Driver
-turbine_database_url=jdbc:mysql://localhost:3306/
-turbine_database_user=db_user
-turbine_database_password=db_password
diff --git a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/test/resources/projects/first/goal.txt b/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/test/resources/projects/first/goal.txt
deleted file mode 100644
index 597acc7..0000000
--- a/tags/turbine-webapp-4.0-1.0.2/turbine-webapp-4.0/src/test/resources/projects/first/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-package
\ No newline at end of file
diff --git a/trunk/turbine-webapp-2.3.3/pom.xml b/trunk/turbine-webapp-2.3.3/pom.xml
deleted file mode 100644
index 78b0ac3..0000000
--- a/trunk/turbine-webapp-2.3.3/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>11</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-2.3.3</artifactId>
-  <version>1.0.1-SNAPSHOT</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 2.3.3 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 2.3.3</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-2.3.3/</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-2.3.3/</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-2.3.3/</url>
-  </scm>
-  
-  <build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>2.1</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>2.1</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/trunk/turbine-webapp-2.3.3/src/changes/changes.xml b/trunk/turbine-webapp-2.3.3/src/changes/changes.xml
deleted file mode 100644
index 236630f..0000000
--- a/trunk/turbine-webapp-2.3.3/src/changes/changes.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.0" date="in Subversion">
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/META-INF/maven/archetype-metadata.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index fd063c5..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-2.3.3-velocity">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>mysql</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>java:comp/env/jdbc/Turbine</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-
-  <fileSets>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/pom.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 6ef3fbf..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,404 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var
-$label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <resource>
-                <targetPath>#var("project.build.directory")/torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${maven.compile.source}</source>
-                    <target>${maven.compile.target}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>3.3</version>
-                <configuration>
-                    <schemaDir>#var("project.build.directory")/torque/schema</schemaDir>
-
-                    <!-- Define the Override directory location -->
-                    <!-- templatePath>#var("project.build.directory")/torque/templates</templatePath -->
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>om</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>om</goal>
-                        </goals>
-                        <configuration>
-                            <!-- These settings will allow you to customize 
-                                the way your Peer-based object model is created. -->
-                            <targetPackage>${package}.om</targetPackage>
-                            <outputDir>#var("project.build.sourceDirectory")</outputDir>
-                            <baseOutputDir>#var("project.build.directory")/generated-sources/torque</baseOutputDir>
-                            <baseReportFile>report.#var("project.artifact.artifactId").om.base.generation</baseReportFile>
-                            <reportFile>report.#var("project.artifact.artifactId").om.generation</reportFile>
-
-                            <addGetByNameMethod>true</addGetByNameMethod>
-                            <addIntakeRetrievable>true</addIntakeRetrievable>
-                            <addSaveMethod>true</addSaveMethod>
-                            <addTimeStamp>true</addTimeStamp>
-                            <basePrefix>Base</basePrefix>
-                            <complexObjectModel>true</complexObjectModel>
-                            <correctGetters>true</correctGetters>
-                            <useManagers>false</useManagers>
-                            <objectIsCaching>true</objectIsCaching>
-                            <saveException>TorqueException</saveException>
-                            <enableJava5Features>true</enableJava5Features>
-                            <runOnlyOnSchemaChange>true</runOnlyOnSchemaChange>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datadtd torque security</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datadtd</goal>
-                        </goals>
-                        <configuration>
-                            <projectName>torque-security</projectName>
-                            <xmlFile>#var("project.build.directory")/torque/schema/torque-security-schema.xml</xmlFile>
-                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datadtd application specific</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datadtd</goal>
-                        </goals>
-                        <configuration>
-                            <projectName>application</projectName>
-                            <xmlFile>#var("project.build.directory")/torque/schema/application-schema.xml</xmlFile>
-                            <outputDir>#var("project.build.directory")/torque/schema</outputDir>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>schema sql</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>sql</goal>
-                            <goal>id-table-init-sql</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>datasql torque security</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datasql</goal>
-                        </goals>
-                        <configuration>
-                            <dataXmlFile>#var("project.build.directory")/torque/schema/torque-security-data.xml</dataXmlFile>
-                            <dataDtd>#var("project.build.directory")/torque/schema/torque-security-data.dtd</dataDtd>
-
-                            <reportFile>torque-security-data.sql</reportFile>
-                            <schemaIncludes>torque-security-schema.xml</schemaIncludes>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>datasql application specific</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>datasql</goal>
-                        </goals>
-                        <configuration>
-                            <dataXmlFile>#var("project.build.directory")/torque/schema/application-data.xml</dataXmlFile>
-                            <dataDtd>#var("project.build.directory")/torque/schema/application-data.dtd</dataDtd>
-                            <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-
-                            <reportFile>application-data.sql</reportFile>
-                            <schemaIncludes>application-schema.xml</schemaIncludes>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifestEntries>
-                            <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                            <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                        </manifestEntries>
-                    </archive>
-                    <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>javax.activation</groupId>
-            <artifactId>activation</artifactId>
-            <version>1.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-            <version>1.4.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.16</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils-core</artifactId>
-            <version>1.8.0</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-            <version>1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-configuration</groupId>
-            <artifactId>commons-configuration</artifactId>
-            <version>1.6</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-beanutils</groupId>
-                    <artifactId>commons-beanutils</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.6</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-email</groupId>
-            <artifactId>commons-email</artifactId>
-            <version>1.0</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>dumbster</groupId>
-                    <artifactId>dumbster</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.1.1</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-pool</groupId>
-            <artifactId>commons-pool</artifactId>
-            <version>1.5.6</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.2.2</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avalon.framework</groupId>
-            <artifactId>avalon-framework-api</artifactId>
-            <version>4.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avalon.framework</groupId>
-            <artifactId>avalon-framework-impl</artifactId>
-            <version>4.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity</artifactId>
-            <version>1.6.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.fulcrum</groupId>
-            <artifactId>fulcrum-yaafi</artifactId>
-            <version>1.0.6</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.torque</groupId>
-            <artifactId>village</artifactId>
-            <version>3.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.torque</groupId>
-            <artifactId>torque-runtime</artifactId>
-            <version>3.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>avalon-logkit</groupId>
-                    <artifactId>avalon-logkit</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-impl</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xalan</groupId>
-                    <artifactId>xalan</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xerces</groupId>
-                    <artifactId>xercesImpl</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>xml-apis</groupId>
-                    <artifactId>xml-apis</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>turbine</groupId>
-            <artifactId>turbine</artifactId>
-            <version>2.3.3</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>avalon-logkit</groupId>
-                    <artifactId>avalon-logkit</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>avalon-framework</groupId>
-                    <artifactId>avalon-framework-impl</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-component</groupId>
-                    <artifactId>excalibur-component</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-instrument</groupId>
-                    <artifactId>excalibur-instrument-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-logger</groupId>
-                    <artifactId>excalibur-logger</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>excalibur-pool</groupId>
-                    <artifactId>excalibur-pool-api</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>fulcrum</groupId>
-                    <artifactId>fulcrum-yaafi</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>hsqldb</groupId>
-                    <artifactId>hsqldb</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>stratum</groupId>
-                    <artifactId>stratum</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>torque</groupId>
-                    <artifactId>torque</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>torque</groupId>
-                    <artifactId>village</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>velocity</groupId>
-                    <artifactId>velocity</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>velocity</groupId>
-                    <artifactId>texen</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-    </properties>
-</project>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 60c2677..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-l10nkey=US-English value
\ No newline at end of file
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 8e254b4..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-	/**
-	 * This method is called by the Turbine framework when the
-	 * associated Velocity template, Index.vm is requested
-	 * 
-	 * @param data the Turbine request data
-	 * @param context the Velocity context
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(RunData data, Context context)
-			throws Exception
-	{
-		context.put("success", "Congratulations, it worked!");
-	}
-
-	/**
-	 * This method is called bythe Turbine framework to determine if
-	 * the current user is allowed to use this screen. If this method
-	 * returns false, the doBuildTemplate() method will not be called.
-	 * If a redirect to some "access denied" page is required, do the
-	 * necessary redirect here.
-	 * 
-	 * @param data the Turbine request data
-	 * @return true if this screen may be accessed
-	 * @throws Exception a generic Exception
-	 */
-	@Override
-	protected boolean isAuthorized(RunData data) throws Exception
-	{
-		// use data.getACL() 
-		return true;
-	}
-}
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 2eaa6f3..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml 615328 2008-01-25 20:25:05Z tv $  -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database name="${turbine_database_name}">
-    <table name="table1">
-        <column name="test_col1" type="INTEGER" />
-        <column name="test_col2" type="VARCHAR" size="10" />
-        <!-- Add your database schema here -->
-    </table>
-</database>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 3d845de..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database name="@DATABASE_DEFAULT@"
-  defaultIdMethod="idbroker"
-  defaultJavaType="primitive"
-  defaultJavaNamingMethod="underscore"
-  package="@DATABASE_PACKAGE@">
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 642a72b..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="TurbineAdmin"/>
-  <TurbinePermission PermissionId="2" Name="Turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="TurbineAdmin"/>
-  <TurbineRole RoleId="2" Name="TurbineUser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index a2327f1..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_3.dtd">
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database name="${turbine_database_name}">
-
-  <table name="TURBINE_PERMISSION" idMethod="idbroker">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="idbroker">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="idbroker">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="Name"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <table name="TURBINE_USER" idMethod="idbroker">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="UserName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED" type="TIMESTAMP"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 4a342b0..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-torque.database.default=${turbine_database_name}
-torque.database.turbine.adapter=${turbine_database_adapter}
-
-# Using JNDI
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-
-torque.manager.useCache = true
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index 2035544..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,876 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.ACSYaafiComponentService
-services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.LocalizationService.classname=org.apache.turbine.services.localization.TurbineLocalizationService
-services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.IntakeService.classname=org.apache.turbine.services.intake.TurbineIntakeService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  C A C H E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Interval at which the cache will be checked. The default is
-# 5000ms or 5 seconds.
-
-services.GlobalCacheService.cache.check.frequency = 5000
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-# tool.request.om=org.apache.turbine.om.OMTool
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-# tool.ui.css=skin.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.VelocityService.earlyInit= true
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.runtime.log=/logs/velocity.log
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Must be run early to allow the parser to know about the upload
-# service facility
-services.UploadService.earlyinit=true
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-services.UploadService.automatic=true
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=10240
-
-# -------------------------------------------------------------------
-#
-#  L O C A L I Z A T I O N  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default ResourceBundle and language/country codes used by the
-# TurbineLocalizationService.
-#
-locale.default.bundle=${package}.L10N
-locale.default.language=en
-locale.default.country=US
-
-#
-# This will set the charset= portion of the ContentType: header.
-# Leave commented out unless you want to return stuff as a different
-# charset.
-#
-locale.default.charset=UTF-8
-
-# -------------------------------------------------------------------
-#
-#  M I M E T Y P E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# This property specifies a file containing mappings between MIME
-# content types and the corresponding file name extensions. The
-# service itself contains a hardcoded set of most common mappings.
-# The file must use the same syntax as the mime.types file of
-# the Apache Server, i.e.
-# <mimetype> <ext1> <ext2>...
-#
-# services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types
-
-# This property specifies a file containing mappings between locales
-# and the corresponding character encodings. The service itself
-# contains a hardcoded set of most common mappings.
-# The file should use the Java property file syntax, i.e.
-# <lang_country_variant>=<charset>
-#
-# services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  C R Y P T O   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Standard Unix crypt(3) password encryption.
-#
-services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
-#
-# This providers allows access to the Java Message Digest encryption algorithms
-#
-services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
-#
-# This is a simple, cleartext "encryption" provider.
-#
-services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
-#
-# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
-# compatibility for passwords created with the old Security Service. See the javadocs for
-# OldJavaCrypt
-#
-services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
-#
-# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
-# You need not to have this, it is the default if no algorithms are given. The default
-# provider gives you all the Java MessageDigest Ciphers
-#
-services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.torque.TorqueSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.torque.TorqueUserManager
-
-services.SecurityService.user.class =       org.apache.turbine.services.security.torque.TorqueUser
-services.SecurityService.group.class =      org.apache.turbine.services.security.torque.TorqueGroup
-services.SecurityService.permission.class = org.apache.turbine.services.security.torque.TorquePermission
-services.SecurityService.role.class =       org.apache.turbine.services.security.torque.TorqueRole
-
-services.SecurityService.torque.userPeer.class       = ${package}.om.TurbineUserPeer
-services.SecurityService.torque.groupPeer.class      = ${package}.om.TurbineGroupPeer
-services.SecurityService.torque.permissionPeer.class = ${package}.om.TurbinePermissionPeer
-services.SecurityService.torque.rolePeer.class       = ${package}.om.TurbineRolePeer
-
-# This is the class that implements the ACL interface.
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# -------------------------------------------------------------------
-#
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-# services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-
-# -------------------------------------------------------------------
-#
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-# services.FactoryService.class.loaders=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-# -------------------------------------------------------------------
-#
-#  I N T A K E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of the xml file specifying valid inputs
-#
-# If you need to define multiple definition files, you can should
-# seperate them with commas.
-#
-# Default: WEB-INF/conf/intake.xml
-#
-services.IntakeService.xml.path=WEB-INF/conf/${turbine_intake_file}
-
-# This file is used to cache the XML definitions after they are
-# parsed.  It provides for a small performance gain on startup.
-#
-# Note: Even if you have multiple XML definition files, you will
-# only need one serialization file!
-#
-# Default: WEB-INF/appData.ser
-#
-services.IntakeService.serialize.path=WEB-INF/appData.ser
-
-# --------------------------------------------------------------------
-#
-# P A R A M E T E R  P A R S E R
-#
-# --------------------------------------------------------------------
-#
-# This variable controls the case folding applied to URL variable
-# names.
-#
-# Allowed values: none, lower, upper
-# Default: lower
-#
-
-url.case.folding=lower
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = WEB-INF/conf/containerConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index 3f8c7be..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-</componentConfig>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index 5c89bfe..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!DOCTYPE input-data SYSTEM "http://turbine.apache.org/dtd/intake_2_3_3.dtd">
-
-<input-data basePackage="${package}.">
-  <group name="example" key="example" mapToObject="om.Table1">
-    <field name="TestCol2" key="testCol2" type="String"/>
-  </group>
-</input-data>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index 9879a83..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-#
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-#
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = #var("catalina.base")/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = #var("catalina.base")/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = #var("catalina.base")/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = #var("catalina.base")/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = #var("catalina.base")/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index 750436c..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <!-- Add your services here -->
-</role-list>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index d499857..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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.
-*#
-<web-app id="WebApp_ID" version="2.4" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- $Id: web.xml 615328 2008-01-25 20:25:05Z tv $                            -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
deleted file mode 100644
index 94c6554..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/powered-by-logo.gif
+++ /dev/null
Binary files differ
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
deleted file mode 100644
index 95ab364..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/templates/layouts/Default.vm
+++ /dev/null
@@ -1,29 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-<html>
-#TurbineHtmlHead()
-<body #TurbineHtmlBodyAttributes() >
-  <table bgcolor="$ui.bgcolor" width="100%">
-    <tr>
-      <td>&nbsp;</td>
-       <td align="right"><img src="$ui.image('turbine-project.png')"/></td>
-    </tr>
-  </table>
-$screen_placeholder
-  <img src="$ui.image('powered-by-logo.gif')"/>
-</body>
-</html>
diff --git a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm b/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
deleted file mode 100644
index 02b21e4..0000000
--- a/trunk/turbine-webapp-2.3.3/src/main/resources/archetype-resources/src/main/webapp/templates/screens/Index.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-<div align="center"><h1>$success</h1></div>
-
-You're now successfully running a <a
-href="http://turbine.apache.org/">Turbine</a> based
-application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-your web container.<p/>
-
-You can (and should!) change or remove this page at any time. It is
-intended to give you immediate feedback if you just deployed an newly
-setup Turbine application.</p>
diff --git a/trunk/turbine-webapp-4.0/LICENSE b/trunk/turbine-webapp-4.0/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/trunk/turbine-webapp-4.0/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/trunk/turbine-webapp-4.0/NOTICE b/trunk/turbine-webapp-4.0/NOTICE
deleted file mode 100644
index a43064b..0000000
--- a/trunk/turbine-webapp-4.0/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Turbine Webapp Component
-Copyright 2006-2016 The Apache Software Foundation.
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/turbine-webapp-4.0/README b/trunk/turbine-webapp-4.0/README
deleted file mode 100644
index d7e9268..0000000
--- a/trunk/turbine-webapp-4.0/README
+++ /dev/null
@@ -1,5 +0,0 @@
-If you get that goal integration-test of maven-archetype-plugin fails with 
-
-'Cannot run additions goals." cft. https://issues.apache.org/jira/browse/ARCHETYPE-488.
-
-Fastest workaround (Dez 2016) ist to copy  mvn.cmd to mvn.bat.
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/pom.xml b/trunk/turbine-webapp-4.0/pom.xml
deleted file mode 100644
index ed5ba5e..0000000
--- a/trunk/turbine-webapp-4.0/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-    <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>18</version>
-  </parent>
-  <groupId>org.apache.turbine</groupId>
-  <artifactId>turbine-webapp-4.0</artifactId>
-  <version>1.0.2-SNAPSHOT</version>
-  <packaging>maven-archetype</packaging>
-
-  <name>Archetype - Turbine 4.0 WebApp</name>
-  <description>This archetype sets up a web application project based on Apache Turbine 4.0</description>
-  <url>http://turbine.apache.org</url>
-
-  <inceptionYear>2011</inceptionYear>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-4.0/</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-4.0/</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/</url>
-  </scm>
-  
-<build>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.archetype</groupId>
-        <artifactId>archetype-packaging</artifactId>
-        <version>3.0.1</version>
-      </extension>
-    </extensions>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <artifactId>maven-archetype-plugin</artifactId>
-          <version>3.0.1</version>
-           <!-- skip tests in generated archetype's pom, here the integration-test would be skipped -->
-          <!--configuration>
-            <skip>true</skip>
-          </configuration-->   
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-</project>
diff --git a/trunk/turbine-webapp-4.0/src/changes/changes.xml b/trunk/turbine-webapp-4.0/src/changes/changes.xml
deleted file mode 100644
index daeae8a..0000000
--- a/trunk/turbine-webapp-4.0/src/changes/changes.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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.
--->
-<document>
-  <properties>
-    <title>Changes</title>
-    <author email="tv@apache.org">Thomas Vandahl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.2" date="in Subversion">
-      <action type="update" dev="gk" due-to="Jeffery Painter">
-         Added security test to show Turbine Fulcrum Torque consistency
-      </action>
-      <action type="fix" dev="gk" due-to="Jeffery Painter">
-         Fix OM classes and schema, SQL autoincrement by default used
-      </action>
-      <action type="update" dev="gk">
-        war plugin 3.2, mysql connector 5.1.44 Update
-      </action>
-      <action type="update" dev="gk">
-        Integrate JSON, Localization, Model Examples
-      </action>
-      <action type="update" dev="gk">
-        Using Torque Services, Code Cleanup, Removing Classes
-      </action>
-      <action type="update" dev="gk">
-        Turbine 4.0, JUNit 4.12
-      </action>
-    </release> 
-   <release version="1.0.1" date="in Subversion">
-       <action dev="gk" type="add">
-       Password change action, Check anonymous login
-      </action>
-      <action dev="gk" type="update">
-       JNDI Jetty Update
-      </action>
-      <action dev="tv" type="add">
-       Add testing in place with "integration-test"
-      </action>
-      <action dev="tv" type="update">
-       Turbine annotations, use auto detect Torque adapter
-      </action>
-       <action dev="gk" type="update">
-       Fulcrum Torque Security added manager, om classes
-      </action>
-      <action dev="painter" type="add">
-       Added readme, docs, helper sql..
-      </action>
-       <action dev="painter" type="update">
-       MySQL is now default
-      </action>
-      <action dev="gk" type="update">
-       Update schema to torque / intake 4.0, dependencies, configurations
-       Update to MemoryGroupManagerImpl, Fulcrum     
-      </action>
-      <action dev="gk" type="add">
-        Jetty support
-      </action>
-      <action dev="tv" type="fix">
-        TRB-95
-      </action>
-      <action dev="gk" type="update ">
-        Update to Turbine 4-M2
-      </action>
-    </release>
-    <release version="1.0.0" date="2012-11-06">
-      <action dev="tv" type="fix">
-        Fixed missing dependencies and wrong class names as reported on the mailing list
-      </action>
-      <action dev="tv" type="add">
-        Add information required for a release to the POM
-      </action>
-      <action dev="tv" type="add">
-        Initial version
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/META-INF/maven/archetype-metadata.xml b/trunk/turbine-webapp-4.0/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index bac4dcf..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?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.
--->
-<archetype-descriptor 
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  name="turbine-4.0-webapp">
-
-  <requiredProperties>
-    <requiredProperty key="turbine_app_name">
-      <defaultValue>My Turbine Web Application</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_intake_file">
-      <defaultValue>intake.xml</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_name">
-      <defaultValue>turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_adapter">
-      <defaultValue>auto</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_jndipath">
-      <defaultValue>jdbc/turbine</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_driver">
-      <defaultValue>com.mysql.jdbc.Driver</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_url">
-      <defaultValue>jdbc:mysql://localhost:3306/</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_user">
-      <defaultValue>db_user</defaultValue>
-    </requiredProperty>
-    <requiredProperty key="turbine_database_password">
-      <defaultValue>db_password</defaultValue>
-    </requiredProperty>
-  </requiredProperties>
-  <fileSets>
-    <fileSet filtered="true" packaged="true">
-        <directory>src/test/java</directory>
-        <includes>
-          <include>**/*.java</include>
-        </includes>
-    </fileSet>
-   <fileSet filtered="true" packaged="false">
-        <directory>src/test/resources</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false">
-        <directory>src/test/logs</directory>
-        <includes>
-          <include>**/*.log</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false">
-        <directory>src/test/conf</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="true" encoding="UTF-8">
-      <directory>src/main/java</directory>
-      <includes>
-        <include>**/*.java</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>docs</directory>
-      <includes>
-        <include>**/*.txt</include>
-        <include>**/*.sql</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/torque-schema</directory>
-      <includes>
-        <include>**/*.xml</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/META-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="true" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/WEB-INF</directory>
-      <includes>
-        <include>**/*.xml</include>
-        <include>**/*.properties</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/templates</directory>
-      <includes>
-        <include>**/*.vm</include>
-      </includes>
-    </fileSet>
-    <fileSet filtered="false" packaged="false" encoding="UTF-8">
-      <directory>src/main/webapp/resources</directory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</archetype-descriptor>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/README.txt b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/README.txt
deleted file mode 100644
index fb6c31f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/README.txt
+++ /dev/null
@@ -1,178 +0,0 @@
-#*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
-*#
-
-Notice
-
-About this archetype 
-
-Turbine Version: Turbine 4.0. 
-
-# Quick Guide to using the new Turbine 4.0 maven archetype 
-for skeleton application generation
-
-## Local database Setup
-
-First, you should have a local database installed and configured prior to 
-beginning the application setup below.
-
-As we are using MySQL bey default you need to create the database in MySQL, e.g. with
-
-mysql -u <user> -p
-mysql> create database helloWorld;
-mysql> \q
-
-or other tools. The database should have been started and the database user granted enough rights.
-
-## Maven archetype 
-
-Next, you can invoke the Maven archetype for turbine-webapp-4.0 from 
-the command line as shown below - please update values starting 
-with 'groupId' as appropriate.
-
-mvn archetype:generate \
-  -DarchetypeGroupId=org.apache.turbine \
-  -DarchetypeArtifactId=turbine-webapp-4.0 \
-  -DarchetypeVersion=1.0.1-SNAPSHOT \
-  -DgroupId=com.mycompany.webapp \
-  -DartifactId=myhelloworld \
-  -Dversion=1.0 \
-  -Dturbine_app_name=HelloWorld \
-  -Dturbine_database_adapter=mysql \
-  -Dturbine_database_user=db_username \
-  -Dturbine_database_password=db_password \
-  -Dturbine_database_name=helloworld \
-  -Dturbine_database_url=jdbc:mysql://localhost:3306/ \
-  -Dgoals=generate-sources,pre-integration-test
-
-### Notes
-
-When invoking archetype:generate like above, you already have set Turbine goals generate-sources,pre-integration-test 
-and you can then skip them later.
-
-Be aware, when you set both mvn commands goals (which are maven phases actually), i.e  with
-
--Dgoals=generate-sources, pre-integration-test 
-
-you have to create the database (see above) before finishing the (interactive) archetype commands. 
-Otherwise you could catch up doing this later and after that is done calling the phases afterwards as mentioned below.
-
-#### turbine_database_url
-
-Note that the database URL (turbine_database_url) 
-will be appended with your database name
-in the final pom.xml, so you do not need to specify that in 
-the configuration.
-
-## Project Start and Usage
-
-Next, change into the newly generated project folder, in our case
-
-cd myhelloworld
-
-Skip next two steps, if the build was successfull
-mvn generate-sources  ## This will generate the OM layer and SQL 
-          ## code for creating the corresponding
-          ## database tables
-
-mvn integration-test      ## This executes the SQL code to create 
-          ## the application schema defined 
-          ## in src/main/torque-schema
-
-You should now check the database tables and if some data is missing
-insert the sample data file in sample-mysql-data (Torque 4.0 has disabled the datasql task).
-
-mvn clean install 
-
-If you get an error like "The driver has not received any packets" probably the database is not up and running or the port may be another one.
-
-Last step on the command line is run the server by invoking 
-mvn jetty:run         ## Now you can launch your new Turbine application
-
-### Logs 
-
-Find the Logs in src/main/webapp/logs and
-
-### Application
-
-Open a web browser to http://localhost:8081/app
-
-Login should work with user admin/password or user/password.
-
-## Background
-
-By default Intake is used as an validation mechanism for authentication. You can change to the default login by setting
-
-action.login=LoginUser in TurbineResources.properties and changing Login.vm appropriately (commented form)
-
-## Tests
-
-Prerequisites
-- ignored tests require at least Turbine version 4.0.1 
-- database was build successfully e.g. with archetype.
-- running mysql
-
-If running from integration test, check/update
-- in pom.xml turbine.core property,
-- target/test-classes/projects/first/project/integrationtest/src/test/conf/torque/TorqueTest.properties or
-  META-INF/maven/archetype-metadata.xml
-
-The security test is by default skipped as it requires a running mysql. It tests many of the Fulcrum Torque Turbine security aspects, 
-activate it by calling
-
-mvn test -DskipTests=false
-
-CAVEAT: If initialization fails, double check your database credentials! If invalid the error might be somewhat hidden behind a
- Torque exception!
-
-## Eclipse
-
-To enable application development in Eclipse, run the following command 
-and then import the project into Eclipse.
-
-mvn eclipse:eclipse
-
-Once imported, update your project to be managed by Maven 
--> Right click on the project name
--> Configure 
--> Convert to Maven project
-
-To test the application can be deployed by Eclipse, select the run
-configuration "Run On Server" if you have a container configured with
-your eclipse environment.
-
-### Eclipse Debugging
-
-You even could debug the app by setting the environment variable to something like this
-
-set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
-
-before running the jetty server.
-
-## Starting developing
-
-Be aware of settings and some smaller restrictions, which mostly will be fixed in the upcoming releases.
-
-- Keep groups/roles lower case (which should be fixed in Fulcrum Security 1.1.1/Turbine 4.0)
-- abstract classes and managers are included (because of some minor bugs in Fulcrum Security 1.1.0, same as above)
-- LogoutUser action is included (fix in Turbine 4.0, getUserFromSession)
-- LoginUser action is included (to check for anonymous user, may be fixed in future release)
-- OM (Torque Object Mapper) stub classes are included (until configurable in schema with Torque version 2.1)
-- TurbineConfiguration returns a Commons configuration object, even if field is not assignable (will be fixed in Turbine 4.0, you can then assign e.g. to String instead, cft. SecureScreen)
-- Database connection is done initially by default with JNDI. If you want to change it, check Torque.properties and (1) for Tomcat, META-INF/context.xml or (2) for Jetty, WEB-INF/jetty-env.xml.  
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
deleted file mode 100644
index f605246..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_application-data.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-
-##
-## application-data.sql
-##
-## Torque will not autogenerate these files anymore - please run
-## this SQL code maually to get your application up and running
-##
-
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (1, 'Donald', 'Knuth');
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (2, 'Mickey', 'Mouse' );
-INSERT INTO AUTHOR (AUTH_ID, FIRST_NAME, LAST_NAME) values (3, 'Bill', 'Bryson' );
-
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 1, 1, 'The Art of Computer Programming', 'Computer Science');
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 2, 2, 'Disney: Behind the Scenes', 'Fiction' );
-INSERT INTO BOOK ( BOOK_ID, AUTH_ID, TITLE, SUBJECT ) values ( 3, 3, 'A Walk in the Woods', 'Fiction');
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
deleted file mode 100644
index 48ebeeb..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/docs/sample-mysql-data/_turbine-security-data.sql
+++ /dev/null
@@ -1,51 +0,0 @@
-##
-## turbine-security-data.sql
-##
-## Torque will not autogenerate these files anymore - but sql-maven-plugin!
-## If not, please run
-## this SQL code manually to get your application up and running
-##
-SET FOREIGN_KEY_CHECKS=0;
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (1,'admin','password','','Admin');
-
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (2,'user','password','','User');
-    
-INSERT INTO TURBINE_USER (USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
-    VALUES (3,'anon','nopw','','Anon');
-
-INSERT INTO TURBINE_PERMISSION (`PERMISSION_ID`, `PERMISSION_NAME`) VALUES
-(2, 'Turbine'),
-(1, 'TurbineAdmin');
-
-INSERT INTO TURBINE_ROLE (`ROLE_ID`, `ROLE_NAME`) VALUES
-(1, 'turbineadmin'),
-(2, 'turbineuser');
-
-INSERT INTO TURBINE_GROUP (`GROUP_ID`, `GROUP_NAME`) VALUES
-(1, 'global'),
-(2, 'Turbine');
-
-INSERT INTO TURBINE_ROLE_PERMISSION (`ROLE_ID`, `PERMISSION_ID`) VALUES
-(1, 1),
-(2, 2);
-
-INSERT INTO TURBINE_USER_GROUP_ROLE (`USER_ID`, `GROUP_ID`, `ROLE_ID`) VALUES
-(1, 1, 1),
-(1, 2, 1),
-(2, 2, 2),
-(2, 1, 2);
-
--- 
-ALTER TABLE TURBINE_USER MODIFY COLUMN USER_ID INT auto_increment;
-ALTER TABLE TURBINE_PERMISSION MODIFY COLUMN PERMISSION_ID INT auto_increment;
-ALTER TABLE TURBINE_ROLE MODIFY COLUMN ROLE_ID INT auto_increment;
-ALTER TABLE TURBINE_GROUP MODIFY COLUMN GROUP_ID INT auto_increment;
-
-
-##-- use ID_TABLE  with idMethod="idbroker" and set appropriate start_id and end_id 
-##-- INSERT INTO ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1,'TURBINE_USER',start_id, end_id);
-    
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index a1b25f6..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,424 +0,0 @@
-<?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.
-*#
-#set($dollar = '$')
-#macro (var $label)${dollar}{${label}}#end
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${package}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-
-    <name>${turbine_app_name}</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-            <!-- (target) resource and filtering is not used  at all ? 
-            at least removed setting absolute path e.g. with #var("project.build.directory"), 
-            which does thrown an exception with mvn eclipse:eclipse - path is then incorrectly relativized.
-                --> 
-            <resource> 
-                <targetPath>../torque/schema</targetPath>
-                <filtering>true</filtering>
-                <directory>src/main/torque-schema</directory>
-                <includes>
-                    <include>*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-        <testSourceDirectory>src/test/java</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test/resources</directory>
-                <includes>
-                    <include>*.xml</include>
-                    <include>*.properties</include>
-                </includes>
-            </testResource>
-        </testResources>
-        <plugins>
-            <!-- test will not fail in turbine 4.0.1 -->
-            <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-surefire-plugin</artifactId>
-              <version>2.20.1</version>
-              <configuration>
-                <skipTests>#var("skipTests")</skipTests>
-              </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.5.1</version>
-                <configuration>
-                    <source>#var("maven.compile.source")</source>
-                    <target>#var("maven.compile.target")</target>
-                    <encoding>#var("project.build.sourceEncoding")</encoding>
-                </configuration>
-            </plugin>
-             <plugin>
-                <groupId>org.apache.torque</groupId>
-                <artifactId>torque-maven-plugin</artifactId>
-                <version>4.0</version>
-                <configuration>
-                    <schemaDir>#var("project.basedir")/src/main/torque-schema</schemaDir>
-                    <useClasspath>true</useClasspath>
-                    <runOnlyOnSchemaChange>false</runOnlyOnSchemaChange>
-                    <targetDatabase>${turbine_database_adapter}</targetDatabase>
-                </configuration>
-                <executions>
-                  <execution>
-                    <id>torque-om</id>
-                    <phase>generate-sources</phase>
-                    <goals>
-                      <goal>generate</goal>
-                    </goals>
-                    <configuration>
-                      <packaging>classpath</packaging>
-                      <configPackage>org.apache.torque.templates.om</configPackage>
-                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-                      <loglevel>error</loglevel>
-                      <options>
-                        <torque.database>${turbine_database_adapter}</torque.database>
-                        <torque.om.package>${package}.om</torque.om.package>
-                        <torque.om.addGetByNameMethods>false</torque.om.addGetByNameMethods>
-                        <torque.om.save.saveException>TorqueException</torque.om.save.saveException>
-                        <torque.om.useIsForBooleanGetters>true</torque.om.useIsForBooleanGetters>
-                        <torque.om.useManagers>false</torque.om.useManagers>
-                        <torque.om.addTimeStamp>true</torque.om.addTimeStamp>
-                        <torque.om.objectIsCaching>true</torque.om.objectIsCaching>
-                        <torque.om.save.addSaveMethods>true</torque.om.save.addSaveMethods>
-                        <torque.om.addGetByNameMethods>true</torque.om.addGetByNameMethods>
-                        <torque.om.complexObjectModel>true</torque.om.complexObjectModel>
-                      </options>
-                      <!-- keeping defaultOutputDir in default ${project.build.directory}/generated-sources will havee the base classes there -->
-                      <!-- we want the classes, which may be custumoized in the source directory. Ignore the warning about generated-java -->
-                      <outputDirMap>
-                        <modifiable>#var("project.build.sourceDirectory")</modifiable>
-                      </outputDirMap>
-                    </configuration>
-                  </execution>
-                  <execution>
-                    <id>torque-sql-mysql</id><!-- ${turbine_database_adapter} -->
-                    <phase>generate-sources</phase>
-                    <goals>
-                      <goal>generate</goal>
-                    </goals>
-                    <configuration>
-                      <packaging>classpath</packaging>
-                      <configPackage>org.apache.torque.templates.sql</configPackage>
-                      <sourceDir>#var("project.basedir")/src/main/torque-schema</sourceDir>
-                      <defaultOutputDir>#var("project.build.directory")/generated-sql/torque/mysql</defaultOutputDir>
-                      <defaultOutputDirUsage>none</defaultOutputDirUsage>
-                      <loglevel>error</loglevel>
-                      <options>
-                        <torque.database>mysql</torque.database>
-                      </options>
-                    </configuration>
-                  </execution>
-              </executions>
-              <dependencies>
-                 <dependency>
-                    <groupId>org.apache.torque</groupId>
-                    <artifactId>torque-templates</artifactId>
-                    <version>4.0</version>
-                  </dependency>
-              </dependencies>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-war-plugin</artifactId>
-            <version>3.2.0</version>
-            <configuration>
-                <archive>
-                    <manifestEntries>
-                        <X-Compile-Source-JDK>#var("maven.compile.source")</X-Compile-Source-JDK>
-                        <X-Compile-Target-JDK>#var("maven.compile.target")</X-Compile-Target-JDK>
-                    </manifestEntries>
-                </archive>
-                <!-- containerConfigXML>WEB-INF/build/context.xml</containerConfigXML -->
-            </configuration>
-          </plugin>
-        <!-- Required to execute torque database build -->
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>sql-maven-plugin</artifactId>
-          <version>1.5</version>
-          <configuration>
-            <!-- Please update with your database configuration -->
-            <driver>${turbine_database_driver}</driver>
-            <url>${turbine_database_url}${turbine_database_name}</url>
-            <username>${turbine_database_user}</username>
-            <password>${turbine_database_password}</password>
-            <onError>continue</onError>
-            <autocommit>true</autocommit>
-            <orderFile>descending</orderFile>
-          </configuration>
-          <!-- update with your database driver dependency -->
-          <!-- this is mysql specific -->
-          <dependencies>
-            <dependency>
-              <artifactId>mysql-connector-java</artifactId>
-              <groupId>mysql</groupId>
-              <version>5.1.44</version>
-            </dependency>
-          </dependencies>
-          <!-- this is mysql specific -->
-          <executions>
-            <execution>
-                <id>create-db</id>
-                <phase>pre-integration-test</phase>
-                <goals>
-                  <goal>execute</goal>
-                </goals>
-                <configuration>
-                  <orderFile>ascending</orderFile>
-                  <fileset>
-                    <basedir>#var("project.build.directory")/generated-sql/torque/mysql</basedir>
-                    <!-- basedir>${basedir}/target/generated-sql</basedir -->
-                    <includes>
-                      <include>*.sql</include>
-                    </includes>
-                  </fileset>
-              </configuration>
-            </execution>
-            <execution>
-              <id>create-data</id>
-              <phase>pre-integration-test</phase>
-              <goals>
-                <goal>execute</goal>
-              </goals>
-              <configuration>
-                <orderFile>ascending</orderFile>
-                <srcFiles>
-                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_application-data.sql</srcFile>
-                  <srcFile>#var("project.basedir")/docs/sample-mysql-data/_turbine-security-data.sql</srcFile>
-                </srcFiles>              
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-        <!-- jetty:run checks deployed war http://localhost:8081/app/ 
-           Using jetty 8 as supporting java 6. Other specs cft. http://www.eclipse.org/jetty/documentation/9.3.0.v20150612/what-jetty-version.html  -->
-        <plugin>
-           <groupId>org.mortbay.jetty</groupId>
-           <artifactId>jetty-maven-plugin</artifactId>
-           <version>8.1.16.v20140903</version>
-          <configuration>
-            <scanIntervalSeconds>10</scanIntervalSeconds>
-            <dumpOnStart>true</dumpOnStart>
-            <reload>manual</reload>
-            <connectors>
-            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
-              <port>8081</port>
-            </connector>
-            </connectors>
-            <!--webApp>
-              <contextPath>/app</contextPath>
-            </webApp-->
-          </configuration>
-        </plugin>
-      </plugins>
-    </build>
-
-    <dependencies>
-    
-    <!-- update with the database driver of your choice -->
-    <dependency>
-      <artifactId>mysql-connector-java</artifactId>
-      <groupId>mysql</groupId>
-      <version>5.1.44</version>
-    </dependency>    
-      <dependency>
-          <groupId>javax.activation</groupId>
-          <artifactId>activation</artifactId>
-          <version>1.1.1</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-          <version>1.4.5</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>javax.servlet</groupId>
-          <artifactId>servlet-api</artifactId>
-          <version>2.5</version>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.turbine</groupId>
-          <artifactId>turbine</artifactId>
-          <version>#var("turbine.core")</version>
-      </dependency>
-      <!-- slf4j still optional in 4.0 -->
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-       <dependency>     <!-- delegate slf4j to log4j -->
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
-        <version>${slf4j.version}</version>
-       </dependency>
-       <dependency>     <!-- redirect JCL to slf4j -->
-        <groupId>org.slf4j</groupId>
-        <artifactId>jcl-over-slf4j</artifactId>
-        <version>${slf4j.version}</version>
-      </dependency>
-      <!-- yaafi is optional. NOTICE: 1.0.7 has group org.apache.turbine not org.apache.fulcrum  -->
-      <dependency>
-        <groupId>org.apache.turbine</groupId>
-        <artifactId>fulcrum-yaafi</artifactId>
-        <version>1.0.7</version>
-      </dependency>
-      <!-- if using intake -->
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-intake</artifactId>
-        <version>#var("fulcrum.intake")</version>
-       </dependency>
-       <!-- include some optional dependencies required in example componentConfiguration.xml -->
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-cache</artifactId>
-        <version>1.1.0</version>
-      </dependency>
-       <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-upload</artifactId>
-        <version>1.0.5</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-memory</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-       <dependency>             
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-torque</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-security-api</artifactId>
-        <version>#var("fulcrum.security")</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.fulcrum</groupId>
-        <artifactId>fulcrum-json-jackson2</artifactId>
-        <version>#var("fulcrum.json")</version>
-      </dependency>
-      <dependency>
-        <groupId>com.fasterxml.jackson.datatype</groupId>
-        <artifactId>jackson-datatype-json-org</artifactId>
-        <!-- version>$dollar{jackson.version}</version-->
-        <!--  2.7.x has Java 7 baseline, but not compiled with Java 6 support (version 51 error:), cft. https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.7 Changes: compatibility: ..  should still be possible to use Jackson 2.7 on Java 6, but not compile, build. With Jackson 2.8, Java 7 languages features will be allowed -->
-        <version>2.6.6</version>
-      </dependency>
-      <!-- if activating useJsonPath include jayway dependency  -->
-      <!-- dependency>
-            <groupId>com.jayway.jsonpath</groupId>
-            <artifactId>json-path</artifactId>
-            <version>2.3.0</version>
-            <exclusions>
-              <exclusion>
-                <groupId>net.minidev</groupId>
-                <artifactId>json-smart</artifactId>
-              </exclusion>
-            </exclusions>
-        </dependency-->
-        
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.apache.fulcrum</groupId>
-          <artifactId>fulcrum-testcontainer</artifactId>
-          <version>1.0.7</version>
-          <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <maven.compile.source>1.6</maven.compile.source>
-        <maven.compile.target>1.6</maven.compile.target>
-        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
-        <fulcrum.json>1.1.1</fulcrum.json>
-        <fulcrum.intake>1.2.3</fulcrum.intake>
-        <fulcrum.security>1.1.2</fulcrum.security>
-        <turbine.core>4.0.1</turbine.core>
-        <slf4j.version>1.7.25</slf4j.version>
-        <skipTests>true</skipTests>
-    </properties>
-    
-    
-    <profiles>
-        <profile>
-            <id>jetty</id>
-            <build>
-                <defaultGoal>jetty:run</defaultGoal>
-                <plugins>
-                    <plugin>
-                        <groupId>org.mortbay.jetty</groupId>
-                        <artifactId>maven-jetty-plugin</artifactId>
-                        <configuration>
-                            <connectors>
-                                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-                                    <port>15000</port>
-                                    <maxIdleTime>60000</maxIdleTime>
-                                </connector>
-                            </connectors>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-       <profile>
-            <id>tomcat</id>
-            <build>
-                <defaultGoal>tomcat:run</defaultGoal>
-                <finalName>#var("project.artifactId")</finalName>
-                <plugins>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>tomcat-maven-plugin</artifactId>
-                        <configuration>
-                            <port>15000</port>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-    
-</project>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N.properties
deleted file mode 100644
index f9f58dd..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-l10nkey=Default value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
-no_permission=You do not have permission, login required.
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
deleted file mode 100644
index 1921853..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_de_DE.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
-#
-# 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.
-
-l10nkey = German value
-
-password_msg = Bitte ein Passwort eingeben
-
-username_mask_msg = Geben Sie als Benutzername eine E-Mail-Adresse ein
-
-username_min_length_msg = Es m\u00FCssen {0} Zeichen eingegeben werden
-
-username_required_msg = Bitte einen Benutzernamen eingeben
-
-no_permission=Unautorisierte Aktion erfordert Login.
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
deleted file mode 100644
index 44120d1..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/L10N_en_US.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-l10nkey=US-English value
-username_required_msg=Please enter an email address as user name
-username_min_length_msg=Please enter at least {0} characters
-username_mask_msg=Please enter a valid email address as user name
-password_msg=Please enter a password
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
deleted file mode 100644
index 3ba889e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxAction.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package ${package}.flux.modules.actions;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.fulcrum.localization.LocalizationService;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.actions.VelocitySecureAction;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity Secure action.
- *
- * Always performs a Security Check that you've defined before executing the
- * doPerform().
- */
-public class FluxAction extends VelocitySecureAction {
-
-	@TurbineService
-	private LocalizationService localizationService;
-
-	/**
-	 * This currently only checks to make sure that user is allowed to view the
-	 * storage area. If you create an action that requires more security then
-	 * override this method.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @return True if the user is authorized to access the screen.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	/**
-	 * This checks if the user has the role mapped in the flux.properties file for
-	 * flux.admin.role which you should define
-	 */
-	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception {
-		boolean isAuthorized = false;
-
-		/*
-		 * Grab the Flux Admin role listed in the Flux.properties file that is included
-		 * in the the standard TurbineResources.properties file.
-		 */
-		String fluxAdminRole = Turbine.getConfiguration().getString("flux.admin.role");
-
-		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = getRunData(data).getACL();
-
-		if (acl == null || !(acl.hasRole(fluxAdminRole))) {
-			String msg = localizationService.getString(localizationService.getDefaultBundleName(),
-					localizationService.getLocale(((RunData) data).getRequest()), "no_permission");
-
-			getRunData(data).setMessage(msg);
-
-			getRunData(data).setScreenTemplate("Login.vm");
-			isAuthorized = false;
-		} else if (acl.hasRole(fluxAdminRole)) {
-			isAuthorized = true;
-		}
-
-		return isAuthorized;
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	public void doPerform(PipelineData data, Context context) throws Exception {
-		User user = getRunData(data).getUser();
-		context.put("user", user);
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
deleted file mode 100644
index 09cba49..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogin.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package ${package}.flux.modules.actions;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
-/**
- * Login for Flux in stand-alone mode.
- *
- */
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system against a user
- * in the database. If the user exists in the database that users last login
- * time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
- * @version $Id: LoginUser.java 1725012 2017-11-16 11:38:47Z painter $
- */
-public class FluxLogin extends org.apache.turbine.modules.actions.LoginUser {
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	/**
-	 * Checks for anonymous user, else calls parent method.
-	 *
-	 * @param pipelineData
-	 *            Turbine information.
-	 * @exception FulcrumSecurityException
-	 *                could not get instance of the anonymous user
-	 */
-	@Override
-	public void doPerform(PipelineData pipelineData) throws FulcrumSecurityException {
-
-		RunData data = getRunData(pipelineData);
-		String username = data.getParameters().getString(FluxLogin.CGI_USERNAME, "");
-
-		if (StringUtils.isEmpty(username)) {
-			return;
-		}
-
-		if (username.equals(security.getAnonymousUser().getName())) {
-			data.setMessage("Anonymous user cannot login");
-			reset(data);
-			return;
-		}
-
-		super.doPerform(pipelineData);
-	}
-
-	private void reset(RunData data) throws UnknownEntityException {
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-
-		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN, ""))) {
-			// We're running in a templating solution
-			data.setScreenTemplate(conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-		} else {
-			data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-		}
-	}
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
deleted file mode 100644
index a47af7c..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/FluxLogout.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package ${package}.flux.modules.actions;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * Removes the user from the session and sends them to the screen.homepage
- * specified in the resources file
- *
- */
-public class FluxLogout extends Action {
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	/**
-	 * Clears the PipelineData user object back to an anonymous status not logged
-	 * in, and with a null ACL. If the tr.props ACTION_LOGIN is anything except
-	 * "LogoutUser", flow is transfered to the SCREEN_HOMEPAGE
-	 *
-	 * If this action name is the value of action.logout then we are being run
-	 * before the session validator, so we don't need to set the screen (we assume
-	 * that the session validator will handle that). This is basically still here
-	 * simply to preserve old behaviour - it is recommended that action.logout is
-	 * set to "LogoutUser" and that the session validator does handle setting the
-	 * screen/template for a logged out (read not-logged-in) user.
-	 *
-	 * @param pipelineData
-	 *            Turbine information.
-	 * @exception FulcrumSecurityException
-	 *                a problem occurred in the security service.
-	 */
-	@Override
-	public void doPerform(PipelineData pipelineData) throws FulcrumSecurityException {
-
-		RunData data = getRunData(pipelineData);
-		// Session validator did not run, so RunData is not populated
-		User user = data.getUserFromSession();
-
-		if (user != null && !security.isAnonymousUser(user)) {
-			// Make sure that the user has really logged in...
-			if (!user.hasLoggedIn()) {
-				return;
-			}
-
-			user.setHasLoggedIn(Boolean.FALSE);
-			security.saveUser(user);
-		}
-
-		data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
-
-		// This will cause the acl to be removed from the session in
-		// the Turbine servlet code.
-		data.setACL(null);
-
-		// Retrieve an anonymous user.
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-		data.save();
-
-		// In the event that the current screen or related navigations
-		// require acl info, we cannot wait for Turbine to handle
-		// regenerating acl.
-		data.getSession().removeAttribute(TurbineConstants.ACL_SESSION_KEY);
-
-		// If this action name is the value of action.logout then we are
-		// being run before the session validator, so we don't need to
-		// set the screen (we assume that the session validator will handle
-		// that). This is basically still here simply to preserve old behavior
-		// - it is recommended that action.logout is set to "LogoutUser" and
-		// that the session validator does handle setting the screen/template
-		// for a logged out (read not-logged-in) user.
-		if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY, TurbineConstants.ACTION_LOGOUT_DEFAULT)
-				.equals(TurbineConstants.ACTION_LOGOUT_DEFAULT)) {
-			data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-		}
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
deleted file mode 100644
index 7e35060..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/SecureAction.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package ${package}.flux.modules.actions;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.localization.LocalizationService;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.actions.VelocitySecureAction;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity Secure action.
- *
- * Always performs a Security Check that you've defined before executing the
- * doPerform().
- */
-public class SecureAction extends VelocitySecureAction {
-
-	@TurbineService
-	private LocalizationService localizationService;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	@TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
-	private Configuration templateLogin;
-
-	@TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
-	private Configuration templateHomepage;
-
-	/**
-	 * This currently only checks to make sure that user is allowed to view the
-	 * storage area. If you create an action that requires more security then
-	 * override this method.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @return True if the user is authorized to access the screen.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	@Override
-	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
-
-		RunData data = getRunData(pipelineData);
-
-		boolean isAuthorized = false;
-
-		/*
-		 * Grab the Flux Admin role listed in the Flux.properties file that is included
-		 * in the the standard TurbineResources.properties file.
-		 */
-		String fluxAdminRole = Turbine.getConfiguration().getString("flux.admin.role");
-
-		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = data.getACL();
-
-		if (acl == null) {
-			String msg = localizationService.getString(localizationService.getDefaultBundleName(),
-					localizationService.getLocale(((RunData) data).getRequest()), "no_permission");
-
-			data.setMessage(msg);
-
-			log.debug(
-					"call not permitted for template: " + data.getScreenTemplate() + " and action " + data.getAction());
-			data.setScreenTemplate((String) templateHomepage.getProperty(""));
-			isAuthorized = false;
-
-		} else if (acl.hasRole(fluxAdminRole)) {
-			isAuthorized = true;
-		} else {
-			data.setScreenTemplate((String) templateHomepage.getProperty(""));
-			data.setMessage("You do not have access to this part of the site.");
-			isAuthorized = false;
-		}
-		return isAuthorized;
-
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception,
-	 *                a generic exception.
-	 */
-	public void doPerform(PipelineData data, Context context) throws Exception {
-		User user = getRunData(data).getUser();
-		context.put("user", user);
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
deleted file mode 100644
index f04bfe0..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/group/FluxGroupAction.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package ${package}.flux.modules.actions.group;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.configuration.Configuration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.yaafi.framework.util.StringUtils;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.flux.modules.actions.FluxAction;
-
-/**
- * Action to manage groups in Turbine.
- * 
- */
-public class FluxGroupAction extends FluxAction {
-
-	private static Log log = LogFactory.getLog(FluxGroupAction.class);
-	private static String GROUP_ID = "group";
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	/**
-	 * ActionEvent responsible for inserting a new user into the Turbine security
-	 * system.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-
-		String name = data.getParameters().getString(GROUP_ID);
-		if (!StringUtils.isEmpty(name)) {
-
-			try {
-				// create the group
-				Group group = security.getGroupInstance();
-				group.setName(name);
-				security.addGroup(group);
-			} catch (EntityExistsException eee) {
-
-				context.put("name", name);
-				context.put("errorTemplate", "group,GroupAlreadyExists.vm");
-
-				/*
-				 * We are still in insert mode. So keep this value alive.
-				 */
-				data.getParameters().add("mode", "insert");
-				setTemplate(data, "group,GroupForm.vm");
-			} catch (Exception e) {
-				log.error("Something bad happened");
-			}
-		} else {
-			log.error("Cannot add empty group name");
-		}
-
-	}
-
-	/**
-	 * Update a group name
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-		String groupName = data.getParameters().getString("oldName");
-		if (!StringUtils.isEmpty(groupName)) {
-			Group group = security.getGroupByName(groupName);
-			String name = data.getParameters().getString(GROUP_ID);
-			if (group != null && !StringUtils.isEmpty(name)) {
-				try {
-					security.renameGroup(group, name);
-				} catch (UnknownEntityException uee) {
-					/*
-					 * Should do something here but I still think we should use the an id so that
-					 * this can't happen.
-					 */
-				}
-			} else {
-				log.error("Cannot update group to empty name");
-			}
-		} else {
-			log.error("Cannot update group to empty name");
-		}
-	}
-
-	/**
-	 * ActionEvent responsible for removing a user.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
-
-		RunData data = getRunData(pipelineData);
-
-		try {
-			Group group = security.getGroupByName(data.getParameters().getString(GROUP_ID));
-			if ( group != null ) {
-				security.removeGroup(group);
-			} else {
-				data.setMessage("Could not find group to remove");
-			}
-		} catch (UnknownEntityException uee) {
-			/*
-			 * Should do something here but I still think we should use the an id so that
-			 * this can't happen.
-			 */
-			log.error(uee);
-		}
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-		log.info("Running do perform!");
-		data.setMessage("Can't find the requested action!");
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
deleted file mode 100644
index d9ada4f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/permission/FluxPermissionAction.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package ${package}.flux.modules.actions.permission;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.configuration.Configuration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.torque.om.TurbinePermission;
-import org.apache.fulcrum.security.torque.om.TurbinePermissionPeer;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.fulcrum.yaafi.framework.util.StringUtils;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.flux.modules.actions.FluxAction;
-
-/**
- * Action to manage permissions in Turbine.
- * 
- * @version $Id: FluxPermissionAction.java,v 1.11 2017/11/16 10:24:41 painter
- *          Exp $
- */
-public class FluxPermissionAction extends FluxAction {
-	private static Log log = LogFactory.getLog(FluxPermissionAction.class);
-	private static String PERM_ID = "permission";
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	/**
-	 * ActionEvent responsible for inserting a new permission into the Turbine
-	 * security system.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-
-		RunData data = getRunData(pipelineData);
-		String name = data.getParameters().getString(PERM_ID);
-		if (!StringUtils.isEmpty(name)) {
-			// create the permission
-			TurbinePermission tp = new TurbinePermission();
-			tp.setName(name);
-			tp.setNew(true);
-			tp.save();
-		} else {
-			data.setMessage("Cannot add permission without a name");
-			data.getParameters().add("mode", "insert");
-			data.setScreen("permission,FluxPermissionForm.vm");
-		}
-
-	}
-
-	/**
-	 * ActionEvent responsible updating a permission. Must check the input for
-	 * integrity before allowing the user info to be update in the database.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-
-		String old_name = data.getParameters().getString("oldName");
-		String name = data.getParameters().getString(PERM_ID);
-		if (!StringUtils.isEmpty(name)) {
-
-			/*
-			 * broken Permission perm = security.getPermissionByName(old_name);
-			 * security.renamePermission(perm, name);
-			 */
-
-			// manual rename
-			Criteria criteria = new Criteria();
-			criteria.where(TurbinePermissionPeer.PERMISSION_NAME, old_name);
-			TurbinePermission tp = TurbinePermissionPeer.doSelectSingleRecord(criteria);
-			if (tp != null) {
-				tp.setName(name);
-				tp.save();
-			}
-
-		} else {
-			data.setMessage("Cannot find permission to update");
-			data.setScreen("permission,FluxPermissionList.vm");
-		}
-	}
-
-	/**
-	 * ActionEvent responsible for removing a permission.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-
-		try {
-			String permName = data.getParameters().getString(PERM_ID);
-
-			if (!StringUtils.isEmpty(permName)) {
-				// just
-				org.apache.fulcrum.security.model.turbine.entity.TurbinePermission perm = security.<org.apache.fulcrum.security.model.turbine.entity.TurbinePermission>getPermissionByName(
-						permName);
-				// remove the role-permission links
-				RoleSet roles = perm.getRoles();
-				for (Role role : roles) {
-					security.revoke(role, perm);
-				}
-
-				// Remove the permission
-				security.removePermission(perm);
-
-			} else {
-				data.setMessage("Cannot find permission to delete");
-				data.setScreen("permission,FluxPermissionList.vm");
-			}
-		} catch (Exception e) {
-			data.setMessage("An error occured while trying to remove a permission");
-		}
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-		log.info("Running do perform!");
-		data.setMessage("Can't find the requested action!");
-	}
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
deleted file mode 100644
index a29471e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/role/FluxRoleAction.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package ${package}.flux.modules.actions.role;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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 java.util.Iterator;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
-import org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeer;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.PermissionSet;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.yaafi.framework.util.StringUtils;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.flux.modules.actions.FluxAction;
-
-/**
- * Action to manager roles in Turbine.
- * 
- */
-public class FluxRoleAction extends FluxAction {
-
-	private static Log log = LogFactory.getLog(FluxRoleAction.class);
-	private static String ROLE_ID = "role";
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-		Role role = security.getRoleInstance();
-		data.getParameters().setProperties(role);
-
-		String name = data.getParameters().getString(ROLE_ID);
-		role.setName(name);
-
-		try {
-			security.addRole(role);
-		} catch (EntityExistsException eee) {
-			context.put("name", name);
-			context.put("errorTemplate", "role,FluxRoleAlreadyExists.vm");
-			context.put("role", role);
-			/*
-			 * We are still in insert mode. So keep this value alive.
-			 */
-			data.getParameters().add("mode", "insert");
-			setTemplate(data, "role,FluxRoleForm.vm");
-		}
-
-	}
-
-	/**
-	 * ActionEvent responsible updating a role. Must check the input for integrity
-	 * before allowing the user info to be update in the database.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-		Role role = security.getRoleByName(data.getParameters().getString("oldName"));
-		String name = data.getParameters().getString(ROLE_ID);
-		if (role != null && !StringUtils.isEmpty(name)) {
-			try {
-				security.renameRole(role, name);
-			} catch (UnknownEntityException uee) {
-				log.error("Could not rename role: " + uee);
-			}
-		} else {
-			data.setMessage("Cannot update a role to an empty name");
-			log.error("Cannot update role to empty name");
-		}
-	}
-
-	/**
-	 * ActionEvent responsible for removing a role.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-
-		try {
-			// find the role
-			Role role = security.getRoleByName(data.getParameters().getString(ROLE_ID));
-
-			if (role != null) {
-				// remove dependencies to users with the role
-				removeRoleFromAllUsers(role);
-
-				// remove all permissions
-				security.revokeAll(role);
-
-				// now remove the role
-				security.removeRole(role);
-			} else {
-				data.setMessage("Role was not found");
-			}
-		} catch (UnknownEntityException uee) {
-			/*
-			 * Should do something here but I still think we should use the an id so that
-			 * this can't happen.
-			 */
-			log.error(uee);
-		} catch (Exception e) {
-			log.error("Could not remove role: " + e);
-		}
-	}
-
-	/**
-	 * Update the roles that are to assigned to a user for a project.
-	 * 
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doPermissions(PipelineData pipelineData, Context context) throws Exception {
-
-		RunData data = getRunData(pipelineData);
-		/*
-		 * Grab the role we are trying to update. Always not null
-		 */
-		TurbineRole role = security.<TurbineRole>getRoleByName(data.getParameters().getString(ROLE_ID));
-
-		/*
-		 * Grab the permissions for the role we are dealing with.
-		 */
-		PermissionSet rolePermissions = role.getPermissions();
-
-		/*
-		 * Grab all the permissions.
-		 */
-		PermissionSet permissions = security.getAllPermissions();
-
-		// id part one
-		String roleName = role.getName();
-		for (Iterator<Permission> iterator = permissions.iterator(); iterator.hasNext();) {
-			Permission permission = iterator.next();
-			String permissionName = permission.getName();
-			String rolePermission = roleName + permissionName;
-
-			String formRolePermission = data.getParameters().getString(rolePermission);
-			if (formRolePermission != null && !rolePermissions.contains(permission)) {
-				/*
-				 * Checkbox has been checked AND the role doesn't already contain this
-				 * permission. So assign the permission to the role.
-				 */
-				log.debug("adding " + permissionName + " to " + roleName);
-				security.grant(role, permission);
-				// this might also be done with role.addPermission(permission);
-			} else if (formRolePermission == null && rolePermissions.contains(permission)) {
-				/*
-				 * Checkbox has not been checked AND the role contains this permission. So
-				 * remove this permission from the role.
-				 */
-				log.debug("removing " + permissionName + " from " + roleName);
-				security.revoke(role, permission);
-				// this might also be done with role.removePermission(permission);
-			}
-
-		}
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 *
-	 * @param data
-	 *            Turbine information.
-	 * @param context
-	 *            Context for web pages.
-	 * @exception Exception
-	 *                a generic exception.
-	 */
-	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
-		log.info("Running do perform!");
-		getRunData(pipelineData).setMessage("Can't find the requested action!");
-	}
-
-	/**
-	 * Helper method for removing roles, must clear associated users with the role
-	 */
-	private void removeRoleFromAllUsers(Role role) {
-		try {
-			Criteria criteria = new Criteria();
-			criteria.where(TurbineUserGroupRolePeer.ROLE_ID, role.getId());
-			TurbineUserGroupRolePeer.doDelete(criteria);
-		} catch (Exception e) {
-			log.error("Error removing user, role associations: " + e.toString());
-		}
-	}
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
deleted file mode 100644
index 6252f9e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
+++ /dev/null
@@ -1,261 +0,0 @@
-package ${package}.flux.modules.actions.user;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.fulcrum.security.util.GroupSet;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.flux.modules.actions.FluxAction;
-
-/**
- * Change Password action.
- *
- */
-public class FluxUserAction extends FluxAction {
-	private static Log log = LogFactory.getLog(FluxUserAction.class);
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/**
-	 * ActionEvent responsible for inserting a new user into the Turbine security
-	 * system.
-	 */
-	public void doInsert(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-
-		/*
-		 * Grab the username entered in the form.
-		 */
-		String username = data.getParameters().getString("username");
-		String password = data.getParameters().getString("password");
-
-		if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
-			/*
-			 * Make sure this account doesn't already exist. If the account already exists
-			 * then alert the user and make them change the username.
-			 */
-			if (security.accountExists(username)) {
-				context.put("username", username);
-				context.put("errorTemplate", "user,FluxUserAlreadyExists.vm");
-
-				data.setMessage("The user already exists");
-				data.getParameters().add("mode", "insert");
-				data.setScreen("user,FluxUserForm.vm");
-				return;
-			} else {
-
-				try {
-					/*
-					 * Create a new user modeled directly from the SecurityServiceTest method
-					 */
-					User user = security.getUserInstance(username);
-					data.getParameters().setProperties(user);
-					security.addUser(user, password);
-
-					// Use security to force the password
-					security.forcePassword(user, password);
-
-				} catch (Exception e) {
-					log.error("Error adding new user: " + e);
-
-					context.put("username", username);
-					context.put("errorTemplate", "user,FluxUserAlreadyExists.vm");
-
-					data.setMessage("Could not add the user");
-					data.getParameters().add("mode", "insert");
-					data.setScreen("user,FluxUserForm.vm");
-					return;
-				}
-			}
-
-		} else {
-			String msg = "Cannot add user without username or password";
-			log.error(msg);
-			data.setMessage(msg);
-			data.getParameters().add("mode", "insert");
-			data.setScreen("user,FluxUserForm.vm");
-		}
-	}
-
-	/**
-	 * ActionEvent responsible updating a user. Must check the input for integrity
-	 * before allowing the user info to be update in the database.
-	 */
-	public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-		String username = data.getParameters().getString("username");
-		if (!StringUtils.isEmpty(username)) {
-			if (security.accountExists(username)) {
-
-				// This wrapped user does work for change password though... see below
-				User user = security.getUser(username);
-				if (user != null) {
-
-					// update all properties from form
-					data.getParameters().setProperties(user);
-
-					// save the changes to the user account
-					security.saveUser(user);
-
-					// get the new password from form submit
-					String password = data.getParameters().getString("password");
-
-					// Only update if we received a new (non-empty) password
-					if (!StringUtils.isEmpty(password)) {
-
-						// Change user password
-						security.changePassword(user, user.getPassword(), password);
-
-						// this still works
-						security.forcePassword(user, password);
-					} else {
-						data.setMessage("Cannot provide an empty password");
-						return;
-					}
-
-				}
-
-			} else {
-				log.error("User does not exist!");
-			}
-		}
-	}
-
-	/**
-	 * ActionEvent responsible for removing a user from the Tambora system.
-	 */
-	public void doDelete(PipelineData pipelineData, Context context) throws Exception {
-
-		try {
-			RunData data = getRunData(pipelineData);
-			String username = data.getParameters().getString("username");
-			if (!StringUtils.isEmpty(username)) {
-				if (security.accountExists(username)) {
-
-					// find the user object and remove using security mgr
-					User user = security.getUser(username);
-					security.removeUser(user);
-
-				} else {
-					log.error("User does not exist!");
-					data.setMessage("User not found!");
-				}
-			}
-		} catch (Exception e) {
-			log.error("Could not remove user: " + e);
-		}
-	}
-
-	/**
-	 * Update the roles that are to assigned to a user for a project.
-	 */
-	public void doRoles(PipelineData pipelineData, Context context) throws Exception {
-		RunData data = getRunData(pipelineData);
-
-		try {
-			/*
-			 * Get the user we are trying to update. The username has been hidden in the
-			 * form so we will grab the hidden username and use that to retrieve the user.
-			 */
-			String username = data.getParameters().getString("username");
-			if (!StringUtils.isEmpty(username)) {
-				if (security.accountExists(username)) {
-					User user = security.getUser(username);
-
-					// Get the Turbine ACL implementation
-					TurbineAccessControlList acl = security.getUserManager().getACL(user);
-
-					/*
-					 * Grab all the Groups and Roles in the system.
-					 */
-					GroupSet groups = security.getAllGroups();
-					RoleSet roles = security.getAllRoles();
-
-					for (Group group : groups) {
-						String groupName = group.getName();
-						for (Role role : roles) {
-							String roleName = role.getName();
-
-							/*
-							 * In the UserRoleForm.vm we made a checkbox for every possible Group/Role
-							 * combination so we will compare every possible combination with the values
-							 * that were checked off in the form. If we have a match then we will grant the
-							 * user the role in the group.
-							 */
-							String groupRole = groupName + roleName;
-							String formGroupRole = data.getParameters().getString(groupRole);
-							boolean addGroupRole = false;
-
-							// signal to add group
-							if (!StringUtils.isEmpty(formGroupRole))
-								addGroupRole = true;
-
-							if (addGroupRole) {
-								// only add if new
-								if (!acl.hasRole(role, group)) {
-									security.grant(user, group, role);
-								}
-
-							} else {
-
-								// only remove if it was previously assigned
-								if (acl.hasRole(role, group)) {
-
-									// revoke the role for this user
-									acl.getRoles(group).remove(role);
-
-									// revoke the user/group/role entry
-									security.revoke(user, group, role);
-								}
-							}
-
-						}
-					}
-
-				} else {
-					log.error("User does not exist!");
-				}
-			}
-
-		} catch (Exception e) {
-			log.error("Error on role assignment: " + e);
-		}
-	}
-
-	/**
-	 * Implement this to add information to the context.
-	 */
-	public void doPerform(PipelineData pipelineData, Context context) throws Exception {
-		log.info("Running do perform!");
-		getRunData(pipelineData).setMessage("Can't find the requested action!");
-	}
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
deleted file mode 100644
index dca782d..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxError.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package ${package}.flux.modules.screens;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.turbine.modules.screens.VelocityErrorScreen;
-
-/**
- * Base screen for secure web acces to the storage side of Tambora.
- *
- */
-public class FluxError extends VelocityErrorScreen
-{
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
deleted file mode 100644
index 115252c..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxIndex.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package ${package}.flux.modules.screens;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Base screen for secure web access to the Flux user manager
- *
- */
-public class FluxIndex extends VelocitySecureScreen {
-
-	@TurbineService
-	protected SecurityService securityService;
-
-	@TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
-	private Configuration templateLogin;
-
-	@TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
-	private Configuration templateHomepage;
-
-	/**
-	 * This method is called by the Turbine framework when the associated Velocity
-	 * template, Index.vm is requested
-	 * 
-	 * @param data
-	 *            the Turbine request data
-	 * @param context
-	 *            the Velocity context
-	 * @throws Exception
-	 *             a generic Exception
-	 */
-	@Override
-	protected void doBuildTemplate(PipelineData data, Context context) throws Exception {
-	}
-
-	@Override
-	protected boolean isAuthorized(PipelineData pipelineData) throws Exception {
-
-		RunData data = getRunData(pipelineData);
-
-		boolean isAuthorized = false;
-
-		/*
-		 * Grab the Flux Admin role listed in the Flux.properties file that is included
-		 * in the the standard TurbineResources.properties file.
-		 */
-		String fluxAdminRole = Turbine.getConfiguration().getString("flux.admin.role");
-
-		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = data.getACL();
-
-		if (acl == null) {
-			// commons configuration getProperty: prefix removed, the key for the value ..
-			// is an empty string, the result an object
-			data.setScreenTemplate((String) templateLogin.getProperty(""));
-			isAuthorized = false;
-		} else if (acl.hasRole(fluxAdminRole)) {
-			isAuthorized = true;
-		} else {
-			data.setScreenTemplate((String) templateHomepage.getProperty(""));
-			data.setMessage("You do not have access to this part of the site.");
-			isAuthorized = false;
-		}
-		return isAuthorized;
-	}
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
deleted file mode 100644
index 772eaeb..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/FluxScreen.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package ${package}.flux.modules.screens;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-
-/**
- * Base screen for secure web acces to the storage side of Tambora.
- *
- */
-public abstract class FluxScreen extends VelocitySecureScreen {
-
-	@TurbineService
-	protected SecurityService securityService;
-
-	@TurbineConfiguration(TurbineConstants.TEMPLATE_LOGIN)
-	private Configuration templateLogin;
-
-	@TurbineConfiguration(TurbineConstants.TEMPLATE_HOMEPAGE)
-	private Configuration templateHomepage;
-
-	/**
-	 * This method is called by Turbine
-	 */
-	@Override
-	protected void doBuildTemplate(PipelineData data, Context context) throws Exception {
-
-		/*
-		 * Check to see if the embedded menu should be displayed in the templates.
-		 */
-		if (Turbine.getConfiguration().getBoolean("flux.embedded.show.menu", false)) {
-			context.put("showEmbeddedMenu", true);
-		}
-
-		/*
-		 * Check to see if we will display the finders on the forms used in Flux.
-		 */
-		if (Turbine.getConfiguration().getBoolean("flux.ui.show.finder", false)) {
-			context.put("showFinder", true);
-		}
-
-	}
-
-	@Override
-	protected boolean isAuthorized(PipelineData data) throws Exception {
-		boolean isAuthorized = false;
-
-		/*
-		 * Grab the Flux Admin role listed in the Flux.properties file that is included
-		 * in the the standard TurbineResources.properties file.
-		 */
-		String fluxAdminRole = Turbine.getConfiguration().getString("flux.admin.role");
-
-		// Get the Turbine ACL implementation
-		TurbineAccessControlList acl = getRunData(data).getACL();
-
-		if (acl == null) {
-			// commons configuration getProperty: prefix removed, the key for the value ..
-			// is an empty string, the result an object
-			getRunData(data).setScreenTemplate((String) templateLogin.getProperty(""));
-			isAuthorized = false;
-		} else if (acl.hasRole(fluxAdminRole)) {
-			isAuthorized = true;
-		} else {
-			getRunData(data).setScreenTemplate((String) templateHomepage.getProperty(""));
-			getRunData(data).setMessage("You do not have access to this part of the site.");
-			isAuthorized = false;
-		}
-		return isAuthorized;
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
deleted file mode 100644
index 5360e93..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/group/Default.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.flux.modules.screens.group;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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 ${package}.flux.modules.screens.FluxScreen;
-
-/**
- */
-public class Default extends FluxScreen
-{
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
deleted file mode 100644
index 4d27c70..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/permission/Default.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.flux.modules.screens.permission;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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 ${package}.flux.modules.screens.FluxScreen;
-
-/**
- */
-public class Default extends FluxScreen
-{
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
deleted file mode 100644
index d4d8962..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/role/Default.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.flux.modules.screens.role;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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 ${package}.flux.modules.screens.FluxScreen;
-
-/**
- */
-public class Default extends FluxScreen
-{
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
deleted file mode 100644
index 436ff17..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/modules/screens/user/Default.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.flux.modules.screens.user;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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 ${package}.flux.modules.screens.FluxScreen;
-
-/**
- */
-public class Default extends FluxScreen
-{
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
deleted file mode 100644
index 16b7778..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/flux/tools/FluxTool.java
+++ /dev/null
@@ -1,297 +0,0 @@
-package ${package}.flux.tools;
-
-/*
- * Copyright 2001-2018 The Apache Software Foundation.
- *
- * Licensed 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 java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.pool.Recyclable;
-import org.apache.fulcrum.security.acl.AccessControlList;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.torque.om.TurbinePermission;
-import org.apache.fulcrum.security.torque.om.TurbinePermissionPeer;
-import org.apache.fulcrum.security.torque.om.TurbineRolePermissionPeer;
-import org.apache.fulcrum.security.torque.om.TurbineUserPeer;
-import org.apache.fulcrum.security.util.GroupSet;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.SelectorBox;
-
-/**
- * The pull api for flux templates
- *
- * @version $Id: FluxTool.java,v 1.13 2018/04/02 13:24:41 painter Exp $
- */
-public class FluxTool implements ApplicationTool, Recyclable {
-
-	/** Used for logging */
-	protected static final Log log = LogFactory.getLog(FluxTool.class);
-
-	/** The object containing request specific data */
-	private RunData data;
-
-	/** A Group object for use within the Flux API. */
-	private Group group = null;
-
-	/** A Issue object for use within the Flux API. */
-	private Role role = null;
-
-	/** A Permission object for use within the Flux API. */
-	private Permission permission = null;
-
-	/** A User object for use within the Flux API. */
-	private User user = null;
-
-	/** Injected service instance */
-	@TurbineService
-	private SecurityService security;
-
-	/** Injected configuration instance */
-	@TurbineConfiguration
-	private Configuration conf;
-
-	/**
-	 * Constructor
-	 */
-	public FluxTool() {
-	}
-
-	/**
-	 * Prepares flux tool for a single request
-	 */
-	@Override
-	public void init(Object runData) {
-		this.data = (RunData) runData;
-	}
-
-	public Group getGroup() throws Exception {
-		String groupName = data.getParameters().getString("group");
-		if (StringUtils.isEmpty(groupName)) {
-			group = security.getGroupInstance();
-		} else {
-			group = security.getGroupByName(groupName);
-		}
-		return group;
-	}
-
-	public String getMode() {
-		return data.getParameters().getString("mode");
-	}
-
-	public GroupSet getGroups() throws Exception {
-		return security.getAllGroups();
-	}
-
-	public Role getRole() throws Exception {
-		String roleName = data.getParameters().getString("role");
-		if (StringUtils.isEmpty(roleName)) {
-			role = security.getRoleInstance();
-		} else {
-			role = security.getRoleByName(roleName);
-		}
-		return role;
-	}
-
-	/**
-	 */
-	public RoleSet getRoles() throws Exception {
-		return security.getAllRoles();
-	}
-
-	public TurbinePermission getPermission() throws Exception {
-
-		// make sure that the get permission returns the one linked to the role
-		String permissionName = data.getParameters().getString("permission");
-		if (StringUtils.isEmpty(permissionName)) {
-			return null;
-		} else {
-			try {
-				Criteria criteria = new Criteria();
-				criteria.where(TurbinePermissionPeer.PERMISSION_NAME, permissionName);
-				return TurbinePermissionPeer.doSelectSingleRecord(criteria);
-			} catch (Exception e) {
-				return null;
-			}
-		}
-	}
-
-	/**
-	 * Get last cached role - useful after calling getPermissions()
-	 * 
-	 * @return
-	 */
-	public Role getCachedRole() {
-		return role;
-	}
-
-	/**
-	 * Return all permissions for a role
-	 */
-	public List<TurbinePermission> getRolePermissions() throws Exception {
-
-		String roleName = data.getParameters().getString("role");
-		if (StringUtils.isEmpty(roleName)) {
-			role = security.getRoleInstance();
-		} else {
-			role = security.getRoleByName(roleName);
-		}
-
-		if (role != null) {
-			try {
-				Criteria criteria = new Criteria();
-				criteria.where(TurbineRolePermissionPeer.ROLE_ID, role.getId());
-				criteria.addJoin(TurbineRolePermissionPeer.PERMISSION_ID, TurbinePermissionPeer.PERMISSION_ID);
-				criteria.addAscendingOrderByColumn(TurbinePermissionPeer.PERMISSION_NAME);
-				return TurbinePermissionPeer.doSelect(criteria);
-			} catch (Exception e) {
-				return null;
-			}
-		} else {
-			return null;
-		}
-	}
-
-	/**
-	 * Return all permissions
-	 */
-	public List<TurbinePermission> getPermissions() throws Exception {
-
-		try {
-			Criteria criteria = new Criteria();
-			criteria.addAscendingOrderByColumn(TurbinePermissionPeer.PERMISSION_NAME);
-			return TurbinePermissionPeer.doSelect(criteria);
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-	public User getUser() throws Exception {
-		String name = data.getParameters().getString("username");
-		if (StringUtils.isEmpty(name)) {
-			user = security.getUserInstance();
-		} else {
-			user = security.getUser(name);
-		}
-		return user;
-	}
-
-	public AccessControlList getACL() throws Exception {
-		// Get the Turbine ACL implementation
-		return security.getUserManager().getACL(getUser());
-	}
-
-	/**
-	 */
-	public SelectorBox getFieldList() throws Exception {
-		Object[] names = { "username", "firstname", "middlename", "lastname" };
-		Object[] values = { "Username", "First Name", "Middle Name", "Last Name" };
-		return new SelectorBox("fieldList", names, values);
-	}
-
-	/**
-	 * This is a tie to the DB implementation something should be added the
-	 * pluggable pieces to allow decent parameterized searching.
-	 */
-	public SelectorBox getUserFieldList() throws Exception {
-
-		Object[] names = { TurbineUserPeer.LOGIN_NAME, TurbineUserPeer.FIRST_NAME, TurbineUserPeer.LAST_NAME };
-		Object[] values = { "User Name", "First Name", "Last Name" };
-
-		return new SelectorBox("fieldList", names, values);
-	}
-
-	/**
-	 * Select all the users and place them in an array that can be used within the
-	 * UserList.vm template.
-	 */
-	public List<User> getUsers() {
-		try {
-			Criteria criteria = new Criteria();
-			String fieldList = data.getParameters().getString("fieldList");
-
-			if (fieldList != null) {
-				// This is completely database centric.
-				String searchField = data.getParameters().getString("searchField");
-				criteria.where(fieldList, searchField, Criteria.LIKE);
-			}
-
-			return (List<User>) security.getUserManager().retrieveList(criteria);
-		} catch (Exception e) {
-			log.error("Could not retrieve user list: " + e.toString());
-			return null;
-		}
-	}
-
-	/**
-	 * Implementation of ApplicationTool interface is not needed for this tool as it
-	 * is request scoped
-	 */
-	@Override
-	public void refresh() {
-		// empty
-	}
-
-	// ****************** Recyclable implementation ************************
-	private boolean disposed;
-
-	/**
-	 * Recycles the object for a new client. Recycle methods with parameters must be
-	 * added to implementing object and they will be automatically called by pool
-	 * implementations when the object is taken from the pool for a new client. The
-	 * parameters must correspond to the parameters of the constructors of the
-	 * object. For new objects, constructors can call their corresponding recycle
-	 * methods whenever applicable. The recycle methods must call their super.
-	 */
-	@Override
-	public void recycle() {
-		disposed = false;
-	}
-
-	/**
-	 * Disposes the object after use. The method is called when the object is
-	 * returned to its pool. The dispose method must call its super.
-	 */
-	@Override
-	public void dispose() {
-		group = null;
-		role = null;
-		permission = null;
-		user = null;
-		disposed = true;
-	}
-
-	/**
-	 * Checks whether the recyclable has been disposed.
-	 *
-	 * @return true, if the recyclable is disposed.
-	 */
-	@Override
-	public boolean isDisposed() {
-		return disposed;
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
deleted file mode 100644
index ca7255b..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ChangePasswordAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.security.util.PasswordMismatchException;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Change Password action.
- *
- */
-public class ChangePasswordAction extends SecureAction 
-
-{
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    public void doPerform(PipelineData data)
-            throws Exception 
-            {
-
-    User user = getRunData(data).getUser();
-    
-    RunData rundata = getRunData(data);
-    String oldPassword = rundata.getParameters().getString("oldpassword", "");
-    String newPassword = rundata.getParameters().getString("newpassword", "");
-    
-    try {
-        security.changePassword(user, oldPassword, newPassword); 
-        rundata.setMessage("Password changed!");
-    }
-    catch (PasswordMismatchException e) 
-    {
-      rundata.setMessage(e.getMessage());
-      rundata.setScreenTemplate("Password.vm");
-    }
-    
-    
-  }
-    
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  @Override
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-
-    context.put("success", "Password changed!!");
-  }
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
deleted file mode 100644
index 3018954..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUser.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LoginUser.java 1725011 2016-01-16 17:38:47Z tv $
- */
-public class LoginUser
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUser.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        String username = data.getParameters().getString(LoginUser.CGI_USERNAME, "");
-
-        if (StringUtils.isEmpty(username))
-        {
-            return;
-        }
-
-    	if (username.equals(security.getAnonymousUser().getName()))
-        {
-            data.setMessage("Anonymous user cannot login");
-            reset(data);
-            return;
-        }
-    	
-       super.doPerform(pipelineData);
-
-    }
-
-
-
-	private void reset(RunData data) throws UnknownEntityException {
-		User anonymousUser = security.getAnonymousUser();
-		data.setUser(anonymousUser);
-
-		if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-		{
-		    // We're running in a templating solution
-		    data.setScreenTemplate(
-		    		conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-		}
-		else
-		{
-		    data.setScreen(
-		    		conf.getString(TurbineConstants.SCREEN_LOGIN));
-		}
-	}
-
-}
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
deleted file mode 100644
index 4dca1f0..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LoginUserIntake.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.pool.PoolService;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.intake.model.Group;
-import org.apache.fulcrum.intake.IntakeException;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.intake.IntakeTool;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LoginUserIntake
-        extends org.apache.turbine.modules.actions.LoginUser
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUserIntake.class);
-
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-    
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-
-
-    /**
-     * Checks for anonymous user, else calls parent method.
-     *
-     * @param     pipelineData Turbine information.
-     * @exception FulcrumSecurityException could not get instance of the
-     *            anonymous user
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        	
-       try
-        {
-          // Get intake group          
-    	    // context only available after ExecutePageValve, could not invoke (IntakeTool)context.get("intake") using pook service instead
-          PoolService poolService =  (PoolService)TurbineServices.getInstance().getService(PoolService.ROLE);
-          IntakeTool intake = (IntakeTool) poolService.getInstance(IntakeTool.class);
-          
-          intake.init(data);
-          Group group = intake.get("Login", IntakeTool.DEFAULT_KEY);
-          String username = (String)group.get("Username").getValue();
-          if (StringUtils.isEmpty(username))
-            {
-                return;
-            }
-
-          if (username.equals(security.getAnonymousUser().getName()))
-            {
-                data.setMessage("Anonymous user cannot login");
-                reset(data);
-                return;
-            }
-            
-        	if (username.equals(security.getAnonymousUser().getName()))
-            {
-                throw new Exception("Anonymous user cannot login");
-            }
-        	
-            String password = (String)group.get("Password").getValue();
-            // Authenticate the user and get the object.
-            User user = security.getAuthenticatedUser(username, password);
-
-            // Store the user object.
-            data.setUser(user);
-
-            // Mark the user as being logged in.
-            user.setHasLoggedIn(Boolean.TRUE);
-
-            // Set the last_login date in the database.
-            user.updateLastLogin();
-
-            // This only happens if the user is valid; otherwise, we
-            // will get a valueBound in the User object when we don't
-            // want to because the username is not set yet.  Save the
-            // User object into the session.
-            data.save();
-
-            /*
-             * If the setPage("template.vm") method has not
-             * been used in the template to authenticate the
-             * user (usually Login.vm), then the user will
-             * be forwarded to the template that is specified
-             * by the "template.home" property as listed in
-             * TR.props for the webapp.
-             */
-
-        }
-        catch (Exception e)
-        {
-            if (e instanceof DataBackendException || e instanceof IntakeException)
-            {
-                log.error(e);
-            }
-
-            // Set Error Message and clean out the user.
-            data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
-            User anonymousUser = security.getAnonymousUser();
-            data.setUser(anonymousUser);
-            
-            String loginTemplate = conf.getString(
-                    TurbineConstants.TEMPLATE_LOGIN);
-
-            if (StringUtils.isNotEmpty(loginTemplate))
-            {
-                // We're running in a templating solution
-                data.setScreenTemplate(loginTemplate);
-            }
-            else
-            {
-                data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-            }
-        }
-    }
-
-  private void reset(RunData data) throws UnknownEntityException {
-    User anonymousUser = security.getAnonymousUser();
-    data.setUser(anonymousUser);
-
-    if (StringUtils.isNotEmpty(conf.getString(TurbineConstants.TEMPLATE_LOGIN,"")))
-    {
-        // We're running in a templating solution
-        data.setScreenTemplate(
-            conf.getString(TurbineConstants.TEMPLATE_LOGIN));
-    }
-    else
-    {
-        data.setScreen(
-            conf.getString(TurbineConstants.SCREEN_LOGIN));
-    }
-  }
-
-}
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
deleted file mode 100644
index 2fea6dd..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/LogoutUser.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.commons.configuration.Configuration;
-import org.apache.fulcrum.security.util.FulcrumSecurityException;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This action removes a user from the session. It makes sure to save
- * the User object in the session.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id: LogoutUser.java 1706239 2015-10-01 13:18:35Z tv $
- */
-public class LogoutUser
-        extends Action
-{
-    /** Injected service instance */
-    @TurbineService
-    private SecurityService security;
-
-    /** Injected configuration instance */
-    @TurbineConfiguration
-    private Configuration conf;
-
-    /**
-     * Clears the PipelineData user object back to an anonymous status not
-     * logged in, and with a null ACL.  If the tr.props ACTION_LOGIN
-     * is anything except "LogoutUser", flow is transfered to the
-     * SCREEN_HOMEPAGE
-     *
-     * If this action name is the value of action.logout then we are
-     * being run before the session validator, so we don't need to
-     * set the screen (we assume that the session validator will handle
-     * that). This is basically still here simply to preserve old behaviour
-     * - it is recommended that action.logout is set to "LogoutUser" and
-     * that the session validator does handle setting the screen/template
-     * for a logged out (read not-logged-in) user.
-     *
-     * @param pipelineData Turbine information.
-     * @exception FulcrumSecurityException a problem occurred in the security
-     *            service.
-     */
-    @Override
-    public void doPerform(PipelineData pipelineData)
-            throws FulcrumSecurityException
-    {
-        RunData data = getRunData(pipelineData);
-        // Session validator did not run, so RunData is not populated
-        User user = data.getUserFromSession();
-
-        if (user != null && !security.isAnonymousUser(user))
-        {
-            // Make sure that the user has really logged in...
-            if (!user.hasLoggedIn())
-            {
-                return;
-            }
-
-            user.setHasLoggedIn(Boolean.FALSE);
-            security.saveUser(user);
-        }
-
-        data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
-
-        // This will cause the acl to be removed from the session in
-        // the Turbine servlet code.
-        data.setACL(null);
-
-        // Retrieve an anonymous user.
-        User anonymousUser = security.getAnonymousUser();
-        data.setUser(anonymousUser);
-        data.save();
-
-        // In the event that the current screen or related navigations
-        // require acl info, we cannot wait for Turbine to handle
-        // regenerating acl.
-        data.getSession().removeAttribute(TurbineConstants.ACL_SESSION_KEY);
-
-        // If this action name is the value of action.logout then we are
-        // being run before the session validator, so we don't need to
-        // set the screen (we assume that the session validator will handle
-        // that). This is basically still here simply to preserve old behavior
-        // - it is recommended that action.logout is set to "LogoutUser" and
-        // that the session validator does handle setting the screen/template
-        // for a logged out (read not-logged-in) user.
-        if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY,
-                            TurbineConstants.ACTION_LOGOUT_DEFAULT)
-            .equals(TurbineConstants.ACTION_LOGOUT_DEFAULT))
-        {
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-        }
-    }
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
deleted file mode 100644
index c25fae5..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/SecureAction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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.apache.fulcrum.localization.LocalizationService;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.actions.VelocitySecureAction;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * Velocity Secure action.
- *
- * Always performs a Security Check that you've defined before executing the
- * doPerform().
- */
-public class SecureAction extends VelocitySecureAction 
-{
-    
-    @TurbineService
-    private LocalizationService localizationService;
-  /**
-   * This currently only checks to make sure that user is allowed to view the
-   * storage area. If you create an action that requires more security then
-   * override this method.
-   *
-   * @param data
-   *            Turbine information.
-   * @return True if the user is authorized to access the screen.
-   * @exception Exception,
-   *                a generic exception.
-   */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-    
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-    
-        if (acl == null || ! ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") ) ) 
-        {
-           String msg =  localizationService.getString(localizationService.getDefaultBundleName(), 
-                                          localizationService.getLocale( ((RunData) data).getRequest()), "no_permission");
-            
-            getRunData(data).setMessage(msg);
-    
-            log.debug( "call not permitted for template: " + getRunData(data).getScreenTemplate() + " and action " + getRunData(data).getAction() );
-             getRunData(data).setScreenTemplate( "Login.vm" );
-            isAuthorized = false;
-        } 
-        else if ( acl.hasRole("turbineuser") || acl.hasRole("turbineadmin") )
-        {
-            isAuthorized = true;
-        }
-    
-        return isAuthorized;
-    }
-
-  /**
-   * Implement this to add information to the context.
-   *
-   * @param data
-   *            Turbine information.
-   * @param context
-   *            Context for web pages.
-   * @exception Exception,
-   *                a generic exception.
-   */
-  public void doPerform(PipelineData data, Context context) throws Exception 
-  {
-    User user = getRunData(data).getUser();
-    context.put("user",user);
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
deleted file mode 100644
index 0ec8a8f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/actions/ShowRecords.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ${package}.modules.actions;
-
-#*
-* 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 java.util.List;
-
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-import ${package}.om.Author;
-import ${package}.om.AuthorPeer;
-
-public class ShowRecords  extends SecureAction 
-{
-
-	@Override
-	public void doPerform( PipelineData pipelineData, Context context )
-	    throws Exception
-	{
-	    super.doPerform( pipelineData, context );
-	    List<Author> authors = AuthorPeer.doSelect( new Criteria() );//all
-	    context.put( "authors", authors );
-	    RunData data = getRunData(pipelineData);
-	    data.setScreenTemplate(Character.toLowerCase(getClass().getSimpleName().charAt(0)) + 
-	    		getClass().getSimpleName().substring(1) + ".vm"
-	    ); 
-	    
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
deleted file mode 100644
index 6f6fa70..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Index.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package ${package}.modules.screens;
-#*
- * 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.apache.fulcrum.json.JsonService;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.velocity.context.Context;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class Index extends VelocitySecureScreen
-{
-    
-    JsonService jsonService = (JsonService)TurbineServices.getInstance().getService(JsonService.ROLE);
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-    		throws Exception
-    {
-    	context.put("success", "Congratulations, it worked!");
-    }
-    
-    /**
-     * This method is called bythe Turbine framework to determine if
-     * the current user is allowed to use this screen. If this method
-     * returns false, the doBuildTemplate() method will not be called.
-     * If a redirect to some "access denied" page is required, do the
-     * necessary redirect here.
-     * 
-     * return always <code>true</code>true, to show this screen as default
-     */
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception
-    {
-    	// use data.getACL() 
-    	return true;
-    }
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
deleted file mode 100644
index aff1b2a..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/Password.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package ${package}.modules.screens;
-
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample extending a secured screen
- */
-public class Password extends SecureScreen 
-{
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-    		throws Exception
-    {
-    	
-    }
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
deleted file mode 100644
index 2f90b62..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/SecureScreen.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.annotation.TurbineConfiguration;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.modules.screens.VelocitySecureScreen;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.velocity.context.Context;
-import org.apache.commons.configuration.Configuration;
-
-/**
- * This class provides a sample implementation for creating a secured screen
- */
-public class SecureScreen extends VelocitySecureScreen 
-{
-   	@TurbineService
-   	protected SecurityService securityService;
-    	
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_LOGIN )
-    private Configuration templateLogin;
-    
-    @TurbineConfiguration( TurbineConstants.TEMPLATE_HOMEPAGE )
-    private Configuration templateHomepage;
-    
-    @Override
-    protected boolean isAuthorized(PipelineData data) throws Exception 
-    {
-        boolean isAuthorized = false;
-    
-        // Who is our current user?
-        User user = getRunData(data).getUser();
-        
-        // Get the Turbine ACL implementation
-        TurbineAccessControlList acl = getRunData(data).getACL();
-        
-        if (acl == null)
-        {
-          // commons configuration getProperty: prefix removed, the key for the value .. is an empty string, the result an object
-        getRunData(data).setScreenTemplate( (String) templateLogin.getProperty("") );
-        	isAuthorized = false;
-        } 
-        else if (acl.hasRole("turbineuser") || acl.hasRole("turbineadmin"))
-        {
-            isAuthorized = true;
-        }
-        else 
-        {
-            getRunData(data).setScreenTemplate( (String) templateHomepage.getProperty("") );
-            getRunData(data).setMessage("You do not have access to this part of the site.");
-            isAuthorized = false;
-        }
-        return isAuthorized;
-    }
-
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param data
-     *            Turbine information.
-     * @param context
-     *            Context for web pages.
-     * @exception Exception,
-     *                a generic exception.
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context) throws Exception 
-    {
-    
-    }
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
deleted file mode 100644
index 55ba3b1..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/modules/screens/TestSecure.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package ${package}.modules.screens;
-#*
-* 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 java.util.ArrayList;
-import java.util.List;
-import org.apache.torque.criteria.Criteria;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.velocity.context.Context;
-
-/**
- * This class provides the data required for displaying content in the
- * Velocity page. 
- */
-public class TestSecure extends SecureScreen
-{
-    /**
-     * This method is called by the Turbine framework when the
-     * associated Velocity template, Index.vm is requested
-     * 
-     * @param data the Turbine request data
-     * @param context the Velocity context
-     * @throws Exception a generic Exception
-     */
-    @Override
-    protected void doBuildTemplate(PipelineData data, Context context)
-                    throws Exception
-    {
-      context.put("success", "Congratulations, it worked here too!");
-    }
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
deleted file mode 100644
index d54dcf1..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeer
-    extends ${package}.om.BaseTurbineGroupPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
deleted file mode 100644
index 94c681d..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineGroupPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineGroupPeerImpl
-    extends ${package}.om.BaseTurbineGroupPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineGroup>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
deleted file mode 100644
index bdbdf0f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeer.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Thu Sep 04 12:20:05 CEST 2014]
- *
- *  You should add additional methods to this class to meet the
- *  application requirements.  This class will only be generated as
- *  long as it does not already exist in the output directory.
- */
-public class TurbinePermissionPeer
-    extends ${package}.om.BaseTurbinePermissionPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
deleted file mode 100644
index 19bd132..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbinePermissionPeerImpl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Mon Nov 25 16:49:55 CET 2013]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public class TurbinePermissionPeerImpl
-    extends ${package}.om.BaseTurbinePermissionPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbinePermission>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 138394595924L;
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
deleted file mode 100644
index 739597f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeer
-    extends ${package}.om.BaseTurbineRolePeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
deleted file mode 100644
index 91d307f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePeerImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineRolePeerImpl
-    extends ${package}.om.BaseTurbineRolePeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineRole>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-
-
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
deleted file mode 100644
index a26f32e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineRolePermission.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public  class TurbineRolePermission
-    extends ${package}.om.BaseTurbineRolePermission
-{
-    /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-
-
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
deleted file mode 100644
index 849439a..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package ${package}.om;
-
-import java.sql.Connection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.torque.TorqueException;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- * #set( $H = '#' )
- * Added Interface
- * @author gk
- *
- */
-public  class TurbineUser
-    extends ${package}.om.BaseTurbineUser implements org.apache.fulcrum.security.model.turbine.entity.TurbineUser
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403437136L;
-    
-   /**
-     * Get the value of id.
-     *
-     * @return Object
-     */
-    @Override
-	public Object getId() 
-    {
-        
-        return getEntityId();
-    }
-
-    /**
-     * Set the value of id.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setId(Object v)
-    {
-        setEntityId( (Integer) v);
-
-    }
-    
-        /**
-     * Get the value of name.
-     *
-     * @return String
-     */
-    @Override
-	public String getName() 
-    {
-        
-        return getEntityName();
-    }
-
-    /**
-     * Set the value of name.
-     *
-     * @param v new value
-     */
-    @Override
-	public void setName(String v)
-    {
-        setEntityName(v);
-
-    }
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRole.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRole.java
deleted file mode 100644
index 1e41b24..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRole.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Fri Jan 12 15:33:37 CET 2018]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public  class TurbineUserGroupRole
-    extends ${package}.om.BaseTurbineUserGroupRole
-    implements org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1515767617070L;
-
-
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRolePeerImpl.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRolePeerImpl.java
deleted file mode 100644
index 036bf71..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserGroupRolePeerImpl.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package ${package}.om;
-
-import org.apache.fulcrum.security.torque.peer.TorqueTurbineUserGroupRolePeer;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Mon Nov 27 14:37:43 CET 2017]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-public class TurbineUserGroupRolePeerImpl
-    extends ${package}.om.BaseTurbineUserGroupRolePeerImpl
-    implements TorqueTurbineUserGroupRolePeer
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1511789863339L;
-
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
deleted file mode 100644
index 4c330e2..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package ${package}.om;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:37 CEST 2016]
- *
- * This class provides static wrappers for the peer implementation classes.
- * This class will only be generated as long as it does not already exist
- * in the output directory.
- */
-/**
- * Added Interface
- * @author gk
- *
- */
-
-public class TurbineUserPeer
-    extends ${package}.om.BaseTurbineUserPeer implements org.apache.fulcrum.security.torque.peer.Peer
-{
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
deleted file mode 100644
index 38d7984..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUserPeerImpl.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${package}.om;
-
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 25 15:50:38 CEST 2016]
- *
- * You should add additional methods to this class to meet the
- * application requirements.  This class will only be generated as
- * long as it does not already exist in the output directory.
- */
-
-/**
- * Added Interface
- * @author gk
- *
- */
-public class TurbineUserPeerImpl
-    extends ${package}.om.BaseTurbineUserPeerImpl implements org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer<TurbineUser>
-{
-    /** Serial version */
-    private static final long serialVersionUID = 1477403438057L;
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
deleted file mode 100644
index f529e20..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/services/pull/RelatedTool.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package ${package}.services.pull;
-
-#*
-* 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 java.util.HashSet;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.json.JsonService;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.fulcrum.security.util.RoleSet;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.pull.RunDataApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.services.security.SecurityService;
-
-
-public class RelatedTool implements RunDataApplicationTool {
-  
-  /** Logging */
-  private static Log log = LogFactory.getLog(RelatedTool.class);
-    
-  private RunData data = null;
-
-  @Override
-  public void init(Object data) {
-    this.data = (RunData) data;
-
-  }
-  
-  @Override
-  public void refresh(RunData data) {
-    this.data = data;
-  }
-  
-  public String getUserrole() {
-    try {
-      User user = data.getUser();
-      Role role = null;
-      if (user != null && user.getName() != null) {
-          log.info("reading role for: "+user.getName());
-          if (data.getACL() != null && data.getACL() instanceof TurbineAccessControlList) {
-            RoleSet roles = ((TurbineAccessControlList)data.getACL()).getRoles();
-            if (roles != null && roles.getSet().size() == 1) {
-              Role fulcrumRole = roles.getSet().iterator().next();
-                log.debug("acl role is: "+fulcrumRole.getName());
-                return fulcrumRole.getName();
-            }
-          } else {
-            SecurityService securityService = (SecurityService) TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
-            RoleSet roles = securityService.getAllRoles();   				
-          }
-      } else if (user != null) {
-        SecurityService securityService = (SecurityService) TurbineServices.getInstance().getService(SecurityService.SERVICE_NAME);
-          role = securityService.getRoleByName("user");
-              //.retrieveRole("anon");				
-      }
-      return (role != null)? role.getName(): null;
-    } catch (Exception e) {
-      log.error("RelatedTool - failure in reading role: ", e);
-      return null;
-    }
-  }
-  
-  @SuppressWarnings( "unchecked" )
-    public <T> Object getJson(Object src, String className, String mixinCN, Boolean refresh, String... props ) {
-        String result= null;
-        JsonService jsonService = (JsonService)TurbineServices
-        .getInstance().getService(JsonService.ROLE);
-        try
-        {
-            log.info( "refresh is:"+ refresh );
-            log.info( "jsonService:"+ jsonService );
-            log.info( "source class is:"+ className );
-            log.info( "target object is:"+ src );
-            Class clazz = Class.forName(className);
-            if (props != null) {
-                log.info( "props length:"+ props.length);
-                  for ( int i = 0; i < props.length; i++ )
-                {
-                      log.debug( "props:"+ props[i]);
-                }
-            }
-            if (mixinCN != null ) {
-               Class mixin = Class.forName(mixinCN);
-               if (mixin != null ) {
-                 Set<Class> mixins = new HashSet<Class>();
-                 mixins.add( mixin );
-                   log.info( "adding adapter mixinCN:"+ mixinCN);
-                   jsonService.addAdapter( mixinCN, clazz, mixin );
-               }
-            }
-            String serialized =  jsonService.serializeOnlyFilter( src, clazz, refresh, props );
-            log.debug( "serialized:"+serialized );
-            return serialized;
-        }
-        catch ( Exception e )
-        {
-            log.error(e.getMessage(),e );
-            result = e.getMessage();
-        }
-        return result;
-    }
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
deleted file mode 100644
index 44088e4..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/wrapper/TurbineUserWrapper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package ${package}.wrapper;
-
-/*
- * Copyright 2001-2017 The Apache Software Foundation.
- *
- * Licensed 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.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.turbine.om.security.DefaultUserImpl;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-/**
- * Custom Wrapper instead fo default Turbine wrapper class {@link DefaultUserImpl} to allow for annotations, 
- * - th single requirment for wrappers is to implement a constructor with parameter {@link TurbineUser}
- *
- */
- @JsonIgnoreProperties( {"permStorage", "type","objectdata" } )
-public  class TurbineUserWrapper
-    extends DefaultUserImpl
-{
-   public TurbineUserWrapper(TurbineUser user) {
-      super(user);
-	}
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
deleted file mode 100644
index eeef5cd..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-data.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://application-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Application Data in XML. Add your custom values to this file                    -->
-<!--                                                                                 -->
-<!-- @version $Id: application-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all"/>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
deleted file mode 100644
index 8e867d5..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/application-schema.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ============================================================================== -->
-<!--                                                                                -->
-<!--  Database Definition for the Application                                       -->
-<!--                                                                                -->
-<!--  @version $Id: application-schema.xml                                          -->
-<!--                                                                                -->
-<!-- ============================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-
-	<!--  Simple author/book database example -->
-	<table name="AUTHOR" idMethod="idbroker">
-		<column name="AUTH_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="FIRST_NAME"  required="true" size="64" type="VARCHAR" />
-		<column name="LAST_NAME"   required="true" size="64" type="VARCHAR" />
-	</table>
-
-    <table name="BOOK" idMethod="idbroker">
-		<column name="BOOK_ID"     required="true" primaryKey="true" type="INTEGER" />
-		<column name="AUTH_ID"     required="true" type="INTEGER" />
-		<column name="TITLE"       required="true" size="64" type="VARCHAR" />
-		<column name="SUBJECT"     required="true" size="64" type="VARCHAR" />
-		<foreign-key foreignTable="AUTHOR">
-			<reference local="AUTH_ID" foreign="AUTH_ID"></reference>
-		</foreign-key>		
-	</table>
-</database>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
deleted file mode 100644
index 5002f21..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/id-table-schema.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-<!-- ========================================================================= -->
-<!--                                                                           -->
-<!-- Table definition for the ID Broker Table used by Torque                   -->
-<!--                                                                           -->
-<!-- @version $Id: id-table-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                           -->
-<!-- ========================================================================= -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="native">
-
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER" javaName="IdTableId"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR" javaName="TableName"/>
-    <column name="NEXT_ID" required="true" type="INTEGER" javaName="NextId"/>
-    <column name="QUANTITY" required="true" type="INTEGER" javaName="Quantity"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
deleted file mode 100644
index 8503f8f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-data.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-#*
- 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.
-*#
-<!DOCTYPE dataset SYSTEM "file://torque-security-data.dtd">
-
-<!-- =============================================================================== -->
-<!--                                                                                 -->
-<!-- Default Values for Admin and normal User                                        -->
-<!--                                                                                 -->
-<!-- @version $Id: turbine-security-data.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                                 -->
-<!-- =============================================================================== -->
-
-<dataset name="all">
-
-  <TurbineUser UserId="1"
-               UserName="admin"
-               Password="password"
-               FirstName=""
-               LastName="Admin"/>
-
-  <TurbineUser UserId="2"
-               UserName="user"
-               Password="password"
-               FirstName=""
-               LastName="User"/>
-
-  <!-- Turbine Permissions -->
-
-  <TurbinePermission PermissionId="1" Name="turbineadmin"/>
-  <TurbinePermission PermissionId="2" Name="turbine"/>
-
-  <!-- Turbine Roles -->
-
-  <TurbineRole RoleId="1" Name="turbineadmin"/>
-  <TurbineRole RoleId="2" Name="turbineuser"/>
-
- <!-- Turbine Groups -->
-
-  <TurbineGroup GroupId="1" Name="global"/>
-  <TurbineGroup GroupId="2" Name="Turbine"/>
-
-  <TurbineRolePermission RoleId="1" PermissionId="1"/>
-  <TurbineRolePermission RoleId="2" PermissionId="2"/>
-
-  <!-- Associate Users, Groups, and Roles -->
-
-  <TurbineUserGroupRole UserId="1" GroupId="2" RoleId="1"/>
-  <TurbineUserGroupRole UserId="2" GroupId="2" RoleId="2"/>
-
-</dataset>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
deleted file mode 100644
index a4901fe..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/torque-schema/torque-security-schema.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<!--
- 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.
--->
-
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Turbine Torque based Security Service Schema                            -->
-<!--                                                                          -->
-<!--  Schema documentation                                                    -->
-<!--  http://db.apache.org/torque/torque-4.0/documentation/orm-reference/database-4-0-strict.xsd -->
-<!--  http://db.apache.org/torque/torque-4.0/documentation/orm-reference/database-4-0.xsd -->
-<!--                                                                          -->
-<!-- $Id: turbine-security-schema.xml 615328 2008-01-25 20:25:05Z tv $ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<database xmlns="http://db.apache.org/torque/4.0/templates/database"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://db.apache.org/torque/4.0/templates/database
-        http://db.apache.org/torque/4.0/templates/database-strict.xsd"
-  name="${turbine_database_name}"
-  defaultIdMethod="none">
-
-
-  <table name="TURBINE_PERMISSION" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbinePermission" interface="org.apache.fulcrum.security.model.turbine.entity.TurbinePermission">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineRole" interface="org.apache.fulcrum.security.model.turbine.entity.TurbineRole">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineGroup" interface="org.apache.fulcrum.security.model.turbine.entity.TurbineGroup">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="EntityName"/>
-
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-
-    <!-- Turbine service revokeAll(role) manages removal, but you might want to handle it just with onDelete="cascade" -->
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-
-  <!-- org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity -->
-  <table name="TURBINE_USER" idMethod="native" baseClass="org.apache.fulcrum.security.torque.turbine.DefaultAbstractTurbineUser"
-  interface="org.apache.fulcrum.security.model.turbine.entity.TurbineUser">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER" javaType="object" javaName="EntityId" autoIncrement="true"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="EntityName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED_DATE" type="TIMESTAMP" javaName="ModifiedDate"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>
-
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE" interface="org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <!-- Turbine service revokeAll(user) manages removal, but you might want to handle it just with onDelete="cascade" -->
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
deleted file mode 100644
index f458f40..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/META-INF/context.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<Context>
-    <WatchedResource>WEB-INF/web.xml</WatchedResource>
-    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
-    <Resource name="${turbine_database_jndipath}" global="${turbine_database_jndipath}" auth="Container" type="javax.sql.DataSource" 
-        driverClassName="${turbine_database_driver}" 
-        url="${turbine_database_url}${turbine_database_name}" 
-        username="${turbine_database_user}" password="${turbine_database_password}" 
-        maxTotal="100" maxIdle="20" minIdle="5" maxWaitMillis="10000"/>
-</Context>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
deleted file mode 100644
index 023ef76..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/Torque.properties
+++ /dev/null
@@ -1,126 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Torque.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-#
-#  T O R Q U E  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# These are your database settings. Look in the
-# org.apache.torque.pool.* packages for more information.
-#
-# The parameters to connect to the default database.  You MUST
-# configure these properly.
-# -------------------------------------------------------------------
-
-
-
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=${turbine_database_name}
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-#torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-#torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-#torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Determines if the quantity column of the IDBroker's id_table should
-# be increased automatically if requests for ids reaches a high
-# volume.
-
-torque.idbroker.cleverquantity=true
-
-# Determines whether the managers cache instances of the business objects.
-# And also whether the MethodResultCache will really cache results.
-torque.manager.useCache = true
-
-# Determines if IDBroker should prefetch IDs or not.  If set to false
-# this property has the effect of shutting off the housekeeping thread
-# that attempts to prefetch the id's.  It also sets the # of id's grabbed
-# per request to 1 regardless of the settings in the database.
-# Default: true
-torque.idbroker.prefetch = true
-
-# Controls the starting id of table entries when creating SQL for 
-# the id-table. If you have two projects that use the same id-table 
-# in the same database with different tables, make sure that they have 
-# different initialID settings and the ranges (initialID is incremented 
-# for every new table) don't overlap.
-torque.idbroker.initialId = 101 
-
-# The start value of the ID broker for supplying IDs to Torque. This value 
-# is incremented every time Torque requests ID keys from the broker. If you 
-# pre-load your table straight from SQL, make sure that you don't accidentially 
-# overlap with this setting, because Torque doesn't keep record of what IDs are 
-# already taken in the database. If you overlap, inserting new objects will fail 
-# because the ID assigned by Torque is already taken.
-torque.idBroker.initialIdValue = 100
-
-# For performance reasons, the ID Broker does not request a single ID at a time
-# but fetches a whole range and increments the current next ID Value in the ID
-# Table by this step. If you have to do lots of inserts straight in a row, increment
-# this value to get slightly better performance.
-torque.idbroker.initialIdStep = 500
-
-# IDBroker can grab its own connection from the pool to use when retrieving
-# more id's to minimize the amount of time ID_TABLE will be locked.
-# Some usage of IDBroker or assumptions made by connection pools or jdbc
-# drivers may disallow this optimization in which case the property
-# should be set to false.
-torque.idbroker.usenewconnection = true
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
-
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
deleted file mode 100644
index 4c6407e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineConfigurationBuilder.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<configuration>
-   <header>
-    <!-- Meta data about the resulting combined configuration -->
-  </header>
-  <override><!-- only allowed configurations are user and turbine, realtive paths   -->
-    <properties config-name="user" fileName="WEB-INF/conf/usersettings.properties" config-optional="true" config-forceCreate="true"/> 
-    <!-- xml fileName="conf/test/TurbineResources.xml"/-->
-    <properties config-name="turbine" fileName="WEB-INF/conf/TurbineResources.properties" throwExceptionOnMissing="true"/>
-   </override>
-  <additional>
-    <!-- Configuration declarations that form a union configuration, always provide a unique config-name attribute  -->
-  </additional>
-</configuration>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
deleted file mode 100644
index 4e954dc..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/TurbineResources.properties
+++ /dev/null
@@ -1,661 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-# -------------------------------------------------------------------
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  P I P E L I N E
-#
-# -------------------------------------------------------------------
-pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = WEB-INF/conf/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explicitly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=${package}.modules,${package}.flux.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUserIntake
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-#
-# Use this setting if you want your application to display the Login Screen
-# as first action and does not allow any operation before the user has
-# logged in
-#
-# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# If the web container does not supply an explicit encoding for the
-# request data, assume that is has this encoding. If you use e.g.
-# UTF-8 or ISO-8859-<something>, change this parameter to keep your
-# special characters. Default is ISO-8859-1
-input.encoding=UTF-8
-
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjunction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-
-#services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-
-services.PullService.tools.resources.dir=/resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UITool would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the HtmlPageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-
-# Localization and Internationalization
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-tool.request.related=${package}.services.pull.RelatedTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# The UITool will allow you to skin your Turbine application using simple
-# properties files that are located in the WEBAPP/resources/ directory
-# hierarchy.
-tool.global.ui=org.apache.turbine.services.pull.tools.UITool
-
-# Path to the UI resources, relative to the resources directory defined above
-# tool.ui.dir.skin=/ui/skins
-
-# Path to the images of a skin, relative to the skin directory defined above
-# tool.ui.dir.image=/images
-
-# Default CSS file for a skin
-tool.ui.css=page.css
-
-# Default skin name
-# tool.ui.skin=default
-
-#
-# The ui tool normally returns absolute URIs.
-# Setting this property to true allows you to change the behavior if you
-# want only relative URIs (e.g. if you run behind a reverse proxy or a load
-# balancer).
-tool.ui.want.relative=true
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = true
-tool.link.want.relative = true
-
-# Flux tool
-tool.request.flux=${package}.flux.tools.FluxTool
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.input.encoding=UTF-8
-
-#
-# Class Path Loader, Turbine jar
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm,macros/applicationMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = true
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates/app,/templates/flux
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been initialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Configure Torque Security Service
-services.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
-services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager
-
-services.SecurityService.user.class=org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl
-# define custom wrapper
-services.SecurityService.wrapper.class = ${package}.wrapper.TurbineUserWrapper
-
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.containerConfiguration = /WEB-INF/conf/containerConfiguration.xml
-#
-# Name and location to the configuration file for the component roles.
-#
-#services.AvalonComponentService.componentRoles =  /WEB-INF/conf/roleConfiguration.xml
-#
-#services.AvalonComponentService.componentConfiguration = /WEB-INF/conf/componentConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
-
-# Required to enable the flux library
-include=flux.properties
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
deleted file mode 100644
index 438eb5a..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?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.
-*#
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-        <unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-    <localization>
-      <bundles>
-        <bundle>${package}.L10N</bundle>
-      </bundles>
-    </localization>
-    <!-- Disable if you experience startup problems with Java8 -->
-    <intake>
-      <serialDataPath>WEB-INF/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>WEB-INF/conf/${turbine_intake_file}</xmlPath>
-      </xmlPaths>
-    </intake>
-    <factory/>
-    <pool/>
-    <parser>
-        <!-- <urlCaseFolding>lower</urlCaseFolding> -->
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-    <!-- defining specific inspectors -->
-    <json>
-       <annotationInspectors>
-            <primary>org.apache.fulcrum.json.jackson.SimpleNameIntrospector</primary>
-            <secondary>com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector</secondary>
-            <features>
-              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">FAIL_ON_EMPTY_BEANS</feature>
-              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">INDENT_OUTPUT</feature>
-              <feature value="true" type="com.fasterxml.jackson.core.JsonParser">ALLOW_UNQUOTED_FIELD_NAMES</feature>
-            </features>
-        </annotationInspectors>
-        <dateFormat>MM/dd/yyyy</dateFormat>
-        <cacheFilters>true</cacheFilters>
-        <!-- security feature -->
-        <escapeCharsGlobal>true</escapeCharsGlobal>
-        <!--  escapeCharsClass>net.example.EscapeCharClass</escapeCharsClass -->
-        <defaultTyping type="OBJECT_AND_NON_CONCRETE" key="type"/><!-- defaultTyping type="NON_FINAL" key="type"/-->
-        <!-- requires com.jayway dependency in pom -->
-        <!-- useJsonPath>true</useJsonPath -->
-    </json>
-    
-    <upload repository="/tmp" sizeMax="1048576" sizeThreshold="10240"/>
-        <!-- These components belong to the Fulcrum-Security services -->        
-    <securityService/>
-    <authenticator/>
-    <!--   <authenticator>
-          <algorithm>java</algorithm>
-          <cipher>SHA1</cipher>    </authenticator>   -->
-
-    <modelManager/>
-    <aclFactory/>
-    
-    <!--  
-       Fulcrum Components, e.g. json, XmlRpcServerComponent, cft. Fulcrum Component Configurations 
-     -->
-       
-     
-     <!--  
-     Pure Fulcrum Model
-    -->
-    <!--
-     <userManager> 
-       <className>org.apache.fulcrum.security.torque.om.TorqueTurbineUser</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineGroup</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineRole</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.torque.om.TorqueTurbinePermission</className>
-    </permissionManager>
-    -->
- 
-     <!-- 
-     Default classes implementing org.apache.fulcrum.security.model.turbine.entity interfaces 
-     -->
-    <!--userManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl</className>
-    </userManager>
-    <groupManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineGroupImpl</className>
-    </groupManager>
-    <roleManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineRoleImpl</className>
-    </roleManager>
-    <permissionManager>
-        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbinePermissionImpl</className>
-    </permissionManager -->
-    
-    <!-- 
-     Custom Turbine ORM Torque classes could not yet be used: 
-     - requires Torque 4.1 or if using Torque 4.0 reqires manually adding the interfaces in T-classes
-     - requires attribute baseClass in fulcrum-turbine-schema.xml table elements set to appropriate org.apache.fulcrum.security.model.turbine.entity interfaces
-     - requires attribute peerClass in fulcrum-turbine-schema.xml table elements set to org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer 
-     -->
-     
-     <userManager>
-        <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-        <userGroupRoleManager><!-- using custom peers requires now since fulcrum security 1.1.2 this element -->
-	        <!-- className>org.apache.fulcrum.security.torque.om.TurbineUserGroupRole</className-->
-	        <peerClassName>${package}.om.TurbineUserGroupRolePeerImpl</peerClassName>
-	    </userGroupRoleManager>
-    </userManager>
-    <groupManager><!-- might have lazy="true" attribute -->
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager><!-- might have lazy="true" attribute -->
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-     
-</componentConfig>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
deleted file mode 100644
index f676999..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/containerConfiguration.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*#
-<fulcrum-yaafi>
-	<containerFlavour>yaafi</containerFlavour>
-	<containerClazzName>org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl</containerClazzName>
-	<componentRoles>
-		<location>/WEB-INF/conf/roleConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentRoles>
-	<componentConfiguration>
-		<location>/WEB-INF/conf/componentConfiguration.xml</location>
-		<isEncrypted>false</isEncrypted>
-	</componentConfiguration>
-	<parameters>
-		<location>/WEB-INF/conf/parameters.properties</location>
-		<isEncrypted>false</isEncrypted>
-	</parameters>
-</fulcrum-yaafi>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
deleted file mode 100644
index 687afc8..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/flux.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-# -------------------------------------------------------------------
-#
-#  F L U X    S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# ------------------------------------------------------------------------
-# Security Properties
-# ------------------------------------------------------------------------
-flux.admin.role = turbineadmin
-
-# ------------------------------------------------------------------------
-# Mode Properties
-# ------------------------------------------------------------------------
-# Flux can work in stand-alone mode and in embedded mode.
-# ------------------------------------------------------------------------
-
-flux.mode = embedded
-
-# ------------------------------------------------------------------------
-# Embedded Properties
-# ------------------------------------------------------------------------
-
-flux.embedded.layout = /Default.vm
-flux.embedded.show.menu = true
-
-# ------------------------------------------------------------------------
-# Stand-Alone Properties
-# ------------------------------------------------------------------------
-
-flux.stand.alone.layout = /FluxDefault.vm
-
-# ------------------------------------------------------------------------
-# UI Properties
-# ------------------------------------------------------------------------
-
-flux.ui.show.finder = false
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
deleted file mode 100644
index 7c00de2..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/intake.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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.
-*#
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Default Intake file for Turbine Skeleton                                -->
-<!--                                                                          -->
-<!-- $Id: intake.xml 615350 2008-01-25 21:28:10Z tv $                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<input-data xmlns="http://turbine.apache.org/schema/intake/4.0"
-    basePackage="${package}.">
-    <group name="example" key="example" mapToObject="om.Table1">
-        <field name="TestCol2" key="testCol2" type="String"/>
-    </group>
-    <group name="Login" key="login">
-    <field name="Username" key="u" type="String">
-      <!-- l10n keys -->
-      <rule name="required" value="true">username_required_msg</rule>
-      <rule name="minLength" value="4">username_min_length_msg</rule>
-      <!--rule name="mask" value=".+@.+\..+">username_mask_msg</rule-->
-    </field>
-    <field name="Password" key="p" type="String">
-      <rule name="required" value="true">password_msg</rule>
-    </field>
-</group>
-</input-data>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index b1b2301..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/log4j.properties
+++ /dev/null
@@ -1,137 +0,0 @@
-#*
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*#
-##set($dollar = '$')
-##macro (var $label)${dollar}{${label}}#end
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-#
-# App log
-#
-log4j.logger.${package} = DEBUG, app
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.logger.scheduler = INFO, app
-log4j.additivity.scheduler = false
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Turbine goes into "turbine" loggers
-#
-log4j.logger.org.apache.turbine = DEBUG, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Velocity log
-#
-log4j.logger.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-# #######################################################################
-#
-# Logfile definitions
-#
-# #######################################################################
-
-#
-# Application.log
-#
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.file = ${applicationRoot}/logs/application.log
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = ${applicationRoot}/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = ${applicationRoot}/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = ${applicationRoot}/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.RollingFileAppender
-log4j.appender.velocity.MaxFileSize=5MB
-log4j.appender.velocity.MaxBackupIndex=5
-log4j.appender.velocity.file = ${applicationRoot}/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
deleted file mode 100644
index d4ea1a3..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?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.
-*#
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent"
-          early-init = "true" />
-        
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-	<!-- Disable if you experience startup problems with Java8 -->
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.upload.UploadService"
-        shorthand="upload"
-        default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-        
-     <!-- using Jackson as mapper by default -->
-    <role
-        name="org.apache.fulcrum.json.JsonService"
-        shorthand="json"
-        default-class="org.apache.fulcrum.json.jackson.Jackson2MapperService"/>
-        
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-        
-         <!-- These components belong to the Fulcrum-Security services -->        
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-    <role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-        
-
-    <!-- Add your services here -->
-        
-</role-list>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
deleted file mode 100644
index bd8f3fd..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<pipeline>
-  <valves>
-  <valve>org.apache.turbine.pipeline.DetermineActionValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineTargetValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionTimeoutValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultLoginValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionValidationValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultACLCreationValve</valve>
-    <valve>org.apache.turbine.pipeline.ExecutePageValve</valve>
-    <valve>org.apache.turbine.pipeline.CleanUpValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineRedirectRequestedValve</valve>
-  </valves>
-</pipeline>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
deleted file mode 100644
index e69de29..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/conf/usersettings.properties
+++ /dev/null
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
deleted file mode 100644
index 64f7b2c..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/jetty-env.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<Configure class="org.eclipse.jetty.webapp.WebAppContext">
-  <New id="Turbine" class="org.eclipse.jetty.plus.jndi.Resource">
-    <Arg></Arg> <!-- reference to WebAppContext requires jetty 9.x only  -->
-    <Arg>${turbine_database_jndipath}</Arg>
-    <Arg>
-        <New class="org.apache.commons.dbcp.BasicDataSource">
-           <Set name="driverClassName">${turbine_database_driver}</Set>
-            <Set name="url">${turbine_database_url}${turbine_database_name}</Set>
-            <Set name="username">${turbine_database_user}</Set>
-            <Set name="password">${turbine_database_password}</Set>
-            <Set name="validationQuery">SELECT 1</Set>
-        </New>
-    </Arg>
-  </New>
-</Configure>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index ac18069..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?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.
--->
-<web-app id="WebApp_ID" version="2.5" 
-    xmlns="http://java.sun.com/xml/ns/j2ee" 
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Web Application descriptor                                               -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Uncomment the following block if you want to use the Session Service     -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-<!--
-  <listener>
-    <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-  </listener>
--->
-
-  <servlet>
-    <description>${turbine_app_name}</description>
-    <servlet-name>Turbine</servlet-name>
-    <servlet-class>org.apache.turbine.Turbine</servlet-class>
-    <init-param>
-      <param-name>applicationRoot</param-name>
-      <param-value>webContext</param-value>
-    </init-param>
-    <init-param>
-      <param-name>loggingRoot</param-name>
-      <param-value>/.</param-value>
-    </init-param>
-    <init-param>
-      <param-name>properties</param-name>
-      <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>Turbine</servlet-name>
-    <url-pattern>/app/*</url-pattern>
-  </servlet-mapping>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Redirect the home page of the application to the turbine servlet         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <welcome-file-list>
-    <welcome-file>app</welcome-file>
-  </welcome-file-list>
-  
-  
- <!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- JNDI Ressource                                                           -->
-<!-- ======================================================================== -->
-  
-   <resource-ref>
-    <res-ref-name>${turbine_database_jndipath}</res-ref-name>
-    <res-type>javax.sql.DataSource</res-type>
-    <res-auth>Container</res-auth>
-  </resource-ref>
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!-- Make sure that templates and logs are not available through              -->
-<!-- the servlet container. Remove security constraints or add an authen-     -->
-<!-- tication role if you need access to these paths.                         -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>templates</web-resource-name>
-      <url-pattern>/templates/*</url-pattern>
-    </web-resource-collection>
-    <web-resource-collection>
-      <web-resource-name>logs</web-resource-name>
-      <url-pattern>/logs/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint/>
-  </security-constraint>
-</web-app>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
deleted file mode 100644
index 5439b20..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/pb-turbine100px.png
+++ /dev/null
Binary files differ
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
deleted file mode 100644
index 6d80184..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine-project.png
+++ /dev/null
Binary files differ
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
deleted file mode 100644
index f19c013..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/images/turbine4-project.png
+++ /dev/null
Binary files differ
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
deleted file mode 100644
index 420260e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.css
+++ /dev/null
@@ -1,121 +0,0 @@
-/* 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*/
-
-book {
-  display: flex;
-  flex-direction: column;
-}
-
-@supports(display: grid) {
-  book {
-    width: auto;
-  }
-}
-
-book:nth-of-type(2) {
-  grid-column: 2;
-  grid-row: 2 / span 2;
-} 
-
-h3 {
-  order: 0;
-}
-
-footer {
-  background-color: #9E2064;
-  text-align: right;
-  padding-right: 20px;
-}
-
-section {
-  background-color: #dfe5e8;
-  display: grid;
-  grid-template: [header-left] "head head" 30px [header-right]
-                 [main-left]   "nav  main" 1fr  [main-right]
-                 [gridfooter-left] "nav  foot" 30px [gridfooter-right];
-  grid-gap: 0.5em;
-  width: 100%;
-  height: 250px;
-}
-
-section:after {
-  clear: both;
-  content: "";
-  display: table;
-}
-
-header {
-  background-color: #F69923;
-  grid-area: head;
-}
-
-nav {
-  background-color: #F79A23;
-  grid-area: nav;
-}
-
-main {
-  background-color: #E97826;
-  grid-area: main;
-}
-
-gridfooter {
-  background-color: #9E2064;
-  text-align: center;
-  grid-column: foot;  
-}
-
-.tabs-nav-container {
-  display: flex;
-  flex-direction: column;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-.tabs-nav {
-  text-align: center;
-}
-
-.tabs-nav:hover {
-  color: #6d6d6d;
-}
-
-.tabs-nav.is-active {
-  color: white;
-  background-color: #C92037;
-  min-width: 400px;
-}
-
-.tabs-nav span {
-  display: none;
-}
-
-.tab {
-  display: none;
-  background-color: #dfe5e8;
-}
-
-.tab.is-active {
-  display: block;
-}
-
-.tab-content {
-  padding: 0.5em;
-}
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
deleted file mode 100644
index e3e0bdd..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/page.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* 
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-*/
-(function() {
- //TODO
-})();
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
deleted file mode 100644
index dde7066..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/resources/ui/skins/default/skin.props
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Configuration file for the user interface
-bgcolor=#023262
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/layouts/Default.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/layouts/Default.vm
deleted file mode 100644
index 798ecba..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/layouts/Default.vm
+++ /dev/null
@@ -1,58 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-$page.addStyleSheet("http://www.w3schools.com/lib/w3.css")
-$page.addStyleSheet("http://www.w3schools.com/lib/w3-theme-blue-grey.css")
-$page.setTitle("Sample Apache Turbine Application")
-$page.addScript($ui.getScript("page.js"))
-<html>
-
-#TurbineHtmlHead()
-
-<link href="$ui.getStylecss()" rel="stylesheet" type="text/css" />
-
-<body #TurbineHtmlBodyAttributes() class="w3-theme-l4">
-
-	<div class="w3-wrapper">
-
-    <!-- Header -->
-    <header class="w3-container w3-center w3-padding-32 w3-theme">
-          <img class="w3-right" src="$ui.image('turbine4-project.png')" /> 
-          #if ( $data.getUser().hasLoggedIn() ) 
-            #set ( $u = $data.getUser() )
-            <div class="w3-right">
-          <h5>Hello $!u.FirstName</h5>
-            </div>
-      #end
-    </header>
-
-        <!-- Default Menu -->
-        $navigation.setTemplate("/Menu.vm")
-
-        <!-- Content -->
-        <div class="w3-left w3-padding" id="content">
-                $screen_placeholder
-        </div>
-
-        <!-- Footer -->
-        <footer class="w3-bottom">
-			<p>Powered by <img src="$ui.image('pb-turbine100px.png')"/></p>
-        </footer>
-	</div>
-
-</body>
-</html>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/macros/applicationMacros.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/macros/applicationMacros.vm
deleted file mode 100644
index 9acccea..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/macros/applicationMacros.vm
+++ /dev/null
@@ -1,151 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## $Id: TurbineMacros.vm 222027 2016-10-20 16:11:37Z painter $
-##
-## Put your Application macros in this file.
-##
-
-#* ------------------------------------------------------------------
-#    Global Macros
-*# ------------------------------------------------------------------
-
-#* ------------------------------------------------------------------
-#    Drop down select option for yes/no questions
-*# ------------------------------------------------------------------
-#macro (selectYesNo $label $selection)
-	<select name="$label">
-		#if ( $selection == "true" )
-			<option value="1" selected>Yes</option>
-			<option value="0">No</option>
-		#else
-			<option value="1">Yes</option>
-			<option value="0" selected>No</option>
-		#end
-	</select>
-#end
-
-
-#* ------------------------------------------------------------------
-#    Standard action form controls - Using w3.css styling
-*# ------------------------------------------------------------------
-
-#macro (insert)
-    <input type="submit" name="eventSubmit_doInsert" value="Insert"/>
-#end
-
-#macro (save)
-    <input type="submit" name="eventSubmit_doUpdate" value="Update"/>
-#end
-
-#macro (remove)
-    <input type="submit" name="eventSubmit_doDelete" value="Remove"/>
-#end
-
-
-#macro (warning $msg)
-<div class="w3-panel w3-orange w3-card-8">
-	$msg
-</div>
-#end
-
-#macro (error $msg)
-<div class="w3-panel w3-red w3-card-8">
-	$msg
-</div>
-#end
-
-#macro(info $msg)
-<div class="w3-panel w3-blue w3-card-8">
-	$msg
-</div>
-#end
-
-
-#* ------------------------------------------------------------------
-#
-# Macros that are used for displaying input forms. Using w3.css styling
-#
-*# ------------------------------------------------------------------
-
-#macro (formLabel $label)
-	<label>$!label</label>
-#end
-
-#macro (fileUpload $label $name)
-	<label>$!label</label>
-	<input class="w3-input" type="file" name="$!name">
-#end
-
-#macro (formCheckBox $label $name $checked)
-   #formLabel( $label )
-   #checkBox( $name $checked )
-#end
-
-#macro (checkBox $name $checked)
-	<input id="$!name" class="w3-check" type="checkbox" checked="$!checked">
-#end
-
-#macro (formLabelRequired $label)
-	<label class="w3-label w3-validate">$!label</label>
-#end
-
-#macro (formTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (smallFormTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textareaField $label $name $value)
-	<p>
-		<label class="w3-label">$label</label>
-		<textarea class="w3-input" style="width:90%" rows="6" name="$name" required>$!value</textarea>
-	</p>
-	
-#end
-
-#macro (formPasswordCell $label $name $value)
-	<p>
-	#formLabel( $label )
-	<input class="w3-input" type="password" name="$!name" value="$!value">
-	</p>
-#end
-
-#macro (formCellRequired $label $name $value)
-	<p>
-	  #formLabelRequired($label)
-  	  #formTextField($name $value)
-  	</p>
-#end
-
-#macro (formCell $label $name $value)
-  #formLabel($label)
-  #formTextField($name $value)
-#end
-
-#macro (smallFormCell $label $name $value)
-  #formLabel($label)
-  #smallFormTextField($name $value)
-#end
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/navigations/Menu.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/navigations/Menu.vm
deleted file mode 100644
index ba6d0c7..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/navigations/Menu.vm
+++ /dev/null
@@ -1,52 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-#if ( $data.getUser().hasLoggedIn() )
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-dropdown-hover">
-            <a href="#">Administration <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-              ## every user can change their password
-               <a href="$link.setPage("Password.vm")">Update Password <i class="fa fa-unlock"></i></a>
-          #if ( $data.getACL().hasRole("turbineadmin") )
-              <a href="$link.setPage("user,FluxUserList.vm")">User List <div class="w3-right"><i class="fa fa-users"></i></div></a>
-              <a href="$link.setPage("role,FluxRoleList.vm")">User Roles <div class="w3-right"><i class="fa fa-user-plus"></i></div></a>
-              <a href="$link.setPage("user,FluxUserForm.vm")?mode=insert">Add User <div class="w3-right"><i class="fa fa-user"></i></div></a>
-              #end
-            </div>
-          </li>
-          #if ( $data.getACL().hasRole("turbineuser") )
-          <li class="w3-dropdown-hover">
-            <a href="#">Records <i class="fa fa-caret-down"></i></a>
-            <div class="w3-dropdown-content w3-white w3-card-4">
-               <a href="$link.setAction("ShowRecords")">Show Records <i class="fa fa-unlock"></i></a>
-            </div>
-          </li>
-          #end
-          
-          <li class="w3-right"><a href="$link.setAction("LogoutUser")">Logout</a></li>
-          
-</nav>
-#else
-<nav class="w3-navbar w3-theme">
-          <li><a  href="$link.setPage("Index.vm")">Home</a></li>
-          <li class="w3-right"><a href="$link.setPage("Login.vm")">Login</a></li>
-</nav>
-
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Error.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Error.vm
deleted file mode 100644
index 897e5f1..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Error.vm
+++ /dev/null
@@ -1,7 +0,0 @@
-E R R O R 
-
-$message
-
-$error
-
-$exception
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Index.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Index.vm
deleted file mode 100644
index 578e66f..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Index.vm
+++ /dev/null
@@ -1,45 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-
-#if ( $data.getMessage() )
-        #info( $data.getMessage() )
-#end
-
-#if ($!success) <div align="center"><h1>$success</h1></div> 
-       <p>
-               You're now successfully running a <a href="http://turbine.apache.org/">Turbine</a> based
-               application, deployed to <font color="red">$data.ServerData.ContextPath</a></font> on
-               your web container.
-       </p>
-      
-       <p>
-               You can (and should!) change or remove this page at any time. It is
-               intended to give you immediate feedback if you just deployed an newly
-               setup Turbine application.
-       </p>
-#end
-    
-     ## including a secured does not trigger the security check, as it is just handled by velocity, not turbine
-     #parse("/screens/TestSecure.vm")
-     
-     ## trigger the security check, but without all context
-     ## <a href="$link.setPage("TestSecure.vm")">Test a secure access without context</a>
-     ## trigger the security check
-     <a href="$link.setPage("TestSecure.vm").addPathInfo("action","SecureAction")">Test a secure access with context</a>
-     
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Login.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Login.vm
deleted file mode 100644
index 7a9b423..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Login.vm
+++ /dev/null
@@ -1,104 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## If you want to use intake to process the data, uncomment below
-##
-
-#set ( $loginGroup = $intake.Login.Default )
-  
-#set ( $valid = true )  
-#if (!$loginGroup.Username.isValid() ) 
-    ## this should be improved ...
-    #if ("$loginGroup.Username.Message" == "username_min_length_msg") 
-       #info( $l10n.format("$loginGroup.Username.Message","4") )
-    #else
-      #info( $l10n.get("$loginGroup.Username.Message") )
-    #end
-    #set ( $valid = false )
- #end
- 
- #if ( !$loginGroup.Password.isValid() ) 
-    #info( $l10n.get("$loginGroup.Password.Message") )
-    #set ( $valid = false )
- #end
-
-<p/>
-  #if (! $data.user.hasLoggedIn()) 
-  
-  <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-
-		<form class="w3-container w3-light-grey" name="login" method="post" enctype="application/x-www-form-urlencoded" action="$link.setAction("LoginUserIntake").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-        
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="$loginGroup.Username.Key" value="$!loginGroup.Username" tabindex="1" autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="$loginGroup.Password.Key" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">#if (! $valid ) Retry #else Sign in #end</button>
-                
-                <p/>
-    ##$intake.declareGroups()
-        
-      </div>
-    </form>
-    
-    <!--  default login without Intake  -->
-    <!-- 
-    		<form class="w3-container w3-light-grey" name="login" method="post" action="$link.setAction("LoginUser").setPage($data.templateInfo.screenTemplate)">
-       <div class="w3-section">
-       
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Username" type="text" name="username" value="" tabindex="1"  autocomplete="off" autofocus="">
-                </p>
-
-                <p>
-                	<input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Password" type="password" name="password" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple" tabindex="3">Sign in</button>
-                
-                <p/>
-
-      </div>
-    </form>
-    
-    
-    
-    -->
-
-
-    <div class="w3-container w3-border-top w3-padding-16 w3-light-grey">
-          <span class="w3-right w3-padding w3-hide-small">Forgot <a href="#">password?</a></span>
-    </div>
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end
-        
-
-    </div>
-  #else
-      #parse("/screens/Index.vm")
-  #end
-
-## $intake.declareGroups()
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Password.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Password.vm
deleted file mode 100644
index c5c2b83..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/Password.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-
-    <div class="w3-display-middle w3-card-8 w3-center w3-light-grey" style="max-width: 500px">
-  
-    <form class="w3-container w3-light-grey" name="password_change" method="post" action="$link.setAction("ChangePasswordAction").setPage("Index.vm")">
-          <div class="w3-section">
-        
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="Old Password" type="password" name="oldpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <p>
-                  <input class="w3-input w3-border" style="margin: auto; width: 200px;" placeholder="New Password" type="password" name="newpassword" value="" tabindex="2" autocomplete="off">
-                </p>
-
-                <button type="submit" name="submit" id="submit" value="eventSubmit_doPerform" class="w3-ripple">Change Password</button>
-                
-                <button type="button" name="cancel" id="cancel" value="cancel" class="w3-ripple" onCLick="doCancel()">Cancel</button>
-                
-                <script>
-                function doCancel() { 
-                	location.href="$link.setPage('TestSecure.vm')"; 
-                	return false;
-                }
-                </script>
-
-                <p/>
-
-        
-      </div>
-    </form>
-
-
-    ## Display System messages here if there are any
-        #if($data.getMessage())
-         #info( $data.getMessage() ) <br/>
-        #end 
-
-    </div>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/TestSecure.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/TestSecure.vm
deleted file mode 100644
index dc2ffed..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/TestSecure.vm
+++ /dev/null
@@ -1,27 +0,0 @@
-#if ( $data.getMessage() )
-	#info( $data.getMessage() )
-#end
-
-## its null for anon 
-#if ( $!related.getUserrole() )
-<h1> Secured #if ($!user) User#else Role #end Access Page </h1>
-     #if ($!user && $!success)<div align="center"><h1>$success</h1></div>#end
-     <p>   
-          #if ($user)
-             Hi "$user.firstName, $user.lastName"
-          #else
-          Role: $related.getUserrole()
-          #end
-         <script type="text/javascript">
-          var jsonObject;
-          #if ($user)
-           jsonObject = $related.getJson($user,"org.apache.turbine.om.security.User", null, true,"lastLogin", "permStorage");
-           if (jsonObject != undefined && jsonObject.permStorage == undefined) {
-              alert("successfully read JSON:" + jsonObject.lastLogin);
-           } else {
-              alert("error json object not as expected" + JSON.stringify(jsonObject));
-           }
-         #end
-        </script>
-     </p>
-#end
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/showRecords.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/showRecords.vm
deleted file mode 100644
index b4a5618..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/app/screens/showRecords.vm
+++ /dev/null
@@ -1,51 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License. 
-   <div id="tabs" class="no-js">
-  #foreach ($author in $authors)
-    <div class="tabs-nav-container">
-      <a href="#" class="tabs-nav #if($velocityCount ==1)is-active#end">$author.firstName $author.lastName</a>
-    </div>
-  #end
-  #foreach ($author in $authors)
-     <div class="tab #if($velocityCount ==1)is-active#end">
-       <div class="tab-content"> 
-        <section>
-            <header>Author´s Book Record Box</header>
-            <nav>$author.firstName $author.lastName</nav>
-            #set($books = $author.books)
-             <main> 
-               #foreach ($book in $books)
-               <book><a href="#">
-                $book.title 
-               </a>  (subject: $book.subject)
-               </book>
-               #end
-              </main>
-              <footer>$velocityCount</footer>
-        </section>
-        </div>
-    </div>
-  #end
-  
-   </div>
-   
-    <p>Authors: $authors.size()</p>
-   
-   <script>
-  /* 
-  */
-</script>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm
deleted file mode 100644
index 32f5bef..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/layouts/FluxDefault.vm
+++ /dev/null
@@ -1,30 +0,0 @@
-<table class="w3-table">
-  <tr>
-    <td colspan="2" align="left">
-      $navigation.setTemplate("/FluxTop.vm")
-    </td>
-  </tr>
-  <tr>
-    <td colspan="2">
-      <hr noshade size="1">
-    </td>                
-  </tr>
-  <tr>
-    <td width="10%" valign="top" align="left">
-      $navigation.setTemplate("/FluxMenu.vm")
-    </td>
-    <td width="*" valign="center">
-      $screen_placeholder
-    </td>
-  </tr>
-  <tr>
-    <td colspan="2">
-      <hr noshade size="1">
-    </td>                
-  </tr>
-  <tr>
-    <td colspan="2">
-      $navigation.setTemplate("/FluxBottom.vm")
-    </td>
-  </tr>
-</table>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/macros/fluxMacros.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/macros/fluxMacros.vm
deleted file mode 100644
index 9acccea..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/macros/fluxMacros.vm
+++ /dev/null
@@ -1,151 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##   http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-
-##
-## $Id: TurbineMacros.vm 222027 2016-10-20 16:11:37Z painter $
-##
-## Put your Application macros in this file.
-##
-
-#* ------------------------------------------------------------------
-#    Global Macros
-*# ------------------------------------------------------------------
-
-#* ------------------------------------------------------------------
-#    Drop down select option for yes/no questions
-*# ------------------------------------------------------------------
-#macro (selectYesNo $label $selection)
-	<select name="$label">
-		#if ( $selection == "true" )
-			<option value="1" selected>Yes</option>
-			<option value="0">No</option>
-		#else
-			<option value="1">Yes</option>
-			<option value="0" selected>No</option>
-		#end
-	</select>
-#end
-
-
-#* ------------------------------------------------------------------
-#    Standard action form controls - Using w3.css styling
-*# ------------------------------------------------------------------
-
-#macro (insert)
-    <input type="submit" name="eventSubmit_doInsert" value="Insert"/>
-#end
-
-#macro (save)
-    <input type="submit" name="eventSubmit_doUpdate" value="Update"/>
-#end
-
-#macro (remove)
-    <input type="submit" name="eventSubmit_doDelete" value="Remove"/>
-#end
-
-
-#macro (warning $msg)
-<div class="w3-panel w3-orange w3-card-8">
-	$msg
-</div>
-#end
-
-#macro (error $msg)
-<div class="w3-panel w3-red w3-card-8">
-	$msg
-</div>
-#end
-
-#macro(info $msg)
-<div class="w3-panel w3-blue w3-card-8">
-	$msg
-</div>
-#end
-
-
-#* ------------------------------------------------------------------
-#
-# Macros that are used for displaying input forms. Using w3.css styling
-#
-*# ------------------------------------------------------------------
-
-#macro (formLabel $label)
-	<label>$!label</label>
-#end
-
-#macro (fileUpload $label $name)
-	<label>$!label</label>
-	<input class="w3-input" type="file" name="$!name">
-#end
-
-#macro (formCheckBox $label $name $checked)
-   #formLabel( $label )
-   #checkBox( $name $checked )
-#end
-
-#macro (checkBox $name $checked)
-	<input id="$!name" class="w3-check" type="checkbox" checked="$!checked">
-#end
-
-#macro (formLabelRequired $label)
-	<label class="w3-label w3-validate">$!label</label>
-#end
-
-#macro (formTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (smallFormTextField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textField $name $value)
-	<input class="w3-input" type="text" name="$!name" value="$!value">
-#end
-
-#macro (textareaField $label $name $value)
-	<p>
-		<label class="w3-label">$label</label>
-		<textarea class="w3-input" style="width:90%" rows="6" name="$name" required>$!value</textarea>
-	</p>
-	
-#end
-
-#macro (formPasswordCell $label $name $value)
-	<p>
-	#formLabel( $label )
-	<input class="w3-input" type="password" name="$!name" value="$!value">
-	</p>
-#end
-
-#macro (formCellRequired $label $name $value)
-	<p>
-	  #formLabelRequired($label)
-  	  #formTextField($name $value)
-  	</p>
-#end
-
-#macro (formCell $label $name $value)
-  #formLabel($label)
-  #formTextField($name $value)
-#end
-
-#macro (smallFormCell $label $name $value)
-  #formLabel($label)
-  #smallFormTextField($name $value)
-#end
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm
deleted file mode 100644
index 2e988c3..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxBottom.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-<font face="verdana,geneva,helvetica">
-</font>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm
deleted file mode 100644
index 2c4f800..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxMenu.vm
+++ /dev/null
@@ -1,16 +0,0 @@
-## -----------------------------------------------------------------------
-## Menu.vm
-##
-## Main menu for the Turbine administration application.
-## -----------------------------------------------------------------------
-<font size="-1" face="$ui.sansSerifFonts">
-  <a href="$link.setPage("user,FluxUserList.vm")">Users</a>
-  <br>
-  <a href="$link.setPage("group,FluxGroupList.vm")">Groups</a>
-  <br>
-  <a href="$link.setPage("role,FluxRoleList.vm")">Roles</a>
-  <br>
-  <a href="$link.setPage("permission,FluxPermissionList.vm")">Permissions</a>
-  <p>
-  <a href="$link.setAction("FluxLogout").setPage("FluxLogin.vm")">Logout</a>
-</font>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm
deleted file mode 100644
index ff1450c..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/navigations/FluxTop.vm
+++ /dev/null
@@ -1,3 +0,0 @@
-<img src="$ui.image($ui.logo)">
-<font face="verdana,geneva,helvetica">
-</font>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm
deleted file mode 100644
index 3abf426..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxEmbeddedMenu.vm
+++ /dev/null
@@ -1,12 +0,0 @@
-## -----------------------------------------------------------------------
-## Menu.vm
-##
-## Main menu for the Turbine administration application.
-## -----------------------------------------------------------------------
-<div class="w3-container">
-  <a href="$link.setPage("user,FluxUserList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Users</a>
-  <a href="$link.setPage("group,FluxGroupList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Groups</a>
-  <a href="$link.setPage("role,FluxRoleList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Roles</a>
-  <a href="$link.setPage("permission,FluxPermissionList.vm")" class="w3-btn w3-round w3-white w3-border w3-border-blue">Permissions</a>
-</div>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm
deleted file mode 100644
index 782f192..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxError.vm
+++ /dev/null
@@ -1,26 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxError.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $
-
-*#
-
-$page.setBgColor($ui.bgcolor)
-$page.setTitle("")
-
-<font face="$ui.sansSerifFonts">
-
-The reason for the error was:
-<p>
-<pre>
-$processingException
-
-</pre>
-
-<P>
-The stacktrace is as follows:
-<pre>
-$stackTrace
-</pre>
-
-</font>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm
deleted file mode 100644
index 666a155..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxIndex.vm
+++ /dev/null
@@ -1,15 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxIndex.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $
-
-*#
-
-$page.setBgColor($ui.bgcolor)
-$page.setTitle("Home Page")
-
-<font face="$ui.sansSerifFonts">
-
-This is the administration application.
-
-</font>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm
deleted file mode 100644
index 9d4e80a..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/FluxLogin.vm
+++ /dev/null
@@ -1,28 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxLogin.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $
-
-*#
-
-$page.setTitle("Please Login")
-$page.setBgColor($ui.bgcolor)
-
-<form method="post" action="$link.setAction("FluxLogin").setPage("FluxIndex.vm")">
-  <table>
-    <tr>
-      #formCell ("User" "username" "")
-    </tr>
-    <tr>
-       #formPasswordCell ("Password" "password" "")
-    </tr>
-    <tr>
-      <td>
-        <font face="$ui.sansSerifFonts">
-          <input type="submit" value="Login">
-        </font>
-      </td>
-    </tr>
-  </table>
-</form>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm
deleted file mode 100644
index c8b7c55..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupAlreadyExists.vm
+++ /dev/null
@@ -1,13 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@version $Id: FluxGroupAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-<div class="w3-panel w3-red">
-The group name <b>$name</b> is currently is use. Group names
-must be unique, please choose another group name.
-</div>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm
deleted file mode 100644
index ec00606..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupForm.vm
+++ /dev/null
@@ -1,50 +0,0 @@
-#**
-
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxGroupForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-
-#if ($errorTemplate)
-	#parse ($errorTemplate)
-#end
-
-
-<form 
-	method="post" 
-	action="$link.setPage("group,FluxGroupList.vm").setAction("group.FluxGroupAction")">
-  
-	<table class="w3-table w3-striped  w3-bordered">
-      <tr>
-        #formCell ("Group Name" "group" $!flux.Group.Name)
-      </tr>
-	</table>
-
-          #*
-            Check for a mode, the update and delete buttons
-            shouldn't appear when inserting a new user.
-          *#
-
-          #if ($flux.Mode == "modify")
-            <input type="hidden" name="oldName" value="$!flux.Group.Name">
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doUpdate" value="Update Group"/>
-            </div>
-          #elseif ($flux.Mode == "delete")
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doDelete" value="Confirm Deletion"/>
-			</div>
-          #else
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doInsert" value="Add Group"/>
-			</div>
-          #end
-  
-</form>
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm
deleted file mode 100644
index 3b96ff8..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/group/FluxGroupList.vm
+++ /dev/null
@@ -1,43 +0,0 @@
-#**
-
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxGroupList.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-$page.setTitle("Group Adminstration")
-$page.setBgColor($ui.bgcolor)
-
-#set ( $headings = ["Group Name"] )
-
-<div class="w3-container w3-padding"> <h2>Current Groups</h2>  </div>
-
-<table class="w3-table w3-striped  w3-bordered">
-	<tr>
-	#foreach ($heading in $headings)
-		<th>$heading</th>
-	#end
-	</tr>
-        
-	#foreach ($group in $flux.Groups)
-	<tr>
-		<td>$group.Name</td>
-		<td>
-			<a href="$link.setPage("group,FluxGroupForm.vm").addPathInfo("group",$group.Name).addQueryData("mode","modify")">Details</a> &nbsp;
-			<a href="$link.setPage("group,FluxGroupForm.vm").addPathInfo("group",$group.Name).addQueryData("mode","delete")">Remove</a>
-		</td>
-	</tr>
-	#end
-</table>
-
-
-<div class="w3-container w3-padding w3-center">
-	<a class="w3-btn w3-blue w3-round" style="width: 180px;"
-		href="$link.setPage("group,FluxGroupForm.vm").addQueryData("mode","insert")">Add Group</a>
-</div>
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm
deleted file mode 100644
index 48f0f79..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionAlreadyExists.vm
+++ /dev/null
@@ -1,11 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxPermissionAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-<div class="w3-panel w3-red">
-The permission name <b>$name</b> is currently is use. Permission
-names must be unique, please choose another name.
-</div>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm
deleted file mode 100644
index 5462737..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionForm.vm
+++ /dev/null
@@ -1,48 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxPermissionForm.vm,v 1.1.1.1 2003-06-19 23:07:21 painter Exp $
-
-*#
-
-#if ($errorTemplate)
-	#parse ($errorTemplate)
-#end
-
-<form 
-	method="post" 
-	action="$link.setPage("permission,FluxPermissionList.vm").setAction("permission.FluxPermissionAction")">
-  
-	<table class="w3-table w3-striped  w3-bordered">
-      <tr>
-        #formCell ("Permission Name" "permission" $!flux.Permission.Name)
-      </tr>
-	</table>
-
-
-          #*
-            Check for a mode, the update and delete buttons
-            shouldn't appear when inserting a new user.
-          *#
-
-          #if ($flux.Mode == "modify")
-            <input type="hidden" name="oldName" value="$!flux.Permission.Name">
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doUpdate" value="Update Permission"/>
-            </div>
-          #elseif ($flux.Mode == "delete")
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doDelete" value="Confirm Deletion"/>
-			</div>
-          #else
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doInsert" value="Add Permission"/>
-			</div>
-          #end
-
-</form>
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm
deleted file mode 100644
index 72266eb..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxPermissionList.vm
+++ /dev/null
@@ -1,42 +0,0 @@
-#**
-
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxPermissionList.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-## Load permissions
-#set ( $permissions = $flux.Permissions )
-
-<h2>All Permissions</h2>
-
-#set ( $headings = ["Permission Name"] )
-
-<table class="w3-table w3-bordered">
-        <tr>
-          #foreach ($heading in $headings)
-          <th>$heading</th>
-          #end
-        </tr>
-  
-        #foreach ($permission in $permissions )
-        <tr>
-          <td> $permission.Name </td>
-          <td>
-              <a href="$link.setPage("permission,FluxPermissionForm.vm").addPathInfo("permission",$permission.Name).addQueryData("mode","modify")">Details</a> &nbsp;
-              <a href="$link.setPage("permission,FluxPermissionForm.vm").addPathInfo("permission",$permission.Name).addQueryData("mode","delete")">Remove</a>
-          </td>
-        </tr>
-        #end
-</table>
-
-<div class="w3-container w3-padding w3-center">
-	<a class="w3-btn w3-blue w3-round" style="width: 180px;"
-		href="$link.setPage("permission,FluxPermissionForm.vm").addQueryData("mode","insert")">Add New Permission</a>
-</div>
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm
deleted file mode 100644
index aa2c8aa..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/permission/FluxRolePermissionList.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-#** 
-
-This template is used to display the permissions
-for a role.
-
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxRolePermissionForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-#set ( $role = $flux.Role )
-
-## Load permissions
-#set ( $permissions = $flux.Permissions )
-<h2>Permissions for the $role.Name role</h2>
-
-<form method="post" action="$link.setAction("role.FluxRoleAction").setPage("role,FluxRoleList.vm")">
-
-	<input type="hidden" name="role" value="$role.Name">
-
-	<table class="w3-table w3-bordered">
-		<tr>
-			<th> Permission </th>
-			<th> Assign to Role </th>
-		</tr>
-		
-		#foreach ($permission in $permissions)
-		<tr>
-		    <td align="right"> <b>$!permission.Name</b> </td>
-			<td align="center">
-			#if ($role.Permissions.contains($permission))
-		      #set ($checked = "checked")
-		    #else
-		      #set ($checked = "")
-		    #end
-				<input type="checkbox" name="${role.Name}${permission.Name}" $checked>
-			</td>
-	  </tr>
-	  #end
-	  
-	  <tr>
-	    <td>
-	        <input class="w3-button w3-blue" type="submit" name="eventSubmit_doPermissions" value="Update Permissions">
-	    </td>
-	  </tr>
-	</table>  
-	
-</form>
-  
-#if ($showEmbeddedMenu)
-    <hr size="1" noshade>
-    #parse ("screens/FluxEmbeddedMenu.vm")
-#end
-  
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm
deleted file mode 100644
index 775ce2e..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleAlreadyExists.vm
+++ /dev/null
@@ -1,16 +0,0 @@
-#**
-
-Display this template when the administrator
-tries to add a user with a role that is
-already being used by the security system.
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxRoleAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-<div class="w3-panel w3-red">
-The role name <b>$name</b> is currently in use. Role names
-must be unique, please choose another role name.
-</div>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm
deleted file mode 100644
index 21ff042..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleForm.vm
+++ /dev/null
@@ -1,51 +0,0 @@
-#**
-
-This template is used to display the details of
-a role.
-
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxRoleForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-#if ($errorTemplate)
-	#parse ($errorTemplate)
-#end
-
-<form 
-	method="post" 
-	action="$link.setPage("role,FluxRoleList.vm").setAction("role.FluxRoleAction")">
-  
-	<table class="w3-table w3-striped  w3-bordered">
-      <tr>
-        #formCell ("Role Name" "role" $!flux.Role.Name)
-      </tr>
-	</table>
-
-          #*
-            Check for a mode, the update and delete buttons
-            shouldn't appear when inserting a new user.
-          *#
-
-          #if ($flux.Mode == "modify")
-            <input type="hidden" name="oldName" value="$!flux.Role.Name">
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doUpdate" value="Update Role"/>
-            </div>
-          #elseif ($flux.Mode == "delete")
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doDelete" value="Confirm Deletion"/>
-			</div>
-          #else
-			<div class="w3-container w3-padding w3-center">
-            	<input class="w3-btn w3-blue w3-round" style="width: 180px;" type="submit" name="eventSubmit_doInsert" value="Add Role"/>
-			</div>
-          #end
-
-</form>
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm
deleted file mode 100644
index 99da13b..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/role/FluxRoleList.vm
+++ /dev/null
@@ -1,42 +0,0 @@
-#**
-
-Used to display the roles currently being used in
-the application.
-
-*#
-#set ( $headings = ["Role Name"] )
-
-<div class="w3-container w3-padding"> <h2>Current Roles</h2>  </div>
-
-<table class="w3-table w3-striped  w3-bordered">
-        <tr>
-          #foreach ($heading in $headings)
-          <th>$heading</th>
-          #end
-        </tr>
-        
-        #foreach ($role in $flux.Roles)
-	        #if ( $role.Name != "super_admin" )
-	        <tr>
-	        	<td> $role.Name </td>
-	          <td>
-	              <a href="$link.setPage("permission,FluxRolePermissionList.vm").addPathInfo("role",$role.Name)">Permissions</a> &nbsp;
-	              <a href="$link.setPage("role,FluxRoleForm.vm").addPathInfo("role",$role.Name).addQueryData("mode","modify")">Details</a> &nbsp;
-	              <a href="$link.setPage("role,FluxRoleForm.vm").addPathInfo("role",$role.Name).addQueryData("mode","delete")">Remove</a>
-	          </td>
-	        </tr>
-	        #end
-        #end
-        
-</table>
-
-		<div class="w3-container w3-padding w3-center">
-			<a class="w3-btn w3-blue w3-round" style="width: 180px;"
-				href="$link.setPage("role,FluxRoleForm.vm").addQueryData("mode","insert")">Add New Role</a>
-		</div>
-
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm
deleted file mode 100644
index 534c640..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxMissingRequiredInputs.vm
+++ /dev/null
@@ -1,15 +0,0 @@
-#*
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@version $Id: FluxMissingRequiredInputs.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-*#
-
-<div class="w3-panel w3-red">
-The following fields are required and must be entered before
-this request can be processed:
-<ul>
-#foreach ($missingRequiredInput in $missingRequiredInputs)
-	<li>$missingRequiredInput</li>
-#end
-</ul>
-</div>
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm
deleted file mode 100644
index a2b3572..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserAlreadyExists.vm
+++ /dev/null
@@ -1,13 +0,0 @@
-#*
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@version $Id: FluxUserAlreadyExists.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-<div class="w3-panel w3-red">
-The username <b>$username</b> is currently is use. Usernames
-must be unique for all users, please choose another username.
-</div>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm
deleted file mode 100644
index 5858b11..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserForm.vm
+++ /dev/null
@@ -1,66 +0,0 @@
-#**
-
-Display the details of a user.
-
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@version $Id: FluxUserForm.vm,v 1.10 2017-11-17 19:21:40 painter Exp $
-
-*#
-
-<!-- Primary edit screen -->
-<form 
-    name="user" 
-    method="post" 
-    action="$link.setAction("user.FluxUserAction").setPage("user,FluxUserList.vm")">
-	
-	#set ( $user = $flux.User )
-	
-	<div class="w3-container w3-padding w3-gray">
-			
-		<div class="w3-row-padding">
-	
-			<!-- User Info -->
-			<div class="w3-half">
-				<div class="w3-card-8 w3-padding w3-white">
-					<div id="newUser" style="display: block;">
-					<h2>User Details</h2>
-					#formCell( "Username" "username" $!user.Name ) 
-		            #formCell( "First Name" "firstName" $!user.FirstName ) 
-		            #formCell( "Last Name" "lastName" $!user.LastName ) 
-		            #formCell( "Email" "email" $!user.Email ) 
-					</div>
-				</div>
-			</div>
-			<div class="w3-half">				
-				<div id="userPassword" class="w3-card-8 w3-padding w3-white">
-					<h2>Password</h2>
-					
-					<p>
-						Password required for user to login. If you are just 
-						updating a user's details, leave the password field 
-						blank, otherwise, new password will be set 
-					
-					#formPasswordCell( "New Password" "password" "" )
-					
-				</div>
-			</div>
-		</div>
-	</div>
-	<p>
-	#if ($flux.Mode == "modify")
-		<input type="submit" name="eventSubmit_doUpdate" value="Update User">
-	#elseif ($flux.Mode == "delete")
-		<input type="submit" name="eventSubmit_doDelete" value="Delete User">
-	#else
-		<input type="submit" name="eventSubmit_doInsert" value="Add User">
-	#end
-                
-    <p>
-    
-    #if ($showEmbeddedMenu)
-        <hr size="1" noshade>
-        #parse ("screens/FluxEmbeddedMenu.vm")
-    #end
-
-</form>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm
deleted file mode 100644
index cdc0d43..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserList.vm
+++ /dev/null
@@ -1,38 +0,0 @@
-#set ( $headings = ["Username","First Name", "Last Name", "Email", "Admin" ] )
-
-
-<div class="w3-container w3-padding"> <h2>Current Users</h2>  </div>
-
-<table class="w3-table w3-striped  w3-bordered">
-	<tr>
-		#foreach ($heading in $headings)
-			<th>$heading</th> 
-		#end
-	</tr>
-
-	#foreach ($user in $flux.getUsers() )
-	<tr>
-		<td>$!user.Name</td>
-		<td>$!user.FirstName</td>
-		<td>$!user.LastName</td>
-		<td><a href=mailto:$!user.Email>$!user.Email</a></td> 
-		<td><a href="$link.setPage("user,FluxUserForm.vm").addQueryData("username","$user.Name").addQueryData("mode","modify")">Details</a>
-			&nbsp; <a href="$link.setPage("user,FluxUserRoleForm.vm").addQueryData("username","$user.Name").addQueryData("mode","modify")">Roles</a>
-			&nbsp; <a href="$link.setPage("user,FluxUserForm.vm").addQueryData("username","$user.Name").addQueryData("mode","delete")">Remove</a>
-		</td>
-	</tr>
-	#end
-
-</table>
-<p>
-		<div class="w3-container w3-padding w3-center">
-			<a class="w3-btn w3-blue w3-round" style="width: 180px;"
-				href="$link.setPage("user,FluxUserForm.vm").addQueryData("mode","insert")">Add
-				New User</a>
-		</div>
-
-#if ($showEmbeddedMenu)
-  <hr size="1" noshade>
-  #parse ("screens/FluxEmbeddedMenu.vm")
-#end
-		
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm
deleted file mode 100644
index e11ad78..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/webapp/templates/flux/screens/user/FluxUserRoleForm.vm
+++ /dev/null
@@ -1,63 +0,0 @@
-#**
-
-@author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
-@author <a href="mailto:jeff@jivecast.com">Jeffery Painter</a>
-@version $Id: FluxUserRoleForm.vm,v 1.1.1.1 2017-11-26 23:07:21 painter Exp $
-
-*#
-
-#set ($user = $flux.User)
-#set ($acl = $flux.ACL)
-
-<h2>Roles for $user.FirstName $user.LastName</h2>
-
-<form method="post" action="$link.setAction("user.FluxUserAction").setPage("user,FluxUserList.vm")">
-
-<input type="hidden" name="username" value="$user.Name">
-<table class="w3-table w3-bordered">
-  <tr>
-    <th> &nbsp; </th>
-      
-    #foreach ($role in $flux.Roles)
-      #if ( $role.Name != "super_admin" )
-	    <th>
-	        <b>$role.Name</b>
-	    </th>
-	  #end
-    #end
-  
-  </tr>
-
-
-  #foreach ($group in $flux.Groups)
-  <tr>
-    <td>
-        <b>$group.Name</b>
-    </td>
-
-    #foreach ($role in $flux.Roles)
-	    #if ( $role.Name != "super_admin" )
-		    #if ($acl.hasRole($role, $group))
-		      #set ($checked = "checked")
-		    #else
-		      #set ($checked = "")
-		    #end
-		    
-		    <td align="center">
-		      <input type="checkbox" class="w3-checkbox" name="${group.Name}${role.Name}" $checked>
-		    </td>
-		#end
-    #end
-    
-  </tr>
-  #end
-  
-  <tr>
-    <td>
-        <input type="submit" name="eventSubmit_doRoles" value="Update Roles">
-    </td>
-  </tr>
-
-</table>
-
-</form>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
deleted file mode 100644
index 5375724..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/TorqueTest.properties
+++ /dev/null
@@ -1,83 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-torque.applicationRoot = .
-#pipeline.default.descriptor = src/test/conf/torque/turbine-classic-pipeline.xml
-# torque.defaults.pool.defaultMaxActive=30
-torque.defaults.pool.testOnBorrow=true
-torque.defaults.pool.validationQuery=SELECT 1
-
-torque.idbroker.cleverquantity=true
-torque.idbroker.prefetch=true
-torque.idbroker.usenewconnection=true
-
-#torque.database.default=default
-torque.database.schema =
-
-# supported auto, hsqldb, mysql..
-#torque.database.default.adapter=hsqldb
-
-#torque.dsfactory.default.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-
-#torque.dsfactory.default.pool.testOnBorrow=true
-#torque.dsfactory.default.pool.validationQuery=SELECT 1 from INFORMATION_SCHEMA.SYSTEM_USERS
-#torque.dsfactory.default.connection.driver = org.hsqldb.jdbcDriver
-#torque.dsfactory.default.connection.url = jdbc:hsqldb:.
-#torque.dsfactory.default.connection.user = sa
-#torque.dsfactory.default.connection.password =
-
-##################
-#
-# For JNDI configuration please see: https://db.apache.org/torque/torque-4.0/documentation/orm-reference/initialisation-configuration.html
-# 
-#
-#torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
-#torque.dsfactory.${turbine_database_name}.jndi.path=java:comp/env/${turbine_database_jndipath}
-#torque.dsfactory.${turbine_database_name}.jndi.ttl=300000
-
-# -------------------------------------------------------------------
-#
-# Shared Pool Data Source Factory
-#
-# -------------------------------------------------------------------
-#torque.database.default=turbine
-torque.database.${turbine_database_name}.adapter=${turbine_database_adapter}
-
-#torque.database.${turbine_database_name}.user=${turbine_database_user}
-#torque.database.${turbine_database_name}.password=${turbine_database_password}
-#
-#torque.defaults.pool.maxActive =       	30
-#torque.defaults.pool.testOnBorrow =    	true
-#torque.defaults.pool.validationQuery = 	SELECT 1
-#
-#torque.defaults.connection.driver =    	${turbine_database_driver}
-#torque.defaults.connection.url =       	${turbine_database_url}${turbine_database_name}
-#torque.defaults.connection.user =      	${turbine_database_user}
-#torque.defaults.connection.password =  	${turbine_database_password}
-#
-torque.dsfactory.${turbine_database_name}.connection.driver =    	${turbine_database_driver}
-torque.dsfactory.${turbine_database_name}.connection.url =       	${turbine_database_url}${turbine_database_name}
-torque.dsfactory.${turbine_database_name}.connection.user =      	${turbine_database_user}
-torque.dsfactory.${turbine_database_name}.connection.password =  	${turbine_database_password}
-torque.dsfactory.${turbine_database_name}.factory=org.apache.torque.dsfactory.SharedPoolDataSourceFactory
-# -------------------------------------------------------------------
-
-# Comment if not using shared data source factory
-torque.database.default=${turbine_database_name}
-
-
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
deleted file mode 100644
index 612e0a8..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumComponentConfiguration.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?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.
--->
-<!--
-	This configuration file for Avalon components is used for testing the Fulcrum components
-	with Turbine.
--->
-
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>src/test/conf/torque/TorqueTest.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
-    <mimetype/>
-    <crypto>
-      <algorithm>
-      	<unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
-      </algorithm>
-    </crypto>
-  
-    <factory/>
-    <pool/>
-    <parser>
-        <parameterEncoding>utf-8</parameterEncoding>
-        <automaticUpload>true</automaticUpload>
-    </parser>
-
-    <!-- These components belong to the Fulcrum-Security services -->
-    <securityService/>
-    <authenticator/>
-    <modelManager/>
-    <aclFactory/>
-     
-   <userManager>
-     <className>${package}.om.TurbineUser</className>
-        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
-    </userManager>
-    <groupManager>
-        <className>${package}.om.TurbineGroup</className>
-        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
-    </groupManager>
-    <roleManager>
-        <className>${package}.om.TurbineRole</className>
-        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
-    </roleManager>
-    <permissionManager>
-        <className>${package}.om.TurbinePermission</className>
-        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
-    </permissionManager>
-     <peerManager/>
-
-  
-
-</componentConfig>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
deleted file mode 100644
index 9187ccb..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/fulcrumRoleConfiguration.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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.
--->
-<!--
-	This configuration file for Avalon components is used for testing the Fulcrum Components with
-	Turbine.
--->
-
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent" />
-
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.impl.DefaultGlobalCacheService"/>
-
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>
-
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>
-
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>
-
-    <role
-        name="org.apache.fulcrum.pool.PoolService"
-        shorthand="pool"
-        default-class="org.apache.fulcrum.pool.DefaultPoolService"/>
-
-    <role
-        name="org.apache.fulcrum.parser.ParserService"
-        shorthand="parser"
-        default-class="org.apache.fulcrum.parser.DefaultParserService"/>
-
-    <role
-        name="org.apache.fulcrum.xslt.XSLTService"
-        shorthand="xslt"
-        default-class="org.apache.fulcrum.xslt.DefaultXSLTService"/>
-
-    <!-- These components belong to the Fulcrum-Security services -->
-    <role
-        name="org.apache.fulcrum.security.SecurityService"
-        shorthand="securityService"
-        default-class="org.apache.fulcrum.security.BaseSecurityService"/>
-
-<role
-        name="org.apache.fulcrum.security.UserManager"
-        shorthand="userManager"
-        early-init="true"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineUserManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.GroupManager"
-        shorthand="groupManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineGroupManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.RoleManager"
-        shorthand="roleManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineRoleManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.PermissionManager"
-        shorthand="permissionManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbinePermissionManagerImpl"/>
-        
-    <role
-        name="org.apache.fulcrum.security.torque.peer.PeerManager"
-        shorthand="peerManager"
-        default-class="org.apache.fulcrum.security.torque.peer.PeerManagerDefaultImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.ModelManager"
-        shorthand="modelManager"
-        default-class="org.apache.fulcrum.security.torque.turbine.TorqueTurbineModelManagerImpl"/>
-
-    <role
-        name="org.apache.fulcrum.security.authenticator.Authenticator"
-        shorthand="authenticator"
-        default-class="org.apache.fulcrum.security.authenticator.TextMatchAuthenticator"/>
-
-    <role
-        name="org.apache.fulcrum.security.model.ACLFactory"
-        shorthand="aclFactory"
-        default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
-
-   
-
-</role-list>
-
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties
deleted file mode 100644
index d5de6fc..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/CompleteTurbineResources.properties
+++ /dev/null
@@ -1,631 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# resource relative to context
-pipeline.default.descriptor = /src/test/conf/torque/turbine/turbine-classic-pipeline.xml
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = /src/test/resources/log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  S E R V E R   D A T A
-#
-# -------------------------------------------------------------------
-# Default ServerData that can be used if asked for before the first
-# request is made.
-#
-# Defaults:
-#
-# serverdata.default.serverName=
-# serverdata.default.serverPort=80
-# serverdata.default.serverScheme=http
-# serverdata.default.scriptName=
-# serverdata.default.contextPath=
-# -------------------------------------------------------------------
-
-serverdata.default.serverName=
-serverdata.default.serverPort=80
-serverdata.default.serverScheme=http
-serverdata.default.scriptName=
-serverdata.default.contextPath=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=org.apache.turbine.modules, org.apache.turbine.services.template.modules, org.apache.turbine.services.template.modules.screens.existing.dflt
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behavior of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specified
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-#
-action.eventsubmit.needsvalue = false
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-
-# Choose between the two available implementations of an Avalon container - ECM or YAAFI
-
-# services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineAvalonComponentService
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineYaafiComponentService
-
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
-# Default
-services.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-# services.SessionService.classname=org.apache.turbine.services.session.TurbineSessionService
-
-# Turn on the appropriate template service.
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.fulcrum.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-# services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.python.PythonScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-#
-# These are the mapper classes responsible for the lookup of Page, Screen, Layout and Navigation classes according
-# to the supplied template Name. They also map template names on the Layout and Screen file names to be used.
-#
-# services.TemplateService.mapper.page.class            = org.apache.turbine.services.template.mapper.DirectTemplateMapper
-# services.TemplateService.mapper.screen.class          = org.apache.turbine.services.template.mapper.ClassMapper
-# services.TemplateService.mapper.layout.class          = org.apache.turbine.services.template.mapper.ClassMapper
-# services.TemplateService.mapper.navigation.class      = org.apache.turbine.services.template.mapper.ClassMapper
-# services.TemplateService.mapper.layout.template.class = org.apache.turbine.services.template.mapper.LayoutTemplateMapper
-# services.TemplateService.mapper.screen.template.class = org.apache.turbine.services.template.mapper.ScreenTemplateMapper
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-services.PullService.tools.per.request.refresh=true
-
-# Path to the resources of the application tools, relative to the
-# application root
-services.PullService.tools.resources.dir=/conf/test/turbine-resources/
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UIManager would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the TemplatePageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# or "session" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-# This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-# tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-# tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-# This pull tool can be used to provide skins to an application
-tool.global.ui = org.apache.turbine.services.pull.tools.UITool
-
-# # These properties apply to both the old UIManager and the newer UIService
-tool.ui.dir.skin = /turbine-skins/
-tool.ui.dir.image = /turbine-images/
-tool.ui.skin = myskin
-tool.ui.css = skins.css
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not served by the container.
-#
-# The default behavior was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behavior if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = false
-tool.link.want.relative = false
-
-# Set the retriever factory for OMTool
-tool.om.factory=org.apache.turbine.om.MockRetrieverFactory
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-
-services.VelocityService.earlyInit = true
-services.VelocityService.template.extension = vm
-
-services.VelocityService.default.page            = VelocityPage
-services.VelocityService.default.screen          = VelocityScreen
-services.VelocityService.default.layout          = VelocityOnlyLayout
-services.VelocityService.default.navigation      = VelocityNavigation
-services.VelocityService.default.layout.template = Default.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path  = src/templates/test
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-# -------------------------------------------------------------------
-#
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page = JspPage
-services.JspService.default.screen=BaseJspScreen
-services.JspService.default.layout = JspLayout
-services.JspService.default.navigation=BaseJspNavigation
-services.JspService.default.error.screen = JspErrorScreen
-services.JspService.default.layout.template = Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the UserManager interface to
-# manage User objects. Default is the PassiveUserManager
-#
-# Override this setting if you want your User information stored
-# on a different medium (LDAP directory is a good example).
-#
-# Adjust this setting if you change the Setting of the SecurityService class (see above).
-
-# Default: org.apache.turbine.services.security.passive.PassiveUserManager
-# The MockUserManager is used in testing...
-services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the container.
-#
-services.AvalonComponentService.containerConfiguration = /src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
-
-# -------------------------------------------------------------------
-#
-#  S E S S I O N   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.SessionService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
deleted file mode 100644
index e0b4bf7..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/fulcrumContainerConfiguration.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
--->
-
-<fulcrum-yaafi>
-  <componentRoles>
-    <location>/src/test/conf/torque/fulcrumRoleConfiguration.xml</location>
-  </componentRoles>
-  <componentConfiguration>
-    <location>/src/test/conf/torque/fulcrumComponentConfiguration.xml</location>
-  </componentConfiguration>
-</fulcrum-yaafi>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml
deleted file mode 100644
index f8457b0..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/conf/torque/turbine/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<pipeline name="default">
-  <valves>
-    <valve>org.apache.turbine.pipeline.DetermineActionValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineTargetValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionTimeoutValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultLoginValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultSessionValidationValve</valve>
-    <valve>org.apache.turbine.pipeline.DefaultACLCreationValve</valve>
-    <valve>org.apache.turbine.pipeline.ExecutePageValve</valve>
-    <valve>org.apache.turbine.pipeline.CleanUpValve</valve>
-    <valve>org.apache.turbine.pipeline.DetermineRedirectRequestedValve</valve>
-  </valves>
-</pipeline>
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java
deleted file mode 100644
index 2ffc5de..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/AbstractFulcrumTorqueModelManagerTest.java
+++ /dev/null
@@ -1,488 +0,0 @@
-package ${package}.services.security;
-
-/*
- * 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 static org.junit.Assert.*;
-
-import java.util.Set;
-
-import org.apache.fulcrum.security.GroupManager;
-import org.apache.fulcrum.security.PermissionManager;
-import org.apache.fulcrum.security.RoleManager;
-import org.apache.fulcrum.security.SecurityService;
-import org.apache.fulcrum.security.UserManager;
-import org.apache.fulcrum.security.entity.ExtendedUser;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.entity.User;
-import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineGroup;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.PermissionSet;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.testcontainer.BaseUnit4Test;
-import org.apache.torque.ConstraintViolationException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Initialization of services in implementing tests
- * 
- * @author gkallidis
- * @version $Id$
- * 
- */
-public abstract class AbstractFulcrumTorqueModelManagerTest extends BaseUnit4Test
-{
-    protected Role role;
-
-    protected TurbineModelManager modelManager;
-
-    protected RoleManager roleManager;
-
-    protected GroupManager groupManager;
-
-    protected PermissionManager permissionManager;
-
-    protected UserManager userManager;
-
-    protected SecurityService securityService;
-    
-    boolean onDeleteCascade = true;
-    
-     // By default org.slf4j.LoggerFactory is optional in 4.0, but included in webapp 
-    Logger log = LoggerFactory.getLogger( getClass().getName() );
-
-    @Before
-    public void setUp() throws Exception
-    {
-        securityService  = (SecurityService) lookup(SecurityService.ROLE);
-        roleManager = securityService.getRoleManager();
-        userManager = securityService.getUserManager();
-        groupManager = securityService.getGroupManager();
-        permissionManager = securityService.getPermissionManager();
-        modelManager = (TurbineModelManager) securityService.getModelManager();
-    }
-
-    @Override
-    @After
-      public void tearDown()
-    {
-        modelManager = null;
-        securityService = null;
-    }
-
-    @Test
-    public void testGetGlobalGroup() throws Exception
-    {
-        Group global = modelManager.getGlobalGroup();
-        assertNotNull(global);
-        assertEquals(global.getName(), modelManager.getGlobalGroupName());
-    }
-    @Test
-    public void testGrantRolePermission() throws Exception
-    {
-        Permission permission = permissionManager.getPermissionInstance();
-        permission.setName("ANSWER_PHONE");
-        checkAndAddPermission( permission );
-        role = roleManager.getRoleInstance("RECEPTIONIST");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(1, permissions.size());
-        assertTrue(((TurbineRole) role).getPermissions().contains(permission));
-        
-        checkAndRevoke( permission );
-        deletePermission( permission );
-        deleteRole();
-    }
-
-    @Test
-    public void testRevokeRolePermission() throws Exception
-    {
-        Permission permission = securityService.getPermissionManager().getPermissionInstance();
-        permission.setName("ANSWER_FAX");
-        checkAndAddPermission( permission );
-        role = roleManager.getRoleInstance("SECRETARY");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(1, permissions.size());
-        checkAndRevoke( permission );
-        role = roleManager.getRoleById(role.getId());
-        permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(0, permissions.size());
-        assertFalse(((TurbineRole) role).getPermissions().contains(permission));
-        deletePermission( permission );
-        deleteRole();
-    }
-    @Test
-    public void testRevokeAllRole() throws Exception
-    {
-        Permission permission = securityService.getPermissionManager().getPermissionInstance();
-        Permission permission2 = securityService.getPermissionManager().getPermissionInstance();
-        permission.setName("SEND_SPAM");
-        permission2.setName("ANSWER_EMAIL");
-        checkAndAddPermission( permission );
-        checkAndAddPermission( permission2 );
-        role = roleManager.getRoleInstance("HELPER");
-        checkAndAddRole( role );
-        checkAndGrant( permission );
-        checkAndGrant( permission2);
-        role = roleManager.getRoleById(role.getId());
-        PermissionSet permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(2, permissions.size());
-        try {
-            modelManager.revokeAll(role);
-        } catch (Exception e) {
-            log.info( "Might fail " + e.getMessage() );
-        }
-        role = roleManager.getRoleById(role.getId());
-        permissions = ((TurbineRole) role).getPermissions();
-        assertEquals(0, permissions.size());
-        checkAndRevoke( permission );
-        checkAndRevoke( permission2 );
-        deletePermission( permission );
-        deletePermission( permission2 );
-        deleteRole();
-    }
-
-    @Test
-    public void testRevokeAllUser() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_REVOKEALLUSER_GROUP");
-        group = checkAndAddGroup( group );
-        
-        role = securityService.getRoleManager().getRoleInstance();
-        role.setName("TEST_REVOKEALLUSER_ROLE");
-        checkAndAddRole( role );
-
-        User user = userManager.getUserInstance("calvin");
-        user = checkAndAddUser( user, "calvin" );
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-
-        group = groupManager.getGroupById(group.getId());
-        Set<TurbineUserGroupRole> userGroupRoleSet = ((TurbineGroup) group).getUserGroupRoleSet();
-        assertEquals(1, userGroupRoleSet.size());
-        Set<TurbineUserGroupRole> userGroupRoleSet2 = ((TurbineGroup) group).getUserGroupRoleSet();
-        assertEquals(1, userGroupRoleSet2.size());
-
-        try {
-            modelManager.revokeAll(user);
-        } catch (Exception e) {
-            log.info( "error due to " + e.getMessage() );
-        }
-        group = groupManager.getGroupById(group.getId());
-        assertEquals(0, ((TurbineGroup) group).getUserGroupRoleSet().size());
-        role = securityService.getRoleManager().getRoleByName("TEST_REVOKEALLUSER_ROLE");
-
-        // assertFalse(((TurbineRole) role).getGroups().contains(group));
-        // cleanup ;
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-
-    }
-
-    @Test
-    public void testGrantUserGroupRole() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_GROUP");
-        group = checkAndAddGroup( group );
-        role = roleManager.getRoleInstance();
-        role.setName("TEST_Role");
-        checkAndAddRole( role );
-        User user = userManager.getUserInstance("Clint");
-       
-        user = checkAndAddUser( user, "clint" );
-
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        boolean ugrFound = false;
-        TurbineUserGroupRole ugrTest = null;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                ugrTest = ugr;
-                break;
-            }
-        }
-        assertTrue(ugrFound);
-        assertTrue(ugrTest.getGroup().equals(group));
-        assertTrue(ugrTest.getUser().equals(user));
-        
-        try {
-            modelManager.revoke(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-    }
-    @Test
-    public void testRevokeUserGroupRole() throws Exception
-    {
-        Group group = securityService.getGroupManager().getGroupInstance();
-        group.setName("TEST_REVOKE");
-        group = checkAndAddGroup( group );
-        User user = userManager.getUserInstance("Lima");
-        
-        user = checkAndAddUser( user, "pet" );
-        role = roleManager.getRoleInstance();
-        role.setName("TEST_REVOKE_ROLE");
-        checkAndAddRole( role );
-        try {
-            modelManager.grant(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        try {
-            modelManager.revoke(user, group, role);
-        } catch (DataBackendException e ){
-            if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                log.info( "error due to " + e.getCause().getMessage() );
-            } else {
-                log.info( "error due to " + e.getMessage() );
-            }
-        }
-        boolean ugrFound = false;
-        for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
-        {
-            if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
-            {
-                ugrFound = true;
-                break;
-            }
-        }
-        assertFalse(ugrFound);
-        deleteGroup( group );
-        deleteRole();
-        deleteUser( user );
-       
-    }
-
-    private void checkAndAddPermission( Permission permission )
-                    throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        // cleanup if using real db
-        Permission dbPermission;
-        if (securityService.getPermissionManager().checkExists( permission )) {
-            dbPermission =  securityService.getPermissionManager().getPermissionByName( permission.getName() );
-            // this might fail as it is referenced
-//            try {
-//                securityService.getPermissionManager().removePermission(  permission );
-//            } catch (Exception e) {
-//                System.out.println("removing permission failed" +  e.getMessage() );
-//            }
-        } else {
-            dbPermission =securityService.getPermissionManager().addPermission(permission);            
-        }
-        permission.setId( dbPermission.getId() );
-
-    }
-    
-    // adds user 
-    private User checkAndAddUser( User user, String password )
-        throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        if (user instanceof ExtendedUser) {
-            // set first last name which might be required  (cft. schema definition)
-            ((ExtendedUser)user).setFirstName( user.getName() );
-            ((ExtendedUser)user).setLastName(  user.getName() );
-        }
-        if (userManager.checkExists( user )) {
-            return userManager.getUser( user.getName() );
-            //userManager.removeUser( dbUser );
-        } else {
-            return userManager.addUser(user, password ); 
-        }
-    }
-    
-    private Group checkAndAddGroup( Group group )
-                    throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        // cleanup if using real db
-        if (securityService.getGroupManager().checkExists( group )) {
-            return securityService.getGroupManager().getGroupByName( group.getName() );
-            // might fail as it is referenced
-//            try {
-//                securityService.getGroupManager().removeGroup( group );
-//            }  catch (Exception e) {
-//                System.out.println("removing group failed" +  e.getMessage() );
-//            }
-        } else {
-            return securityService.getGroupManager().addGroup(group);
-        }
-    }
-
-
-    private void checkAndAddRole( Role role )
-        throws DataBackendException, UnknownEntityException, EntityExistsException
-    {
-        Role dbRole;
-        // cleanup if using real db
-        if (securityService.getRoleManager().checkExists( role )) {
-            dbRole = securityService.getRoleManager().getRoleByName( role.getName() );
-            // might fail as it is referenced
-//            try {
-//                securityService.getRoleManager().removeRole( role );
-//            } catch (Exception e) {
-//                System.out.println("removing role failed " +  e.getMessage() );
-//            }
-        } else {
-            dbRole = securityService.getRoleManager().addRole(role); 
-        }
-        if (this.role != null) {
-            this.role.setId( dbRole.getId() );
-        } else {
-            this.role =dbRole;
-        }
-    }
-    
-    private void checkAndGrant( Permission permission )
-                    throws UnknownEntityException
-    {
-        // short cut if duplicate entry use acl ...
-        try {
-            modelManager.grant(role, permission);
-        } catch (DataBackendException e) {
-            log.info( "Might be duplicate TODO ACL check" + e.getMessage() );
-        }
-    }
-    
-    private void checkAndRevoke( Permission permission )
-                    throws UnknownEntityException
-    {
-        // short cut if duplicate entry use acl ...
-        try {
-            modelManager.revoke(role, permission);
-        } catch (DataBackendException e) {
-            log.info( "Might be duplicate TODO ACL check" + e.getMessage() );
-        }
-    }
-    
-    private void deleteUser( User user )
-    {
-        if (onDeleteCascade) {
-            try {
-               userManager.removeUser( user );
-               log.info( "try to delete user " + user.getName() );
-             } catch (Exception e) {
-               log.error( "deleting user " + user.getName() + " failed. " + e.getMessage());
-               if (e.getCause() != null && e.getCause() instanceof ConstraintViolationException) {
-                    log.info( "error due to " + e.getCause().getMessage() );
-                } else {
-                    log.info( "error due to " + e.getMessage() );
-                }
-             }
-        } else {
-            log.info( "onDeleteCascade false, user " + user.getName() + " not deleted!");
-        }
-    }
-    
-    private void deleteRole()
-    {
-        log.info("deleting role ");
-        if (role != null) {
-            try
-            {
-                log.info("deleting role "+ role.getName());
-                roleManager.removeRole( role );
-                role =null;
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-
-    private void deletePermission(Permission permission)
-    {
-        log.info("deleting permission *");
-        if (role != null) {
-            try
-            {
-                log.info("deleting permission "+ permission.getName());
-                permissionManager.removePermission(  permission );
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-    
-    private void deleteGroup(Group group)
-    {
-        log.info("deleting group *");
-        if (role != null) {
-            try
-            {
-                log.info("deleting group "+ group.getName());
-                groupManager.removeGroup(  group );
-            }
-            catch ( Exception e )
-            {
-                // fail
-                log.error( e.getMessage(),e);
-            }
-        }
-    }
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java
deleted file mode 100644
index 67f5781..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/FulcrumTorqueDefaultModelManagerTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package ${package}.services.security;
-/*
- * 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 static org.junit.Assert.fail;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.Ignore;
-
-/**
- * Test Fulcrum Integration.
- *
- * Stub for further tests, relying on Fulcrum.
- *
- * @author gkallidis
- * @version $Id$
- */
-public class FulcrumTorqueDefaultModelManagerTest
-    extends AbstractFulcrumTorqueModelManagerTest
-{
-
-    @Override
-    @Before
-    public void setUp() throws Exception
-    {
-        try
-        {
-        	// just Fulcrum
-            setConfigurationFileName("src/test/conf/torque/fulcrumComponentConfiguration.xml");
-            setRoleFileName("src/test/conf/torque/fulcrumRoleConfiguration.xml");
-            super.setUp();
-    
-        }
-        catch (Exception e)
-        {
-            fail(e.toString());
-        }
-    }
-    
-    @Test
-    public void testDummy() {
-    	// all tests in abstract
-    }
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
deleted file mode 100644
index aa38651..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
+++ /dev/null
@@ -1,404 +0,0 @@
-package ${package}.services.security;
-
-/*
- * 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 static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import org.apache.fulcrum.security.ModelManager;
-import org.apache.fulcrum.security.entity.ExtendedUser;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Permission;
-import org.apache.fulcrum.security.entity.Role;
-import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
-import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
-import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
-import org.apache.fulcrum.security.util.DataBackendException;
-import org.apache.fulcrum.security.util.EntityExistsException;
-import org.apache.fulcrum.security.util.UnknownEntityException;
-import org.apache.fulcrum.testcontainer.BaseUnit4Test;
-import org.apache.torque.ConstraintViolationException;
-import org.apache.turbine.annotation.AnnotationProcessor;
-import org.apache.turbine.annotation.TurbineService;
-import org.apache.turbine.om.security.DefaultUserImpl;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.util.TurbineConfig;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Test that the SecurityService works properly by comparing behaviour of Turbine and Fulcrum security services using
- * Torque and Turbine user manager. Requires MySQL
- *
- * @author gkallidis
- * @version $Id$
- */
-
-public class TurbineSecurityServiceTest
-    extends BaseUnit4Test
-{
-
-    org.apache.fulcrum.security.SecurityService fulcrumSecurityService;
-    
-    @TurbineService
-    SecurityService turbineSecurityService;
-
-    static TurbineConfig tc;
-    
-    ModelManager modelManager;
-
-    boolean onDeleteCascade = true;
-
-    // By default org.slf4j.LoggerFactory is optional in 4.0, but included in webapp
-    Logger log = LoggerFactory.getLogger( getClass().getName() );
-
-    @BeforeClass
-    public static void init()
-        throws Exception
-    {
-        tc = new TurbineConfig( ".", "src/test/conf/torque/turbine/CompleteTurbineResources.properties" );
-        tc.initialize();
-    }
-
-    @Before
-    public void setUpBefore()
-        throws Exception
-    {
-        AnnotationProcessor.process(this);
-//      turbineSecurityService = (SecurityService) TurbineServices.getInstance().getService( SecurityService.SERVICE_NAME );
-        
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        fulcrumSecurityService = (org.apache.fulcrum.security.SecurityService) serviceManager.getService( org.apache.fulcrum.security.SecurityService.ROLE );
-        
-//      setConfigurationFileName("src/test/conf/torque/fulcrumComponentConfiguration.xml");
-//      setRoleFileName("src/test/conf/torque/fulcrumRoleConfiguration.xml");
-//      fulcrumSecurityService  = (org.apache.fulcrum.security.SecurityService) lookup(org.apache.fulcrum.security.SecurityService.ROLE);
-//      factory = (ACLFactory) lookup(ACLFactory.ROLE);
-//      modelManager  = (TurbineModelManager) lookup(TurbineModelManager.ROLE);
-    }
-
-    @Test
-    public void testAccountExists()
-        throws Exception
-    {
-        // User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl());
-        User user = turbineSecurityService.getUserInstance();
-        user.setAccessCounter( 5 );
-        assertFalse( turbineSecurityService.accountExists( user ) );
-        assertFalse( fulcrumSecurityService.getUserManager().checkExists( user ) );
-
-    }
-
-    @Test
-    // @Ignore(value="Turbine security service supported requires Turbine 4.0.1")
-    public void testCreateUser()
-        throws Exception
-    {
-        User user = turbineSecurityService.getUserInstance();
-        user.setAccessCounter( 5 );
-        user.setName( "ringo" );
-        // required not null constraint
-        ( (ExtendedUser) user ).setFirstName( user.getName() );
-        ( (ExtendedUser) user ).setLastName( user.getName() );
-        turbineSecurityService.addUser( user, "fakepasswrod" );
-        assertTrue( turbineSecurityService.accountExists( user ) );
-        assertTrue( fulcrumSecurityService.getUserManager().checkExists( user ) );
-        deleteUser( user );
-    }
-    
-    @Test
-    // @Ignore(value="Turbine security service supported requires Turbine 4.0.1")
-    public void testPermissionRole()
-    {
-        Role role = null;
-        Permission permission = null;
-        Permission permission2 = null;
-        try {
-            role = turbineSecurityService.getRoleInstance( "TEST_SECRETARY" );
-            role = turbineSecurityService.addRole( role );
-            permission = turbineSecurityService.getPermissionInstance("TEST_ANSWER_FAX");
-            permission = turbineSecurityService.addPermission( permission );
-            
-            permission2 = turbineSecurityService.getPermissionInstance("TEST_ANSWER_PHONE");
-            turbineSecurityService.addPermission( permission2 );
-            
-            turbineSecurityService.grant( role, permission );
-            turbineSecurityService.grant( role, permission2 );
-            
-            role = turbineSecurityService.getRoleById( (Integer) role.getId());
-            
-            turbineSecurityService.revokeAll( role );
-            turbineSecurityService.removeRole( role );
-            // not necessarily required
-            permission = turbineSecurityService.getPermissionById( (Integer) permission.getId() );
-            turbineSecurityService.removePermission( permission );
-            //permission2 = turbineSecurityService.getPermissionByName( permission2.getName() );
-            //turbineSecurityService.removePermission( permission2 );
-        } catch (EntityExistsException e) {
-            if (role != null)  deleteRole( role );
-            if (permission != null)  deletePermission( permission );
-            if (permission2 != null)  deletePermission( permission2 );
-        } catch (Exception e) {
-            log.error( "error" , e);
-            fail();
-        }
-    }
-
-    /**
-     * Tests Turbine and Fulcrum.
-     * 
-     * @throws Exception
-     */
-    @Test
-    // @Ignore(value="Turbine security service supported requires Turbine 4.0.1")
-    public void testGrantUserGroupRole()
-        throws Exception
-    {
-        Group group = null;
-        Role role = null;
-        User user = null;
-        TurbineUser fulcrumUser = null;
-        try
-        {
-            group = turbineSecurityService.getGroupInstance( "TEST_GROUP" );
-            group = turbineSecurityService.addGroup( group ); // assign here to delete later as
-            role = turbineSecurityService.getRoleInstance( "TEST_Role" );
-            role = turbineSecurityService.addRole( role );
-            // Turbine security service returns a wrapped instance: org.apache.turbine.om.security.DefaultUserImpl
-            // which implements org.apache.turbine.om.security.User
-            user = turbineSecurityService.getUserInstance( "Clint" );
-            // required not null constraint
-            ( (ExtendedUser) user ).setFirstName( user.getName() );
-            ( (ExtendedUser) user ).setLastName( user.getName() );
-
-            turbineSecurityService.addUser( user, "clint" );
-            turbineSecurityService.grant( user, group, role );
-
-            // existing role
-            Group existingGroup = turbineSecurityService.getGroupByName( "global" );
-            Role existingRole = turbineSecurityService.getRoleByName( "turbineuser" );
-            turbineSecurityService.grant( user, existingGroup, existingRole );
-            assertTrue( user.getUserGroupRoleSet().size() == 2 );
-            // get fresh db user
-            user = turbineSecurityService.getUser( "Clint" );
-            existingGroup = turbineSecurityService.getGroupByName( "turbine" );
-            existingRole = turbineSecurityService.getRoleByName( "turbineadmin" );
-            turbineSecurityService.grant( user, existingGroup, existingRole );
-            assertTrue( user.getUserGroupRoleSet().size() == 3 );
-
-            TurbineAccessControlList tacl = turbineSecurityService.<TurbineAccessControlList>getACL( user );
-            
-            assertTrue(tacl.hasRole( existingRole, existingGroup ) );
-            assertTrue(tacl.hasRole( "turbineuser" ));
-            
-            turbineSecurityService.revoke( user, existingGroup, existingRole );
-
-            //user = turbineSecurityService.getUser( "Clint" );
-            assertTrue( user.getUserGroupRoleSet().size() == 2 );
-            userGroupRoleCheck( group, role, user.getUserDelegate() );
-            // compare
-            // Fulcrum security service returns a raw
-            // org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl,
-            org.apache.fulcrum.security.UserManager userManager = fulcrumSecurityService.getUserManager();
-            fulcrumUser = userManager.getUserInstance( "Clint2" );
-            // required not null constraint
-            ( (ExtendedUser) fulcrumUser ).setFirstName( fulcrumUser.getName() );
-            ( (ExtendedUser) fulcrumUser ).setLastName( fulcrumUser.getName() );
-            userManager.addUser( fulcrumUser, "clint2" );
-            ( (TurbineModelManager) fulcrumSecurityService.getModelManager() ).grant( fulcrumUser, group, role );
-            userGroupRoleCheck( group, role, fulcrumUser );
-            
-            tacl = turbineSecurityService.getACL( user );
-            // revoked
-            assertFalse(tacl.hasRole( existingRole, existingGroup ) );
-;
-            
-            
-        } catch (EntityExistsException e) {
-          // cft. finally
-            fail();
-        } catch (Exception e) {
-            log.error( "error" , e);
-            fail();
-        }
-        finally
-        {
-            if ( fulcrumUser != null )
-                deleteUser( new DefaultUserImpl( fulcrumUser ) );
-            if ( user != null )
-                deleteUser( user );
-            // not needed as user remove revokes all :
-            // if (group != null && role != null && user != null) turbineSecurityService.revoke(user, group, role);
-            if ( group != null )
-                deleteGroup( group );
-            if ( role != null )
-                deleteRole( role );
-        }
-    }
-    
-    public void testCreatingTurbineACLandModel() throws Exception
-    {
-
-    }
-
-
-    /**
-     * Fulcrum contract check
-     *
-     * @param group Fulcrum interface
-     * @param role Fulcrum interface
-     * @param user Fulcrum interface
-     * @throws EntityExistsException
-     * @throws DataBackendException
-     * @throws UnknownEntityException
-     */
-    private void userGroupRoleCheck( Group group, Role role, TurbineUser user ) throws DataBackendException
-    {
-
-        boolean ugrFound = false;
-        TurbineUserGroupRole ugrTest = null;
-        for ( TurbineUserGroupRole ugr : ( (TurbineUser) user ).getUserGroupRoleSet() )
-        {
-            if ( ugr.getUser().equals( user ) && ugr.getGroup().equals( group ) && ugr.getRole().equals( role ) )
-            {
-                ugrFound = true;
-                ugrTest = ugr;
-                break;
-            }
-        }
-        assertTrue( ugrFound );
-        assertTrue( ugrTest.getGroup().equals( group ) );
-        assertTrue( ugrTest.getUser().equals( user ) );
-    }
-
-    @AfterClass
-    public static void setupAfter()
-    {
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        serviceManager.shutdownService( org.apache.turbine.services.security.SecurityService.SERVICE_NAME );
-        serviceManager.shutdownServices();
-        // TODO cleanup added users, roles, permissions ..
-    }
-    
-    private void deletePermission( Permission permission )
-    {
-        try
-        {
-            if (permission.getId() == null) {
-                permission = turbineSecurityService.getPermissionByName(permission.getName() );
-            }
-            log.info( "deleting permission " + permission.getName() );
-            turbineSecurityService.removePermission(  permission );
-            permission = null;// not needed
-        }
-        catch ( UnknownEntityException e )
-        {
-           // not found / existing
-            log.error( e.getMessage(), e );
-        }
-        catch (Exception e ) {
-            log.error( e.getMessage(), e );
-            fail();
-        }
-    }
-
-    private void deleteRole( Role role )
-    {
-        try
-        {
-            if (role.getId() == null) {
-                role = turbineSecurityService.getRoleByName(role.getName() );
-            }
-            log.info( "deleting role " + role.getName() );
-            turbineSecurityService.removeRole( role );
-            role = null;
-        }
-        catch ( UnknownEntityException e )
-        {
-           // not found / existing
-            log.error( e.getMessage(), e );
-        }
-        catch (Exception e ) {
-            log.error( e.getMessage(), e );
-            fail();
-        }
-    }
-
-    private void deleteGroup( Group group )
-    {
-        try
-        {
-            if (group.getId() == null) {
-                group = turbineSecurityService.getGroupByName(group.getName() );
-            }
-            log.info( "deleting group " + group.getName() );
-            
-            turbineSecurityService.removeGroup( group );
-            group = null;
-        }
-        catch ( UnknownEntityException e )
-        {
-           // not found / existing
-            log.error( e.getMessage(), e );
-        }
-        catch (Exception e ) {
-            log.error( e.getMessage(), e );
-            fail();
-        }
-    }
-
-    private void deleteUser( User user )
-    {
-        if ( onDeleteCascade )
-        {
-            try
-            {
-                // revokeAll is called before user delete
-                turbineSecurityService.removeUser( user );
-                log.info( "try to delete user " + user.getName() );
-            }
-            catch ( Exception e )
-            {
-                log.error( "deleting user " + user.getName() + " failed. " + e.getMessage() );
-                if ( e.getCause() != null && e.getCause() instanceof ConstraintViolationException )
-                {
-                    log.info( "error due to " + e.getCause().getMessage() );
-                }
-                else
-                {
-                    log.info( "error due to " + e.getMessage() );
-                }
-            }
-        }
-        else
-        {
-            log.info( "onDeleteCascade false, user " + user.getName() + " not deleted!" );
-        }
-    }
-
-}
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/resources/log4j.properties b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/resources/log4j.properties
deleted file mode 100644
index 651c914..0000000
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,89 +0,0 @@
-
-# Turbine logging configuration
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, app, console
-
-
-log4j.logger.${package} = DEBUG, app, console
-log4j.additivity.${package} = false
-
-#
-# Avalon log
-#
-log4j.logger.avalon = DEBUG, app, console
-log4j.additivity.avalon = false
-
-
-#
-# sql log
-# allows TRACE
-log4j.logger.org.apache.torque.util = DEBUG, sql, console
-log4j.additivity.org.apache.torque.util = false
-
-#
-# Torque log
-# allows TRACE
-log4j.logger.org.apache.torque = DEBUG, torque
-log4j.additivity.org.apache.torque = false
-
-# turbine log
-# allows TRACE
-log4j.logger.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-
-# #
-# Logfile definitions
-#
-
-# application.log
-log4j.appender.app = org.apache.log4j.RollingFileAppender
-log4j.appender.app.file = src/test/logs/application.log
-log4j.appender.app.MaxFileSize=5MB
-log4j.appender.app.MaxBackupIndex=5
-log4j.appender.app.layout = org.apache.log4j.PatternLayout
-log4j.appender.app.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.app.append = true
-
-#
-# sql.log
-#
-log4j.appender.sql = org.apache.log4j.RollingFileAppender
-log4j.appender.sql.file = src/test/logs/sql.log
-log4j.appender.sql.MaxFileSize=5MB
-log4j.appender.sql.MaxBackupIndex=5
-log4j.appender.sql.layout = org.apache.log4j.PatternLayout
-log4j.appender.sql.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.sql.append = true
-
-#
-# console
-#
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.PatternLayout
-log4j.appender.console.layout.conversionPattern = %d [%t] %-5p %C{1} - %m%n
-
-#
-# torque.log
-#
-log4j.appender.torque = org.apache.log4j.RollingFileAppender
-log4j.appender.torque.MaxFileSize=5MB
-log4j.appender.torque.MaxBackupIndex=5
-log4j.appender.torque.file = src/test/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.RollingFileAppender
-log4j.appender.turbine.MaxFileSize=5MB
-log4j.appender.turbine.MaxBackupIndex=5
-log4j.appender.turbine.file = src/test/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
\ No newline at end of file
diff --git a/trunk/turbine-webapp-4.0/src/test/resources/projects/first/archetype.properties b/trunk/turbine-webapp-4.0/src/test/resources/projects/first/archetype.properties
deleted file mode 100644
index 0a96356..0000000
--- a/trunk/turbine-webapp-4.0/src/test/resources/projects/first/archetype.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-groupId=org.apache.turbine.test
-artifactId=integrationtest
-version=1.0.0-SNAPSHOT
-package=org.apache.turbine.test.integrationtest
-turbine_app_name=My Turbine Web Application
-turbine_intake_file=intake.xml
-turbine_database_name=turbine
-turbine_database_adapter=auto
-turbine_database_jndipath=jdbc/turbine
-turbine_database_driver=com.mysql.jdbc.Driver
-turbine_database_url=jdbc:mysql://localhost:3306/
-turbine_database_user=db_user
-turbine_database_password=db_password
diff --git a/trunk/turbine-webapp-4.0/src/test/resources/projects/first/goal.txt b/trunk/turbine-webapp-4.0/src/test/resources/projects/first/goal.txt
deleted file mode 100644
index 597acc7..0000000
--- a/trunk/turbine-webapp-4.0/src/test/resources/projects/first/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-package
\ No newline at end of file
