Removed CXF Removed Struts Upgraded to Spring 4.1.7
Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/122a51b6 Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/122a51b6 Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/122a51b6 Branch: refs/heads/develop Commit: 122a51b69f0936775deb66a96ac879125364cae4 Parents: 0e0276b Author: Niclas Hedhman <[email protected]> Authored: Mon Jul 6 16:04:42 2015 +0300 Committer: Niclas Hedhman <[email protected]> Committed: Mon Jul 6 16:04:42 2015 +0300 ---------------------------------------------------------------------- LICENSE.txt | 31 - build.gradle | 2 - .../qi4j/bootstrap/layered/LayerAssembler.java | 1 + .../layered/LayeredApplicationAssembler.java | 5 + libraries.gradle | 8 +- libraries/NOTICE | 5 - .../Qi4jBootstrapBeanDefinitionParser.java | 2 +- libraries/struts2-codebehind/build.gradle | 33 - libraries/struts2-codebehind/dev-status.xml | 35 - .../src/docs/struts-codebehind.txt | 32 - .../Qi4jCodebehindPackageProvider.java | 741 ------------------- .../bootstrap/CodebehindAssembler.java | 36 - .../library/struts2/codebehind/package.html | 21 - .../src/main/resources/struts-plugin.xml | 32 - libraries/struts2-convention/build.gradle | 33 - libraries/struts2-convention/dev-status.xml | 35 - .../src/docs/struts-convention.txt | 32 - .../Qi4jPackageBasedActionConfigBuilder.java | 60 -- .../struts2/convention/Qi4jPackageProvider.java | 50 -- .../library/struts2/convention/package.html | 21 - .../src/main/resources/struts-plugin.xml | 28 - libraries/struts2-plugin/build.gradle | 35 - libraries/struts2-plugin/dev-status.xml | 35 - .../struts2-plugin/src/docs/struts-plugin.txt | 32 - .../library/struts2/ActionConfiguration.java | 74 -- .../org/qi4j/library/struts2/ActionService.java | 26 - .../org/qi4j/library/struts2/Constants.java | 22 - .../struts2/ConstraintViolationInterceptor.java | 231 ------ .../struts2/EntityCompositeConverter.java | 72 -- .../Qi4jApplicationBootstrapListener.java | 118 --- .../library/struts2/Qi4jFilterDispatcher.java | 120 --- .../qi4j/library/struts2/Qi4jObjectFactory.java | 241 ------ .../library/struts2/Qi4jPropertyAccessor.java | 232 ------ .../library/struts2/UnitOfWorkInterceptor.java | 93 --- .../bootstrap/Struts2PluginAssembler.java | 47 -- .../java/org/qi4j/library/struts2/package.html | 21 - .../qi4j/library/struts2/support/HasInput.java | 26 - .../struts2/support/ProvidesEntityOf.java | 28 - .../struts2/support/ProvidesEntityOfMixin.java | 77 -- .../library/struts2/support/StrutsAction.java | 26 - .../struts2/support/add/ProvidesAddingOf.java | 29 - .../support/add/ProvidesAddingOfMixin.java | 88 --- .../struts2/support/edit/ProvidesEditingOf.java | 31 - .../support/edit/ProvidesEditingOfMixin.java | 63 -- .../struts2/support/list/ProvidesListOf.java | 28 - .../support/list/ProvidesListOfMixin.java | 74 -- .../struts2/support/view/ProvidesViewOf.java | 27 - .../support/view/ProvidesViewOfMixin.java | 45 -- .../library/struts2/util/ClassNameFilters.java | 55 -- .../library/struts2/util/ClassNameMapper.java | 27 - .../qi4j/library/struts2/util/ClassNames.java | 86 --- .../struts2/util/ParameterizedTypes.java | 57 -- .../src/main/resources/struts-plugin.xml | 35 - .../main/resources/xwork-conversion.properties | 16 - .../struts2/util/ParameterizedTypesTest.java | 59 -- manual/src/docs/userguide/libraries.txt | 12 - manual/src/docs/website/samples.txt | 7 - samples/struts2Hello/build.gradle | 37 - .../org/qi4j/library/struts2/example/Item.java | 26 - .../library/struts2/example/JettyLauncher.java | 50 -- .../qi4j/library/struts2/example/Nameable.java | 27 - .../struts2/example/actions/AddItem.java | 39 - .../struts2/example/actions/EditItem.java | 41 - .../example/actions/HelloWorldAction.java | 72 -- .../struts2/example/actions/IndexAction.java | 65 -- .../struts2/example/actions/ListItems.java | 36 - .../example/converters/DateConverter.java | 59 -- .../listener/ExampleBootstrapListener.java | 79 -- .../src/main/resources/log4j.properties | 30 - .../src/main/resources/struts.properties | 34 - .../struts2Hello/src/main/resources/struts.xml | 56 -- .../src/main/webapp/WEB-INF/decorators.xml | 33 - .../src/main/webapp/WEB-INF/decorators/main.jsp | 91 --- .../src/main/webapp/WEB-INF/dwr.xml | 35 - .../src/main/webapp/WEB-INF/sitemesh.xml | 65 -- .../src/main/webapp/WEB-INF/web.xml | 85 --- samples/struts2Hello/src/main/webapp/index.jsp | 17 - .../src/main/webapp/jsp/addItem.jsp | 31 - .../src/main/webapp/jsp/editItem.jsp | 31 - .../src/main/webapp/jsp/helloWorld.jsp | 31 - .../struts2Hello/src/main/webapp/jsp/index.jsp | 33 - .../src/main/webapp/jsp/listItems.jsp | 36 - .../src/main/webapp/styles/forms.css | 161 ---- .../src/main/webapp/styles/layout-1col.css | 65 -- .../main/webapp/styles/layout-navleft-1col.css | 69 -- .../main/webapp/styles/layout-navleft-2col.css | 77 -- .../main/webapp/styles/layout-navtop-1col.css | 70 -- .../main/webapp/styles/layout-navtop-3col.css | 81 -- .../webapp/styles/layout-navtop-localleft.css | 74 -- .../webapp/styles/layout-navtop-subright.css | 74 -- .../src/main/webapp/styles/layout.css | 178 ----- .../src/main/webapp/styles/main.css | 33 - .../src/main/webapp/styles/nav-horizontal.css | 123 --- .../src/main/webapp/styles/nav-vertical.css | 127 ---- .../src/main/webapp/styles/tools.css | 112 --- .../src/main/webapp/styles/typo.css | 264 ------- samples/swing/build.gradle | 2 +- settings.gradle | 4 - tools/qidea/TODO | 1 - 99 files changed, 9 insertions(+), 6183 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/LICENSE.txt ---------------------------------------------------------------------- diff --git a/LICENSE.txt b/LICENSE.txt index d800464..09fd2eb 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -228,37 +228,6 @@ THE SOFTWARE. The Apache Zest Qi4j project bundles the following files under the BSD 3-Clauses License: -- A CSS Framework by Mike Stenhouse (http://www.donotremove.co.uk/) - Bundled in the Struts 2 sample. - Copyright (c) 2005, Mike Stenhouse of Content with Style. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- The W3C Software License ----------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/build.gradle ---------------------------------------------------------------------- diff --git a/build.gradle b/build.gradle index 2658c9c..7ff01a1 100644 --- a/build.gradle +++ b/build.gradle @@ -89,8 +89,6 @@ rat { 'manual/**/sh*.css', 'manual/**/sh*.js', // jQuery & plugins - MIT 'manual/**/jquery*.js', - // A CSS Framework by Mike Stenhouse - BSD 3-Clauses - 'samples/struts2Hello/**/styles/*.css', // W3C XML Schemas - W3C Software License 'samples/rental/src/main/resources/*.xsd', ] http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java ---------------------------------------------------------------------- diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java index 394eac3..c8a7b88 100644 --- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java +++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java @@ -18,6 +18,7 @@ */ package org.qi4j.bootstrap.layered; +import org.qi4j.bootstrap.ApplicationAssembly; import org.qi4j.bootstrap.AssemblyException; import org.qi4j.bootstrap.LayerAssembly; http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java ---------------------------------------------------------------------- diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java index 4682464..4c4cad7 100644 --- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java +++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java @@ -56,6 +56,11 @@ public abstract class LayeredApplicationAssembler instantiateApplication( qi4j, model ); } + public ApplicationAssembly assembly() + { + return assembly; + } + /** * This method is called from the constructor to instantiate the Qi4j application from the application model. * http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries.gradle ---------------------------------------------------------------------- diff --git a/libraries.gradle b/libraries.gradle index 7a779f5..a673af5 100644 --- a/libraries.gradle +++ b/libraries.gradle @@ -70,10 +70,9 @@ def skedVersion = '2.1' def sleepycatVersion = '5.0.73' def slf4jVersion = '1.7.7' def solrVersion = "1.4.1" // 4.8.1 Fails to compile! -def springVersion = '3.2.6.RELEASE' // 4.0.5.RELEASE Fails to compile! +def springVersion = '4.1.7.RELEASE' // 4.0.5.RELEASE Fails to compile! def spymemcachedVersion = '2.11.3' def sqliteVersion = '3.7.2' -def strutsVersion = '2.3.15.3' // 2.3.16.3 Fails to compile! def velocityVersion = '1.7' def voldemortVersion = '1.3.0' def wicketVersion = '1.5.8' // 6.15.0 Samples fails to compile! @@ -185,11 +184,6 @@ rootProject.ext { jetty_client: "org.eclipse.jetty:jetty-client:$jettyVersion", jetty_xml: "org.eclipse.jetty:jetty-xml:$jettyVersion", - // Struts - struts_codebehind: "org.apache.struts:struts2-codebehind-plugin:$strutsVersion", - struts_convention: "org.apache.struts:struts2-convention-plugin:$strutsVersion", - struts_core: "org.apache.struts:struts2-core:$strutsVersion", - // Scripting groovy: "org.codehaus.groovy:groovy-all:$groovyVersion", http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/NOTICE ---------------------------------------------------------------------- diff --git a/libraries/NOTICE b/libraries/NOTICE index 85ed1e0..cafd1d4 100644 --- a/libraries/NOTICE +++ b/libraries/NOTICE @@ -108,9 +108,4 @@ This module uses Spring Framework, software developed at http://www.springsource.org, under Apache License 2.0. See LICENSE. -libraries/struts-* NOTICE -This module uses Apache Struts, developed at Apache Software Foundation -(http://struts.apache.org), under Apache License 2.0. See LICENSE. - - END OF NOTICE \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java ---------------------------------------------------------------------- diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java index aa68dc1..14b1389 100644 --- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java +++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java @@ -57,7 +57,7 @@ public final class Qi4jBootstrapBeanDefinitionParser Class<?> bootstrapClass; try { - bootstrapClass = forName( bootstrapClassString ); + bootstrapClass = forName( bootstrapClassString, getClass().getClassLoader() ); } catch ( ClassNotFoundException e ) { readerContext.error( "Qi4j bootstrap class [" + bootstrapClassString + "] is not found.", anElement ); http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/build.gradle ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/build.gradle b/libraries/struts2-codebehind/build.gradle deleted file mode 100644 index 014c551..0000000 --- a/libraries/struts2-codebehind/build.gradle +++ /dev/null @@ -1,33 +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. - */ - -description = "Qi4j Struts Library allows integration of Qi4j into Struts2 applications." - -jar { manifest { name = "Qi4j Library - Struts2 - Code Behind"}} - -dependencies { - compile(project(":org.qi4j.core:org.qi4j.core.bootstrap")) - compile( project( ':org.qi4j.libraries:org.qi4j.library.struts2-plugin' ) ) - compile(libraries.struts_codebehind) - - testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport")) - - testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime")) - testRuntime(libraries.logback) -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/dev-status.xml ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/dev-status.xml b/libraries/struts2-codebehind/dev-status.xml deleted file mode 100644 index 1a18f48..0000000 --- a/libraries/struts2-codebehind/dev-status.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. ---> -<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1 - http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd"> - <status> - <!--none,early,beta,stable,mature--> - <codebase>beta</codebase> - - <!-- none, brief, good, complete --> - <documentation>none</documentation> - - <!-- none, some, good, complete --> - <unittests>some</unittests> - </status> - <licenses> - <license>ALv2</license> - </licenses> -</module> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/src/docs/struts-codebehind.txt ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/src/docs/struts-codebehind.txt b/libraries/struts2-codebehind/src/docs/struts-codebehind.txt deleted file mode 100644 index 46c3560..0000000 --- a/libraries/struts2-codebehind/src/docs/struts-codebehind.txt +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////// - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -/////////////////////////////////////////////////////////////// - -[[library-struts-codebehind, Struts Code Behind Library]] -= Struts - Code Behind = - -[devstatus] --------------- -source=libraries/struts2-codebehind/dev-status.xml --------------- - -Struts Code Behing Library - -NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>. - -include::../../build/docs/buildinfo/artifact.txt[] http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java b/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java deleted file mode 100644 index 72e77db..0000000 --- a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java +++ /dev/null @@ -1,741 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2.codebehind; - -import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.config.PackageProvider; -import com.opensymphony.xwork2.config.entities.ActionConfig; -import com.opensymphony.xwork2.config.entities.PackageConfig; -import com.opensymphony.xwork2.config.entities.ResultConfig; -import com.opensymphony.xwork2.config.entities.ResultTypeConfig; -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.ClassLoaderUtil; -import com.opensymphony.xwork2.util.logging.Logger; -import com.opensymphony.xwork2.util.logging.LoggerFactory; -import java.lang.annotation.Annotation; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; -import javax.servlet.ServletContext; -import org.apache.struts2.config.*; -import org.qi4j.library.struts2.ActionConfiguration; - -/** - * This is inspired by the ClasspathPackageProvider from the struts2-codebehind-plugin. Most of the code - * is directly copied from the 2.1.1 version of the plugin but modified to only look for the @Action annotation - * and to accept interfaces as well as classes. - */ -public class Qi4jCodebehindPackageProvider - implements PackageProvider -{ - - private ActionConfiguration actionConfiguration; - - /** - * The default page prefix (or "path"). - * Some applications may place pages under "/WEB-INF" as an extreme security precaution. - */ - protected static final String DEFAULT_PAGE_PREFIX = "struts.configuration.classpath.defaultPagePrefix"; - - /** - * The default page prefix (none). - */ - private String defaultPagePrefix = ""; - - /** - * The default page extension, to use in place of ".jsp". - */ - protected static final String DEFAULT_PAGE_EXTENSION = "struts.configuration.classpath.defaultPageExtension"; - - /** - * The defacto default page extension, usually associated with JavaServer Pages. - */ - private String defaultPageExtension = ".jsp"; - - /** - * A setting to indicate a custom default parent package, - * to use in place of "struts-default". - */ - protected static final String DEFAULT_PARENT_PACKAGE = "struts.configuration.classpath.defaultParentPackage"; - - /** - * Name of the framework's default configuration package, - * that application configuration packages automatically inherit. - */ - private String defaultParentPackage = "struts-default"; - - /** - * The default page prefix (or "path"). - * Some applications may place pages under "/WEB-INF" as an extreme security precaution. - */ - protected static final String FORCE_LOWER_CASE = "struts.configuration.classpath.forceLowerCase"; - - /** - * Whether to use a lowercase letter as the initial letter of an action. - * If false, actions will retain the initial uppercase letter from the Action class. - * (<code>view.action</code> (true) versus <code>View.action</code> (false)). - */ - private boolean forceLowerCase = true; - - /** - * Default suffix that can be used to indicate POJO "Action" classes. - */ - private static final String ACTION = "Action"; - - /** - * Helper class to scan class path for server pages. - */ - private PageLocator pageLocator = new ClasspathPageLocator(); - - /** - * Flag to indicate the packages have been loaded. - * - * @see #loadPackages - * @see #needsReload - */ - private boolean initialized = false; - - private PackageLoader packageLoader; - - /** - * Logging instance for this class. - */ - private static final Logger LOG = LoggerFactory.getLogger( Qi4jCodebehindPackageProvider.class ); - - /** - * The XWork Configuration for this application. - * - * @see #init - */ - private Configuration configuration; - - private String actionPackages; - - private ServletContext servletContext; - - /** - * PageLocator defines a locate method that can be used to discover server pages. - */ - public static interface PageLocator - { - public URL locate( String path ); - } - - /** - * ClasspathPathLocator searches the classpath for server pages. - */ - public static class ClasspathPageLocator - implements PageLocator - { - @Override - public URL locate( String path ) - { - return ClassLoaderUtil.getResource( path, getClass() ); - } - } - - @Inject( "actionPackages" ) - public void setActionPackages( String packages ) - { - this.actionPackages = packages; - } - - @Inject - public void setServletContext( ServletContext ctx ) - { - this.servletContext = ctx; - } - - @Inject - public void setActionConfiguration( ActionConfiguration actionConfiguration ) - { - this.actionConfiguration = actionConfiguration; - } - - /** - * Register a default parent package for the actions. - * - * @param defaultParentPackage the new defaultParentPackage - */ - @Inject( value = DEFAULT_PARENT_PACKAGE, required = false ) - public void setDefaultParentPackage( String defaultParentPackage ) - { - this.defaultParentPackage = defaultParentPackage; - } - - /** - * Register a default page extension to use when locating pages. - * - * @param defaultPageExtension the new defaultPageExtension - */ - @Inject( value = DEFAULT_PAGE_EXTENSION, required = false ) - public void setDefaultPageExtension( String defaultPageExtension ) - { - this.defaultPageExtension = defaultPageExtension; - } - - /** - * Reigster a default page prefix to use when locating pages. - * - * @param defaultPagePrefix the defaultPagePrefix to set - */ - @Inject( value = DEFAULT_PAGE_PREFIX, required = false ) - public void setDefaultPagePrefix( String defaultPagePrefix ) - { - this.defaultPagePrefix = defaultPagePrefix; - } - - /** - * Whether to use a lowercase letter as the initial letter of an action. - * - * @param force If false, actions will retain the initial uppercase letter from the Action class. - * (<code>view.action</code> (true) versus <code>View.action</code> (false)). - */ - @Inject( value = FORCE_LOWER_CASE, required = false ) - public void setForceLowerCase( String force ) - { - this.forceLowerCase = "true".equals( force ); - } - - /** - * Register a PageLocation to use to scan for server pages. - * - * @param locator - */ - public void setPageLocator( PageLocator locator ) - { - this.pageLocator = locator; - } - - @Override - public void init( Configuration configuration ) - throws ConfigurationException - { - this.configuration = configuration; - } - - @Override - public boolean needsReload() - { - return !initialized; - } - - /** - * Clears and loads the list of packages registered at construction. - * - * @throws ConfigurationException - */ - @Override - public void loadPackages() - throws ConfigurationException - { - packageLoader = new PackageLoader(); - String[] names = actionPackages.split( "\\s*[,]\\s*" ); - // Initialize the classloader scanner with the configured packages - if( names.length > 0 ) - { - setPageLocator( new ServletContextPageLocator( servletContext ) ); - } - loadPackages( names ); - initialized = true; - } - - protected void loadPackages( String[] pkgs ) - throws ConfigurationException - { - for( Class cls : actionConfiguration.getClasses() ) - { - processActionClass( cls, pkgs ); - } - - for( PackageConfig config : packageLoader.createPackageConfigs() ) - { - configuration.addPackageConfig( config.getName(), config ); - } - } - - /** - * Create a default action mapping for a class instance. - * - * The namespace annotation is honored, if found, otherwise - * the Java package is converted into the namespace - * by changing the dots (".") to slashes ("/"). - * - * @param cls Action or POJO instance to process - * @param pkgs List of packages that were scanned for Actions - */ - protected void processActionClass( Class<?> cls, String[] pkgs ) - { - String name = cls.getName(); - String actionPackage = cls.getPackage().getName(); - String actionNamespace = null; - String actionName = null; - - org.apache.struts2.config.Action actionAnn = - (org.apache.struts2.config.Action) cls.getAnnotation( org.apache.struts2.config.Action.class ); - if( actionAnn != null ) - { - actionName = actionAnn.name(); - if( actionAnn.namespace().equals( org.apache.struts2.config.Action.DEFAULT_NAMESPACE ) ) - { - actionNamespace = ""; - } - else - { - actionNamespace = actionAnn.namespace(); - } - } - else - { - for( String pkg : pkgs ) - { - if( name.startsWith( pkg ) ) - { - if( LOG.isDebugEnabled() ) - { - LOG.debug( "ClasspathPackageProvider: Processing class " + name ); - } - name = name.substring( pkg.length() + 1 ); - - actionNamespace = ""; - actionName = name; - int pos = name.lastIndexOf( '.' ); - if( pos > -1 ) - { - actionNamespace = "/" + name.substring( 0, pos ).replace( '.', '/' ); - actionName = name.substring( pos + 1 ); - } - break; - } - } - // Truncate Action suffix if found - if( actionName.endsWith( getClassSuffix() ) ) - { - actionName = actionName.substring( 0, actionName.length() - getClassSuffix().length() ); - } - - // Force initial letter of action to lowercase, if desired - if( ( forceLowerCase ) && ( actionName.length() > 1 ) ) - { - int lowerPos = actionName.lastIndexOf( '/' ) + 1; - StringBuilder sb = new StringBuilder(); - sb.append( actionName.substring( 0, lowerPos ) ); - sb.append( Character.toLowerCase( actionName.charAt( lowerPos ) ) ); - sb.append( actionName.substring( lowerPos + 1 ) ); - actionName = sb.toString(); - } - } - - PackageConfig.Builder pkgConfig = loadPackageConfig( actionNamespace, actionPackage, cls ); - - // In case the package changed due to namespace annotation processing - if( !actionPackage.equals( pkgConfig.getName() ) ) - { - actionPackage = pkgConfig.getName(); - } - - Annotation annotation = cls.getAnnotation( ParentPackage.class ); - if( annotation != null ) - { - String parent = ( (ParentPackage) annotation ).value()[0]; - PackageConfig parentPkg = configuration.getPackageConfig( parent ); - if( parentPkg == null ) - { - throw new ConfigurationException( "ClasspathPackageProvider: Unable to locate parent package " + parent, annotation ); - } - pkgConfig.addParent( parentPkg ); - - if( !isNotEmpty( pkgConfig.getNamespace() ) && isNotEmpty( parentPkg.getNamespace() ) ) - { - pkgConfig.namespace( parentPkg.getNamespace() ); - } - } - - ResultTypeConfig defaultResultType = packageLoader.getDefaultResultType( pkgConfig ); - ActionConfig actionConfig = new ActionConfig.Builder( actionPackage, actionName, cls.getName() ) - .addResultConfigs( new ResultMap<String, ResultConfig>( cls, actionName, defaultResultType ) ) - .build(); - pkgConfig.addActionConfig( actionName, actionConfig ); - } - - protected String getClassSuffix() - { - return ACTION; - } - - /** - * Finds or creates the package configuration for an Action class. - * - * The namespace annotation is honored, if found, - * and the namespace is checked for a parent configuration. - * - * @param actionNamespace The configuration namespace - * @param actionPackage The Java package containing our Action classes - * @param actionClass The Action class instance - * - * @return PackageConfig object for the Action class - */ - protected PackageConfig.Builder loadPackageConfig( String actionNamespace, String actionPackage, Class actionClass ) - { - PackageConfig.Builder parent = null; - - // Check for the @Namespace annotation - if( actionClass != null ) - { - Namespace ns = (Namespace) actionClass.getAnnotation( Namespace.class ); - if( ns != null ) - { - parent = loadPackageConfig( actionNamespace, actionPackage, null ); - actionNamespace = ns.value(); - actionPackage = actionClass.getName(); - - // See if the namespace has been overridden by the @Action annotation - } - else - { - org.apache.struts2.config.Action actionAnn = - (org.apache.struts2.config.Action) actionClass.getAnnotation( org.apache.struts2.config.Action.class ); - if( actionAnn != null && !actionAnn.DEFAULT_NAMESPACE.equals( actionAnn.namespace() ) ) - { - // we pass null as the namespace in case the parent package hasn't been loaded yet - parent = loadPackageConfig( null, actionPackage, null ); - actionPackage = actionClass.getName(); - } - } - } - - PackageConfig.Builder pkgConfig = packageLoader.getPackage( actionPackage ); - if( pkgConfig == null ) - { - pkgConfig = new PackageConfig.Builder( actionPackage ); - - pkgConfig.namespace( actionNamespace ); - if( parent == null ) - { - PackageConfig cfg = configuration.getPackageConfig( defaultParentPackage ); - if( cfg != null ) - { - pkgConfig.addParent( cfg ); - } - else - { - throw new ConfigurationException( "ClasspathPackageProvider: Unable to locate default parent package: " + - defaultParentPackage ); - } - } - packageLoader.registerPackage( pkgConfig ); - - // if the parent package was first created by a child, ensure the namespace is correct - } - else if( pkgConfig.getNamespace() == null ) - { - pkgConfig.namespace( actionNamespace ); - } - - if( parent != null ) - { - packageLoader.registerChildToParent( pkgConfig, parent ); - } - - if( LOG.isDebugEnabled() ) - { - LOG.debug( "class:" + actionClass + " parent:" + parent + " current:" + ( pkgConfig != null ? pkgConfig.getName() : "" ) ); - } - return pkgConfig; - } - - /** - * Creates ResultConfig objects from result annotations, - * and if a result isn't found, creates it on the fly. - */ - class ResultMap<K, V> - extends HashMap<K, V> - { - private Class actionClass; - private String actionName; - private ResultTypeConfig defaultResultType; - - public ResultMap( Class actionClass, String actionName, ResultTypeConfig defaultResultType ) - { - this.actionClass = actionClass; - this.actionName = actionName; - this.defaultResultType = defaultResultType; - - // check if any annotations are around - buildFromAnnotations( actionClass ); - } - - /** - * Recursively finds annotations from all parent classes and interfaces. - * - * @param actionClass - */ - private void buildFromAnnotations( Class actionClass ) - { - if( actionClass == null || actionClass.getName().equals( Object.class.getName() ) ) - { - return; - } - - //noinspection unchecked - Results results = (Results) actionClass.getAnnotation( Results.class ); - if( results != null ) - { - // first check here... - for( int i = 0; i < results.value().length; i++ ) - { - Result result = results.value()[ i ]; - ResultConfig config = createResultConfig( result ); - if( !containsKey( (K) config.getName() ) ) - { - put( (K) config.getName(), (V) config ); - } - } - } - - // what about a single Result annotation? - Result result = (Result) actionClass.getAnnotation( Result.class ); - if( result != null ) - { - ResultConfig config = createResultConfig( result ); - if( !containsKey( (K) config.getName() ) ) - { - put( (K) config.getName(), (V) config ); - } - } - - buildFromAnnotations( actionClass.getSuperclass() ); - for( Class implementedInterface : actionClass.getInterfaces() ) - { - buildFromAnnotations( implementedInterface ); - } - } - - /** - * Extracts result name and value and calls {@link #createResultConfig}. - * - * @param result Result annotation reference representing result type to create - * - * @return New or cached ResultConfig object for result - */ - protected ResultConfig createResultConfig( Result result ) - { - Class<? extends Object> cls = result.type(); - if( cls == NullResult.class ) - { - cls = null; - } - return createResultConfig( result.name(), cls, result.value(), createParameterMap( result.params() ) ); - } - - protected Map<String, String> createParameterMap( String[] parms ) - { - Map<String, String> map = new HashMap<String, String>(); - int subtract = parms.length % 2; - if( subtract != 0 ) - { - LOG.warn( "Odd number of result parameters key/values specified. The final one will be ignored." ); - } - for( int i = 0; i < parms.length - subtract; i++ ) - { - String key = parms[ i++ ]; - String value = parms[ i ]; - map.put( key, value ); - if( LOG.isDebugEnabled() ) - { - LOG.debug( "Adding parmeter[" + key + ":" + value + "] to result." ); - } - } - return map; - } - - /** - * Creates a default ResultConfig, - * using either the resultClass or the default ResultType for configuration package - * associated this ResultMap class. - * - * @param key The result type name - * @param resultClass The class for the result type - * @param location Path to the resource represented by this type - * - * @return A ResultConfig for key mapped to location - */ - private ResultConfig createResultConfig( Object key, Class<? extends Object> resultClass, - String location, - Map<? extends Object, ? extends Object> configParams - ) - { - if( resultClass == null ) - { - configParams = defaultResultType.getParams(); - String className = defaultResultType.getClassName(); - try - { - resultClass = ClassLoaderUtil.loadClass( className, getClass() ); - } - catch( ClassNotFoundException ex ) - { - throw new ConfigurationException( "ClasspathPackageProvider: Unable to locate result class " + className, actionClass ); - } - } - - String defaultParam; - try - { - defaultParam = (String) resultClass.getField( "DEFAULT_PARAM" ).get( null ); - } - catch( Exception e ) - { - // not sure why this happened, but let's just use a sensible choice - defaultParam = "location"; - } - - HashMap params = new HashMap(); - if( configParams != null ) - { - params.putAll( configParams ); - } - - params.put( defaultParam, location ); - return new ResultConfig.Builder( (String) key, resultClass.getName() ).addParams( params ).build(); - } - } - - /** - * Search classpath for a page. - */ - private final class ServletContextPageLocator - implements PageLocator - { - private final ServletContext context; - private ClasspathPageLocator classpathPageLocator = new ClasspathPageLocator(); - - private ServletContextPageLocator( ServletContext context ) - { - this.context = context; - } - - @Override - public URL locate( String path ) - { - URL url = null; - try - { - url = context.getResource( path ); - if( url == null ) - { - url = classpathPageLocator.locate( path ); - } - } - catch( MalformedURLException e ) - { - if( LOG.isDebugEnabled() ) - { - LOG.debug( "Unable to resolve path " + path + " against the servlet context" ); - } - } - return url; - } - } - - private static class PackageLoader - { - - /** - * The package configurations for scanned Actions. - */ - private Map<String, PackageConfig.Builder> packageConfigBuilders = new HashMap<String, PackageConfig.Builder>(); - - private Map<PackageConfig.Builder, PackageConfig.Builder> childToParent = new HashMap<PackageConfig.Builder, PackageConfig.Builder>(); - - public PackageConfig.Builder getPackage( String name ) - { - return packageConfigBuilders.get( name ); - } - - public void registerChildToParent( PackageConfig.Builder child, PackageConfig.Builder parent ) - { - childToParent.put( child, parent ); - } - - public void registerPackage( PackageConfig.Builder builder ) - { - packageConfigBuilders.put( builder.getName(), builder ); - } - - public Collection<PackageConfig> createPackageConfigs() - { - Map<String, PackageConfig> configs = new HashMap<String, PackageConfig>(); - - Set<PackageConfig.Builder> builders; - while( ( builders = findPackagesWithNoParents() ).size() > 0 ) - { - for( PackageConfig.Builder parent : builders ) - { - PackageConfig config = parent.build(); - configs.put( config.getName(), config ); - packageConfigBuilders.remove( config.getName() ); - - for( Iterator<Map.Entry<PackageConfig.Builder, PackageConfig.Builder>> i = childToParent.entrySet() - .iterator(); i.hasNext(); ) - { - Map.Entry<PackageConfig.Builder, PackageConfig.Builder> entry = i.next(); - if( entry.getValue() == parent ) - { - entry.getKey().addParent( config ); - i.remove(); - } - } - } - } - return configs.values(); - } - - Set<PackageConfig.Builder> findPackagesWithNoParents() - { - Set<PackageConfig.Builder> builders = new HashSet<PackageConfig.Builder>(); - for( PackageConfig.Builder child : packageConfigBuilders.values() ) - { - if( !childToParent.containsKey( child ) ) - { - builders.add( child ); - } - } - return builders; - } - - public ResultTypeConfig getDefaultResultType( PackageConfig.Builder pkgConfig ) - { - PackageConfig.Builder parent; - PackageConfig.Builder current = pkgConfig; - - while( ( parent = childToParent.get( current ) ) != null ) - { - current = parent; - } - return current.getResultType( current.getFullDefaultResultType() ); - } - } - - public static boolean isNotEmpty( String text ) - { - return ( text != null ) && !"".equals( text ); - } -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java b/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java deleted file mode 100644 index ce9b239..0000000 --- a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2.codebehind.bootstrap; - -import org.qi4j.bootstrap.Assembler; -import org.qi4j.bootstrap.AssemblyException; -import org.qi4j.bootstrap.ModuleAssembly; -import org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider; - -public class CodebehindAssembler - implements Assembler -{ - - @Override - public void assemble( ModuleAssembly aModule ) - throws AssemblyException - { - aModule.objects( Qi4jCodebehindPackageProvider.class ); - } -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html b/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html deleted file mode 100644 index c313668..0000000 --- a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html +++ /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. ---> -<html> - <body> - <h2>Struts 2 CodeBehind Integration.</h2> - </body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml ---------------------------------------------------------------------- diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml deleted file mode 100644 index ccf2c42..0000000 --- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!-- -/* - * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT 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 struts PUBLIC - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" - "http://struts.apache.org/dtds/struts-2.0.dtd"> - -<struts> - <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j" - class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/> -</struts> http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/build.gradle ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/build.gradle b/libraries/struts2-convention/build.gradle deleted file mode 100644 index 04a1f42..0000000 --- a/libraries/struts2-convention/build.gradle +++ /dev/null @@ -1,33 +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. - */ - -description = "Qi4j Struts Library allows integration of Qi4j into Struts2 applications." - -jar { manifest { name = "Qi4j Library - Struts2 - Convention" }} - -dependencies { - compile(project(":org.qi4j.core:org.qi4j.core.bootstrap")) - compile( project( ':org.qi4j.libraries:org.qi4j.library.struts2-plugin' ) ) - compile(libraries.struts_convention) - - testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport")) - - testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime")) - testRuntime(libraries.logback) -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/dev-status.xml ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/dev-status.xml b/libraries/struts2-convention/dev-status.xml deleted file mode 100644 index 1a18f48..0000000 --- a/libraries/struts2-convention/dev-status.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. ---> -<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1 - http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd"> - <status> - <!--none,early,beta,stable,mature--> - <codebase>beta</codebase> - - <!-- none, brief, good, complete --> - <documentation>none</documentation> - - <!-- none, some, good, complete --> - <unittests>some</unittests> - </status> - <licenses> - <license>ALv2</license> - </licenses> -</module> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/src/docs/struts-convention.txt ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/src/docs/struts-convention.txt b/libraries/struts2-convention/src/docs/struts-convention.txt deleted file mode 100644 index 2bb442b..0000000 --- a/libraries/struts2-convention/src/docs/struts-convention.txt +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////// - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -/////////////////////////////////////////////////////////////// - -[[library-struts-convention, Struts Convention Library]] -= Struts - Convention = - -[devstatus] --------------- -source=libraries/struts2-convention/dev-status.xml --------------- - -Struts Convention Library - -NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>. - -include::../../build/docs/buildinfo/artifact.txt[] http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java b/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java deleted file mode 100644 index 4820682..0000000 --- a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2.convention; - -import com.opensymphony.xwork2.ObjectFactory; -import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.inject.Container; -import com.opensymphony.xwork2.inject.Inject; -import java.lang.reflect.Modifier; -import org.apache.struts2.convention.PackageBasedActionConfigBuilder; -import org.qi4j.library.struts2.ActionConfiguration; - -public class Qi4jPackageBasedActionConfigBuilder - extends PackageBasedActionConfigBuilder -{ - - private final ActionConfiguration actionConfiguration; - - @Inject - public Qi4jPackageBasedActionConfigBuilder( Configuration configuration, Container container, - ObjectFactory objectFactory, - @Inject( "struts.convention.redirect.to.slash" ) String redirectToSlash, - @Inject( "struts.convention.default.parent.package" ) String defaultParentPackage, - ActionConfiguration actionConfiguration - ) - { - super( configuration, container, objectFactory, redirectToSlash, defaultParentPackage ); - this.actionConfiguration = actionConfiguration; - } - - @Override - public void buildActionConfigs() - { - buildConfiguration( actionConfiguration.getClasses() ); - } - - @Override - protected boolean cannotInstantiate( Class<?> actionClass ) - { - return actionClass.isAnnotation() - || actionClass.isEnum() - || ( !actionClass.isInterface() && ( actionClass.getModifiers() & Modifier.ABSTRACT ) != 0 ); - } -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java b/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java deleted file mode 100644 index fa8f515..0000000 --- a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2.convention; - -import com.opensymphony.xwork2.config.Configuration; -import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.config.PackageProvider; -import com.opensymphony.xwork2.inject.Inject; -import org.apache.struts2.convention.ActionConfigBuilder; - -public class Qi4jPackageProvider implements PackageProvider { - - private ActionConfigBuilder actionConfigBuilder; - - @Inject("qi4j") - public Qi4jPackageProvider(ActionConfigBuilder actionConfigBuilder) { - this.actionConfigBuilder = actionConfigBuilder; - } - - @Override - public void init(Configuration configuration) throws ConfigurationException { - } - - @Override - public void loadPackages() throws ConfigurationException { - actionConfigBuilder.buildActionConfigs(); - } - - @Override - public boolean needsReload() { - return false; - } - -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html b/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html deleted file mode 100644 index 7bdc6a8..0000000 --- a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html +++ /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. ---> -<html> - <body> - <h2>Struts 2 Convention Integration.</h2> - </body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-convention/src/main/resources/struts-plugin.xml ---------------------------------------------------------------------- diff --git a/libraries/struts2-convention/src/main/resources/struts-plugin.xml b/libraries/struts2-convention/src/main/resources/struts-plugin.xml deleted file mode 100644 index a48ab7d..0000000 --- a/libraries/struts2-convention/src/main/resources/struts-plugin.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!DOCTYPE struts PUBLIC - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" - "http://struts.apache.org/dtds/struts-2.0.dtd"> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<struts> - <bean type="org.apache.struts2.convention.ActionConfigBuilder" name="qi4j" - class="org.qi4j.library.struts2.convention.Qi4jPackageBasedActionConfigBuilder"/> - - <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j" - class="org.qi4j.library.struts2.convention.Qi4jPackageProvider"/> -</struts> http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/build.gradle ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/build.gradle b/libraries/struts2-plugin/build.gradle deleted file mode 100644 index 1a9bcac..0000000 --- a/libraries/struts2-plugin/build.gradle +++ /dev/null @@ -1,35 +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. - */ - -description = "Qi4j Struts Library allows integration of Qi4j into Struts2 applications." - -jar { manifest { name = "Qi4j Library - Struts2" }} - -dependencies { - compile(project(":org.qi4j.core:org.qi4j.core.bootstrap")) - compile(libraries.struts_core) - compile(libraries.freemarker) - compile(libraries.servlet_api) - compile(libraries.slf4j_api) - - testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport")) - - testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime")) - testRuntime(libraries.logback) -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/dev-status.xml ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/dev-status.xml b/libraries/struts2-plugin/dev-status.xml deleted file mode 100644 index 1a18f48..0000000 --- a/libraries/struts2-plugin/dev-status.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. ---> -<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1 - http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd"> - <status> - <!--none,early,beta,stable,mature--> - <codebase>beta</codebase> - - <!-- none, brief, good, complete --> - <documentation>none</documentation> - - <!-- none, some, good, complete --> - <unittests>some</unittests> - </status> - <licenses> - <license>ALv2</license> - </licenses> -</module> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/docs/struts-plugin.txt ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/src/docs/struts-plugin.txt b/libraries/struts2-plugin/src/docs/struts-plugin.txt deleted file mode 100644 index 678fb0f..0000000 --- a/libraries/struts2-plugin/src/docs/struts-plugin.txt +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////// - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. -/////////////////////////////////////////////////////////////// - -[[library-struts-plugin, Struts Plugin Library]] -= Struts - Plugin = - -[devstatus] --------------- -source=libraries/struts2-plugin/dev-status.xml --------------- - -Struts Plugin Library - -NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>. - -include::../../build/docs/buildinfo/artifact.txt[] http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java deleted file mode 100644 index 5f9b1a2..0000000 --- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import org.qi4j.api.common.Visibility; -import org.qi4j.api.composite.Composite; -import org.qi4j.api.composite.TransientComposite; -import org.qi4j.bootstrap.Assembler; -import org.qi4j.bootstrap.AssemblyException; -import org.qi4j.bootstrap.ModuleAssembly; - -public class ActionConfiguration - implements Assembler, Serializable -{ - static final long serialVersionUID = 1L; - - private final Set<Class> objectTypes; - private final Set<Class<? extends Composite>> compositeTypes; - - public ActionConfiguration() - { - compositeTypes = new HashSet<Class<? extends Composite>>(); - objectTypes = new HashSet<Class>(); - } - - public void addObjects( Class... objectTypes ) - throws AssemblyException - { - this.objectTypes.addAll( Arrays.asList( objectTypes ) ); - } - - public void addComposites( Class<? extends Composite>... compositeTypes ) - throws AssemblyException - { - this.compositeTypes.addAll( Arrays.asList( compositeTypes ) ); - } - - public Set<Class> getClasses() - { - Set<Class> classes = new HashSet<Class>( objectTypes ); - classes.addAll( compositeTypes ); - return Collections.unmodifiableSet( classes ); - } - - @Override - public void assemble( ModuleAssembly module ) - throws AssemblyException - { - module.objects( objectTypes.toArray( new Class[]{ } ) ).visibleIn( Visibility.module ); - module.transients( (Class<? extends TransientComposite>[]) compositeTypes.toArray( new Class[]{ } ) ) - .visibleIn( Visibility.module ); - } -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java deleted file mode 100644 index 1d616ae..0000000 --- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2; - -import org.qi4j.api.service.ServiceComposite; - -public interface ActionService - extends ServiceComposite -{ -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java deleted file mode 100644 index a8476f2..0000000 --- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2008 Edward Yakop. - * - * 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. - */ -package org.qi4j.library.struts2; - -public class Constants -{ - public static String SERVLET_ATTRIBUTE = "qi4j.application.initializer"; -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java ---------------------------------------------------------------------- diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java deleted file mode 100644 index eeeb600..0000000 --- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.qi4j.library.struts2; - -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ValidationAware; -import com.opensymphony.xwork2.interceptor.AbstractInterceptor; -import com.opensymphony.xwork2.interceptor.PreResultListener; -import com.opensymphony.xwork2.util.ValueStack; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import org.qi4j.api.Qi4j; -import org.qi4j.api.composite.Composite; -import org.qi4j.api.constraint.ConstraintViolation; -import org.qi4j.library.struts2.util.ClassNameMapper; - -import static java.util.Collections.emptyMap; -import static org.qi4j.library.struts2.util.ClassNameFilters.removeSuffixes; -import static org.qi4j.library.struts2.util.ClassNames.classNameInDotNotation; - -/** - * <p>ConstraintViolationInterceptor adds constraint violations from the ActionContext to the Action's field errors.</p> - * - * <p>This interceptor adds any error found in the {@link ActionContext}'s constraint violations map as a field error - * (provided that the action implements {@link ValidationAware}). In addition, any field that contains a constraint - * violation has its original value saved such that any subsequent requests for that value return the original value - * rather than the value in the action. This is important because if the value "abc" is submitted and can't be set - * on a property requiring at least 5 characters, we want to display the original string ("abc") again rather than the - * original value (likely an empty string, which would make very little sense to the user).</p> - * - * <p>This is similar, in principle, to the XWork ConversionErrorInterceptor and much of the code is reflects that.</p> - */ -public class ConstraintViolationInterceptor - extends AbstractInterceptor -{ - static final long serialVersionUID = 1L; - - public static final String CONTEXT_CONSTRAINT_VIOLATIONS = ConstraintViolationInterceptor.class.getName() + ".constraintViolations"; - - protected Object getOverrideExpr( ActionInvocation invocation, FieldConstraintViolations violations ) - { - return "'" + violations.value() + "'"; - } - - @Override - public String intercept( ActionInvocation invocation ) - throws Exception - { - ActionContext invocationContext = invocation.getInvocationContext(); - ValueStack stack = invocationContext.getValueStack(); - - Object action = invocation.getAction(); - if( action instanceof ValidationAware ) - { - ValidationAware va = (ValidationAware) action; - HashMap<Object, Object> propertyOverrides = new HashMap<Object, Object>(); - for( Map.Entry<String, FieldConstraintViolations> fieldViolations : fieldConstraintViolations( invocationContext ) - .entrySet() ) - { - addConstraintViolationFieldErrors( stack, va, fieldViolations.getKey(), fieldViolations.getValue() ); - propertyOverrides.put( fieldViolations.getKey(), getOverrideExpr( invocation, fieldViolations.getValue() ) ); - } - // if there were some errors, put the original (fake) values in place right before the result - if( !propertyOverrides.isEmpty() ) - { - overrideActionValues( invocation, stack, propertyOverrides ); - } - } - - return invocation.invoke(); - } - - private void overrideActionValues( - ActionInvocation invocation, ValueStack stack, final HashMap<Object, Object> propertyOverrides - ) - { - invocation.addPreResultListener( new PreResultListener() - { - @Override - public void beforeResult( ActionInvocation invocation, String resultCode ) - { - invocation.getStack().setExprOverrides( propertyOverrides ); - } - } ); - } - - private void addConstraintViolationFieldErrors( - ValueStack stack, ValidationAware va, String fieldName, FieldConstraintViolations violations - ) - { - for( ConstraintViolation constraintViolation : violations.constraintViolations() ) - { - Object target = violations.target(); - String message = message( target, violations.propertyName(), constraintViolation, stack ); - va.addFieldError( fieldName, message ); - } - } - - @SuppressWarnings( "unchecked" ) - private Map<String, FieldConstraintViolations> fieldConstraintViolations( ActionContext context ) - { - Map<String, FieldConstraintViolations> violations = - (Map<String, FieldConstraintViolations>) context.get( CONTEXT_CONSTRAINT_VIOLATIONS ); - if( violations == null ) - { - return emptyMap(); - } - - return violations; - } - - protected String message( Object target, - String propertyName, - ConstraintViolation constraintViolation, - ValueStack stack - ) - { - String messageKey = messageKey( target, propertyName, constraintViolation ); - String getTextExpression = "getText('" + messageKey + "')"; - String message = (String) stack.findValue( getTextExpression ); - - if( message == null ) - { - message = messageKey; - } - - return message; - } - - /** - * <p>The message key is generated based on the type of the target, the name of the property and the type of the - * constraint violation. So, if the target has type ItemEntity with a name property that has a not empty constraint - * and the user doesn't enter anything for the value, the corresponding message key would be - * 'item.name.not.empty.constraint.violated'.</p> - * - * <p>Note that if the type name of the target ends with 'Composite' or 'Entity', those will be removed and the - * rest of the name will be converted from camel-case to a dot notation. This is true of the constraint types as - * well. So a constraint named NotEmpty will be converted to not.empty as in the example above.</p> - * @param target JAVADOC - * @param propertyName JAVADOC - * @param violation JAVADOC - * @return JAVADOC - */ - protected String messageKey( Object target, String propertyName, ConstraintViolation violation ) - { - Iterable<Class<?>> types; - if( target instanceof Composite ) - { - Composite composite = (Composite) target; - types = Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types(); - } - else - { - ArrayList<Class<?>> list = new ArrayList<Class<?>>( 1 ); - list.add(target.getClass()); - types = list; - } - - return classNameInDotNotation( types, withoutCompositeOrEntitySuffix ) - + "." + propertyName - + "." + constraintKeyPart( violation ) - + ".constraint.violated"; - } - - private static final ClassNameMapper withoutCompositeOrEntitySuffix = removeSuffixes( "Composite", "Entity" ); - - private String constraintKeyPart( ConstraintViolation constraintViolation ) - { - return classNameInDotNotation( constraintViolation.constraint().annotationType() ); - } - - public static class FieldConstraintViolations - { - private final Object target; - private final String propertyName; - private final Object value; - private final Collection<ConstraintViolation> constraintViolations; - - public FieldConstraintViolations( - Object aTarget, - String aPropertyName, - Object aValue, - Collection<ConstraintViolation> constraintViolations - ) - { - target = aTarget; - propertyName = aPropertyName; - value = aValue; - this.constraintViolations = constraintViolations; - } - - public Object target() - { - return target; - } - - public String propertyName() - { - return propertyName; - } - - public Object value() - { - return value; - } - - public Collection<ConstraintViolation> constraintViolations() - { - return constraintViolations; - } - } -}
