Author: pete.muir(a)jboss.org
Date: 2008-02-04 12:27:54 -0500 (Mon, 04 Feb 2008)
New Revision: 7358
Added:
trunk/build/wicket.pom.xml
trunk/src/wicket/
trunk/src/wicket/org/
trunk/src/wicket/org/jboss/
trunk/src/wicket/org/jboss/seam/
trunk/src/wicket/org/jboss/seam/wicket/
trunk/src/wicket/org/jboss/seam/wicket/BijectedAttribute.java
trunk/src/wicket/org/jboss/seam/wicket/BijectedField.java
trunk/src/wicket/org/jboss/seam/wicket/BijectedMethod.java
trunk/src/wicket/org/jboss/seam/wicket/BijectedProperty.java
trunk/src/wicket/org/jboss/seam/wicket/InjectionInterceptor.java
trunk/src/wicket/org/jboss/seam/wicket/InjectionSupport.java
trunk/src/wicket/org/jboss/seam/wicket/LoggerSupport.java
trunk/src/wicket/org/jboss/seam/wicket/MetaModel.java
trunk/src/wicket/org/jboss/seam/wicket/MetaModelUtils.java
trunk/src/wicket/org/jboss/seam/wicket/ModelValidator.java
trunk/src/wicket/org/jboss/seam/wicket/OutjectionSupport.java
trunk/src/wicket/org/jboss/seam/wicket/SeamAuthorizationStrategy.java
trunk/src/wicket/org/jboss/seam/wicket/SeamLink.java
trunk/src/wicket/org/jboss/seam/wicket/SeamSupport.java
trunk/src/wicket/org/jboss/seam/wicket/SimpleDataProvider.java
trunk/src/wicket/org/jboss/seam/wicket/WicketComponent.java
trunk/src/wicket/org/jboss/seam/wicket/WicketExceptionFilter.java
trunk/src/wicket/org/jboss/seam/wicket/WicketManager.java
trunk/src/wicket/org/jboss/seam/wicket/WicketRedirectFilter.java
trunk/src/wicket/org/jboss/seam/wicket/WicketSeamFilter.java
trunk/src/wicket/seam.properties
Removed:
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedAttribute.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedField.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedMethod.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedProperty.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionInterceptor.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionSupport.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/LoggerSupport.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModel.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModelUtils.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/ModelValidator.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/OutjectionSupport.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamAuthorizationStrategy.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamLink.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamSupport.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SimpleDataProvider.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketComponent.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketManager.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketRedirectFilter.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketSeamFilter.java
trunk/examples/wicket/src/web/org/jboss/seam/wicket/components/
Modified:
trunk/build.xml
trunk/build/ci.build.xml
trunk/build/classpath.tmpl
trunk/build/common.build.xml
trunk/build/root.pom.xml
trunk/examples/build.xml
trunk/examples/wicket/build.xml
Log:
Move wicket support to a module
Modified: trunk/build/ci.build.xml
===================================================================
--- trunk/build/ci.build.xml 2008-02-04 15:06:38 UTC (rev 7357)
+++ trunk/build/ci.build.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -21,6 +21,7 @@
<deploySnapshot pom="${core.pom}"
jar="${lib.dir}/jboss-seam.jar"
srcjar="${lib.dir}/src/jboss-seam-sources.jar" />
<deploySnapshot pom="${debug.pom}"
jar="${lib.dir}/jboss-seam-debug.jar"
srcjar="${lib.dir}/src/jboss-seam-debug-sources.jar"/>
<deploySnapshot pom="${jbas5.pom}"
jar="${lib.dir}/interop/jboss-seam-jbas5.jar"
srcjar="${lib.dir}/interop/src/jboss-seam-jbas5-sources.jar"/>
+ <deploySnapshot pom="${wicket.pom}"
jar="${lib.dir}/jboss-seam-wicket.jar"
srcjar="${lib.dir}/src/jboss-seam-wicket-sources.jar"/>
<deploySnapshot pom="${gen.pom}"
jar="${lib.dir}/jboss-seam-gen.jar"
srcjar="${lib.dir}/src/jboss-seam-gen-sources.jar"/>
<deploySnapshot pom="${ioc.pom}"
jar="${lib.dir}/jboss-seam-ioc.jar"
srcjar="${lib.dir}/src/jboss-seam-ioc-sources.jar"/>
<deploySnapshot pom="${mail.pom}"
jar="${lib.dir}/jboss-seam-mail.jar"
srcjar="${lib.dir}/src/jboss-seam-mail-sources.jar"/>
Modified: trunk/build/classpath.tmpl
===================================================================
(Binary files differ)
Modified: trunk/build/common.build.xml
===================================================================
--- trunk/build/common.build.xml 2008-02-04 15:06:38 UTC (rev 7357)
+++ trunk/build/common.build.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -94,6 +94,7 @@
<install pom="${parent.pom}" />
<pomfile name="core.pom" value="${build.dir}/core.pom.xml"
/>
<pomfile name="debug.pom" value="${build.dir}/debug.pom.xml"
/>
+ <pomfile name="wicket.pom" value="${build.dir}/wicket.pom.xml"
/>
<pomfile name="jbas5.pom"
value="${build.dir}/jbas5.pom.xml" />
<pomfile name="gen.pom" value="${build.dir}/gen.pom.xml" />
<pomfile name="ioc.pom" value="${build.dir}/ioc.pom.xml" />
@@ -108,6 +109,7 @@
<target name="copyseamdependencies" if="mavenized.property"
unless="copyseamdependenciesdone" depends="initcopy, initpoms">
<copyDependencies id="core" pom="${core.pom}"
todir="${lib.dir}" scope="runtime" />
<copyDependencies id="debug" pom="${debug.pom}"
todir="${lib.dir}" scope="runtime" />
+ <copyDependencies id="wicket" pom="${wicket.pom}"
todir="${lib.dir}" scope="runtime" />
<copyDependencies id="jbas5" pom="${jbas5.pom}"
todir="${lib.dir}" scope="runtime" />
<copyDependencies id="ioc" pom="${ioc.pom}"
todir="${lib.dir}" scope="runtime" />
<copyDependencies id="mail" pom="${mail.pom}"
todir="${lib.dir}" scope="runtime" />
@@ -116,6 +118,7 @@
<copyDependencies id="ui" pom="${ui.pom}"
todir="${lib.dir}" scope="runtime" />
<copyDependencies id="core" pom="${core.pom}"
todir="${lib.dir}" scope="compile" />
<copyDependencies id="debug" pom="${debug.pom}"
todir="${lib.dir}" scope="compile" />
+ <copyDependencies id="wicket" pom="${wicket.pom}"
todir="${lib.dir}" scope="compile" />
<copyDependencies id="jbas5" pom="${jbas5.pom}"
todir="${lib.dir}" scope="compile" />
<copyDependencies id="ioc" pom="${ioc.pom}"
todir="${lib.dir}" scope="compile" />
<copyDependencies id="mail" pom="${mail.pom}"
todir="${lib.dir}" scope="compile" />
@@ -129,6 +132,7 @@
<artifact:dependencies filesetId="seam.fileset"
versionsId="seam.versions">
<dependency groupId="org.jboss.seam" artifactId="jboss-seam"
version="${complete.version}" />
<dependency groupId="org.jboss.seam"
artifactId="jboss-seam-debug" version="${complete.version}" />
+ <dependency groupId="org.jboss.seam"
artifactId="jboss-seam-wicket" version="${complete.version}" />
<dependency groupId="org.jboss.seam"
artifactId="jboss-seam-ioc" version="${complete.version}" />
<dependency groupId="org.jboss.seam"
artifactId="jboss-seam-mail" version="${complete.version}" />
<dependency groupId="org.jboss.seam"
artifactId="jboss-seam-pdf" version="${complete.version}" />
@@ -199,6 +203,7 @@
<propertyref name="mail.pom" />
<propertyref name="debug.pom" />
<propertyref name="jbas5.pom" />
+ <propertyref name="wicket.pom" />
<propertyref name="testng.jvmargs"/>
</propertyset>
</ant>
@@ -231,6 +236,7 @@
<propertyref name="ioc.pom" />
<propertyref name="mail.pom" />
<propertyref name="debug.pom" />
+ <propertyref name="wicket.pom" />
<propertyref name="jbas5.pom" />
<propertyref name="testng.jvmargs"/>
</propertyset>
@@ -265,6 +271,7 @@
<propertyref name="mail.pom" />
<propertyref name="debug.pom" />
<propertyref name="jbas5.pom" />
+ <propertyref name="wicket.pom" />
<propertyref name="testng.jvmargs"/>
</propertyset>
</ant>
@@ -324,6 +331,8 @@
<outputDependencyReport module="mail" />
<outputDependencyReport module="pdf" />
<outputDependencyReport module="ioc" />
+ <outputDependencyReport module="wicket" />
+ <outputDependencyReport module="jbas5" />
<echo>Dependency Report written to
${seam.dir}/dependency-report.txt</echo>
</target>
Modified: trunk/build/root.pom.xml
===================================================================
--- trunk/build/root.pom.xml 2008-02-04 15:06:38 UTC (rev 7357)
+++ trunk/build/root.pom.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -34,11 +34,17 @@
<name>JBoss Snapshot Repository</name>
<
url>http://snapshots.jboss.org/maven2</url>
</repository>
+ <repository>
+ <id>wicketstuff.org</id>
+ <name>Wicket</name>
+ <
url>http://wicketstuff.org/maven/repository</url>
+ </repository>
</repositories>
<!-- Externalize some version numbers here -->
<properties>
<version.richfaces>3.1.4.GA</version.richfaces>
+ <version.wicket>1.3.0-SNAPSHOT</version.wicket>
</properties>
<dependencyManagement>
@@ -845,7 +851,75 @@
</exclusion>
</exclusions>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket</artifactId>
+ <version>${version.wicket}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>asm</groupId>
+ <artifactId>asm</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-ioc</artifactId>
+ <version>${version.wicket}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>asm</groupId>
+ <artifactId>asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-extensions</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <exclusions>
+ <exclusion>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>asm</groupId>
+ <artifactId>asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-datetime</artifactId>
+ <version>${version.wicket}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
Added: trunk/build/wicket.pom.xml
===================================================================
--- trunk/build/wicket.pom.xml (rev 0)
+++ trunk/build/wicket.pom.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-wicket</artifactId>
+ <parent>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>parent</artifactId>
+ <version>@seam.version(a)</version>
+ </parent>
+
+ <!-- See parent pom for notes on how to declare dependencies -->
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-ioc</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-datetime</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.wicket</groupId>
+ <artifactId>wicket-extensions</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>ejb-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
Property changes on: trunk/build/wicket.pom.xml
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2008-02-04 15:06:38 UTC (rev 7357)
+++ trunk/build.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -18,6 +18,7 @@
<property name="classes.ioc.dir"
value="${classes.dir}/iocclasses" />
<property name="classes.mail.dir"
value="${classes.dir}/mailclasses" />
<property name="classes.debug.dir"
value="${classes.dir}/debugclasses" />
+ <property name="classes.wicket.dir"
value="${classes.dir}/wicketclasses" />
<property name="classes.jbas5.dir"
value="${classes.dir}/jbas5classes" />
<property name="classes.remoting.dir"
value="${classes.dir}/remotingclasses" />
<property name="classes.gen.dir"
value="${classes.dir}/genclasses" />
@@ -33,6 +34,7 @@
<property name="src.ioc.dir" value="src/ioc" />
<property name="src.mail.dir" value="src/mail" />
<property name="src.debug.dir" value="src/debug" />
+ <property name="src.wicket.dir" value="src/wicket" />
<property name="src.jbas5.dir" value="src/jbas5" />
<property name="src.gen.dir" value="src/gen" />
<property name="src.remoting.dir" value="src/remoting" />
@@ -64,6 +66,7 @@
<property name="dist.src.ioc.dir" value="${dist.dir}/src/ioc"
/>
<property name="dist.src.mail.dir" value="${dist.dir}/src/mail"
/>
<property name="dist.src.debug.dir" value="${dist.dir}/src/debug"
/>
+ <property name="dist.src.wicket.dir"
value="${dist.dir}/src/wicket" />
<property name="dist.src.jbas5.dir" value="${dist.dir}/src/jbas5"
/>
<property name="dist.src.gen.dir" value="${dist.dir}/src/gen"
/>
<property name="dist.src.remoting.dir"
value="${dist.dir}/src/remoting" />
@@ -153,7 +156,7 @@
<delete dir="${lib.dir}" quiet="${quietclean}" />
</target>
- <target name="build"
depends="jarcore,jarpdf,jarioc,jarmail,jarremoting,jardebug,jargen,jarui,jarjbas5"
description="Build all distribution .jar files" />
+ <target name="build"
depends="jarcore,jarpdf,jarioc,jarmail,jarremoting,jardebug,jargen,jarui,jarjbas5,jarwicket"
description="Build all distribution .jar files" />
<target name="select-compiler">
<available classname="org.eclipse.jdt.core.JDTCompilerAdapter"
property="build.compiler"
value="org.eclipse.jdt.core.JDTCompilerAdapter" />
@@ -248,6 +251,20 @@
<archive classesdir="${classes.debug.dir}"
module="jboss-seam-debug" pom="${debug.pom}"
srcdir="${src.debug.dir}"/>
</target>
+ <!-- ########################### DEBUG TARGETS ###########################-->
+
+ <target name="initwicket" depends="init, jarcore">
+ <init classesdir="${classes.wicket.dir}"
srcdir="${src.wicket.dir}" modulename="wicket"
pom="${wicket.pom}" />
+ </target>
+
+ <target name="compilewicket" depends="initwicket,
select-compiler">
+ <compile classesdir="${classes.wicket.dir}"
srcdir="${src.wicket.dir}" classpath="compile.wicket.path" />
+ </target>
+
+ <target name="jarwicket" depends="compilewicket"
description="Build the distribution .jar file for the Wicket Integration
package">
+ <archive classesdir="${classes.wicket.dir}"
module="jboss-seam-wicket" pom="${wicket.pom}"
srcdir="${src.wicket.dir}"/>
+ </target>
+
<!-- ########################### JBAS5 TARGETS ###########################-->
<target name="initjbas5" depends="init, jarcore">
@@ -339,6 +356,7 @@
<cleanexample name="icefaces" />
<cleanexample name="seambay" />
<cleanexample name="nestedbooking" />
+ <cleanexample name="wicket" />
</target>
<target name="undeployall" description="Undeploy all
examples">
@@ -369,6 +387,7 @@
<undeployexample name="icefaces" />
<undeployexample name="seambay" />
<undeployexample name="nestedbooking" />
+ <undeployexample name="wicket" />
</target>
<target name="deploypresentation" depends="build"
description="Deploy the examples used in Seam presentations">
@@ -430,6 +449,7 @@
<copysource destdir="${dist.src.remoting.dir}"
srcdir="${src.remoting.dir}" />
<copysource destdir="${dist.src.mail.dir}"
srcdir="${src.mail.dir}" />
<copysource destdir="${dist.src.debug.dir}"
srcdir="${src.debug.dir}" />
+ <copysource destdir="${dist.src.wicket.dir}"
srcdir="${src.wicket.dir}" />
<copysource destdir="${dist.src.jbas5.dir}"
srcdir="${src.jbas5.dir}" />
<copysource destdir="${dist.src.gen.dir}"
srcdir="${src.gen.dir}" />
<copysource destdir="${dist.src.test.dir}"
srcdir="${src.test.dir}" />
@@ -506,6 +526,7 @@
<!--<include name="portal/**/*" />-->
<include name="drools/**/*" />
<include name="nestedbooking/**/*" />
+ <include name="wicket/**/*" />
<include name="remoting/chatroom/**/*" />
<include name="remoting/helloworld/**/*" />
<include name="remoting/progressbar/**/*" />
@@ -893,6 +914,7 @@
<propertyref name="ioc.pom" />
<propertyref name="mail.pom" />
<propertyref name="debug.pom" />
+ <propertyref name="wicket.pom" />
<propertyref name="jbas5.pom" />
<propertyref name="testng.jvmargs"/>
</propertyset>
@@ -903,6 +925,7 @@
<target name="downloadDependenciesSources" description="Download
source jars for all dependencies" depends="init">
<dependenciesWithSources id="core" scope="compile"
pom="${core.pom}" />
<dependenciesWithSources id="debug" scope="compile"
pom="${debug.pom}" />
+ <dependenciesWithSources id="wicket" scope="compile"
pom="${wicket.pom}" />
<dependenciesWithSources id="jbas5" scope="compile"
pom="${jbas5.pom}" />
<dependenciesWithSources id="gen" scope="compile"
pom="${gen.pom}" />
<dependenciesWithSources id="ioc" scope="compile"
pom="${ioc.pom}" />
@@ -931,6 +954,7 @@
classpathref="seam-gen.path"/>
<dependencies id="core" scope="compile"
pom="${core.pom}" />
<dependencies id="debug" scope="compile"
pom="${debug.pom}" />
+ <dependencies id="wicket" scope="compile"
pom="${wicket.pom}" />
<dependencies id="jbas5" scope="compile"
pom="${jbas5.pom}" />
<dependencies id="gen" scope="compile"
pom="${gen.pom}" />
<dependencies id="ioc" scope="compile"
pom="${ioc.pom}" />
@@ -948,6 +972,7 @@
<path refid="compile.remoting.path" />
<path refid="compile.ui.path" />
<path refid="compile.jbas5.path" />
+ <path refid="compile.wicket.path" />
</eclipseClasspath>
</target>
Modified: trunk/examples/build.xml
===================================================================
--- trunk/examples/build.xml 2008-02-04 15:06:38 UTC (rev 7357)
+++ trunk/examples/build.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -173,6 +173,15 @@
<fileset id="seam.remoting.jar" dir="${lib.dir}">
<include name="jboss-seam-remoting.jar" if="seam.remoting.lib"
/>
</fileset>
+
+ <!-- Seam Wicket integration, with required dependencies -->
+ <fileset id="seam.wicket.jar" dir="${lib.dir}">
+ <include name="jboss-seam-wicket.jar" if="seam.wicket.lib"
/>
+ <include name="wicket.jar" if="seam.wicket.lib" />
+ <include name="wicket-ioc.jar" if="seam.wicket.lib" />
+ <include name="slf4j-api.jar" if="seam.wicket.lib" />
+ <include name="slf4j-log4j12.jar" if="seam.wicket.lib" />
+ </fileset>
<!-- jboss-el -->
<fileset id="jboss-el.jar" dir="${lib.dir}">
@@ -291,6 +300,11 @@
<fileset id="jboss-embedded-api.jar" dir="${lib.dir}">
<include name="jboss-embedded-api.jar"
if="jboss-embedded-api.lib" />
</fileset>
+
+ <fileset id="wicket-extensions.jar" dir="${lib.dir}">
+ <include name="wicket-extensions.jar" if="wicket-extensions.lib"
/>
+ <include name="wicket-datetime.jar" if="wicket-extensions.lib"
/>
+ </fileset>
<!-- ############################ MELDWARE ############################ -->
@@ -416,7 +430,12 @@
<path id="build.classpath">
<fileset dir="${lib.dir}">
<include name="*.jar" />
- <exclude name="jboss-seam-*.jar" />
+ <include name="jboss-seam-wicket.jar" />
+ <exclude name="jboss-seam-debug.jar" />
+ <exclude name="jboss-seam-ui.jar" />
+ <exclude name="jboss-seam-remoting.jar" />
+ <exclude name="jboss-seam-mail.jar" />
+ <exclude name="jboss-seam-pdf.jar" />
</fileset>
<path refid="build.classpath.extras" />
</path>
@@ -564,6 +583,8 @@
<fileset refid="spring.jar" />
<fileset refid="jcaptcha.jar" />
<fileset refid="antlr.jar" />
+ <fileset refid="wicket-extensions.jar" />
+ <fileset refid="seam.wicket.jar" />
<mapper type="flatten" />
</copy>
</target>
@@ -752,6 +773,8 @@
<fileset refid="search.jar" />
<fileset refid="richfaces-api.jar" />
<fileset refid="groovy.jar" />
+ <fileset refid="wicket-extensions.jar" />
+ <fileset refid="seam.wicket.jar" />
<mapper type="flatten" />
</copy>
<copy todir="${war.dir}">
Modified: trunk/examples/wicket/build.xml
===================================================================
--- trunk/examples/wicket/build.xml 2008-02-04 15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/build.xml 2008-02-04 17:27:54 UTC (rev 7358)
@@ -10,26 +10,15 @@
<property name="src.web.dir" value="src/web" />
<!-- Libraries to include -->
+
+ <property name="seam.wicket.lib" value="yes" />
+ <property name="wicket-extensions.lib" value="yes" />
<!-- Datasource -->
<property name="example.ds"
value="jboss-seam-wicket-ds.xml"/>
-
- <property name="example.tmp.lib.dir" value="${basedir}/lib"
/>
-
- <property name="clean.extra"
value="${example.tmp.lib.dir}"/>
-
-
-
+
<import file="../build.xml"/>
-
- <path id="build.classpath.extras">
- <fileset dir="${example.tmp.lib.dir}" />
- </path>
- <fileset id="ear.lib.extras" dir="${example.tmp.lib.dir}">
- <include name="*.jar" />
- </fileset>
-
<target name="compile.web" depends="compile">
<mkdir dir="${war.dir}/WEB-INF/classes" />
<javac destdir="${war.dir}/WEB-INF/classes"
debug="${javac.debug}" deprecation="${javac.deprecation}"
nowarn="on" >
@@ -48,33 +37,5 @@
<!-- Examples build hook point for running targets before creating the war -->
<target name="init.war" depends="compile.web" />
-
- <target name="copyextradependencies">
- <artifact:remoteRepository id="wicketstuff.org"
url="http://wicketstuff.org/maven/repository"/>
-
- <artifact:dependencies filesetId="wicket.fileset"
versionsId="wicket.versions" sourcesfilesetid="wicket.sources">
- <dependency groupId="org.apache.wicket" artifactId="wicket"
version="1.3.0-SNAPSHOT">
- <exclusion groupId="cglib" artifactid="cglib-nodep" />
- <exclusion groupId="asm" artifactId="asm" />
- </dependency>
- <dependency groupId="org.apache.wicket" artifactId="wicket-ioc"
version="1.3.0-SNAPSHOT">
- <exclusion groupId="cglib" artifactid="cglib-nodep" />
- <exclusion groupId="asm" artifactId="asm" />
- </dependency>
- <dependency groupId="org.slf4j" artifactId="slf4j-log4j12"
version="1.0.1" />
- <dependency groupId="org.apache.wicket"
artifactId="wicket-extensions" version="1.3.0-SNAPSHOT">
- <exclusion groupId="cglib" artifactid="cglib-nodep" />
- <exclusion groupId="asm" artifactId="asm" />
- <exclusion groupId="commons-collections"
artifactId="commons-collections" />
- </dependency>
- <dependency groupId="org.apache.wicket"
artifactId="wicket-datetime" version="1.3.0-SNAPSHOT">
- </dependency>
- <remoterepository refid="wicketstuff.org"/>
- </artifact:dependencies>
- <copy todir="${example.tmp.lib.dir}">
- <fileset refid="wicket.fileset" />
- <mapper classpathref="maven-ant-tasks.classpath"
classname="org.apache.maven.artifact.ant.VersionMapper"
from="${wicket.versions}" to="flatten" />
- </copy>
- </target>
</project>
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedAttribute.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedAttribute.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedAttribute.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,14 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.io.Serializable;
-import java.lang.annotation.Annotation;
-
-public interface BijectedAttribute<T extends Annotation>
-{
- public String getName();
- public T getAnnotation();
- public Class getType();
- public void set(Object bean, Object value);
- public Object get(Object bean);
- public MetaModel getMetaModel();
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedField.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedField.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedField.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,54 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-
-public class BijectedField<T extends Annotation> implements
BijectedAttribute<T>
- {
- private String name;
- private Field field;
- private T annotation;
- private MetaModel metaModel;
-
- public BijectedField(String name, Field field, T annotation, MetaModel metaModel)
- {
- this.name = name;
- this.field = field;
- this.annotation = annotation;
- this.metaModel = metaModel;
- }
- public String getName()
- {
- return name;
- }
- public Field getField()
- {
- return field;
- }
- public T getAnnotation()
- {
- return annotation;
- }
- public Class getType()
- {
- return field.getType();
- }
- public void set(Object bean, Object value)
- {
- metaModel.setFieldValue(bean, field, name, value);
- }
- public Object get(Object bean)
- {
- return metaModel.getFieldValue(bean, field, name);
- }
- @Override
- public String toString()
- {
- return "BijectedField(" + name + ')';
- }
-
- public MetaModel getMetaModel()
- {
- return metaModel;
- }
- }
\ No newline at end of file
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedMethod.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedMethod.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedMethod.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,53 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-public class BijectedMethod<T extends Annotation> implements
BijectedAttribute<T>
- {
- private String name;
- private Method method;
- private T annotation;
- private MetaModel metaModel;
-
- public BijectedMethod(String name, Method method, T annotation, MetaModel
metaModel)
- {
- this.name = name;
- this.method = method;
- this.annotation = annotation;
- }
- public String getName()
- {
- return name;
- }
- public Method getMethod()
- {
- return method;
- }
- public T getAnnotation()
- {
- return annotation;
- }
- public void set(Object bean, Object value)
- {
- metaModel.setPropertyValue(bean, method, name, value);
- }
- public Object get(Object bean)
- {
- return metaModel.getPropertyValue(bean, method, name);
- }
- public Class getType()
- {
- return method.getParameterTypes()[0];
- }
- @Override
- public String toString()
- {
- return "BijectedMethod(" + name + ')';
- }
-
- public MetaModel getMetaModel()
- {
- return metaModel;
- }
- }
\ No newline at end of file
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedProperty.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedProperty.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedProperty.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,66 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-import org.jboss.seam.util.Reflections;
-
-public class BijectedProperty<T extends Annotation> implements
BijectedAttribute<T>
- {
-
- private BijectedMethod<T> getter;
- private BijectedMethod<T> setter;
- private MetaModel metaModel;
-
- public BijectedProperty(String name, Method getter, Method setter, T annotation,
MetaModel metaModel)
- {
- this.getter = new BijectedMethod(name, getter, annotation, metaModel);
- this.setter = new BijectedMethod(name, setter, annotation, metaModel);
- }
-
- public BijectedProperty(String name, Method getter, T annotation, MetaModel
metaModel)
- {
- this.getter = new BijectedMethod(name, getter, annotation, metaModel);
- try
- {
- Method setterMethod = Reflections.getSetterMethod(getter.getDeclaringClass(),
name);
- this.setter = new BijectedMethod(name, setterMethod, annotation, metaModel);
- }
- catch (IllegalArgumentException e) {}
- }
-
- public Object get(Object bean)
- {
- return getter.get(bean);
- }
-
- public T getAnnotation()
- {
- return getter.getAnnotation();
- }
-
- public String getName()
- {
- return getter.getName();
- }
-
- public Class getType()
- {
- return getter.getType();
- }
-
- public void set(Object bean, Object value)
- {
- if (setter == null)
- {
- throw new IllegalArgumentException("Component must have a setter for
" + metaModel.getName());
- }
- setter.set(bean, value);
- }
-
- public MetaModel getMetaModel()
- {
- return metaModel;
- }
-
- }
\ No newline at end of file
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionInterceptor.java
===================================================================
---
trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionInterceptor.java 2008-02-04
15:06:38 UTC (rev 7357)
+++
trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionInterceptor.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,112 +0,0 @@
-package org.jboss.seam.wicket;
-
-import static org.jboss.seam.ScopeType.STATELESS;
-import static org.jboss.seam.ScopeType.UNSPECIFIED;
-
-import java.io.Serializable;
-import java.lang.reflect.Method;
-
-import org.jboss.seam.Component;
-import org.jboss.seam.Namespace;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.core.Expressions;
-import org.jboss.seam.core.Init;
-import org.jboss.seam.log.LogProvider;
-import org.jboss.seam.log.Logging;
-import org.jboss.seam.util.Reflections;
-
-import javassist.util.proxy.MethodHandler;
-
-public class InjectionInterceptor implements MethodHandler, Serializable
-{
-
- private String name;
- private In annotation;
- private String metaModelName;
- private transient MetaModel metaModel;
-
- public InjectionInterceptor(BijectedAttribute<In> in)
- {
- this.name = in.getName();
- this.annotation = in.getAnnotation();
- this.metaModelName = in.getMetaModel().getMetaModelName();
- }
-
- private static LogProvider log = Logging.getLogProvider(InjectionInterceptor.class);
-
- public Object invoke(final Object proxy, final Method method, final Method proceed,
final Object[] params) throws Throwable
- {
- return Reflections.invoke(method, getValueToInject(proxy), params);
- }
-
- private Object getValueToInject(Object bean)
- {
- if ( name.startsWith("#") )
- {
- if ( log.isDebugEnabled() )
- {
- log.trace("trying to inject with EL expression: " + name);
- }
- return Expressions.instance().createValueExpression(name).getValue();
- }
- else if ( annotation.scope()==UNSPECIFIED )
- {
- if ( log.isDebugEnabled() )
- {
- log.trace("trying to inject with hierarchical context search: " +
name);
- }
- return getInstanceInAllNamespaces(name, annotation.create());
- }
- else
- {
- if ( annotation.create() )
- {
- throw new IllegalArgumentException(
- "cannot combine create=true with explicit scope on @In: " +
- getMetaModel().getAttributeMessage(name)
- );
- }
- if ( annotation.scope()==STATELESS )
- {
- throw new IllegalArgumentException(
- "cannot specify explicit scope=STATELESS on @In: " +
- getMetaModel().getAttributeMessage(name)
- );
- }
-
-
- log.trace("trying to inject from specified context: " + name);
-
- if ( annotation.scope().isContextActive() )
- {
- return annotation.scope().getContext().get(name);
- }
- }
- return null;
- }
-
- private Object getInstanceInAllNamespaces(String name, boolean create)
- {
- Object result;
- result = Component.getInstance(name, create);
- if (result==null)
- {
- for ( Namespace namespace: Init.instance().getGlobalImports() )
- {
- result = namespace.getComponentInstance(name, create);
- if (result!=null) break;
- }
- }
- return result;
- }
-
- private MetaModel getMetaModel()
- {
- if (metaModel == null)
- {
- metaModel = MetaModel.forName(metaModelName);
- }
- return metaModel;
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionSupport.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionSupport.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionSupport.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,91 +0,0 @@
-package org.jboss.seam.wicket;
-
-import static org.jboss.seam.wicket.MetaModelUtils.createProxyFactory;
-import static org.jboss.seam.wicket.MetaModelUtils.toName;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javassist.util.proxy.ProxyObject;
-
-import org.jboss.seam.Component;
-import org.jboss.seam.Namespace;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.core.Init;
-import org.jboss.seam.log.LogProvider;
-import org.jboss.seam.log.Logging;
-
-
-public class InjectionSupport
-{
-
- // TODO Ouch
- private static final Map<Class, Class<ProxyObject>> proxyFactories = new
HashMap<Class, Class<ProxyObject>>();
-
- private LogProvider log = Logging.getLogProvider(InjectionSupport.class);
-
- private List<BijectedAttribute<In>> inAttributes = new
ArrayList<BijectedAttribute<In>>();
-
- private MetaModel metaModel;
-
- public InjectionSupport(MetaModel metaModel)
- {
- this.metaModel = metaModel;
- }
-
- public void add(Method method)
- {
- if ( method.isAnnotationPresent(In.class) )
- {
- In in = method.getAnnotation(In.class);
- String name = toName( in.value(), method );
- inAttributes.add( new BijectedMethod(name, method, in, metaModel) );
- }
- }
-
- public void add(Field field)
- {
- if ( field.isAnnotationPresent(In.class) )
- {
- In in = field.getAnnotation(In.class);
- String name = toName( in.value(), field );
- inAttributes.add( new BijectedField(name, field, in, metaModel) );
- }
- }
-
- public void inject(Object instance) throws Exception
- {
- for ( BijectedAttribute<In> in : inAttributes )
- {
- // Currently need a proxy here as Wicket has no native support for interceptors
- // TODO Replace this with a Seam ClientSide interceptor. Needs JBSEAM-699
- in.set( instance, wrap( instance, in ) );
- }
- }
-
- private static Object wrap(Object bean, BijectedAttribute<In> in) throws
Exception
- {
- ProxyObject proxy = getProxyFactory(in.getType()).newInstance();
- proxy.setHandler(new InjectionInterceptor(in));
- return proxy;
- }
-
- private static Class<ProxyObject> getProxyFactory(Class type)
- {
- if (proxyFactories.containsKey(type))
- {
- return proxyFactories.get(type);
- }
- else
- {
- Class<ProxyObject> factory = createProxyFactory( type );
- proxyFactories.put(type, factory);
- return factory;
- }
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/LoggerSupport.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/LoggerSupport.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/LoggerSupport.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,58 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jboss.seam.util.Reflections;
-
-// TODO Reimplement as Seam ClientSide Interceptor
-public class LoggerSupport
-{
-
- private List<Field> logFields = new ArrayList<Field>();
- private List<org.jboss.seam.log.Log> logInstances = new
ArrayList<org.jboss.seam.log.Log>();
-
- private MetaModel metaModel;
-
- public LoggerSupport(MetaModel metaModel)
- {
- this.metaModel = metaModel;
- }
-
- public void add(Field field)
- {
- if ( field.isAnnotationPresent(org.jboss.seam.annotations.Logger.class) )
- {
- String category =
field.getAnnotation(org.jboss.seam.annotations.Logger.class).value();
- org.jboss.seam.log.Log logInstance;
- if ( "".equals( category ) )
- {
- logInstance = org.jboss.seam.log.Logging.getLog(metaModel.getBeanClass());
- }
- else
- {
- logInstance = org.jboss.seam.log.Logging.getLog(category);
- }
- if ( Modifier.isStatic( field.getModifiers() ) )
- {
- Reflections.setAndWrap(field, null, logInstance);
- }
- else
- {
- logFields.add(field);
- logInstances.add(logInstance);
- }
- }
- }
-
- public void inject(Object instance) throws Exception
- {
- for (int i=0; i<logFields.size(); i++)
- {
- metaModel.setFieldValue( instance, logFields.get(i), "log",
logInstances.get(i) );
- }
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModel.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModel.java 2008-02-04 15:06:38
UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModel.java 2008-02-04 17:27:54
UTC (rev 7358)
@@ -1,144 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import org.jboss.seam.Model;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.util.Reflections;
-
-public abstract class MetaModel extends Model
-{
-
- private InjectionSupport injectionSupport;
- private OutjectionSupport outjectionSupport;
- private LoggerSupport loggerSupport;
-
- public MetaModel(Class<?> beanClass)
- {
- super(beanClass);
- injectionSupport = new InjectionSupport(this);
- outjectionSupport = new OutjectionSupport(this);
- loggerSupport = new LoggerSupport(this);
- scan();
- }
-
- public void initialize()
- {
- scan();
- }
-
- public void inject(Object instance) throws Exception
- {
- injectionSupport.inject(instance);
- loggerSupport.inject(instance);
- }
-
- public void outject(Object instance)
- {
- outjectionSupport.outject(instance);
- }
-
- private void scan()
- {
- Class clazz = getBeanClass();
- for ( ; clazz!=Object.class; clazz = clazz.getSuperclass() )
- {
- for ( Method method: clazz.getDeclaredMethods() )
- {
- scanMethod(method);
- }
-
- for ( Field field: clazz.getDeclaredFields() )
- {
- scanField(field);
- }
- }
- }
-
- private void scanField(Field field)
- {
- if ( !field.isAccessible() )
- {
- field.setAccessible(true);
- }
- injectionSupport.add(field);
- loggerSupport.add(field);
- }
-
- private void scanMethod(Method method)
- {
- injectionSupport.add(method);
- }
-
- protected void setFieldValue(Object bean, Field field, String name, Object value)
- {
- try
- {
- Reflections.set(field, bean, value);
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("could not set field value: " +
getAttributeMessage(name), e);
- }
- }
-
- protected Object getFieldValue(Object bean, Field field, String name)
- {
- try {
- return Reflections.get(field, bean);
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("could not get field value: " +
getAttributeMessage(name), e);
- }
- }
-
- protected String getAttributeMessage(String attributeName)
- {
- return getName() + '.' + attributeName;
- }
-
- protected String getName()
- {
- return getBeanClass().getName();
- }
-
- protected abstract String getMetaModelName();
-
- protected void setPropertyValue(Object bean, Method method, String name, Object
value)
- {
- try
- {
- Reflections.invoke(method, bean, value );
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("could not set property value: " +
getAttributeMessage(name), e);
- }
- }
-
- public Object getPropertyValue(Object bean, Method method, String name)
- {
- try {
- return Reflections.invoke(method, bean);
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("could not get property value: " +
getAttributeMessage(name), e);
- }
- }
-
- public static MetaModel forName(String name)
- {
- if (Contexts.isApplicationContextActive())
- {
- return (MetaModel) Contexts.getApplicationContext().get(name);
- }
- else
- {
- throw new IllegalStateException("Application context is not active");
- }
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModelUtils.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModelUtils.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModelUtils.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,48 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import javassist.util.proxy.ProxyObject;
-
-import org.jboss.seam.util.ProxyFactory;
-
-public class MetaModelUtils
-{
-
- public static String toName(String name, Method method)
- {
- //TODO: does not handle "isFoo"
- if (name==null || name.length() == 0)
- {
- name = method.getName().substring(3, 4).toLowerCase()
- + method.getName().substring(4);
- }
- return name;
- }
-
- public static String toName(String name, Field field)
- {
- if (name==null || name.length() == 0)
- {
- name = field.getName();
- }
- return name;
- }
-
- public static Class<ProxyObject> createProxyFactory(final Class beanClass)
- {
- ProxyFactory factory = new ProxyFactory();
- if (beanClass.isInterface())
- {
- factory.setInterfaces(new Class[] {beanClass, Serializable.class});
- }
- else
- {
- factory.setSuperclass( beanClass );
- }
- return factory.createClass();
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/ModelValidator.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/ModelValidator.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/ModelValidator.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,51 +0,0 @@
-package org.jboss.seam.wicket;
-
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.validation.IValidatable;
-import org.apache.wicket.validation.IValidationError;
-import org.apache.wicket.validation.IValidator;
-import org.apache.wicket.validation.ValidationError;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-import org.jboss.seam.core.Validators;
-
-
-/**
- *
- * An implementation of Hibernate Model Validation for Wicket
- *
- * @author Pete Muir
- *
- */
-public class ModelValidator implements IValidator
-{
-
- private Class clazz;
- private String property;
-
- public ModelValidator(Class clazz, String property)
- {
- this.clazz = clazz;
- this.property = property;
- }
-
- public ModelValidator(PropertyModel propertyModel)
- {
- this.clazz = propertyModel.getTarget().getClass();
- this.property = propertyModel.getPropertyExpression();
- }
-
- public void validate(IValidatable validatable)
- {
- System.out.println("model validator " + property + " / " +
clazz);
- ClassValidator classValidator = Validators.instance().getValidator(clazz);
- InvalidValue[] invalidValues = classValidator.getPotentialInvalidValues(property,
validatable.getValue());
- if (invalidValues.length > 0)
- {
- String message = invalidValues[0].getMessage();
- IValidationError validationError = new ValidationError().setMessage(message);
- validatable.error(validationError);
- }
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/OutjectionSupport.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/OutjectionSupport.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/OutjectionSupport.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,94 +0,0 @@
-package org.jboss.seam.wicket;
-
-import static org.jboss.seam.ScopeType.STATELESS;
-import static org.jboss.seam.ScopeType.UNSPECIFIED;
-import static org.jboss.seam.wicket.MetaModelUtils.toName;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jboss.seam.RequiredException;
-import org.jboss.seam.annotations.Out;
-
-
-public class OutjectionSupport
-{
-
- private List<BijectedAttribute<Out>> outAttributes = new
ArrayList<BijectedAttribute<Out>>();
-
- private MetaModel metaModel;
-
- public OutjectionSupport(MetaModel metaModel)
- {
- this.metaModel = metaModel;
- }
-
- public void add(Method method)
- {
- Out out = method.getAnnotation(Out.class);
- String name = toName( out.value(), method );
- outAttributes.add( new BijectedMethod(name, method, out, metaModel) );
- }
-
- public void add(Field field)
- {
- if ( field.isAnnotationPresent(Out.class) )
- {
- Out out = field.getAnnotation(Out.class);
- String name = toName( out.value(), field );
- outAttributes.add(new BijectedField(name, field, out, metaModel) );
- }
- }
-
- public void outject(Object instance)
- {
- for ( BijectedAttribute<Out> att: outAttributes )
- {
- outjectAttribute( att.getAnnotation(), att.getName(), instance,
att.get(instance) );
- }
- }
-
- private void outjectAttribute(Out out, String name, Object bean, Object value)
- {
-
- if (value==null && out.required())
- {
- throw new RequiredException(
- "@Out attribute requires non-null value: " +
- metaModel.getAttributeMessage(name)
- );
- }
- else
- {
- if ( out.scope()==UNSPECIFIED )
- {
- throw new IllegalArgumentException(
- "Must specify a scope to outject to: " +
- metaModel.getAttributeMessage(name)
- );
- }
- else if ( out.scope()==STATELESS )
- {
- throw new IllegalArgumentException(
- "cannot specify explicit scope=STATELESS on @Out: " +
- metaModel.getAttributeMessage(name)
- );
- }
-
- if ( out.scope().isContextActive() )
- {
- if (value==null)
- {
- out.scope().getContext().remove(name);
- }
- else
- {
- out.scope().getContext().set(name, value);
- }
- }
- }
- }
-
-}
Deleted:
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamAuthorizationStrategy.java
===================================================================
---
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamAuthorizationStrategy.java 2008-02-04
15:06:38 UTC (rev 7357)
+++
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamAuthorizationStrategy.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,72 +0,0 @@
-package org.jboss.seam.wicket;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.Page;
-import org.apache.wicket.RestartResponseAtInterceptPageException;
-import org.apache.wicket.authorization.Action;
-import org.apache.wicket.authorization.IAuthorizationStrategy;
-import org.jboss.seam.annotations.security.Restrict;
-import org.jboss.seam.log.LogProvider;
-import org.jboss.seam.log.Logging;
-import org.jboss.seam.security.Identity;
-import org.jboss.seam.security.NotLoggedInException;
-import org.jboss.seam.util.Strings;
-
-public class SeamAuthorizationStrategy implements IAuthorizationStrategy
-{
-
- private LogProvider log = Logging.getLogProvider(SeamAuthorizationStrategy.class);
- private Class loginPage;
-
- public SeamAuthorizationStrategy()
- {
- this(null);
- }
-
- public SeamAuthorizationStrategy(final Class loginPage)
- {
- this.loginPage = loginPage;
- }
-
- // TODO Use permission schemes for this?
- public boolean isActionAuthorized(Component component, Action action)
- {
- return isInstantiationAuthorized(component.getClass());
- }
-
- public boolean isInstantiationAuthorized(Class componentClass)
- {
- Restrict restrict = (Restrict) componentClass.getAnnotation(Restrict.class);
- if ( restrict != null && Identity.isSecurityEnabled() )
- {
- String expr = !Strings.isEmpty( restrict.value() ) ? restrict.value() :
"#{identity.loggedIn}";
- try
- {
- Identity.instance().checkRestriction(expr);
- }
- catch (NotLoggedInException e)
- {
- log.error("Unauthorized access to " + componentClass.getName() +
", user not logged in", e);
- return handleException(componentClass);
- }
- catch (org.jboss.seam.security.AuthorizationException e)
- {
- log.error("Unauthorized access to " + componentClass.getName(),
e);
- return handleException(componentClass);
- }
- }
- return true;
- }
-
- private boolean handleException(Class componentClass)
- {
- if (Page.class.isAssignableFrom(componentClass))
- {
- // Redirect to page to let the user sign in
- throw new RestartResponseAtInterceptPageException(loginPage);
- }
- return false;
- }
-
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamLink.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamLink.java 2008-02-04 15:06:38
UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamLink.java 2008-02-04 17:27:54
UTC (rev 7358)
@@ -1,39 +0,0 @@
-package org.jboss.seam.wicket;
-
-import org.apache.wicket.markup.html.link.ILinkListener;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.value.ValueMap;
-import org.jboss.seam.core.Conversation;
-import org.jboss.seam.core.Manager;
-
-public abstract class SeamLink extends Link
-{
-
- public SeamLink(String id)
- {
- super(id);
- }
-
- public SeamLink(String id, IModel model)
- {
- super(id, model);
- }
-
- @Override
- protected CharSequence getURL()
- {
- return getRequestCycle().urlFor(this, ILinkListener.INTERFACE, getParameterMap());
- }
-
- private ValueMap getParameterMap()
- {
- ValueMap valueMap = new ValueMap();
- if (Conversation.instance().isLongRunning())
- {
- valueMap.add(Manager.instance().getConversationIdParameter(),
Conversation.instance().getId());
- }
- return valueMap;
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamSupport.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamSupport.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamSupport.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,65 +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.jboss.seam.wicket;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.Component;
-import org.apache.wicket.application.IComponentInstantiationListener;
-
-/**
- * Main support class for letting Wicket work with Seam annotations. Active
- * support by calling {@link #activate(Application) the activate method}
- * preferably from your {@link Application#init() application's init method}.
- *
- * @author eelcohillenius
- * @author Pete Muir
- */
-// TODO handle outjection etc. Might need onAfterRender and may
-// onBeforeRender for that, in which case this class can implement the
-// appropriate interfaces and register itself as a listener for them.
-// TODO handle method level sometime. For starters, see if there is any example/
-// test case/ whatever in Seam first that shows off that kind of usage
-public class SeamSupport implements IComponentInstantiationListener {
-
- /**
- * Activate support for Seam annotations on components for the provided
- * application.
- *
- * @param application
- * The application to active support for
- */
- public static void activate(Application application) {
- SeamSupport listener = new SeamSupport();
- application.addComponentInstantiationListener(listener);
- }
-
- /**
- * @see
org.apache.wicket.application.IComponentInstantiationListener#onInstantiation(org.apache.wicket.Component)
- */
- public void onInstantiation(Component component)
- {
- WicketComponent wicketComponent = WicketComponent.forClass(component.getClass());
- try
- {
- wicketComponent.inject(component);
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/SimpleDataProvider.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/SimpleDataProvider.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/SimpleDataProvider.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,22 +0,0 @@
-package org.jboss.seam.wicket;
-
-import java.io.Serializable;
-
-import org.apache.wicket.markup.repeater.data.IDataProvider;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
-public abstract class SimpleDataProvider implements IDataProvider
-{
-
- public IModel model(Object object)
- {
- return new Model((Serializable) object);
- }
-
- public void detach()
- {
- // No - op
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketComponent.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketComponent.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketComponent.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,47 +0,0 @@
-package org.jboss.seam.wicket;
-
-import org.jboss.seam.contexts.Contexts;
-
-public class WicketComponent extends MetaModel
-{
-
- public WicketComponent(Class<?> beanClass)
- {
- super(beanClass);
- }
-
- @Override
- protected String getMetaModelName()
- {
- return getComponentName(getBeanClass());
- }
-
- protected static String getComponentName(Class clazz)
- {
- return clazz.getName() + ".wicketComponent";
- }
-
- public static WicketComponent forClass(Class clazz)
- {
- if (Contexts.isApplicationContextActive())
- {
- String metaModelName = getComponentName(clazz);
- instantiate(metaModelName, clazz);
- return (WicketComponent) forName(metaModelName);
- }
- else
- {
- throw new IllegalStateException("Application context is not active");
- }
- }
-
- private static void instantiate(String componentName, Class clazz)
- {
- if (!Contexts.getApplicationContext().isSet(componentName))
- {
- WicketComponent component = new WicketComponent(clazz);
- Contexts.getApplicationContext().set(componentName, component);
- }
- }
-
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketManager.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketManager.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketManager.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,48 +0,0 @@
-package org.jboss.seam.wicket;
-
-
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.core.Manager;
-
-(a)Scope(ScopeType.EVENT)
-(a)Name("org.jboss.seam.core.manager")
-@Install(precedence=100, classDependencies="org.apache.wicket.Application")
-@BypassInterceptors
-public class WicketManager extends Manager
-{
-
- private boolean controllingRedirect;
-
- public String appendConversationIdFromRedirectFilter(String url, String viewId)
- {
- boolean appendConversationId = !controllingRedirect;
- if (appendConversationId)
- {
- beforeRedirect(viewId);
- url = encodeConversationId(url, viewId);
- }
- return url;
- }
-
- /**
- * Temporarily promote a temporary conversation to
- * a long running conversation for the duration of
- * a browser redirect. After the redirect, the
- * conversation will be demoted back to a temporary
- * conversation. Handle any changes to the conversation
- * id, due to propagation via natural id.
- */
- public void beforeRedirect(String viewId)
- {
- // TODO - do something here!
- }
-
- public static WicketManager instance()
- {
- return (WicketManager) Manager.instance();
- }
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketRedirectFilter.java
===================================================================
---
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketRedirectFilter.java 2008-02-04
15:06:38 UTC (rev 7357)
+++
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketRedirectFilter.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,43 +0,0 @@
-package org.jboss.seam.wicket;
-
-import static org.jboss.seam.ScopeType.APPLICATION;
-
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.annotations.web.Filter;
-import org.jboss.seam.web.AbstractFilter;
-
-/**
- *
- * @author Kill the redirect filter
- */
-@Scope(APPLICATION)
-(a)Name("org.jboss.seam.web.redirectFilter")
-@Install(precedence = 100, classDependencies="org.apache.wicket.Application")
-@BypassInterceptors
-(a)Filter(within="org.jboss.seam.web.ajax4jsfFilter")
-public class WicketRedirectFilter extends AbstractFilter
-{
-
-
- @Override
- public boolean isDisabled()
- {
- return true;
- }
-
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain
chain) throws IOException, ServletException
- {
-
-
- }
-}
Deleted: trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketSeamFilter.java
===================================================================
--- trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketSeamFilter.java 2008-02-04
15:06:38 UTC (rev 7357)
+++ trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketSeamFilter.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -1,163 +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.jboss.seam.wicket;
-
-import static org.jboss.seam.ScopeType.APPLICATION;
-import static org.jboss.seam.annotations.Install.BUILT_IN;
-
-import java.io.IOException;
-import java.util.Set;
-
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.protocol.http.WebApplication;
-import org.apache.wicket.protocol.http.WicketFilter;
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.annotations.web.Filter;
-import org.jboss.seam.contexts.Context;
-import org.jboss.seam.contexts.ServletLifecycle;
-import org.jboss.seam.core.ConversationPropagation;
-import org.jboss.seam.core.Manager;
-import org.jboss.seam.log.LogProvider;
-import org.jboss.seam.log.Logging;
-import org.jboss.seam.servlet.ContextualHttpServletRequest;
-import org.jboss.seam.servlet.ServletRequestSessionMap;
-import org.jboss.seam.web.AbstractFilter;
-import org.jboss.seam.web.ServletContexts;
-
-/**
- * Seam component that delegates requests to the {@link WicketFilter} and sets
- * up and pulls down Seam {@link Context}s for the request.
- * <p>
- * Users do not have to install this filter, but instead just install
- * {@link WicketFilter} like they would normally do. This Seam component
- * automatically attaches to it.
- * </p>
- * <p>
- * The filter automatically picks up the {@link WebApplication} when there is
- * only one active for the web application this filter is configured for. If
- * there are multiple Wicket applications active in the web application, you'll
- * have to explicitly configure which one to use by providing filter init
- * parameter 'applicationName', which corresponds to the filter name of the
- * Wicket filter for the application you want to use this filter with.
- * </p>
- *
- * @author eelcohillenius
- */
-@Scope(APPLICATION)
-(a)Name("org.apache.wicket.seam.WicketSeamFilter")
-@Install(classDependencies = { "org.apache.wicket.protocol.http.WebApplication"
}, precedence = BUILT_IN)
-@BypassInterceptors
-@Filter()
-public class WicketSeamFilter extends AbstractFilter {
-
- private static final class WicketSeamFilterConfigurationException extends
- IllegalStateException {
- public WicketSeamFilterConfigurationException(String msg) {
- super(msg);
- }
- }
-
- private static final String APPLICATION_NONE = "<none>";
-
- private static LogProvider log = Logging.getLogProvider(WicketSeamFilter.class);
-
- private String applicationName = null;
-
- private WicketFilter delegate = null;
-
- /**
- * Construct.
- */
- public WicketSeamFilter() {
- }
-
- @SuppressWarnings("unchecked")
- public void doFilter(final ServletRequest servletRequest,
- final ServletResponse servletResponse, final FilterChain filterChain)
- throws IOException, ServletException {
-
- // Check for the Wicket filter (which might be initialized after this
- // filter, hence the lazy loading). Synchronization is not important.
- if (delegate == null && !APPLICATION_NONE.equals(applicationName)) {
-
- if (applicationName == null) {
- Set<String> applicationKeys = Application.getApplicationKeys();
- if (applicationKeys.size() > 1) {
- throw new WicketSeamFilterConfigurationException(
- "If you run this filter in the context of multiple Wicket "
- + "application instances (/ filters) you have to provide filer "
- + "init parameter 'applicationName' which should correspond to
"
- + "the filter name you want to use this filter with.");
- } else if (applicationKeys.size() == 0) {
- // no Wicket apps configured... set to special name
- applicationName = APPLICATION_NONE;
- } else {
- applicationName = applicationKeys.iterator().next();
- }
- }
- Application application = (!APPLICATION_NONE
- .equals(applicationName)) ? Application
- .get(applicationName) : null;
- if (application != null && !(application instanceof WebApplication)) {
- log
- .warn("This filter can only be used with Wicket WebApplications. Currently,
"
- + "it is configured to work with an application of type "
- + application.getClass().getName());
- applicationName = APPLICATION_NONE;
- filterChain.doFilter(servletRequest, servletResponse);
- return;
- }
-
- WebApplication webApplication = (WebApplication) application;
- if (webApplication == null) {
- log
- .warn("ignoring request: no Wicket web application instance found");
- applicationName = APPLICATION_NONE;
- filterChain.doFilter(servletRequest, servletResponse);
- return;
- }
-
- delegate = webApplication.getWicketFilter();
- }
-
- new ContextualHttpServletRequest((HttpServletRequest) servletRequest)
- {
- @Override
- public void process() throws Exception
- {
- delegate.doFilter(servletRequest, servletResponse, filterChain);
- }
-
- }.run();
- }
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- super.init(filterConfig);
- this.applicationName = filterConfig.getInitParameter("applicationName");
- }
-}
Copied: trunk/src/wicket/org/jboss/seam/wicket/BijectedAttribute.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedAttribute.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/BijectedAttribute.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/BijectedAttribute.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,14 @@
+package org.jboss.seam.wicket;
+
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+
+public interface BijectedAttribute<T extends Annotation>
+{
+ public String getName();
+ public T getAnnotation();
+ public Class getType();
+ public void set(Object bean, Object value);
+ public Object get(Object bean);
+ public MetaModel getMetaModel();
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/BijectedField.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedField.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/BijectedField.java (rev
0)
+++ trunk/src/wicket/org/jboss/seam/wicket/BijectedField.java 2008-02-04 17:27:54 UTC (rev
7358)
@@ -0,0 +1,54 @@
+package org.jboss.seam.wicket;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+
+public class BijectedField<T extends Annotation> implements
BijectedAttribute<T>
+ {
+ private String name;
+ private Field field;
+ private T annotation;
+ private MetaModel metaModel;
+
+ public BijectedField(String name, Field field, T annotation, MetaModel metaModel)
+ {
+ this.name = name;
+ this.field = field;
+ this.annotation = annotation;
+ this.metaModel = metaModel;
+ }
+ public String getName()
+ {
+ return name;
+ }
+ public Field getField()
+ {
+ return field;
+ }
+ public T getAnnotation()
+ {
+ return annotation;
+ }
+ public Class getType()
+ {
+ return field.getType();
+ }
+ public void set(Object bean, Object value)
+ {
+ metaModel.setFieldValue(bean, field, name, value);
+ }
+ public Object get(Object bean)
+ {
+ return metaModel.getFieldValue(bean, field, name);
+ }
+ @Override
+ public String toString()
+ {
+ return "BijectedField(" + name + ')';
+ }
+
+ public MetaModel getMetaModel()
+ {
+ return metaModel;
+ }
+ }
\ No newline at end of file
Copied: trunk/src/wicket/org/jboss/seam/wicket/BijectedMethod.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedMethod.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/BijectedMethod.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/BijectedMethod.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,53 @@
+package org.jboss.seam.wicket;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+public class BijectedMethod<T extends Annotation> implements
BijectedAttribute<T>
+ {
+ private String name;
+ private Method method;
+ private T annotation;
+ private MetaModel metaModel;
+
+ public BijectedMethod(String name, Method method, T annotation, MetaModel
metaModel)
+ {
+ this.name = name;
+ this.method = method;
+ this.annotation = annotation;
+ }
+ public String getName()
+ {
+ return name;
+ }
+ public Method getMethod()
+ {
+ return method;
+ }
+ public T getAnnotation()
+ {
+ return annotation;
+ }
+ public void set(Object bean, Object value)
+ {
+ metaModel.setPropertyValue(bean, method, name, value);
+ }
+ public Object get(Object bean)
+ {
+ return metaModel.getPropertyValue(bean, method, name);
+ }
+ public Class getType()
+ {
+ return method.getParameterTypes()[0];
+ }
+ @Override
+ public String toString()
+ {
+ return "BijectedMethod(" + name + ')';
+ }
+
+ public MetaModel getMetaModel()
+ {
+ return metaModel;
+ }
+ }
\ No newline at end of file
Copied: trunk/src/wicket/org/jboss/seam/wicket/BijectedProperty.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/BijectedProperty.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/BijectedProperty.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/BijectedProperty.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,66 @@
+package org.jboss.seam.wicket;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import org.jboss.seam.util.Reflections;
+
+public class BijectedProperty<T extends Annotation> implements
BijectedAttribute<T>
+ {
+
+ private BijectedMethod<T> getter;
+ private BijectedMethod<T> setter;
+ private MetaModel metaModel;
+
+ public BijectedProperty(String name, Method getter, Method setter, T annotation,
MetaModel metaModel)
+ {
+ this.getter = new BijectedMethod(name, getter, annotation, metaModel);
+ this.setter = new BijectedMethod(name, setter, annotation, metaModel);
+ }
+
+ public BijectedProperty(String name, Method getter, T annotation, MetaModel
metaModel)
+ {
+ this.getter = new BijectedMethod(name, getter, annotation, metaModel);
+ try
+ {
+ Method setterMethod = Reflections.getSetterMethod(getter.getDeclaringClass(),
name);
+ this.setter = new BijectedMethod(name, setterMethod, annotation, metaModel);
+ }
+ catch (IllegalArgumentException e) {}
+ }
+
+ public Object get(Object bean)
+ {
+ return getter.get(bean);
+ }
+
+ public T getAnnotation()
+ {
+ return getter.getAnnotation();
+ }
+
+ public String getName()
+ {
+ return getter.getName();
+ }
+
+ public Class getType()
+ {
+ return getter.getType();
+ }
+
+ public void set(Object bean, Object value)
+ {
+ if (setter == null)
+ {
+ throw new IllegalArgumentException("Component must have a setter for
" + metaModel.getName());
+ }
+ setter.set(bean, value);
+ }
+
+ public MetaModel getMetaModel()
+ {
+ return metaModel;
+ }
+
+ }
\ No newline at end of file
Copied: trunk/src/wicket/org/jboss/seam/wicket/InjectionInterceptor.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionInterceptor.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/InjectionInterceptor.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/InjectionInterceptor.java 2008-02-04 17:27:54
UTC (rev 7358)
@@ -0,0 +1,112 @@
+package org.jboss.seam.wicket;
+
+import static org.jboss.seam.ScopeType.STATELESS;
+import static org.jboss.seam.ScopeType.UNSPECIFIED;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.Namespace;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.core.Expressions;
+import org.jboss.seam.core.Init;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.util.Reflections;
+
+import javassist.util.proxy.MethodHandler;
+
+public class InjectionInterceptor implements MethodHandler, Serializable
+{
+
+ private String name;
+ private In annotation;
+ private String metaModelName;
+ private transient MetaModel metaModel;
+
+ public InjectionInterceptor(BijectedAttribute<In> in)
+ {
+ this.name = in.getName();
+ this.annotation = in.getAnnotation();
+ this.metaModelName = in.getMetaModel().getMetaModelName();
+ }
+
+ private static LogProvider log = Logging.getLogProvider(InjectionInterceptor.class);
+
+ public Object invoke(final Object proxy, final Method method, final Method proceed,
final Object[] params) throws Throwable
+ {
+ return Reflections.invoke(method, getValueToInject(proxy), params);
+ }
+
+ private Object getValueToInject(Object bean)
+ {
+ if ( name.startsWith("#") )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.trace("trying to inject with EL expression: " + name);
+ }
+ return Expressions.instance().createValueExpression(name).getValue();
+ }
+ else if ( annotation.scope()==UNSPECIFIED )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.trace("trying to inject with hierarchical context search: " +
name);
+ }
+ return getInstanceInAllNamespaces(name, annotation.create());
+ }
+ else
+ {
+ if ( annotation.create() )
+ {
+ throw new IllegalArgumentException(
+ "cannot combine create=true with explicit scope on @In: " +
+ getMetaModel().getAttributeMessage(name)
+ );
+ }
+ if ( annotation.scope()==STATELESS )
+ {
+ throw new IllegalArgumentException(
+ "cannot specify explicit scope=STATELESS on @In: " +
+ getMetaModel().getAttributeMessage(name)
+ );
+ }
+
+
+ log.trace("trying to inject from specified context: " + name);
+
+ if ( annotation.scope().isContextActive() )
+ {
+ return annotation.scope().getContext().get(name);
+ }
+ }
+ return null;
+ }
+
+ private Object getInstanceInAllNamespaces(String name, boolean create)
+ {
+ Object result;
+ result = Component.getInstance(name, create);
+ if (result==null)
+ {
+ for ( Namespace namespace: Init.instance().getGlobalImports() )
+ {
+ result = namespace.getComponentInstance(name, create);
+ if (result!=null) break;
+ }
+ }
+ return result;
+ }
+
+ private MetaModel getMetaModel()
+ {
+ if (metaModel == null)
+ {
+ metaModel = MetaModel.forName(metaModelName);
+ }
+ return metaModel;
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/InjectionSupport.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/InjectionSupport.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/InjectionSupport.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/InjectionSupport.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,91 @@
+package org.jboss.seam.wicket;
+
+import static org.jboss.seam.wicket.MetaModelUtils.createProxyFactory;
+import static org.jboss.seam.wicket.MetaModelUtils.toName;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javassist.util.proxy.ProxyObject;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.Namespace;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.core.Init;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+
+
+public class InjectionSupport
+{
+
+ // TODO Ouch
+ private static final Map<Class, Class<ProxyObject>> proxyFactories = new
HashMap<Class, Class<ProxyObject>>();
+
+ private LogProvider log = Logging.getLogProvider(InjectionSupport.class);
+
+ private List<BijectedAttribute<In>> inAttributes = new
ArrayList<BijectedAttribute<In>>();
+
+ private MetaModel metaModel;
+
+ public InjectionSupport(MetaModel metaModel)
+ {
+ this.metaModel = metaModel;
+ }
+
+ public void add(Method method)
+ {
+ if ( method.isAnnotationPresent(In.class) )
+ {
+ In in = method.getAnnotation(In.class);
+ String name = toName( in.value(), method );
+ inAttributes.add( new BijectedMethod(name, method, in, metaModel) );
+ }
+ }
+
+ public void add(Field field)
+ {
+ if ( field.isAnnotationPresent(In.class) )
+ {
+ In in = field.getAnnotation(In.class);
+ String name = toName( in.value(), field );
+ inAttributes.add( new BijectedField(name, field, in, metaModel) );
+ }
+ }
+
+ public void inject(Object instance) throws Exception
+ {
+ for ( BijectedAttribute<In> in : inAttributes )
+ {
+ // Currently need a proxy here as Wicket has no native support for interceptors
+ // TODO Replace this with a Seam ClientSide interceptor. Needs JBSEAM-699
+ in.set( instance, wrap( instance, in ) );
+ }
+ }
+
+ private static Object wrap(Object bean, BijectedAttribute<In> in) throws
Exception
+ {
+ ProxyObject proxy = getProxyFactory(in.getType()).newInstance();
+ proxy.setHandler(new InjectionInterceptor(in));
+ return proxy;
+ }
+
+ private static Class<ProxyObject> getProxyFactory(Class type)
+ {
+ if (proxyFactories.containsKey(type))
+ {
+ return proxyFactories.get(type);
+ }
+ else
+ {
+ Class<ProxyObject> factory = createProxyFactory( type );
+ proxyFactories.put(type, factory);
+ return factory;
+ }
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/LoggerSupport.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/LoggerSupport.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/LoggerSupport.java (rev
0)
+++ trunk/src/wicket/org/jboss/seam/wicket/LoggerSupport.java 2008-02-04 17:27:54 UTC (rev
7358)
@@ -0,0 +1,58 @@
+package org.jboss.seam.wicket;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.seam.util.Reflections;
+
+// TODO Reimplement as Seam ClientSide Interceptor
+public class LoggerSupport
+{
+
+ private List<Field> logFields = new ArrayList<Field>();
+ private List<org.jboss.seam.log.Log> logInstances = new
ArrayList<org.jboss.seam.log.Log>();
+
+ private MetaModel metaModel;
+
+ public LoggerSupport(MetaModel metaModel)
+ {
+ this.metaModel = metaModel;
+ }
+
+ public void add(Field field)
+ {
+ if ( field.isAnnotationPresent(org.jboss.seam.annotations.Logger.class) )
+ {
+ String category =
field.getAnnotation(org.jboss.seam.annotations.Logger.class).value();
+ org.jboss.seam.log.Log logInstance;
+ if ( "".equals( category ) )
+ {
+ logInstance = org.jboss.seam.log.Logging.getLog(metaModel.getBeanClass());
+ }
+ else
+ {
+ logInstance = org.jboss.seam.log.Logging.getLog(category);
+ }
+ if ( Modifier.isStatic( field.getModifiers() ) )
+ {
+ Reflections.setAndWrap(field, null, logInstance);
+ }
+ else
+ {
+ logFields.add(field);
+ logInstances.add(logInstance);
+ }
+ }
+ }
+
+ public void inject(Object instance) throws Exception
+ {
+ for (int i=0; i<logFields.size(); i++)
+ {
+ metaModel.setFieldValue( instance, logFields.get(i), "log",
logInstances.get(i) );
+ }
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/MetaModel.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModel.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/MetaModel.java (rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/MetaModel.java 2008-02-04 17:27:54 UTC (rev
7358)
@@ -0,0 +1,144 @@
+package org.jboss.seam.wicket;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.jboss.seam.Model;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.util.Reflections;
+
+public abstract class MetaModel extends Model
+{
+
+ private InjectionSupport injectionSupport;
+ private OutjectionSupport outjectionSupport;
+ private LoggerSupport loggerSupport;
+
+ public MetaModel(Class<?> beanClass)
+ {
+ super(beanClass);
+ injectionSupport = new InjectionSupport(this);
+ outjectionSupport = new OutjectionSupport(this);
+ loggerSupport = new LoggerSupport(this);
+ scan();
+ }
+
+ public void initialize()
+ {
+ scan();
+ }
+
+ public void inject(Object instance) throws Exception
+ {
+ injectionSupport.inject(instance);
+ loggerSupport.inject(instance);
+ }
+
+ public void outject(Object instance)
+ {
+ outjectionSupport.outject(instance);
+ }
+
+ private void scan()
+ {
+ Class clazz = getBeanClass();
+ for ( ; clazz!=Object.class; clazz = clazz.getSuperclass() )
+ {
+ for ( Method method: clazz.getDeclaredMethods() )
+ {
+ scanMethod(method);
+ }
+
+ for ( Field field: clazz.getDeclaredFields() )
+ {
+ scanField(field);
+ }
+ }
+ }
+
+ private void scanField(Field field)
+ {
+ if ( !field.isAccessible() )
+ {
+ field.setAccessible(true);
+ }
+ injectionSupport.add(field);
+ loggerSupport.add(field);
+ }
+
+ private void scanMethod(Method method)
+ {
+ injectionSupport.add(method);
+ }
+
+ protected void setFieldValue(Object bean, Field field, String name, Object value)
+ {
+ try
+ {
+ Reflections.set(field, bean, value);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("could not set field value: " +
getAttributeMessage(name), e);
+ }
+ }
+
+ protected Object getFieldValue(Object bean, Field field, String name)
+ {
+ try {
+ return Reflections.get(field, bean);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("could not get field value: " +
getAttributeMessage(name), e);
+ }
+ }
+
+ protected String getAttributeMessage(String attributeName)
+ {
+ return getName() + '.' + attributeName;
+ }
+
+ protected String getName()
+ {
+ return getBeanClass().getName();
+ }
+
+ protected abstract String getMetaModelName();
+
+ protected void setPropertyValue(Object bean, Method method, String name, Object
value)
+ {
+ try
+ {
+ Reflections.invoke(method, bean, value );
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("could not set property value: " +
getAttributeMessage(name), e);
+ }
+ }
+
+ public Object getPropertyValue(Object bean, Method method, String name)
+ {
+ try {
+ return Reflections.invoke(method, bean);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("could not get property value: " +
getAttributeMessage(name), e);
+ }
+ }
+
+ public static MetaModel forName(String name)
+ {
+ if (Contexts.isApplicationContextActive())
+ {
+ return (MetaModel) Contexts.getApplicationContext().get(name);
+ }
+ else
+ {
+ throw new IllegalStateException("Application context is not active");
+ }
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/MetaModelUtils.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/MetaModelUtils.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/MetaModelUtils.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/MetaModelUtils.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,48 @@
+package org.jboss.seam.wicket;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import javassist.util.proxy.ProxyObject;
+
+import org.jboss.seam.util.ProxyFactory;
+
+public class MetaModelUtils
+{
+
+ public static String toName(String name, Method method)
+ {
+ //TODO: does not handle "isFoo"
+ if (name==null || name.length() == 0)
+ {
+ name = method.getName().substring(3, 4).toLowerCase()
+ + method.getName().substring(4);
+ }
+ return name;
+ }
+
+ public static String toName(String name, Field field)
+ {
+ if (name==null || name.length() == 0)
+ {
+ name = field.getName();
+ }
+ return name;
+ }
+
+ public static Class<ProxyObject> createProxyFactory(final Class beanClass)
+ {
+ ProxyFactory factory = new ProxyFactory();
+ if (beanClass.isInterface())
+ {
+ factory.setInterfaces(new Class[] {beanClass, Serializable.class});
+ }
+ else
+ {
+ factory.setSuperclass( beanClass );
+ }
+ return factory.createClass();
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/ModelValidator.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/ModelValidator.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/ModelValidator.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/ModelValidator.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,51 @@
+package org.jboss.seam.wicket;
+
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidationError;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidationError;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+import org.jboss.seam.core.Validators;
+
+
+/**
+ *
+ * An implementation of Hibernate Model Validation for Wicket
+ *
+ * @author Pete Muir
+ *
+ */
+public class ModelValidator implements IValidator
+{
+
+ private Class clazz;
+ private String property;
+
+ public ModelValidator(Class clazz, String property)
+ {
+ this.clazz = clazz;
+ this.property = property;
+ }
+
+ public ModelValidator(PropertyModel propertyModel)
+ {
+ this.clazz = propertyModel.getTarget().getClass();
+ this.property = propertyModel.getPropertyExpression();
+ }
+
+ public void validate(IValidatable validatable)
+ {
+ System.out.println("model validator " + property + " / " +
clazz);
+ ClassValidator classValidator = Validators.instance().getValidator(clazz);
+ InvalidValue[] invalidValues = classValidator.getPotentialInvalidValues(property,
validatable.getValue());
+ if (invalidValues.length > 0)
+ {
+ String message = invalidValues[0].getMessage();
+ IValidationError validationError = new ValidationError().setMessage(message);
+ validatable.error(validationError);
+ }
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/OutjectionSupport.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/OutjectionSupport.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/OutjectionSupport.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/OutjectionSupport.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,94 @@
+package org.jboss.seam.wicket;
+
+import static org.jboss.seam.ScopeType.STATELESS;
+import static org.jboss.seam.ScopeType.UNSPECIFIED;
+import static org.jboss.seam.wicket.MetaModelUtils.toName;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.seam.RequiredException;
+import org.jboss.seam.annotations.Out;
+
+
+public class OutjectionSupport
+{
+
+ private List<BijectedAttribute<Out>> outAttributes = new
ArrayList<BijectedAttribute<Out>>();
+
+ private MetaModel metaModel;
+
+ public OutjectionSupport(MetaModel metaModel)
+ {
+ this.metaModel = metaModel;
+ }
+
+ public void add(Method method)
+ {
+ Out out = method.getAnnotation(Out.class);
+ String name = toName( out.value(), method );
+ outAttributes.add( new BijectedMethod(name, method, out, metaModel) );
+ }
+
+ public void add(Field field)
+ {
+ if ( field.isAnnotationPresent(Out.class) )
+ {
+ Out out = field.getAnnotation(Out.class);
+ String name = toName( out.value(), field );
+ outAttributes.add(new BijectedField(name, field, out, metaModel) );
+ }
+ }
+
+ public void outject(Object instance)
+ {
+ for ( BijectedAttribute<Out> att: outAttributes )
+ {
+ outjectAttribute( att.getAnnotation(), att.getName(), instance,
att.get(instance) );
+ }
+ }
+
+ private void outjectAttribute(Out out, String name, Object bean, Object value)
+ {
+
+ if (value==null && out.required())
+ {
+ throw new RequiredException(
+ "@Out attribute requires non-null value: " +
+ metaModel.getAttributeMessage(name)
+ );
+ }
+ else
+ {
+ if ( out.scope()==UNSPECIFIED )
+ {
+ throw new IllegalArgumentException(
+ "Must specify a scope to outject to: " +
+ metaModel.getAttributeMessage(name)
+ );
+ }
+ else if ( out.scope()==STATELESS )
+ {
+ throw new IllegalArgumentException(
+ "cannot specify explicit scope=STATELESS on @Out: " +
+ metaModel.getAttributeMessage(name)
+ );
+ }
+
+ if ( out.scope().isContextActive() )
+ {
+ if (value==null)
+ {
+ out.scope().getContext().remove(name);
+ }
+ else
+ {
+ out.scope().getContext().set(name, value);
+ }
+ }
+ }
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/SeamAuthorizationStrategy.java (from rev
7355, trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamAuthorizationStrategy.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/SeamAuthorizationStrategy.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/SeamAuthorizationStrategy.java 2008-02-04
17:27:54 UTC (rev 7358)
@@ -0,0 +1,72 @@
+package org.jboss.seam.wicket;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.RestartResponseAtInterceptPageException;
+import org.apache.wicket.authorization.Action;
+import org.apache.wicket.authorization.IAuthorizationStrategy;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.security.NotLoggedInException;
+import org.jboss.seam.util.Strings;
+
+public class SeamAuthorizationStrategy implements IAuthorizationStrategy
+{
+
+ private LogProvider log = Logging.getLogProvider(SeamAuthorizationStrategy.class);
+ private Class loginPage;
+
+ public SeamAuthorizationStrategy()
+ {
+ this(null);
+ }
+
+ public SeamAuthorizationStrategy(final Class loginPage)
+ {
+ this.loginPage = loginPage;
+ }
+
+ // TODO Use permission schemes for this?
+ public boolean isActionAuthorized(Component component, Action action)
+ {
+ return isInstantiationAuthorized(component.getClass());
+ }
+
+ public boolean isInstantiationAuthorized(Class componentClass)
+ {
+ Restrict restrict = (Restrict) componentClass.getAnnotation(Restrict.class);
+ if ( restrict != null && Identity.isSecurityEnabled() )
+ {
+ String expr = !Strings.isEmpty( restrict.value() ) ? restrict.value() :
"#{identity.loggedIn}";
+ try
+ {
+ Identity.instance().checkRestriction(expr);
+ }
+ catch (NotLoggedInException e)
+ {
+ log.error("Unauthorized access to " + componentClass.getName() +
", user not logged in", e);
+ return handleException(componentClass);
+ }
+ catch (org.jboss.seam.security.AuthorizationException e)
+ {
+ log.error("Unauthorized access to " + componentClass.getName(),
e);
+ return handleException(componentClass);
+ }
+ }
+ return true;
+ }
+
+ private boolean handleException(Class componentClass)
+ {
+ if (Page.class.isAssignableFrom(componentClass))
+ {
+ // Redirect to page to let the user sign in
+ throw new RestartResponseAtInterceptPageException(loginPage);
+ }
+ return false;
+ }
+
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/SeamLink.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamLink.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/SeamLink.java (rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/SeamLink.java 2008-02-04 17:27:54 UTC (rev
7358)
@@ -0,0 +1,39 @@
+package org.jboss.seam.wicket;
+
+import org.apache.wicket.markup.html.link.ILinkListener;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.value.ValueMap;
+import org.jboss.seam.core.Conversation;
+import org.jboss.seam.core.Manager;
+
+public abstract class SeamLink extends Link
+{
+
+ public SeamLink(String id)
+ {
+ super(id);
+ }
+
+ public SeamLink(String id, IModel model)
+ {
+ super(id, model);
+ }
+
+ @Override
+ protected CharSequence getURL()
+ {
+ return getRequestCycle().urlFor(this, ILinkListener.INTERFACE, getParameterMap());
+ }
+
+ private ValueMap getParameterMap()
+ {
+ ValueMap valueMap = new ValueMap();
+ if (Conversation.instance().isLongRunning())
+ {
+ valueMap.add(Manager.instance().getConversationIdParameter(),
Conversation.instance().getId());
+ }
+ return valueMap;
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/SeamSupport.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SeamSupport.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/SeamSupport.java (rev
0)
+++ trunk/src/wicket/org/jboss/seam/wicket/SeamSupport.java 2008-02-04 17:27:54 UTC (rev
7358)
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.jboss.seam.wicket;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.application.IComponentInstantiationListener;
+
+/**
+ * Main support class for letting Wicket work with Seam annotations. Active
+ * support by calling {@link #activate(Application) the activate method}
+ * preferably from your {@link Application#init() application's init method}.
+ *
+ * @author eelcohillenius
+ * @author Pete Muir
+ */
+// TODO handle outjection etc. Might need onAfterRender and may
+// onBeforeRender for that, in which case this class can implement the
+// appropriate interfaces and register itself as a listener for them.
+// TODO handle method level sometime. For starters, see if there is any example/
+// test case/ whatever in Seam first that shows off that kind of usage
+public class SeamSupport implements IComponentInstantiationListener {
+
+ /**
+ * Activate support for Seam annotations on components for the provided
+ * application.
+ *
+ * @param application
+ * The application to active support for
+ */
+ public static void activate(Application application) {
+ SeamSupport listener = new SeamSupport();
+ application.addComponentInstantiationListener(listener);
+ }
+
+ /**
+ * @see
org.apache.wicket.application.IComponentInstantiationListener#onInstantiation(org.apache.wicket.Component)
+ */
+ public void onInstantiation(Component component)
+ {
+ WicketComponent wicketComponent = WicketComponent.forClass(component.getClass());
+ try
+ {
+ wicketComponent.inject(component);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/SimpleDataProvider.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/SimpleDataProvider.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/SimpleDataProvider.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/SimpleDataProvider.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,22 @@
+package org.jboss.seam.wicket;
+
+import java.io.Serializable;
+
+import org.apache.wicket.markup.repeater.data.IDataProvider;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public abstract class SimpleDataProvider implements IDataProvider
+{
+
+ public IModel model(Object object)
+ {
+ return new Model((Serializable) object);
+ }
+
+ public void detach()
+ {
+ // No - op
+ }
+
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/WicketComponent.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketComponent.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/WicketComponent.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/WicketComponent.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,47 @@
+package org.jboss.seam.wicket;
+
+import org.jboss.seam.contexts.Contexts;
+
+public class WicketComponent extends MetaModel
+{
+
+ public WicketComponent(Class<?> beanClass)
+ {
+ super(beanClass);
+ }
+
+ @Override
+ protected String getMetaModelName()
+ {
+ return getComponentName(getBeanClass());
+ }
+
+ protected static String getComponentName(Class clazz)
+ {
+ return clazz.getName() + ".wicketComponent";
+ }
+
+ public static WicketComponent forClass(Class clazz)
+ {
+ if (Contexts.isApplicationContextActive())
+ {
+ String metaModelName = getComponentName(clazz);
+ instantiate(metaModelName, clazz);
+ return (WicketComponent) forName(metaModelName);
+ }
+ else
+ {
+ throw new IllegalStateException("Application context is not active");
+ }
+ }
+
+ private static void instantiate(String componentName, Class clazz)
+ {
+ if (!Contexts.getApplicationContext().isSet(componentName))
+ {
+ WicketComponent component = new WicketComponent(clazz);
+ Contexts.getApplicationContext().set(componentName, component);
+ }
+ }
+
+}
Added: trunk/src/wicket/org/jboss/seam/wicket/WicketExceptionFilter.java
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/WicketExceptionFilter.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/WicketExceptionFilter.java 2008-02-04 17:27:54
UTC (rev 7358)
@@ -0,0 +1,44 @@
+package org.jboss.seam.wicket;
+
+import static org.jboss.seam.annotations.Install.FRAMEWORK;
+import static org.jboss.seam.ScopeType.APPLICATION;
+
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.annotations.web.Filter;
+import org.jboss.seam.web.AbstractFilter;
+
+/**
+ * Kill the redirect filter
+ * @author
+ */
+@Scope(APPLICATION)
+(a)Name("org.jboss.seam.web.exceptionFilter")
+@Install(precedence = FRAMEWORK,
classDependencies="org.apache.wicket.Application")
+@BypassInterceptors
+@Filter()
+public class WicketExceptionFilter extends AbstractFilter
+{
+
+
+ @Override
+ public boolean isDisabled()
+ {
+ return true;
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain
chain) throws IOException, ServletException
+ {
+
+
+ }
+}
Property changes on: trunk/src/wicket/org/jboss/seam/wicket/WicketExceptionFilter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: trunk/src/wicket/org/jboss/seam/wicket/WicketManager.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketManager.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/WicketManager.java (rev
0)
+++ trunk/src/wicket/org/jboss/seam/wicket/WicketManager.java 2008-02-04 17:27:54 UTC (rev
7358)
@@ -0,0 +1,48 @@
+package org.jboss.seam.wicket;
+
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.core.Manager;
+
+(a)Scope(ScopeType.EVENT)
+(a)Name("org.jboss.seam.core.manager")
+@Install(precedence=100, classDependencies="org.apache.wicket.Application")
+@BypassInterceptors
+public class WicketManager extends Manager
+{
+
+ private boolean controllingRedirect;
+
+ public String appendConversationIdFromRedirectFilter(String url, String viewId)
+ {
+ boolean appendConversationId = !controllingRedirect;
+ if (appendConversationId)
+ {
+ beforeRedirect(viewId);
+ url = encodeConversationId(url, viewId);
+ }
+ return url;
+ }
+
+ /**
+ * Temporarily promote a temporary conversation to
+ * a long running conversation for the duration of
+ * a browser redirect. After the redirect, the
+ * conversation will be demoted back to a temporary
+ * conversation. Handle any changes to the conversation
+ * id, due to propagation via natural id.
+ */
+ public void beforeRedirect(String viewId)
+ {
+ // TODO - do something here!
+ }
+
+ public static WicketManager instance()
+ {
+ return (WicketManager) Manager.instance();
+ }
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/WicketRedirectFilter.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketRedirectFilter.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/WicketRedirectFilter.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/WicketRedirectFilter.java 2008-02-04 17:27:54
UTC (rev 7358)
@@ -0,0 +1,43 @@
+package org.jboss.seam.wicket;
+
+import static org.jboss.seam.ScopeType.APPLICATION;
+import static org.jboss.seam.annotations.Install.FRAMEWORK;
+
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.web.AbstractFilter;
+
+/**
+ * Kill the redirect filter
+ *
+ * @author
+ */
+@Scope(APPLICATION)
+(a)Name("org.jboss.seam.web.redirectFilter")
+@Install(precedence = FRAMEWORK,
classDependencies="org.apache.wicket.Application")
+@BypassInterceptors
+public class WicketRedirectFilter extends AbstractFilter
+{
+
+
+ @Override
+ public boolean isDisabled()
+ {
+ return true;
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain
chain) throws IOException, ServletException
+ {
+
+
+ }
+}
Copied: trunk/src/wicket/org/jboss/seam/wicket/WicketSeamFilter.java (from rev 7355,
trunk/examples/wicket/src/web/org/jboss/seam/wicket/WicketSeamFilter.java)
===================================================================
--- trunk/src/wicket/org/jboss/seam/wicket/WicketSeamFilter.java
(rev 0)
+++ trunk/src/wicket/org/jboss/seam/wicket/WicketSeamFilter.java 2008-02-04 17:27:54 UTC
(rev 7358)
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.jboss.seam.wicket;
+
+import static org.jboss.seam.ScopeType.APPLICATION;
+import static org.jboss.seam.annotations.Install.BUILT_IN;
+
+import java.io.IOException;
+import java.util.Set;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WicketFilter;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.annotations.web.Filter;
+import org.jboss.seam.contexts.Context;
+import org.jboss.seam.contexts.ServletLifecycle;
+import org.jboss.seam.core.ConversationPropagation;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.servlet.ContextualHttpServletRequest;
+import org.jboss.seam.servlet.ServletRequestSessionMap;
+import org.jboss.seam.web.AbstractFilter;
+import org.jboss.seam.web.ServletContexts;
+
+/**
+ * Seam component that delegates requests to the {@link WicketFilter} and sets
+ * up and pulls down Seam {@link Context}s for the request.
+ * <p>
+ * Users do not have to install this filter, but instead just install
+ * {@link WicketFilter} like they would normally do. This Seam component
+ * automatically attaches to it.
+ * </p>
+ * <p>
+ * The filter automatically picks up the {@link WebApplication} when there is
+ * only one active for the web application this filter is configured for. If
+ * there are multiple Wicket applications active in the web application, you'll
+ * have to explicitly configure which one to use by providing filter init
+ * parameter 'applicationName', which corresponds to the filter name of the
+ * Wicket filter for the application you want to use this filter with.
+ * </p>
+ *
+ * @author eelcohillenius
+ */
+@Scope(APPLICATION)
+(a)Name("org.apache.wicket.seam.WicketSeamFilter")
+@Install(classDependencies = { "org.apache.wicket.protocol.http.WebApplication"
}, precedence = BUILT_IN)
+@BypassInterceptors
+@Filter()
+public class WicketSeamFilter extends AbstractFilter {
+
+ private static final class WicketSeamFilterConfigurationException extends
+ IllegalStateException {
+ public WicketSeamFilterConfigurationException(String msg) {
+ super(msg);
+ }
+ }
+
+ private static final String APPLICATION_NONE = "<none>";
+
+ private static LogProvider log = Logging.getLogProvider(WicketSeamFilter.class);
+
+ private String applicationName = null;
+
+ private WicketFilter delegate = null;
+
+ /**
+ * Construct.
+ */
+ public WicketSeamFilter() {
+ }
+
+ @SuppressWarnings("unchecked")
+ public void doFilter(final ServletRequest servletRequest,
+ final ServletResponse servletResponse, final FilterChain filterChain)
+ throws IOException, ServletException {
+
+ // Check for the Wicket filter (which might be initialized after this
+ // filter, hence the lazy loading). Synchronization is not important.
+ if (delegate == null && !APPLICATION_NONE.equals(applicationName)) {
+
+ if (applicationName == null) {
+ Set<String> applicationKeys = Application.getApplicationKeys();
+ if (applicationKeys.size() > 1) {
+ throw new WicketSeamFilterConfigurationException(
+ "If you run this filter in the context of multiple Wicket "
+ + "application instances (/ filters) you have to provide filer "
+ + "init parameter 'applicationName' which should correspond to
"
+ + "the filter name you want to use this filter with.");
+ } else if (applicationKeys.size() == 0) {
+ // no Wicket apps configured... set to special name
+ applicationName = APPLICATION_NONE;
+ } else {
+ applicationName = applicationKeys.iterator().next();
+ }
+ }
+ Application application = (!APPLICATION_NONE
+ .equals(applicationName)) ? Application
+ .get(applicationName) : null;
+ if (application != null && !(application instanceof WebApplication)) {
+ log
+ .warn("This filter can only be used with Wicket WebApplications. Currently,
"
+ + "it is configured to work with an application of type "
+ + application.getClass().getName());
+ applicationName = APPLICATION_NONE;
+ filterChain.doFilter(servletRequest, servletResponse);
+ return;
+ }
+
+ WebApplication webApplication = (WebApplication) application;
+ if (webApplication == null) {
+ log
+ .warn("ignoring request: no Wicket web application instance found");
+ applicationName = APPLICATION_NONE;
+ filterChain.doFilter(servletRequest, servletResponse);
+ return;
+ }
+
+ delegate = webApplication.getWicketFilter();
+ }
+
+ new ContextualHttpServletRequest((HttpServletRequest) servletRequest)
+ {
+ @Override
+ public void process() throws Exception
+ {
+ delegate.doFilter(servletRequest, servletResponse, filterChain);
+ }
+
+ }.run();
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+ super.init(filterConfig);
+ this.applicationName = filterConfig.getInitParameter("applicationName");
+ }
+}
Added: trunk/src/wicket/seam.properties
===================================================================