Seam SVN: r12114 - modules/xml/trunk.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-06 18:00:24 -0500 (Sat, 06 Mar 2010)
New Revision: 12114
Added:
modules/xml/trunk/pom.xml
Log:
added parent pom to seam-xml
Added: modules/xml/trunk/pom.xml
===================================================================
--- modules/xml/trunk/pom.xml (rev 0)
+++ modules/xml/trunk/pom.xml 2010-03-06 23:00:24 UTC (rev 12114)
@@ -0,0 +1,82 @@
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>weld-parent</artifactId>
+ <groupId>org.jboss.weld</groupId>
+ <version>8</version>
+ </parent>
+
+ <groupId>org.jboss.seam.remoting</groupId>
+ <artifactId>seam-xml-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>3.0.0-SNAPSHOT</version>
+ <name>Seam XML Parent</name>
+
+ <modules>
+ <module>core</module>
+ <module>docs</module>
+ <module>examples/princess-rescue</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-5</version>
+ <configuration>
+ <descriptors>
+ <descriptor>assembly.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>javax.el</groupId>
+ <artifactId>el-api</artifactId>
+ <version>2.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.enterprise</groupId>
+ <artifactId>cdi-api</artifactId>
+ <version>1.0-SP1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <!-- Snapshots repo to get parent -->
+ <repositories>
+ <repository>
+ <id>oss.sonatype.org/jboss-snapshots</id>
+ <name>JBoss (Nexus) Snapshots Repository</name>
+ <url>http://oss.sonatype.org/content/repositories/jboss-snapshots</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ </snapshots>
+ </repository>
+ </repositories>
+
+ <scm>
+ <connection>scm:svn:http://anonsvn.jboss.org/repos/seam/modules/xml/trunk</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/seam/modules/xml/trunk</developerConnection>
+ <url>http://fisheye.jboss.org/browse/Seam/modules/xml/trunk</url>
+ </scm>
+
+</project>
16 years, 1 month
Seam SVN: r12113 - in modules/xml/trunk: core and 6 other directories.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-06 17:58:32 -0500 (Sat, 06 Mar 2010)
New Revision: 12113
Added:
modules/xml/trunk/core/
modules/xml/trunk/core/pom.xml
modules/xml/trunk/core/src/
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
Removed:
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java
modules/xml/trunk/pom.xml
modules/xml/trunk/src/
Modified:
modules/xml/trunk/examples/princess-rescue/pom.xml
Log:
changed structure of seam-xml
Copied: modules/xml/trunk/core/pom.xml (from rev 12110, modules/xml/trunk/pom.xml)
===================================================================
--- modules/xml/trunk/core/pom.xml (rev 0)
+++ modules/xml/trunk/core/pom.xml 2010-03-06 22:58:32 UTC (rev 12113)
@@ -0,0 +1,105 @@
+<?xml version="1.0"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>seam-parent</artifactId>
+ <groupId>org.jboss.seam</groupId>
+ <version>3.0.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>seam-xml-core</artifactId>
+ <packaging>jar</packaging>
+ <version>3.0.0-SNAPSHOT</version>
+ <name>Seam XML Extension Core</name>
+
+ <repositories>
+ <repository>
+ <id>oss.sonatype.org/jboss-snapshots</id>
+ <name>JBoss (Nexus) Snapshots Repository</name>
+ <url>http://oss.sonatype.org/content/repositories/jboss-snapshots</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ </snapshots>
+ </repository>
+ </repositories>
+
+ <properties>
+ <seam.version>3.0.0-SNAPSHOT</seam.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax.enterprise</groupId>
+ <artifactId>cdi-api</artifactId>
+ <version>1.0-SP1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.weld</groupId>
+ <artifactId>weld-core</artifactId>
+ <version>1.0.1-Final</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.weld</groupId>
+ <artifactId>weld-extensions-core</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.weld</groupId>
+ <artifactId>weld-se</artifactId>
+ <version>1.0.1-Final</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.10</version>
+ <type>jar</type>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <scm>
+ <connection>scm:svn:http://anonsvn.jboss.org/repos/seam/modules/xml/trunk/core</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/seam/modules/xml/trunk/core</developerConnection>
+ <url>http://fisheye.jboss.org/browse/Seam/modules/xml/trunk/core</url>
+ </scm>
+
+ <build>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <configuration>
+ <workspace>${basedir}</workspace>
+
+ <downloadJavadocs>true</downloadJavadocs>
+ <downloadSources>true</downloadSources>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>once</forkMode>
+ <argLine>-Xmx512m</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Copied: modules/xml/trunk/core/src (from rev 12110, modules/xml/trunk/src)
Deleted: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,210 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.bootstrap;
-
-import java.lang.annotation.Annotation;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeforeBeanDiscovery;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.ProcessAnnotatedType;
-import javax.enterprise.inject.spi.ProcessInjectionTarget;
-
-import org.jboss.seam.xml.core.BeanResult;
-import org.jboss.seam.xml.core.XmlId;
-import org.jboss.seam.xml.core.XmlResult;
-import org.jboss.seam.xml.fieldset.FieldValueObject;
-import org.jboss.seam.xml.fieldset.InjectionTargetWrapper;
-import org.jboss.seam.xml.model.ModelBuilder;
-import org.jboss.seam.xml.parser.ParserMain;
-import org.jboss.seam.xml.parser.SaxNode;
-import org.jboss.seam.xml.util.FileDataReader;
-import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
-import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
-
-public class XmlExtension implements Extension
-{
-
- AnnotationInstanceProvider ac = new AnnotationInstanceProvider();
-
- static final String PROVIDERS_FILE = "META-INF/services/org.jboss.seam.xml.XmlExtension";
-
- List<XmlResult> results = new ArrayList<XmlResult>();
-
- Set<Class<?>> veto = new HashSet<Class<?>>();
-
- Map<Class<?>, AnnotatedType<?>> types = new HashMap<Class<?>, AnnotatedType<?>>();
-
- Map<Class<?>, BeanResult<?>> beanExtensions = new HashMap<Class<?>, BeanResult<?>>();
-
- int count = 0;
-
- /**
- * map of syntetic bean id to a list of field value objects
- */
- Map<Integer, List<FieldValueObject>> fieldValues = new HashMap<Integer, List<FieldValueObject>>();
-
- List<Exception> errors = new ArrayList<Exception>();
-
- /**
- * This is the entry point for the extension
- */
- public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event)
- {
- List<Class<? extends XmlDocumentProvider>> providers = getDocumentProviders();
- for (Class<? extends XmlDocumentProvider> cl : providers)
- {
- try
- {
- XmlDocumentProvider provider = cl.newInstance();
- provider.open();
- XmlDocument d;
- while ((d = provider.getNextDocument()) != null)
- {
- ParserMain parser = new ParserMain();
- ModelBuilder builder = new ModelBuilder();
- SaxNode parentNode = parser.parse(d.getInputSource(), d.getFileUrl(), errors);
- results.add(builder.build(parentNode));
- }
- }
- catch (Exception e)
- {
- errors.add(e);
- }
- }
-
- for (XmlResult r : results)
- {
- if (!r.getProblems().isEmpty())
- {
-
- for (String i : r.getProblems())
- {
- errors.add(new RuntimeException(i));
- }
- }
- for (BeanResult<?> b : r.getFieldValues().keySet())
- {
- int val = count++;
- fieldValues.put(val, r.getFieldValues().get(b));
- Map<String, Object> am = new HashMap<String, Object>();
- am.put("value", val);
- Annotation a = ac.get(XmlId.class, am);
- b.getBuilder().addToClass(a);
- }
-
- for (Class<? extends Annotation> b : r.getQualifiers())
- {
- event.addQualifier(b);
- }
- for (Class<? extends Annotation> b : r.getInterceptorBindings())
- {
- event.addInterceptorBinding(b);
- }
- for (Entry<Class<? extends Annotation>, Annotation[]> b : r.getStereotypes().entrySet())
- {
- event.addStereotype(b.getKey(), b.getValue());
- }
- for (BeanResult<?> bb : r.getBeans())
- {
- AnnotatedType<?> tp = bb.getBuilder().create();
- event.addAnnotatedType(tp);
- types.put(tp.getJavaClass(), tp);
- }
- for (BeanResult<?> bb : r.getExtendBeans())
- {
- beanExtensions.put(bb.getType(), bb);
- }
- veto.addAll(r.getVeto());
-
- }
- }
-
- public <T> void processAnotated(@Observes ProcessAnnotatedType<T> event)
- {
- // veto implementation
- if (veto.contains(event.getAnnotatedType().getJavaClass()))
- {
- event.veto();
- }
- Class javaClass = event.getAnnotatedType().getJavaClass();
- if (beanExtensions.containsKey(javaClass))
- {
- NewAnnotatedTypeBuilder typeBuilder = beanExtensions.get(javaClass).getBuilder();
- typeBuilder.mergeAnnotations(event.getAnnotatedType(), false);
- event.setAnnotatedType(typeBuilder.create());
- }
- }
-
- public <T> void processInjectionTarget(@Observes ProcessInjectionTarget<T> event)
- {
-
- AnnotatedType<T> at = event.getAnnotatedType();
- XmlId xid = at.getAnnotation(XmlId.class);
- if (xid != null)
- {
- List<FieldValueObject> fvs = fieldValues.get(xid.value());
- event.setInjectionTarget(new InjectionTargetWrapper<T>(event.getInjectionTarget(), fvs));
- }
-
- }
-
- public void processAfterBeanDeployment(@Observes AfterBeanDiscovery event)
- {
- for (Exception t : errors)
- {
- event.addDefinitionError(t);
- }
- }
-
- public List<Class<? extends XmlDocumentProvider>> getDocumentProviders()
- {
- List<Class<? extends XmlDocumentProvider>> ret = new ArrayList<Class<? extends XmlDocumentProvider>>();
- try
- {
- Enumeration<URL> urls = getClass().getClassLoader().getResources(PROVIDERS_FILE);
- while (urls.hasMoreElements())
- {
-
- URL u = urls.nextElement();
- String data = FileDataReader.readUrl(u);
- String[] providers = data.split("\\s");
- for (String provider : providers)
- {
- Class res = null;
- try
- {
- res = getClass().getClassLoader().loadClass(provider);
- }
- catch (ClassNotFoundException e)
- {
- res = Thread.currentThread().getContextClassLoader().loadClass(provider);
- }
- if (res == null)
- {
- throw new RuntimeException("Could not load XML configuration provider " + provider + " configured in file " + u.toString());
- }
- ret.add(res);
- }
- }
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- return ret;
- }
-}
Copied: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java (from rev 12111, modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java)
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java (rev 0)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -0,0 +1,198 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.bootstrap;
+
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.ProcessInjectionTarget;
+
+import org.jboss.seam.xml.core.BeanResult;
+import org.jboss.seam.xml.core.XmlId;
+import org.jboss.seam.xml.core.XmlResult;
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+import org.jboss.seam.xml.fieldset.InjectionTargetWrapper;
+import org.jboss.seam.xml.model.ModelBuilder;
+import org.jboss.seam.xml.parser.ParserMain;
+import org.jboss.seam.xml.parser.SaxNode;
+import org.jboss.seam.xml.util.FileDataReader;
+import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+
+public class XmlExtension implements Extension
+{
+
+ AnnotationInstanceProvider ac = new AnnotationInstanceProvider();
+
+ static final String PROVIDERS_FILE = "META-INF/services/org.jboss.seam.xml.XmlExtension";
+
+ List<XmlResult> results = new ArrayList<XmlResult>();
+
+ Set<Class<?>> veto = new HashSet<Class<?>>();
+
+ Map<Class<?>, AnnotatedType<?>> types = new HashMap<Class<?>, AnnotatedType<?>>();
+
+ int count = 0;
+
+ /**
+ * map of syntetic bean id to a list of field value objects
+ */
+ Map<Integer, List<FieldValueObject>> fieldValues = new HashMap<Integer, List<FieldValueObject>>();
+
+ List<Exception> errors = new ArrayList<Exception>();
+
+ /**
+ * This is the entry point for the extension
+ */
+ public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event)
+ {
+ List<Class<? extends XmlDocumentProvider>> providers = getDocumentProviders();
+ for (Class<? extends XmlDocumentProvider> cl : providers)
+ {
+ try
+ {
+ XmlDocumentProvider provider = cl.newInstance();
+ provider.open();
+ XmlDocument d;
+ while ((d = provider.getNextDocument()) != null)
+ {
+ ParserMain parser = new ParserMain();
+ ModelBuilder builder = new ModelBuilder();
+ SaxNode parentNode = parser.parse(d.getInputSource(), d.getFileUrl(), errors);
+ results.add(builder.build(parentNode));
+ }
+ }
+ catch (Exception e)
+ {
+ errors.add(e);
+ }
+ }
+
+ for (XmlResult r : results)
+ {
+ if (!r.getProblems().isEmpty())
+ {
+
+ for (String i : r.getProblems())
+ {
+ errors.add(new RuntimeException(i));
+ }
+ }
+ for (BeanResult<?> b : r.getFieldValues().keySet())
+ {
+ int val = count++;
+ fieldValues.put(val, r.getFieldValues().get(b));
+ Map<String, Object> am = new HashMap<String, Object>();
+ am.put("value", val);
+ Annotation a = ac.get(XmlId.class, am);
+ b.getBuilder().addToClass(a);
+ }
+
+ for (Class<? extends Annotation> b : r.getQualifiers())
+ {
+ event.addQualifier(b);
+ }
+ for (Class<? extends Annotation> b : r.getInterceptorBindings())
+ {
+ event.addInterceptorBinding(b);
+ }
+ for (Entry<Class<? extends Annotation>, Annotation[]> b : r.getStereotypes().entrySet())
+ {
+ event.addStereotype(b.getKey(), b.getValue());
+ }
+ for (BeanResult<?> bb : r.getBeans())
+ {
+ AnnotatedType<?> tp = bb.getBuilder().create();
+ event.addAnnotatedType(tp);
+ types.put(tp.getJavaClass(), tp);
+ }
+
+ veto.addAll(r.getVeto());
+
+ }
+ }
+
+ public <T> void processAnotated(@Observes ProcessAnnotatedType<T> event)
+ {
+ // veto implementation
+ if (veto.contains(event.getAnnotatedType().getJavaClass()))
+ {
+ event.veto();
+ }
+
+ }
+
+ public <T> void processInjectionTarget(@Observes ProcessInjectionTarget<T> event)
+ {
+
+ AnnotatedType<T> at = event.getAnnotatedType();
+ XmlId xid = at.getAnnotation(XmlId.class);
+ if (xid != null)
+ {
+ List<FieldValueObject> fvs = fieldValues.get(xid.value());
+ event.setInjectionTarget(new InjectionTargetWrapper<T>(event.getInjectionTarget(), fvs));
+ }
+
+ }
+
+ public void processAfterBeanDeployment(@Observes AfterBeanDiscovery event)
+ {
+ for (Exception t : errors)
+ {
+ event.addDefinitionError(t);
+ }
+ }
+
+ public List<Class<? extends XmlDocumentProvider>> getDocumentProviders()
+ {
+ List<Class<? extends XmlDocumentProvider>> ret = new ArrayList<Class<? extends XmlDocumentProvider>>();
+ try
+ {
+ Enumeration<URL> urls = getClass().getClassLoader().getResources(PROVIDERS_FILE);
+ while (urls.hasMoreElements())
+ {
+
+ URL u = urls.nextElement();
+ String data = FileDataReader.readUrl(u);
+ String[] providers = data.split("\\s");
+ for (String provider : providers)
+ {
+ Class res = null;
+ try
+ {
+ res = getClass().getClassLoader().loadClass(provider);
+ }
+ catch (ClassNotFoundException e)
+ {
+ res = Thread.currentThread().getContextClassLoader().loadClass(provider);
+ }
+ if (res == null)
+ {
+ throw new RuntimeException("Could not load XML configuration provider " + provider + " configured in file " + u.toString());
+ }
+ ret.add(res);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ return ret;
+ }
+}
Deleted: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,50 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.core;
-
-import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
-
-public class BeanResult<X>
-{
- NewAnnotatedTypeBuilder<X> builder;
- Class<X> type;
- boolean override, extend;
-
- public BeanResult(Class<X> type)
- {
- this.type = type;
- builder = new NewAnnotatedTypeBuilder<X>(type);
- }
-
- public NewAnnotatedTypeBuilder<X> getBuilder()
- {
- return builder;
- }
-
- public Class<X> getType()
- {
- return type;
- }
-
- public boolean isOverride()
- {
- return override;
- }
-
- public void setOverride(boolean override)
- {
- this.override = override;
- }
-
- public boolean isExtend()
- {
- return extend;
- }
-
- public void setExtend(boolean extend)
- {
- this.extend = extend;
- }
-}
Copied: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java (from rev 12111, modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java)
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java (rev 0)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/BeanResult.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -0,0 +1,50 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.core;
+
+import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
+
+public class BeanResult<X>
+{
+ NewAnnotatedTypeBuilder<X> builder;
+ Class<X> type;
+ boolean override, extend;
+
+ public BeanResult(Class<X> type, boolean readAnnotations)
+ {
+ this.type = type;
+ builder = new NewAnnotatedTypeBuilder<X>(type, readAnnotations);
+ }
+
+ public NewAnnotatedTypeBuilder<X> getBuilder()
+ {
+ return builder;
+ }
+
+ public Class<X> getType()
+ {
+ return type;
+ }
+
+ public boolean isOverride()
+ {
+ return override;
+ }
+
+ public void setOverride(boolean override)
+ {
+ this.override = override;
+ }
+
+ public boolean isExtend()
+ {
+ return extend;
+ }
+
+ public void setExtend(boolean extend)
+ {
+ this.extend = extend;
+ }
+}
Deleted: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,90 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.core;
-
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.jboss.seam.xml.fieldset.FieldValueObject;
-
-/**
- * Stores the result of parsing an XML document
- *
- * @author Stuart Douglas <stuart(a)baileyroberts.com.au>
- *
- */
-public class XmlResult
-{
-
- Map<Class<? extends Annotation>, Annotation[]> stereotypes = new HashMap<Class<? extends Annotation>, Annotation[]>();
-
- List<Class<? extends Annotation>> qualifiers = new ArrayList<Class<? extends Annotation>>();
-
- List<Class<? extends Annotation>> interceptorBindings = new ArrayList<Class<? extends Annotation>>();
-
- List<Class<?>> veto = new ArrayList<Class<?>>();
-
- List<String> problems = new ArrayList<String>();
-
- List<BeanResult<?>> beans = new ArrayList<BeanResult<?>>();
-
- List<BeanResult<?>> extendBeans = new ArrayList<BeanResult<?>>();
-
- Map<BeanResult<?>, List<FieldValueObject>> fieldValues = new HashMap<BeanResult<?>, List<FieldValueObject>>();
-
- public Map<Class<? extends Annotation>, Annotation[]> getStereotypes()
- {
- return stereotypes;
- }
-
- public List<Class<? extends Annotation>> getQualifiers()
- {
- return qualifiers;
- }
-
- public List<Class<? extends Annotation>> getInterceptorBindings()
- {
- return interceptorBindings;
- }
-
- public List<BeanResult<?>> getBeans()
- {
- return beans;
- }
-
- public List<String> getProblems()
- {
- return problems;
- }
-
- public void addProblem(String p)
- {
- problems.add(p);
- }
-
- public Map<BeanResult<?>, List<FieldValueObject>> getFieldValues()
- {
- return fieldValues;
- }
-
- public void addVeto(Class<?> clazz)
- {
- veto.add(clazz);
- }
-
- public List<Class<?>> getVeto()
- {
- return veto;
- }
-
- public List<BeanResult<?>> getExtendBeans()
- {
- return extendBeans;
- }
-
-}
Copied: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java (from rev 12111, modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java)
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java (rev 0)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -0,0 +1,83 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.core;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+
+/**
+ * Stores the result of parsing an XML document
+ *
+ * @author Stuart Douglas <stuart(a)baileyroberts.com.au>
+ *
+ */
+public class XmlResult
+{
+
+ Map<Class<? extends Annotation>, Annotation[]> stereotypes = new HashMap<Class<? extends Annotation>, Annotation[]>();
+
+ List<Class<? extends Annotation>> qualifiers = new ArrayList<Class<? extends Annotation>>();
+
+ List<Class<? extends Annotation>> interceptorBindings = new ArrayList<Class<? extends Annotation>>();
+
+ List<Class<?>> veto = new ArrayList<Class<?>>();
+
+ List<String> problems = new ArrayList<String>();
+
+ List<BeanResult<?>> beans = new ArrayList<BeanResult<?>>();
+
+ Map<BeanResult<?>, List<FieldValueObject>> fieldValues = new HashMap<BeanResult<?>, List<FieldValueObject>>();
+
+ public Map<Class<? extends Annotation>, Annotation[]> getStereotypes()
+ {
+ return stereotypes;
+ }
+
+ public List<Class<? extends Annotation>> getQualifiers()
+ {
+ return qualifiers;
+ }
+
+ public List<Class<? extends Annotation>> getInterceptorBindings()
+ {
+ return interceptorBindings;
+ }
+
+ public List<BeanResult<?>> getBeans()
+ {
+ return beans;
+ }
+
+ public List<String> getProblems()
+ {
+ return problems;
+ }
+
+ public void addProblem(String p)
+ {
+ problems.add(p);
+ }
+
+ public Map<BeanResult<?>, List<FieldValueObject>> getFieldValues()
+ {
+ return fieldValues;
+ }
+
+ public void addVeto(Class<?> clazz)
+ {
+ veto.add(clazz);
+ }
+
+ public List<Class<?>> getVeto()
+ {
+ return veto;
+ }
+
+}
Deleted: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,404 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.model;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-
-import javax.enterprise.inject.Stereotype;
-import javax.enterprise.util.AnnotationLiteral;
-import javax.inject.Inject;
-import javax.inject.Qualifier;
-import javax.interceptor.InterceptorBinding;
-
-import org.jboss.seam.xml.core.BeanResult;
-import org.jboss.seam.xml.core.XmlResult;
-import org.jboss.seam.xml.fieldset.FieldValueObject;
-import org.jboss.seam.xml.parser.SaxNode;
-import org.jboss.seam.xml.parser.namespace.CompositeNamespaceElementResolver;
-import org.jboss.seam.xml.parser.namespace.NamespaceElementResolver;
-import org.jboss.seam.xml.parser.namespace.RootNamespaceElementResolver;
-import org.jboss.seam.xml.util.ReflectionUtils;
-import org.jboss.seam.xml.util.XmlConfigurationException;
-import org.jboss.seam.xml.util.XmlObjectConverter;
-import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
-import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
-
-/**
- * Builds an XML result from sax nodes
- *
- * @author stuart
- *
- */
-public class ModelBuilder
-{
-
- AnnotationInstanceProvider ac = new AnnotationInstanceProvider();
-
- static final String ROOT_NAMESPACE = "urn:seam:core";
-
- Map<String, NamespaceElementResolver> resolvers;
-
- public XmlResult build(SaxNode root)
- {
-
- resolvers = new HashMap<String, NamespaceElementResolver>();
-
- XmlResult ret = new XmlResult();
-
- if (!root.getName().equals("Beans"))
- {
- throw new XmlConfigurationException("Wrong root element for XML config file, expected:<Beans> found:" + root.getName(), root.getDocument(), root.getLineNo());
- }
- if (!ROOT_NAMESPACE.equals(root.getNamespaceUri()))
- {
- throw new XmlConfigurationException("Wrong root namespace for XML config file, expected:" + ROOT_NAMESPACE + " found:" + root.getNamespaceUri(), root.getDocument(), root.getLineNo());
- }
-
- resolvers.put(ROOT_NAMESPACE, new RootNamespaceElementResolver());
-
- List<SaxNode> children = root.getChildren();
- for (SaxNode node : children)
- {
- try
- {
- // nodes with a null namespace are whitespace nodes etc
- if (node.getNamespaceUri() != null)
- {
- XmlItem rb = resolveNode(node, null);
- // validateXmlItem(rb);
- addNodeToResult(ret, rb);
- }
- }
- catch (Exception e)
- {
- ret.addProblem(e.getMessage());
- e.printStackTrace();
- }
- }
-
- return ret;
- }
-
- @SuppressWarnings("unchecked")
- private void addNodeToResult(XmlResult ret, XmlItem rb)
- {
-
- if (rb.getType() == XmlItemType.CLASS || rb.getType() == XmlItemType.ANNOTATION)
- {
- ResultType type = getItemType(rb);
- if (type == ResultType.BEAN)
- {
- BeanResult<?> tp = buildAnnotatedType((ClassXmlItem) rb);
- if (tp.isExtend())
- {
- ret.getExtendBeans().add(tp);
- }
- else
- {
- ret.getBeans().add(tp);
- }
- if (tp.isOverride())
- {
- ret.addVeto(tp.getType());
- }
- List<FieldValueObject> fields = new ArrayList<FieldValueObject>();
- for (FieldXmlItem xi : rb.getChildrenOfType(FieldXmlItem.class))
- {
- FieldValueObject f = xi.getFieldValue();
- if (f != null)
- {
- fields.add(f);
- }
- }
- if (!fields.isEmpty())
- {
- ret.getFieldValues().put(tp, fields);
- }
- }
- else if (type == ResultType.QUALIFIER)
- {
- ret.getQualifiers().add((Class) rb.getJavaClass());
- }
- else if (type == ResultType.INTERCEPTOR_BINDING)
- {
- ret.getInterceptorBindings().add((Class) rb.getJavaClass());
- }
- else if (type == ResultType.STEREOTYPE)
- {
- addStereotypeToResult(ret, rb);
- }
- }
- else if (rb.getType() == XmlItemType.VETO)
- {
- for (XmlItem it : rb.getChildren())
- {
- ret.addVeto(it.getJavaClass());
- }
- }
- }
-
- protected XmlItem resolveNode(SaxNode node, XmlItem parent)
- {
- NamespaceElementResolver resolver = resolveNamepsace(node.getNamespaceUri());
-
- XmlItem ret = resolver.getItemForNamespace(node, parent);
-
- if (ret == null)
- {
- throw new XmlConfigurationException("Could not resolve node " + node.getName() + " in namespace " + node.getNamespaceUri(), node.getDocument(), node.getLineNo());
- }
- List<SaxNode> children = node.getChildren();
- for (SaxNode n : children)
- {
- if (n.getNamespaceUri() != null)
- {
- XmlItem rb = resolveNode(n, ret);
- ret.addChild(rb);
- }
- }
- ret.resolveChildren();
- return ret;
-
- }
-
- protected NamespaceElementResolver resolveNamepsace(String namespaceURI)
- {
- if (resolvers.containsKey(namespaceURI))
- {
- return resolvers.get(namespaceURI);
- }
- String ns = namespaceURI.replaceFirst("urn:java:", "");
- CompositeNamespaceElementResolver res = new CompositeNamespaceElementResolver(ns.split(":"));
- resolvers.put(namespaceURI, res);
- return res;
- }
-
- /**
- * Determines the type of an element by examining its child nodes
- */
- protected ResultType getItemType(XmlItem item)
- {
-
- ResultType ret = null;
- for (AnnotationXmlItem it : item.getChildrenOfType(AnnotationXmlItem.class))
- {
- if (it.getJavaClass() == InterceptorBinding.class)
- {
- if (ret != null)
- {
- throw new XmlConfigurationException("Element cannot be both an INTERCEPTOR_BINDING and a " + ret.toString(), item.getDocument(), item.getLineno());
- }
- else
- {
- ret = ResultType.INTERCEPTOR_BINDING;
- }
- }
- else if (it.getJavaClass() == Qualifier.class)
- {
- if (ret != null)
- {
- throw new XmlConfigurationException("Element cannot be both an QUALIFIER and a " + ret.toString(), item.getDocument(), item.getLineno());
- }
- else
- {
- ret = ResultType.QUALIFIER;
- }
- }
- else if (it.getJavaClass() == Stereotype.class)
- {
- if (ret != null)
- {
- throw new XmlConfigurationException("Element cannot be both an STEREOTYPE and a " + ret.toString(), item.getDocument(), item.getLineno());
- }
- else
- {
- ret = ResultType.STEREOTYPE;
- }
- }
- }
-
- if (ret == null)
- {
- ret = ResultType.BEAN;
- }
- return ret;
- }
-
- @SuppressWarnings("unchecked")
- BeanResult<?> buildAnnotatedType(ClassXmlItem rb)
- {
- BeanResult<?> result = new BeanResult(rb.getJavaClass());
- NewAnnotatedTypeBuilder<?> type = result.getBuilder();
- // list of constructor arguments
- List<ParameterXmlItem> constList = new ArrayList<ParameterXmlItem>();
-
- boolean override = !rb.getChildrenOfType(OverrideXmlItem.class).isEmpty();
- boolean extend = !rb.getChildrenOfType(ExtendsXmlItem.class).isEmpty();
- if (override && extend)
- {
- throw new XmlConfigurationException("A bean may not both <override> and <extend> an existing bean", rb.getDocument(), rb.getLineno());
- }
- result.setOverride(override);
- result.setExtend(extend);
-
- for (AnnotationXmlItem item : rb.getChildrenOfType(AnnotationXmlItem.class))
- {
- Annotation a = createAnnotation(item);
- type.addToClass(a);
- }
- List<ParametersXmlItem> constructorParameters = rb.getChildrenOfType(ParametersXmlItem.class);
- if (constructorParameters.size() > 1)
- {
- throw new XmlConfigurationException("A method may only have a single <parameters> element", rb.getDocument(), rb.getLineno());
- }
- else if (!constructorParameters.isEmpty())
- {
- for (ParameterXmlItem item : constructorParameters.get(0).getChildrenOfType(ParameterXmlItem.class))
- {
- constList.add(item);
- }
- }
- for (FieldXmlItem item : rb.getChildrenOfType(FieldXmlItem.class))
- {
- for (AnnotationXmlItem fi : item.getChildrenOfType(AnnotationXmlItem.class))
- {
- Annotation a = createAnnotation(fi);
- type.addToField(item.getField(), a);
- }
- }
- for (MethodXmlItem item : rb.getChildrenOfType(MethodXmlItem.class))
- {
- int paramCount = 0;
-
- for (AnnotationXmlItem fi : item.getChildrenOfType(AnnotationXmlItem.class))
- {
- Annotation a = createAnnotation(fi);
- type.addToMethod(item.getMethod(), a);
- }
- List<ParametersXmlItem> parameters = item.getChildrenOfType(ParametersXmlItem.class);
- if (parameters.size() > 1)
- {
- throw new XmlConfigurationException("A method may only have a single <parameters> element", item.getDocument(), item.getLineno());
- }
- else if (!parameters.isEmpty())
- {
- for (ParameterXmlItem fi : parameters.get(0).getChildrenOfType(ParameterXmlItem.class))
- {
- int param = paramCount++;
- for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
- {
- Annotation a = createAnnotation(pan);
- type.addToMethodParameter(item.getMethod(), param, a);
- }
- }
- }
-
- }
-
- if (!constList.isEmpty())
- {
- int paramCount = 0;
- Constructor<?> c = resolveConstructor(rb, constList);
- // we automatically add inject to the constructor
- type.addToConstructor((Constructor) c, new AnnotationLiteral<Inject>()
- {
- });
- for (ParameterXmlItem fi : constList)
- {
- int param = paramCount++;
- for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
- {
- Annotation a = createAnnotation(pan);
- type.addToConstructorParameter((Constructor) c, param, a);
- }
- }
- }
- return result;
- }
-
- protected static Constructor<?> resolveConstructor(ClassXmlItem bean, List<ParameterXmlItem> constList)
- {
- Class<?>[] params = new Class[constList.size()];
- for (int i = 0; i < constList.size(); ++i)
- {
- params[i] = constList.get(i).getJavaClass();
- }
- Constructor<?> ret = ReflectionUtils.getConstructor(bean.getJavaClass(), params);
- if (ret == null)
- {
- throw new XmlConfigurationException("Could not resolve constructor for " + bean.getJavaClass() + " with arguments " + params, bean.getDocument(), bean.getLineno());
- }
- return ret;
- }
-
- @SuppressWarnings("unchecked")
- void addStereotypeToResult(XmlResult ret, XmlItem rb)
- {
-
- Annotation[] values = new Annotation[rb.getChildren().size()];
- int count = 0;
- for (XmlItem item : rb.getChildren())
- {
- if (item.getType() == XmlItemType.ANNOTATION)
- {
- Annotation a = createAnnotation((AnnotationXmlItem) item);
- values[count] = a;
- }
- else
- {
- throw new XmlConfigurationException("Setereotype " + rb.getJavaClass() + " has an item that does not represent an annotation in its XML configurations", rb.getDocument(), rb.getLineno());
- }
- count++;
- }
- ret.getStereotypes().put((Class) rb.getJavaClass(), values);
-
- }
-
- @SuppressWarnings("unchecked")
- Annotation createAnnotation(AnnotationXmlItem item)
- {
- Map<String, Object> typedVars = new HashMap<String, Object>();
- Class<?> anClass = item.getJavaClass();
- for (Entry<String, String> e : item.getAttributes().entrySet())
- {
- String mname = e.getKey();
- Method m;
- try
- {
- m = anClass.getDeclaredMethod(mname);
- }
- catch (Exception e1)
- {
- throw new XmlConfigurationException("Annotation " + item.getJavaClass().getName() + " does not have a member named " + mname + " ,error in XML", item.getDocument(), item.getLineno());
- }
- Class<?> returnType = m.getReturnType();
- typedVars.put(mname, XmlObjectConverter.convert(returnType, e.getValue()));
- }
-
- return ac.get((Class) item.getJavaClass(), typedVars);
- }
-
- public void validateXmlItem(XmlItem item)
- {
- Set<XmlItemType> allowed = item.getAllowedItem();
- for (XmlItem i : item.getChildren())
- {
- if (!allowed.contains(item.getType()))
- {
- throw new XmlConfigurationException("Item " + item.getType() + " is not allowed to contain " + i.getType(), item.getDocument(), item.getLineno());
- }
- validateXmlItem(i);
- }
- }
-
-}
Copied: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java (from rev 12111, modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java)
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java (rev 0)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -0,0 +1,400 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.enterprise.inject.Stereotype;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+import org.jboss.seam.xml.core.BeanResult;
+import org.jboss.seam.xml.core.XmlResult;
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+import org.jboss.seam.xml.parser.SaxNode;
+import org.jboss.seam.xml.parser.namespace.CompositeNamespaceElementResolver;
+import org.jboss.seam.xml.parser.namespace.NamespaceElementResolver;
+import org.jboss.seam.xml.parser.namespace.RootNamespaceElementResolver;
+import org.jboss.seam.xml.util.XmlConfigurationException;
+import org.jboss.seam.xml.util.XmlObjectConverter;
+import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+import org.jboss.weld.extensions.util.ReflectionUtils;
+import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
+
+/**
+ * Builds an XML result from sax nodes
+ *
+ * @author stuart
+ *
+ */
+public class ModelBuilder
+{
+
+ AnnotationInstanceProvider ac = new AnnotationInstanceProvider();
+
+ static final String ROOT_NAMESPACE = "urn:seam:core";
+
+ Map<String, NamespaceElementResolver> resolvers;
+
+ public XmlResult build(SaxNode root)
+ {
+
+ resolvers = new HashMap<String, NamespaceElementResolver>();
+
+ XmlResult ret = new XmlResult();
+
+ if (!root.getName().equals("Beans"))
+ {
+ throw new XmlConfigurationException("Wrong root element for XML config file, expected:<Beans> found:" + root.getName(), root.getDocument(), root.getLineNo());
+ }
+ if (!ROOT_NAMESPACE.equals(root.getNamespaceUri()))
+ {
+ throw new XmlConfigurationException("Wrong root namespace for XML config file, expected:" + ROOT_NAMESPACE + " found:" + root.getNamespaceUri(), root.getDocument(), root.getLineNo());
+ }
+
+ resolvers.put(ROOT_NAMESPACE, new RootNamespaceElementResolver());
+
+ List<SaxNode> children = root.getChildren();
+ for (SaxNode node : children)
+ {
+ try
+ {
+ // nodes with a null namespace are whitespace nodes etc
+ if (node.getNamespaceUri() != null)
+ {
+ XmlItem rb = resolveNode(node, null);
+ // validateXmlItem(rb);
+ addNodeToResult(ret, rb);
+ }
+ }
+ catch (Exception e)
+ {
+ ret.addProblem(e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void addNodeToResult(XmlResult ret, XmlItem rb)
+ {
+
+ if (rb.getType() == XmlItemType.CLASS || rb.getType() == XmlItemType.ANNOTATION)
+ {
+ ResultType type = getItemType(rb);
+ if (type == ResultType.BEAN)
+ {
+ BeanResult<?> tp = buildAnnotatedType((ClassXmlItem) rb);
+ ret.getBeans().add(tp);
+ if (tp.isOverride() || tp.isExtend())
+ {
+ ret.addVeto(tp.getType());
+ }
+ List<FieldValueObject> fields = new ArrayList<FieldValueObject>();
+ for (FieldXmlItem xi : rb.getChildrenOfType(FieldXmlItem.class))
+ {
+ FieldValueObject f = xi.getFieldValue();
+ if (f != null)
+ {
+ fields.add(f);
+ }
+ }
+ if (!fields.isEmpty())
+ {
+ ret.getFieldValues().put(tp, fields);
+ }
+ }
+ else if (type == ResultType.QUALIFIER)
+ {
+ ret.getQualifiers().add((Class) rb.getJavaClass());
+ }
+ else if (type == ResultType.INTERCEPTOR_BINDING)
+ {
+ ret.getInterceptorBindings().add((Class) rb.getJavaClass());
+ }
+ else if (type == ResultType.STEREOTYPE)
+ {
+ addStereotypeToResult(ret, rb);
+ }
+ }
+ else if (rb.getType() == XmlItemType.VETO)
+ {
+ for (XmlItem it : rb.getChildren())
+ {
+ ret.addVeto(it.getJavaClass());
+ }
+ }
+ }
+
+ protected XmlItem resolveNode(SaxNode node, XmlItem parent)
+ {
+ NamespaceElementResolver resolver = resolveNamepsace(node.getNamespaceUri());
+
+ XmlItem ret = resolver.getItemForNamespace(node, parent);
+
+ if (ret == null)
+ {
+ throw new XmlConfigurationException("Could not resolve node " + node.getName() + " in namespace " + node.getNamespaceUri(), node.getDocument(), node.getLineNo());
+ }
+ List<SaxNode> children = node.getChildren();
+ for (SaxNode n : children)
+ {
+ if (n.getNamespaceUri() != null)
+ {
+ XmlItem rb = resolveNode(n, ret);
+ ret.addChild(rb);
+ }
+ }
+ ret.resolveChildren();
+ return ret;
+
+ }
+
+ protected NamespaceElementResolver resolveNamepsace(String namespaceURI)
+ {
+ if (resolvers.containsKey(namespaceURI))
+ {
+ return resolvers.get(namespaceURI);
+ }
+ String ns = namespaceURI.replaceFirst("urn:java:", "");
+ CompositeNamespaceElementResolver res = new CompositeNamespaceElementResolver(ns.split(":"));
+ resolvers.put(namespaceURI, res);
+ return res;
+ }
+
+ /**
+ * Determines the type of an element by examining its child nodes
+ */
+ protected ResultType getItemType(XmlItem item)
+ {
+
+ ResultType ret = null;
+ for (AnnotationXmlItem it : item.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ if (it.getJavaClass() == InterceptorBinding.class)
+ {
+ if (ret != null)
+ {
+ throw new XmlConfigurationException("Element cannot be both an INTERCEPTOR_BINDING and a " + ret.toString(), item.getDocument(), item.getLineno());
+ }
+ else
+ {
+ ret = ResultType.INTERCEPTOR_BINDING;
+ }
+ }
+ else if (it.getJavaClass() == Qualifier.class)
+ {
+ if (ret != null)
+ {
+ throw new XmlConfigurationException("Element cannot be both an QUALIFIER and a " + ret.toString(), item.getDocument(), item.getLineno());
+ }
+ else
+ {
+ ret = ResultType.QUALIFIER;
+ }
+ }
+ else if (it.getJavaClass() == Stereotype.class)
+ {
+ if (ret != null)
+ {
+ throw new XmlConfigurationException("Element cannot be both an STEREOTYPE and a " + ret.toString(), item.getDocument(), item.getLineno());
+ }
+ else
+ {
+ ret = ResultType.STEREOTYPE;
+ }
+ }
+ }
+
+ if (ret == null)
+ {
+ ret = ResultType.BEAN;
+ }
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
+ BeanResult<?> buildAnnotatedType(ClassXmlItem rb)
+ {
+ boolean override = !rb.getChildrenOfType(OverrideXmlItem.class).isEmpty();
+ boolean extend = !rb.getChildrenOfType(ExtendsXmlItem.class).isEmpty();
+
+ // if it is an extend we want to read the annotations from the underlying
+ // class
+ BeanResult<?> result = new BeanResult(rb.getJavaClass(), extend);
+ NewAnnotatedTypeBuilder<?> type = result.getBuilder();
+ // list of constructor arguments
+ List<ParameterXmlItem> constList = new ArrayList<ParameterXmlItem>();
+
+ if (override && extend)
+ {
+ throw new XmlConfigurationException("A bean may not both <override> and <extend> an existing bean", rb.getDocument(), rb.getLineno());
+ }
+ result.setOverride(override);
+ result.setExtend(extend);
+
+ for (AnnotationXmlItem item : rb.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(item);
+ type.addToClass(a);
+ }
+ List<ParametersXmlItem> constructorParameters = rb.getChildrenOfType(ParametersXmlItem.class);
+ if (constructorParameters.size() > 1)
+ {
+ throw new XmlConfigurationException("A method may only have a single <parameters> element", rb.getDocument(), rb.getLineno());
+ }
+ else if (!constructorParameters.isEmpty())
+ {
+ for (ParameterXmlItem item : constructorParameters.get(0).getChildrenOfType(ParameterXmlItem.class))
+ {
+ constList.add(item);
+ }
+ }
+ for (FieldXmlItem item : rb.getChildrenOfType(FieldXmlItem.class))
+ {
+ for (AnnotationXmlItem fi : item.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(fi);
+ type.addToField(item.getField(), a);
+ }
+ }
+ for (MethodXmlItem item : rb.getChildrenOfType(MethodXmlItem.class))
+ {
+ int paramCount = 0;
+
+ for (AnnotationXmlItem fi : item.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(fi);
+ type.addToMethod(item.getMethod(), a);
+ }
+ List<ParametersXmlItem> parameters = item.getChildrenOfType(ParametersXmlItem.class);
+ if (parameters.size() > 1)
+ {
+ throw new XmlConfigurationException("A method may only have a single <parameters> element", item.getDocument(), item.getLineno());
+ }
+ else if (!parameters.isEmpty())
+ {
+ for (ParameterXmlItem fi : parameters.get(0).getChildrenOfType(ParameterXmlItem.class))
+ {
+ int param = paramCount++;
+ for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(pan);
+ type.addToMethodParameter(item.getMethod(), param, a);
+ }
+ }
+ }
+
+ }
+
+ if (!constList.isEmpty())
+ {
+ int paramCount = 0;
+ Constructor<?> c = resolveConstructor(rb, constList);
+ // we automatically add inject to the constructor
+ type.addToConstructor((Constructor) c, new AnnotationLiteral<Inject>()
+ {
+ });
+ for (ParameterXmlItem fi : constList)
+ {
+ int param = paramCount++;
+ for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(pan);
+ type.addToConstructorParameter((Constructor) c, param, a);
+ }
+ }
+ }
+ return result;
+ }
+
+ protected static Constructor<?> resolveConstructor(ClassXmlItem bean, List<ParameterXmlItem> constList)
+ {
+ Class<?>[] params = new Class[constList.size()];
+ for (int i = 0; i < constList.size(); ++i)
+ {
+ params[i] = constList.get(i).getJavaClass();
+ }
+ Constructor<?> ret = ReflectionUtils.getConstructor(bean.getJavaClass(), params);
+ if (ret == null)
+ {
+ throw new XmlConfigurationException("Could not resolve constructor for " + bean.getJavaClass() + " with arguments " + params, bean.getDocument(), bean.getLineno());
+ }
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
+ void addStereotypeToResult(XmlResult ret, XmlItem rb)
+ {
+
+ Annotation[] values = new Annotation[rb.getChildren().size()];
+ int count = 0;
+ for (XmlItem item : rb.getChildren())
+ {
+ if (item.getType() == XmlItemType.ANNOTATION)
+ {
+ Annotation a = createAnnotation((AnnotationXmlItem) item);
+ values[count] = a;
+ }
+ else
+ {
+ throw new XmlConfigurationException("Setereotype " + rb.getJavaClass() + " has an item that does not represent an annotation in its XML configurations", rb.getDocument(), rb.getLineno());
+ }
+ count++;
+ }
+ ret.getStereotypes().put((Class) rb.getJavaClass(), values);
+
+ }
+
+ @SuppressWarnings("unchecked")
+ Annotation createAnnotation(AnnotationXmlItem item)
+ {
+ Map<String, Object> typedVars = new HashMap<String, Object>();
+ Class<?> anClass = item.getJavaClass();
+ for (Entry<String, String> e : item.getAttributes().entrySet())
+ {
+ String mname = e.getKey();
+ Method m;
+ try
+ {
+ m = anClass.getDeclaredMethod(mname);
+ }
+ catch (Exception e1)
+ {
+ throw new XmlConfigurationException("Annotation " + item.getJavaClass().getName() + " does not have a member named " + mname + " ,error in XML", item.getDocument(), item.getLineno());
+ }
+ Class<?> returnType = m.getReturnType();
+ typedVars.put(mname, XmlObjectConverter.convert(returnType, e.getValue()));
+ }
+
+ return ac.get((Class) item.getJavaClass(), typedVars);
+ }
+
+ public void validateXmlItem(XmlItem item)
+ {
+ Set<XmlItemType> allowed = item.getAllowedItem();
+ for (XmlItem i : item.getChildren())
+ {
+ if (!allowed.contains(item.getType()))
+ {
+ throw new XmlConfigurationException("Item " + item.getType() + " is not allowed to contain " + i.getType(), item.getDocument(), item.getLineno());
+ }
+ validateXmlItem(i);
+ }
+ }
+
+}
Deleted: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,97 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.parser.namespace;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.jboss.seam.xml.model.AnnotationXmlItem;
-import org.jboss.seam.xml.model.ClassXmlItem;
-import org.jboss.seam.xml.model.ParameterXmlItem;
-import org.jboss.seam.xml.model.XmlItem;
-import org.jboss.seam.xml.model.XmlItemType;
-import org.jboss.seam.xml.parser.SaxNode;
-import org.jboss.seam.xml.util.ReflectionUtils;
-
-public class PackageNamespaceElementResolver implements NamespaceElementResolver
-{
- String pack;
- Map<String, Class<?>> cache = new HashMap<String, Class<?>>();
- Set<String> notFound = new HashSet<String>();
-
- public PackageNamespaceElementResolver(String pack)
- {
- this.pack = pack + ".";
- }
-
- public XmlItem getItemForNamespace(SaxNode node, XmlItem parent)
- {
- String name = node.getName();
- if (notFound.contains(name))
- {
- return null;
- }
-
- try
- {
- Class<?> c;
- if (cache.containsKey(name))
- {
- c = cache.get(name);
- }
- else
- {
- c = getClass().getClassLoader().loadClass(pack + name);
- cache.put(name, c);
- }
- if (c.isAnnotation())
- {
- return new AnnotationXmlItem(parent, c, node.getInnerText(), node.getAttributes(), node.getDocument(), node.getLineNo());
- }
- else
- {
- // if it is a method or constructor parameter
- if (parent != null && parent.getType() == XmlItemType.PARAMETERS)
- {
- return new ParameterXmlItem(parent, c, node.getDocument(), node.getLineNo());
- }
- else
- {
- return new ClassXmlItem(parent, c, node.getDocument(), node.getLineNo());
- }
- }
-
- }
- catch (ClassNotFoundException e)
- {
-
- }
- catch (NoClassDefFoundError e) // this can get thrown when there is a
- // case insensitive file system
- {
-
- }
- if (parent != null)
- {
- // if the item can be a method of a FIELD
- if (parent.getAllowedItem().contains(XmlItemType.METHOD) || parent.getAllowedItem().contains(XmlItemType.FIELD))
- {
- return ReflectionUtils.resolveMethodOrField(name, parent, node.getInnerText(), node.getDocument(), node.getLineNo());
- }
- else
- {
- notFound.add(name);
- }
- }
- else
- {
- notFound.add(name);
- }
- return null;
- }
-
-}
Copied: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java (from rev 12111, modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java)
===================================================================
--- modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java (rev 0)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -0,0 +1,122 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.seam.xml.model.AnnotationXmlItem;
+import org.jboss.seam.xml.model.ClassXmlItem;
+import org.jboss.seam.xml.model.FieldXmlItem;
+import org.jboss.seam.xml.model.MethodXmlItem;
+import org.jboss.seam.xml.model.ParameterXmlItem;
+import org.jboss.seam.xml.model.XmlItem;
+import org.jboss.seam.xml.model.XmlItemType;
+import org.jboss.seam.xml.parser.SaxNode;
+import org.jboss.seam.xml.util.XmlConfigurationException;
+import org.jboss.weld.extensions.util.ReflectionUtils;
+
+public class PackageNamespaceElementResolver implements NamespaceElementResolver
+{
+ String pack;
+ Map<String, Class<?>> cache = new HashMap<String, Class<?>>();
+ Set<String> notFound = new HashSet<String>();
+
+ public PackageNamespaceElementResolver(String pack)
+ {
+ this.pack = pack + ".";
+ }
+
+ public XmlItem getItemForNamespace(SaxNode node, XmlItem parent)
+ {
+ String name = node.getName();
+ if (notFound.contains(name))
+ {
+ return null;
+ }
+
+ try
+ {
+ Class<?> c;
+ if (cache.containsKey(name))
+ {
+ c = cache.get(name);
+ }
+ else
+ {
+ c = getClass().getClassLoader().loadClass(pack + name);
+ cache.put(name, c);
+ }
+ if (c.isAnnotation())
+ {
+ return new AnnotationXmlItem(parent, c, node.getInnerText(), node.getAttributes(), node.getDocument(), node.getLineNo());
+ }
+ else
+ {
+ // if it is a method or constructor parameter
+ if (parent != null && parent.getType() == XmlItemType.PARAMETERS)
+ {
+ return new ParameterXmlItem(parent, c, node.getDocument(), node.getLineNo());
+ }
+ else
+ {
+ return new ClassXmlItem(parent, c, node.getDocument(), node.getLineNo());
+ }
+ }
+
+ }
+ catch (ClassNotFoundException e)
+ {
+
+ }
+ catch (NoClassDefFoundError e) // this can get thrown when there is a
+ // case insensitive file system
+ {
+
+ }
+ if (parent != null)
+ {
+ // if the item can be a method of a FIELD
+ if (parent.getAllowedItem().contains(XmlItemType.METHOD) || parent.getAllowedItem().contains(XmlItemType.FIELD))
+ {
+ return resolveMethodOrField(name, parent, node.getInnerText(), node.getDocument(), node.getLineNo());
+ }
+ else
+ {
+ notFound.add(name);
+ }
+ }
+ else
+ {
+ notFound.add(name);
+ }
+ return null;
+ }
+
+ public static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText, String document, int lineno)
+ {
+ Class<?> p = parent.getJavaClass();
+ Field f = null;
+ boolean methodFound = ReflectionUtils.methodExists(p, name);
+ f = ReflectionUtils.getField(p, name);
+
+ if (methodFound && f != null)
+ {
+ throw new XmlConfigurationException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML", document, lineno);
+ }
+ if (methodFound)
+ {
+ return new MethodXmlItem(parent, name, document, lineno);
+ }
+ else if (f != null)
+ {
+ return new FieldXmlItem(parent, f, innerText, document, lineno);
+ }
+ return null;
+ }
+}
Deleted: modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/core/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,112 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import org.jboss.seam.xml.model.FieldXmlItem;
-import org.jboss.seam.xml.model.MethodXmlItem;
-import org.jboss.seam.xml.model.XmlItem;
-
-public class ReflectionUtils
-{
- public static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText, String document, int lineno)
- {
- Class<?> p = parent.getJavaClass();
- Field f = null;
- boolean methodFound = methodExists(p, name);
- f = getField(p, name);
-
- if (methodFound && f != null)
- {
- throw new XmlConfigurationException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML", document, lineno);
- }
- if (methodFound)
- {
- return new MethodXmlItem(parent, name, document, lineno);
- }
- else if (f != null)
- {
- return new FieldXmlItem(parent, f, innerText, document, lineno);
- }
- return null;
- }
-
- /**
- * we need access to private fields so we cannot just use getField
- */
- public static Field getField(Class<?> parent, String name)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredField(name);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-
- public static boolean methodExists(Class<?> parent, String name)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- for (Method m : p.getDeclaredMethods())
- {
- if (m.getName().equals(name))
- {
- return true;
- }
- }
- p = p.getSuperclass();
- }
- return false;
- }
-
- public static Method getMethod(Class<?> parent, String name, Class<?>... args)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredMethod(name, args);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-
- public static Constructor<?> getConstructor(Class<?> parent, Class<?>... args)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredConstructor(args);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-}
Modified: modules/xml/trunk/examples/princess-rescue/pom.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/pom.xml 2010-03-06 22:45:55 UTC (rev 12112)
+++ modules/xml/trunk/examples/princess-rescue/pom.xml 2010-03-06 22:58:32 UTC (rev 12113)
@@ -8,7 +8,7 @@
<groupId>org.jboss.seam.xml.examples</groupId>
<artifactId>princess-rescue</artifactId>
<packaging>war</packaging>
- <name>princess-rescue</name>
+ <name>Seam XML Example Princess Rescue</name>
<version>1.0.0-SNAPSHOT</version>
<properties>
@@ -48,7 +48,7 @@
<dependency>
<groupId>org.jboss.seam</groupId>
- <artifactId>seam-xml</artifactId>
+ <artifactId>seam-xml-core</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
Deleted: modules/xml/trunk/pom.xml
===================================================================
--- modules/xml/trunk/pom.xml 2010-03-06 22:45:55 UTC (rev 12112)
+++ modules/xml/trunk/pom.xml 2010-03-06 22:58:32 UTC (rev 12113)
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <artifactId>seam-parent</artifactId>
- <groupId>org.jboss.seam</groupId>
- <version>3.0.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>seam-xml</artifactId>
- <packaging>jar</packaging>
- <version>3.0.0-SNAPSHOT</version>
- <name>Seam XML Configuration</name>
-
- <repositories>
- <repository>
- <id>oss.sonatype.org/jboss-snapshots</id>
- <name>JBoss (Nexus) Snapshots Repository</name>
- <url>http://oss.sonatype.org/content/repositories/jboss-snapshots</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- <updatePolicy>never</updatePolicy>
- </snapshots>
- </repository>
- </repositories>
-
- <properties>
- <seam.version>3.0.0-SNAPSHOT</seam.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>javax.enterprise</groupId>
- <artifactId>cdi-api</artifactId>
- <version>1.0-SP1</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.weld</groupId>
- <artifactId>weld-core</artifactId>
- <version>1.0.1-Final</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.weld</groupId>
- <artifactId>weld-extensions-core</artifactId>
- <version>1.0.1-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.weld</groupId>
- <artifactId>weld-se</artifactId>
- <version>1.0.1-Final</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- <version>5.10</version>
- <type>jar</type>
- <classifier>jdk15</classifier>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <scm>
- <connection>scm:svn:http://anonsvn.jboss.org/repos/seam/modules/xml/trunk</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/seam/modules/xml/trunk</developerConnection>
- <url>http://fisheye.jboss.org/browse/Seam/modules/xml/trunk</url>
- </scm>
-
- <build>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-eclipse-plugin</artifactId>
- <configuration>
- <workspace>${basedir}</workspace>
-
- <downloadJavadocs>true</downloadJavadocs>
- <downloadSources>true</downloadSources>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <forkMode>once</forkMode>
- <argLine>-Xmx512Mb</argLine>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
16 years, 1 month
Seam SVN: r12112 - modules/xml/trunk/docs/en-US.
by seam-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2010-03-06 17:45:55 -0500 (Sat, 06 Mar 2010)
New Revision: 12112
Modified:
modules/xml/trunk/docs/en-US/xml-general.xml
Log:
fixed chapter id
Modified: modules/xml/trunk/docs/en-US/xml-general.xml
===================================================================
--- modules/xml/trunk/docs/en-US/xml-general.xml 2010-03-06 22:15:32 UTC (rev 12111)
+++ modules/xml/trunk/docs/en-US/xml-general.xml 2010-03-06 22:45:55 UTC (rev 12112)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-<chapter id="remoting">
+<chapter id="xml">
<title>Seam XML General</title>
<para>Seam provides a method for configuring JSR-299 beans using XML. Using XML it is possible to add new beans, override existing beans, and add
16 years, 1 month
Seam SVN: r12111 - in modules/xml/trunk: docs and 8 other directories.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-06 17:15:32 -0500 (Sat, 06 Mar 2010)
New Revision: 12111
Added:
modules/xml/trunk/examples/princess-rescue/readme.txt
Removed:
modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java
Modified:
modules/xml/trunk/
modules/xml/trunk/docs/
modules/xml/trunk/examples/princess-rescue/
modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml
modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
Log:
changed the behaviour of the <extends> tag
Property changes on: modules/xml/trunk
___________________________________________________________________
Name: svn:ignore
+ .classpath
.settings
.project
target
test-output
Property changes on: modules/xml/trunk/docs
___________________________________________________________________
Name: svn:ignore
+ target
Property changes on: modules/xml/trunk/examples/princess-rescue
___________________________________________________________________
Name: svn:ignore
- .classpath
.project
.settings
+ .classpath
.project
.settings
target
Added: modules/xml/trunk/examples/princess-rescue/readme.txt
===================================================================
--- modules/xml/trunk/examples/princess-rescue/readme.txt (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/readme.txt 2010-03-06 22:15:32 UTC (rev 12111)
@@ -0,0 +1,7 @@
+To run the example:
+
+mvn jetty:run
+
+Then navigate to:
+
+http://localhost:9090/princess-rescue/home.jsf
\ No newline at end of file
Modified: modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 22:15:32 UTC (rev 12111)
@@ -105,7 +105,7 @@
<p:Room>dragonRoom</p:Room>
<p:adjacentMessage>You hear a snoring noise. With every snore you see a flickering light, as if something were breathing flames from its nostrils.</p:adjacentMessage>
<p:roomType>GAMEOVER</p:roomType>
- <p:message>The dragon wakes up as you enter. 'Well this is fortunate, I was feeling a bit peckish' are the last words you ever hear.</p:message>
+ <p:message>The dragon wakes up as you enter. Then it eats you.</p:message>
<p:shootEffect>ANNOY</p:shootEffect>
<p:shootMessage>Your arrow wakes up the dragon, without appearing to do any real damage. The last moments of your life are spent running from an angry dragon.</p:shootMessage>
<p:north><Inject/><p:Room>princessRoom</p:Room></p:north>
Modified: modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml 2010-03-06 22:15:32 UTC (rev 12111)
@@ -4,38 +4,14 @@
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
- <title>CDI and JSF 2 Starter Application</title>
+ <title>Princess Rescue</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<h:outputStylesheet name="css/screen.css"/>
</h:head>
<h:body>
<div id="container">
<div id="content">
- <div id="sidebar">
- <h3>Find out more</h3>
- <p>
- Explore JavaServer Faces.
- </p>
- <ul>
- <li><a href="http://www.javaserverfaces.org">JSF community site</a></li>
- </ul>
- <p>
- Learn more about Java EE 6 and the extensions provided by Weld and Seam.
- </p>
- <ul>
- <li><a href="http://seamframework.org/Weld/JSR299AndWeldOverview">Overview</a></li>
- <li><a href="http://seamframework.org">Project site</a></li>
- <li><a href="http://seamframework.org/Documentation/SeamDocumentation#H-WeldReferenceD...">Documentation</a></li>
- <li><a href="http://seamframework.org/Community/Forums">User forums</a></li>
- <li><a href="http://seamframework.org/Community/MailingLists">Mailing lists</a></li>
- <li><a href="https://jira.jboss.org/jira/browse/WELD">Issue tracker</a></li>
- </ul>
- <p>
- If you have an add-on, please <a href="http://seamframework.org/Community/Forums">let us know</a> and
- consider <a href="http://seamframework.org/Community/Contribute">contributing</a> it back to the
- community!
- </p>
- </div>
+
<ui:insert name="content">
[Template content will be inserted here]
</ui:insert>
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java 2010-03-06 22:15:32 UTC (rev 12111)
@@ -33,7 +33,6 @@
import org.jboss.seam.xml.parser.SaxNode;
import org.jboss.seam.xml.util.FileDataReader;
import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
-import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
public class XmlExtension implements Extension
{
@@ -48,8 +47,6 @@
Map<Class<?>, AnnotatedType<?>> types = new HashMap<Class<?>, AnnotatedType<?>>();
- Map<Class<?>, BeanResult<?>> beanExtensions = new HashMap<Class<?>, BeanResult<?>>();
-
int count = 0;
/**
@@ -124,10 +121,7 @@
event.addAnnotatedType(tp);
types.put(tp.getJavaClass(), tp);
}
- for (BeanResult<?> bb : r.getExtendBeans())
- {
- beanExtensions.put(bb.getType(), bb);
- }
+
veto.addAll(r.getVeto());
}
@@ -140,13 +134,7 @@
{
event.veto();
}
- Class javaClass = event.getAnnotatedType().getJavaClass();
- if (beanExtensions.containsKey(javaClass))
- {
- NewAnnotatedTypeBuilder typeBuilder = beanExtensions.get(javaClass).getBuilder();
- typeBuilder.mergeAnnotations(event.getAnnotatedType(), false);
- event.setAnnotatedType(typeBuilder.create());
- }
+
}
public <T> void processInjectionTarget(@Observes ProcessInjectionTarget<T> event)
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java 2010-03-06 22:15:32 UTC (rev 12111)
@@ -12,10 +12,10 @@
Class<X> type;
boolean override, extend;
- public BeanResult(Class<X> type)
+ public BeanResult(Class<X> type, boolean readAnnotations)
{
this.type = type;
- builder = new NewAnnotatedTypeBuilder<X>(type);
+ builder = new NewAnnotatedTypeBuilder<X>(type, readAnnotations);
}
public NewAnnotatedTypeBuilder<X> getBuilder()
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java 2010-03-06 22:15:32 UTC (rev 12111)
@@ -33,8 +33,6 @@
List<BeanResult<?>> beans = new ArrayList<BeanResult<?>>();
- List<BeanResult<?>> extendBeans = new ArrayList<BeanResult<?>>();
-
Map<BeanResult<?>, List<FieldValueObject>> fieldValues = new HashMap<BeanResult<?>, List<FieldValueObject>>();
public Map<Class<? extends Annotation>, Annotation[]> getStereotypes()
@@ -82,9 +80,4 @@
return veto;
}
- public List<BeanResult<?>> getExtendBeans()
- {
- return extendBeans;
- }
-
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-06 22:15:32 UTC (rev 12111)
@@ -27,10 +27,10 @@
import org.jboss.seam.xml.parser.namespace.CompositeNamespaceElementResolver;
import org.jboss.seam.xml.parser.namespace.NamespaceElementResolver;
import org.jboss.seam.xml.parser.namespace.RootNamespaceElementResolver;
-import org.jboss.seam.xml.util.ReflectionUtils;
import org.jboss.seam.xml.util.XmlConfigurationException;
import org.jboss.seam.xml.util.XmlObjectConverter;
import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+import org.jboss.weld.extensions.util.ReflectionUtils;
import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
/**
@@ -99,16 +99,9 @@
if (type == ResultType.BEAN)
{
BeanResult<?> tp = buildAnnotatedType((ClassXmlItem) rb);
- if (tp.isExtend())
+ ret.getBeans().add(tp);
+ if (tp.isOverride() || tp.isExtend())
{
- ret.getExtendBeans().add(tp);
- }
- else
- {
- ret.getBeans().add(tp);
- }
- if (tp.isOverride())
- {
ret.addVeto(tp.getType());
}
List<FieldValueObject> fields = new ArrayList<FieldValueObject>();
@@ -237,13 +230,16 @@
@SuppressWarnings("unchecked")
BeanResult<?> buildAnnotatedType(ClassXmlItem rb)
{
- BeanResult<?> result = new BeanResult(rb.getJavaClass());
+ boolean override = !rb.getChildrenOfType(OverrideXmlItem.class).isEmpty();
+ boolean extend = !rb.getChildrenOfType(ExtendsXmlItem.class).isEmpty();
+
+ // if it is an extend we want to read the annotations from the underlying
+ // class
+ BeanResult<?> result = new BeanResult(rb.getJavaClass(), extend);
NewAnnotatedTypeBuilder<?> type = result.getBuilder();
// list of constructor arguments
List<ParameterXmlItem> constList = new ArrayList<ParameterXmlItem>();
- boolean override = !rb.getChildrenOfType(OverrideXmlItem.class).isEmpty();
- boolean extend = !rb.getChildrenOfType(ExtendsXmlItem.class).isEmpty();
if (override && extend)
{
throw new XmlConfigurationException("A bean may not both <override> and <extend> an existing bean", rb.getDocument(), rb.getLineno());
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-06 22:15:32 UTC (rev 12111)
@@ -4,6 +4,7 @@
*/
package org.jboss.seam.xml.parser.namespace;
+import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -11,11 +12,14 @@
import org.jboss.seam.xml.model.AnnotationXmlItem;
import org.jboss.seam.xml.model.ClassXmlItem;
+import org.jboss.seam.xml.model.FieldXmlItem;
+import org.jboss.seam.xml.model.MethodXmlItem;
import org.jboss.seam.xml.model.ParameterXmlItem;
import org.jboss.seam.xml.model.XmlItem;
import org.jboss.seam.xml.model.XmlItemType;
import org.jboss.seam.xml.parser.SaxNode;
-import org.jboss.seam.xml.util.ReflectionUtils;
+import org.jboss.seam.xml.util.XmlConfigurationException;
+import org.jboss.weld.extensions.util.ReflectionUtils;
public class PackageNamespaceElementResolver implements NamespaceElementResolver
{
@@ -80,7 +84,7 @@
// if the item can be a method of a FIELD
if (parent.getAllowedItem().contains(XmlItemType.METHOD) || parent.getAllowedItem().contains(XmlItemType.FIELD))
{
- return ReflectionUtils.resolveMethodOrField(name, parent, node.getInnerText(), node.getDocument(), node.getLineNo());
+ return resolveMethodOrField(name, parent, node.getInnerText(), node.getDocument(), node.getLineNo());
}
else
{
@@ -94,4 +98,25 @@
return null;
}
+ public static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText, String document, int lineno)
+ {
+ Class<?> p = parent.getJavaClass();
+ Field f = null;
+ boolean methodFound = ReflectionUtils.methodExists(p, name);
+ f = ReflectionUtils.getField(p, name);
+
+ if (methodFound && f != null)
+ {
+ throw new XmlConfigurationException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML", document, lineno);
+ }
+ if (methodFound)
+ {
+ return new MethodXmlItem(parent, name, document, lineno);
+ }
+ else if (f != null)
+ {
+ return new FieldXmlItem(parent, f, innerText, document, lineno);
+ }
+ return null;
+ }
}
Deleted: modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java 2010-03-06 21:42:25 UTC (rev 12110)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java 2010-03-06 22:15:32 UTC (rev 12111)
@@ -1,112 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import org.jboss.seam.xml.model.FieldXmlItem;
-import org.jboss.seam.xml.model.MethodXmlItem;
-import org.jboss.seam.xml.model.XmlItem;
-
-public class ReflectionUtils
-{
- public static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText, String document, int lineno)
- {
- Class<?> p = parent.getJavaClass();
- Field f = null;
- boolean methodFound = methodExists(p, name);
- f = getField(p, name);
-
- if (methodFound && f != null)
- {
- throw new XmlConfigurationException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML", document, lineno);
- }
- if (methodFound)
- {
- return new MethodXmlItem(parent, name, document, lineno);
- }
- else if (f != null)
- {
- return new FieldXmlItem(parent, f, innerText, document, lineno);
- }
- return null;
- }
-
- /**
- * we need access to private fields so we cannot just use getField
- */
- public static Field getField(Class<?> parent, String name)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredField(name);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-
- public static boolean methodExists(Class<?> parent, String name)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- for (Method m : p.getDeclaredMethods())
- {
- if (m.getName().equals(name))
- {
- return true;
- }
- }
- p = p.getSuperclass();
- }
- return false;
- }
-
- public static Method getMethod(Class<?> parent, String name, Class<?>... args)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredMethod(name, args);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-
- public static Constructor<?> getConstructor(Class<?> parent, Class<?>... args)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredConstructor(args);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-}
16 years, 1 month
Seam SVN: r12110 - in modules/xml/trunk: examples/princess-rescue/src/main/resources/META-INF and 1 other directory.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-06 16:42:25 -0500 (Sat, 06 Mar 2010)
New Revision: 12110
Modified:
modules/xml/trunk/docs/en-US/xml-general.xml
modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
Log:
upadted xml docs
Modified: modules/xml/trunk/docs/en-US/xml-general.xml
===================================================================
--- modules/xml/trunk/docs/en-US/xml-general.xml 2010-03-06 07:50:27 UTC (rev 12109)
+++ modules/xml/trunk/docs/en-US/xml-general.xml 2010-03-06 21:42:25 UTC (rev 12110)
@@ -4,13 +4,13 @@
<chapter id="remoting">
<title>Seam XML General</title>
- <para>Seam provides a method for configuring JSR-299 beans using XML. By default the XML configuration defines new beans,
- it does not change existing beans.
+ <para>Seam provides a method for configuring JSR-299 beans using XML. Using XML it is possible to add new beans, override existing beans, and add
+ extra configuration to existing beans. The default is to add a new bean.
</para>
<section>
<title>Configuration</title>
- <para>No special configuration is required to use seam-xml, all that is required is to include the jar file in your delpoyment. </para>
+ <para>No special configuration is required to use seam-xml, all that is required is to include the jar file in your deployment. </para>
</section>
<section>
@@ -122,7 +122,9 @@
<itemizedlist>
<listitem><para><literal>Beans</literal></para></listitem>
- <listitem><para><literal>veto</literal></para></listitem>
+ <listitem><para><literal>extends</literal></para></listitem>
+ <listitem><para><literal>override</literal></para></listitem>
+ <listitem><para><literal>parameters</literal></para></listitem>
<listitem><para><literal>value</literal></para></listitem>
<listitem><para><literal>key</literal></para></listitem>
<listitem><para><literal>entry</literal></para></listitem>
@@ -152,10 +154,6 @@
<listitem><para><literal>javax.enterprise.event</literal></para></listitem>
<listitem><para><literal>javax.decorator</literal></para></listitem>
<listitem><para><literal>javax.interceptor</literal></para></listitem>
- <listitem><para><literal>javax.persistence</literal></para></listitem>
- <listitem><para><literal>javax.xml.ws</literal></para></listitem>
- <listitem><para><literal>javax.jms</literal></para></listitem>
- <listitem><para><literal>javax.sql</literal></para></listitem>
</itemizedlist>
<para>So the <literal><Produces></literal> element above actually resolved to <literal>java.enterprise.inject.Produces</literal>
@@ -164,18 +162,24 @@
</section>
<section>
- <title>Replacing existing bean declarations</title>
- <para>It is possible to prevent an existing bean being installed using the <literal><veto/></literal> tag:</para>
+ <title>Overriding and extending beans</title>
+ <para>The may be cases where you want to modify an existing bean rather that adding a new one. The <literal><override></literal> and <literal><extends></literal>
+ tags allow you to do this. The <literal><override></literal> tag prevents the existing bean from being installed, and registers a new one with the given configuration.
+ The <literal><extends></literal> tag allows you to add extra configuration to an existing bean.</para>
<programlisting>
<![CDATA[
-<veto>
- <test:ProducerBean/>
- <test:RecieverBean/>
-</veto>
+<test:MyBean>
+ <extends>
+ <test:NewQualifier/>
+</test:MyBean>
+
+<test:OtherBean>
+ <override>
+ <test:NewQualifier/>
+</test:OtherBean>
]]>
</programlisting>
- <para>The code above would prevent the <literal>ProducerBean</literal> and <literal>RecieverBean</literal> that was discovered in the bean discovery phase from being installed.
- Using the veto tag it is possible to replace beans instead of just installing new ones. </para>
+ <para>The first entry above adds a new qualifier to an existing bean definition. The second prevents the existing bean from being installed, and registers a new bean with a single qualifier.</para>
</section>
<section>
@@ -286,16 +290,22 @@
The first <literal><test:method></literal> entry in the XML file configures the method that takes no arguments.
The <literal><Produces></literal> element makes it into a producer method. The next entry in the file configures
the method that takes a <literal>MethodValueBean</literal> as a parameter. The final entry configures a method that takes a two
- dimensional array of<literal>MethodValueBean</literal>'s as a parameter. When configuring methods non-annotation classes are
- considered to represent method paramters. If these parameters have annotation children they are taken to be annotations
- on the parameter.</para>
+ dimensional array of<literal>MethodValueBean</literal>'s as a parameter. Method Parameters a specified inside the <literal><parameters></literal>
+ tag. If these parameters have annotation children they are taken to be annotations on the parameter. </para>
- <para>In this instance the corresponding java declaration would be:</para>
+ <para>The corresponding java declaration for the xml above would be:</para>
<programlisting>
<![CDATA[
@Produces
+public int method() {//method body}
+
+@Produces
@Qualifier1
public int method(@Qualifier2 MethodValueBean param) {//method body}
+
+@Produces
+@Qualifier1
+public int method(@Qualifier2 MethodValueBean[][] param) {//method body}
]]>
</programlisting>
<para>Array parameters can be represented using the <literal><array></literal> element, with a child element to
Modified: modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 07:50:27 UTC (rev 12109)
+++ modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 21:42:25 UTC (rev 12110)
@@ -22,11 +22,13 @@
</p:GameManager>
<p:GameRoom>
+ <SessionScoped/>
<p:Room value="startRoom"/>
<p:north><Inject/><p:Room>emptyRoom1</p:Room></p:north>
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom1</p:Room>
<p:north><Inject/><p:Room>emptyRoom3</p:Room></p:north>
<p:west><Inject/><p:Room>dwarfRoom</p:Room></p:west>
@@ -35,6 +37,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>dwarfRoom</p:Room>
<p:roomType>MONSTER</p:roomType>
<p:shootEffect>KILL</p:shootEffect>
@@ -46,6 +49,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>pitRoom1</p:Room>
<p:roomType>GAMEOVER</p:roomType>
<p:adjacentMessage>You feel a breeze.</p:adjacentMessage>
@@ -54,12 +58,14 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom2</p:Room>
<p:north><Inject/><p:Room>emptyRoom4</p:Room></p:north>
<p:west><Inject/><p:Room>pitRoom1</p:Room></p:west>
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom3</p:Room>
<p:north><Inject/><p:Room>pitRoom2</p:Room></p:north>
<p:east><Inject/><p:Room>batRoom</p:Room></p:east>
@@ -67,6 +73,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>batRoom</p:Room>
<p:adjacentMessage>You hear a screeching noise.</p:adjacentMessage>
<p:message>A swarm of bats lands on you and tries to pick you up. They fail miserably. You swat them away with your bow.</p:message>
@@ -78,6 +85,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom4</p:Room>
<p:east><Inject/><p:Room>emptyRoom5</p:Room></p:east>
<p:south><Inject/><p:Room>emptyRoom2</p:Room></p:south>
@@ -85,6 +93,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom5</p:Room>
<p:north><Inject/><p:Room>emptyRoom7</p:Room></p:north>
<p:east><Inject/><p:Room>dragonRoom</p:Room></p:east>
@@ -92,6 +101,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>dragonRoom</p:Room>
<p:adjacentMessage>You hear a snoring noise. With every snore you see a flickering light, as if something were breathing flames from its nostrils.</p:adjacentMessage>
<p:roomType>GAMEOVER</p:roomType>
@@ -103,6 +113,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>pitRoom2</p:Room>
<p:roomType>GAMEOVER</p:roomType>
<p:adjacentMessage>You feel a breeze.</p:adjacentMessage>
@@ -112,6 +123,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom6</p:Room>
<p:north><Inject/><p:Room>emptyRoom8</p:Room></p:north>
<p:west><Inject/><p:Room>pitRoom2</p:Room></p:west>
@@ -119,6 +131,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom7</p:Room>
<p:north><Inject/><p:Room>emptyRoom10</p:Room></p:north>
<p:east><Inject/><p:Room>princessRoom</p:Room></p:east>
@@ -126,6 +139,7 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>princessRoom</p:Room>
<p:adjacentMessage>You hear a sobbing noise.</p:adjacentMessage>
<p:roomType>GAMEOVER</p:roomType>
@@ -137,12 +151,14 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom8</p:Room>
<p:east><Inject/><p:Room>emptyRoom9</p:Room></p:east>
<p:south><Inject/><p:Room>emptyRoom6</p:Room></p:south>
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom9</p:Room>
<p:north><Inject/><p:Room>wumpusRoom</p:Room></p:north>
<p:east><Inject/><p:Room>emptyRoom10</p:Room></p:east>
@@ -150,12 +166,14 @@
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:Room>emptyRoom10</p:Room>
<p:south><Inject/><p:Room>emptyRoom7</p:Room></p:south>
<p:west><Inject/><p:Room>emptyRoom9</p:Room></p:west>
</p:GameRoom>
<p:GameRoom>
+ <SessionScoped/>
<p:roomType>MONSTER</p:roomType>
<p:adjacentMessage>You smell a Wumpus</p:adjacentMessage>
<p:shootMessage>You hear a 'Thud', followed by a roar of pain.</p:shootMessage>
16 years, 1 month
Seam SVN: r12109 - in modules/xml/trunk/examples/princess-rescue/src/main: resources/META-INF and 1 other directory.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-06 02:50:27 -0500 (Sat, 06 Mar 2010)
New Revision: 12109
Modified:
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java
modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
Log:
updated seam xml example
Modified: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java 2010-03-06 06:53:46 UTC (rev 12108)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java 2010-03-06 07:50:27 UTC (rev 12109)
@@ -56,30 +56,37 @@
{
gameOver = true;
}
- for (GameRoom g : getAdjacentRooms())
+ else
{
- gameMessage.add(g.getAdjacentMessage());
+ for (GameRoom g : getAdjacentRooms())
+ {
+ if (!g.isMonsterKilled())
+ {
+ gameMessage.add(g.getAdjacentMessage());
+ }
+ }
}
}
public void runShoot(GameRoom room)
{
- if (room.getRoomType() == RoomType.MONSTER)
+ if (room.getShootEffect() == ShootEffect.KILL)
{
+ room.setMonsterKilled(true);
+ }
+ else if (room.getShootEffect() == ShootEffect.ANNOY)
+ {
+ gameOver = true;
+ }
+ if (room.getShootMessage() != null)
+ {
gameMessage.add(room.getShootMessage());
- if (room.getShootEffect() == ShootEffect.KILL)
- {
- room.setMonsterKilled(true);
- }
- else if (room.getShootEffect() == ShootEffect.ANNOY)
- {
- gameOver = true;
- }
}
else
{
gameMessage.add(emptyRoomShootMessage);
}
+
}
private Set<GameRoom> getAdjacentRooms()
Modified: modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 06:53:46 UTC (rev 12108)
+++ modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 07:50:27 UTC (rev 12109)
@@ -28,7 +28,7 @@
<p:GameRoom>
<p:Room>emptyRoom1</p:Room>
- <!-- <p:north><Inject/><Room>emptyRoom3</Room></p:north> -->
+ <p:north><Inject/><p:Room>emptyRoom3</p:Room></p:north>
<p:west><Inject/><p:Room>dwarfRoom</p:Room></p:west>
<p:east><Inject/><p:Room>pitRoom1</p:Room></p:east>
<p:south><Inject/><p:Room>startRoom</p:Room></p:south>
@@ -39,7 +39,7 @@
<p:roomType>MONSTER</p:roomType>
<p:shootEffect>KILL</p:shootEffect>
<p:adjacentMessage>You hear drunken singing.</p:adjacentMessage>
- <p:message>You find a drunken dwarven miner. He belches in your direction, falls over, and then seems to forget you are there.</p:message>
+ <p:message>You find a drunken dwarven miner. He belches in your direction, falls over, then seems to forget you are there.</p:message>
<p:shootMessage>You hear a 'Thud', followed by a surprised yell.</p:shootMessage>
<p:killedRoomMessage>You find a dead dwarven miner with something that looks suspiciously like one of your arrows sticking out of his chest. Probably best you don't mention this to anyone...</p:killedRoomMessage>
<p:east><Inject/><p:Room>emptyRoom1</p:Room></p:east>
@@ -52,5 +52,118 @@
<p:message>You fall into a bottomless pit. Game Over. </p:message>
<p:west><Inject/><p:Room>emptyRoom1</p:Room></p:west>
</p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom2</p:Room>
+ <p:north><Inject/><p:Room>emptyRoom4</p:Room></p:north>
+ <p:west><Inject/><p:Room>pitRoom1</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom3</p:Room>
+ <p:north><Inject/><p:Room>pitRoom2</p:Room></p:north>
+ <p:east><Inject/><p:Room>batRoom</p:Room></p:east>
+ <p:south><Inject/><p:Room>emptyRoom1</p:Room></p:south>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>batRoom</p:Room>
+ <p:adjacentMessage>You hear a screeching noise.</p:adjacentMessage>
+ <p:message>A swarm of bats lands on you and tries to pick you up. They fail miserably. You swat them away with your bow.</p:message>
+ <p:shootMessage>You seem to have disturbed some bats, they fly past your head in the dark.</p:shootMessage>
+ <p:north><Inject/><p:Room>emptyRoom6</p:Room></p:north>
+ <p:east><Inject/><p:Room>emptyRoom4</p:Room></p:east>
+ <p:south><Inject/><p:Room>pitRoom1</p:Room></p:south>
+ <p:west><Inject/><p:Room>emptyRoom3</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom4</p:Room>
+ <p:east><Inject/><p:Room>emptyRoom5</p:Room></p:east>
+ <p:south><Inject/><p:Room>emptyRoom2</p:Room></p:south>
+ <p:west><Inject/><p:Room>batRoom</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom5</p:Room>
+ <p:north><Inject/><p:Room>emptyRoom7</p:Room></p:north>
+ <p:east><Inject/><p:Room>dragonRoom</p:Room></p:east>
+ <p:west><Inject/><p:Room>emptyRoom4</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>dragonRoom</p:Room>
+ <p:adjacentMessage>You hear a snoring noise. With every snore you see a flickering light, as if something were breathing flames from its nostrils.</p:adjacentMessage>
+ <p:roomType>GAMEOVER</p:roomType>
+ <p:message>The dragon wakes up as you enter. 'Well this is fortunate, I was feeling a bit peckish' are the last words you ever hear.</p:message>
+ <p:shootEffect>ANNOY</p:shootEffect>
+ <p:shootMessage>Your arrow wakes up the dragon, without appearing to do any real damage. The last moments of your life are spent running from an angry dragon.</p:shootMessage>
+ <p:north><Inject/><p:Room>princessRoom</p:Room></p:north>
+ <p:west><Inject/><p:Room>emptyRoom5</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>pitRoom2</p:Room>
+ <p:roomType>GAMEOVER</p:roomType>
+ <p:adjacentMessage>You feel a breeze.</p:adjacentMessage>
+ <p:message>You fall into a bottomless pit. Game Over. </p:message>
+ <p:south><Inject/><p:Room>emptyRoom3</p:Room></p:south>
+ <p:east><Inject/><p:Room>emptyRoom6</p:Room></p:east>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom6</p:Room>
+ <p:north><Inject/><p:Room>emptyRoom8</p:Room></p:north>
+ <p:west><Inject/><p:Room>pitRoom2</p:Room></p:west>
+ <p:south><Inject/><p:Room>batRoom</p:Room></p:south>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom7</p:Room>
+ <p:north><Inject/><p:Room>emptyRoom10</p:Room></p:north>
+ <p:east><Inject/><p:Room>princessRoom</p:Room></p:east>
+ <p:south><Inject/><p:Room>emptyRoom5</p:Room></p:south>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>princessRoom</p:Room>
+ <p:adjacentMessage>You hear a sobbing noise.</p:adjacentMessage>
+ <p:roomType>GAMEOVER</p:roomType>
+ <p:message>You find the princess and quickly free her, and then escape from the dungeon. You both live happily ever after.</p:message>
+ <p:shootEffect>ANNOY</p:shootEffect>
+ <p:shootMessage>Your arrow clatters against the wall. You hear a cry 'Help i'm being shot at'. The cry wakes the dragon in the room next door, which promptly eats you.</p:shootMessage>
+ <p:south><Inject/><p:Room>dragonRoom</p:Room></p:south>
+ <p:west><Inject/><p:Room>emptyRoom7</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom8</p:Room>
+ <p:east><Inject/><p:Room>emptyRoom9</p:Room></p:east>
+ <p:south><Inject/><p:Room>emptyRoom6</p:Room></p:south>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom9</p:Room>
+ <p:north><Inject/><p:Room>wumpusRoom</p:Room></p:north>
+ <p:east><Inject/><p:Room>emptyRoom10</p:Room></p:east>
+ <p:west><Inject/><p:Room>emptyRoom8</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom10</p:Room>
+ <p:south><Inject/><p:Room>emptyRoom7</p:Room></p:south>
+ <p:west><Inject/><p:Room>emptyRoom9</p:Room></p:west>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:roomType>MONSTER</p:roomType>
+ <p:adjacentMessage>You smell a Wumpus</p:adjacentMessage>
+ <p:shootMessage>You hear a 'Thud', followed by a roar of pain.</p:shootMessage>
+ <p:killedRoomMessage>You stumbe accross a dead Wumpus. Well that wasn't so hard...</p:killedRoomMessage>
+ <p:message>You find a Wumpus. It eats you.</p:message>
+ <p:shootEffect>KILL</p:shootEffect>
+ <p:Room>wumpusRoom</p:Room>
+ <p:south><Inject/><p:Room>emptyRoom9</p:Room></p:south>
+ </p:GameRoom>
</Beans>
\ No newline at end of file
16 years, 1 month
Seam SVN: r12108 - in modules/xml/trunk: examples and 26 other directories.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-06 01:53:46 -0500 (Sat, 06 Mar 2010)
New Revision: 12108
Added:
modules/xml/trunk/examples/
modules/xml/trunk/examples/princess-rescue/
modules/xml/trunk/examples/princess-rescue/pom.xml
modules/xml/trunk/examples/princess-rescue/src/
modules/xml/trunk/examples/princess-rescue/src/main/
modules/xml/trunk/examples/princess-rescue/src/main/java/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameMessage.java
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameRoom.java
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/Room.java
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/RoomType.java
modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/ShootEffect.java
modules/xml/trunk/examples/princess-rescue/src/main/resources/
modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/
modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/beans.xml
modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/META-INF/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/META-INF/context.xml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/faces-config.xml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/web.xml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/home.xhtml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/index.jsp
modules/xml/trunk/examples/princess-rescue/src/main/webapp/play.xhtml
modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/css/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/css/screen.css
modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/
modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/banner.png
modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/weld.png
modules/xml/trunk/examples/princess-rescue/src/test/
modules/xml/trunk/examples/princess-rescue/src/test/java/
modules/xml/trunk/examples/princess-rescue/src/test/java/org/
modules/xml/trunk/examples/princess-rescue/src/test/java/org/jboss/
modules/xml/trunk/examples/princess-rescue/src/test/java/org/jboss/seam/
modules/xml/trunk/examples/princess-rescue/src/test/java/org/jboss/seam/xml/
modules/xml/trunk/examples/princess-rescue/src/test/java/org/jboss/seam/xml/examples/
modules/xml/trunk/examples/princess-rescue/src/test/resources/
modules/xml/trunk/examples/princess-rescue/src/test/resources/jetty-env.xml
Log:
added start of seam xml example
Property changes on: modules/xml/trunk/examples/princess-rescue
___________________________________________________________________
Name: svn:ignore
+ .classpath
.project
.settings
Added: modules/xml/trunk/examples/princess-rescue/pom.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/pom.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/pom.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,204 @@
+<?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.xml.examples</groupId>
+ <artifactId>princess-rescue</artifactId>
+ <packaging>war</packaging>
+ <name>princess-rescue</name>
+ <version>1.0.0-SNAPSHOT</version>
+
+ <properties>
+ <!--
+ Explicitly declaring the source encoding eliminates the following message:
+ [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
+ -->
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <!-- The version of Weld extensions in use -->
+ <weld.extensions.version>1.0.1-SNAPSHOT</weld.extensions.version>
+ </properties>
+
+ <repositories>
+ <!-- Several key Java EE APIs and RIs are missing from the Maven Central Repository -->
+ <!-- The goal is to eventually eliminate the reliance on the JBoss repository -->
+ <repository>
+ <id>repository.jboss.org</id>
+ <name>JBoss Repository</name>
+ <url>http://repository.jboss.org/maven2</url>
+ </repository>
+ </repositories>
+
+ <dependencyManagement>
+ <dependencies>
+ <!-- Import scope will provide versions for dependencies below. -->
+ <dependency>
+ <groupId>org.jboss.weld</groupId>
+ <artifactId>weld-extensions-bom</artifactId>
+ <version>${weld.extensions.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>seam-xml</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Common to JEE and Servlet containers -->
+ <dependency>
+ <groupId>javax.enterprise</groupId>
+ <artifactId>cdi-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.annotation</groupId>
+ <artifactId>jsr250-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- JSF 2.0 API -->
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ </dependency>
+
+ <!-- Optional, but pretty useful. -->
+ <!--
+ <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
+ -->
+
+ <!-- Optional, but highly recommended. -->
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.10</version>
+ <scope>test</scope>
+ <classifier>jdk15</classifier>
+ </dependency>
+
+ <!-- Jetty/Tomcat-specific scopes and artifacts -->
+
+ <!-- JSF 2.0 -->
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-impl</artifactId>
+ <version>2.0.1-FCS</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ <version>2.0.1-FCS</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.weld.servlet</groupId>
+ <artifactId>weld-servlet</artifactId>
+ <version>1.0.1-Final</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.glassfish.web</groupId>
+ <artifactId>el-impl</artifactId>
+ <version>2.1.2-b04</version>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.el</groupId>
+ <artifactId>el-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- end Jetty/Tomcat-specific scopes and artifacts -->
+
+ <!-- Bean Validation API (JSR 303) -->
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ </dependency>
+
+ <!-- Bean Validation Implementation -->
+ <!-- Provides portable constraints such as @NotEmpty, @Email and @Url -->
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ <version>4.0.0.GA</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>princess-rescue</finalName>
+ <plugins>
+ <!-- Compiler plugin enforces Java 1.5 compatibility -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+
+ <!-- Eclipse plugin - download source and JavaDoc jars automatically -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <configuration>
+ <wtpversion>2.0</wtpversion>
+ <downloadSources>true</downloadSources>
+ <downloadJavadocs>true</downloadJavadocs>
+ </configuration>
+ </plugin>
+
+ <!-- Embedded Jetty (jetty:run) -->
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-plugin</artifactId>
+ <configuration>
+ <!-- Delete this block to have Jetty run default port (8080) -->
+ <connectors>
+ <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+ <port>9090</port>
+ </connector>
+ </connectors>
+ <!-- force friendly name instead of artifact name + version -->
+ <contextPath>${project.build.finalName}</contextPath>
+ <!-- Where the BeanManager is constructed. This is where you'll declare datasources. -->
+ <jettyEnvXml>${basedir}/src/test/resources/jetty-env.xml</jettyEnvXml>
+ <!-- This parameter will auto-deploy modified classes. -->
+ <!-- You can save changes in a file or class and refresh your browser to view the changes. -->
+ <scanIntervalSeconds>3</scanIntervalSeconds>
+ </configuration>
+ </plugin>
+
+ <!-- Embedded Tomcat (package tomcat:run) -->
+ <!-- Standalone Tomcat (package tomcat:deploy) -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>tomcat-maven-plugin</artifactId>
+ <configuration>
+ <path>/${project.build.finalName}</path>
+ <!-- Embedded port -->
+ <port>9090</port>
+ <!--
+ The default authentication credentials for remote deployment are username "admin" with no password To
+ override credentials, define a server in settings.xml and activate it using the <server> element
+ -->
+ <url>http://localhost:8080/manager</url>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameManager.java 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,217 @@
+package org.jboss.seam.xml.examples.princess;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+@SessionScoped
+@Named
+public class GameManager implements Serializable
+{
+
+ Instance<GameRoom> allRooms;
+
+ @Inject
+ GameMessage gameMessage;
+
+ GameRoom startRoom;
+
+ GameRoom currentRoom;
+
+ String emptyRoomShootMessage;
+
+ String startMessage;
+
+ boolean gameOver = true;
+
+ public String newGame()
+ {
+ for (GameRoom i : allRooms)
+ {
+ i.reset();
+ }
+ gameMessage.add(startMessage);
+ runRoom(startRoom);
+ gameOver = false;
+ return "play";
+ }
+
+ public void runRoom(GameRoom room)
+ {
+ currentRoom = room;
+ if (currentRoom.isMonsterKilled())
+ {
+ gameMessage.add(room.getKilledRoomMessage());
+ }
+ else
+ {
+ gameMessage.add(room.getMessage());
+ }
+ if (room.getRoomType() == RoomType.GAMEOVER)
+ {
+ gameOver = true;
+ }
+ for (GameRoom g : getAdjacentRooms())
+ {
+ gameMessage.add(g.getAdjacentMessage());
+ }
+ }
+
+ public void runShoot(GameRoom room)
+ {
+ if (room.getRoomType() == RoomType.MONSTER)
+ {
+ gameMessage.add(room.getShootMessage());
+ if (room.getShootEffect() == ShootEffect.KILL)
+ {
+ room.setMonsterKilled(true);
+ }
+ else if (room.getShootEffect() == ShootEffect.ANNOY)
+ {
+ gameOver = true;
+ }
+ }
+ else
+ {
+ gameMessage.add(emptyRoomShootMessage);
+ }
+ }
+
+ private Set<GameRoom> getAdjacentRooms()
+ {
+ HashSet<GameRoom> ret = new HashSet<GameRoom>();
+ if (currentRoom.getNorth() != null)
+ {
+ ret.add(currentRoom.getNorth());
+ }
+ if (currentRoom.getSouth() != null)
+ {
+ ret.add(currentRoom.getSouth());
+ }
+ if (currentRoom.getEast() != null)
+ {
+ ret.add(currentRoom.getEast());
+ }
+ if (currentRoom.getWest() != null)
+ {
+ ret.add(currentRoom.getWest());
+ }
+ return ret;
+ }
+
+ public void shootNorth()
+ {
+ if (currentRoom.getNorth() != null)
+ {
+ runShoot(currentRoom.getNorth());
+ }
+ else
+ {
+ gameMessage.add("You cannot shoot that way");
+ }
+ }
+
+ public void shootSouth()
+ {
+ if (currentRoom.getSouth() != null)
+ {
+ runShoot(currentRoom.getSouth());
+ }
+ else
+ {
+ gameMessage.add("You cannot shoot that way");
+ }
+ }
+
+ public void shootEast()
+ {
+ if (currentRoom.getEast() != null)
+ {
+ runShoot(currentRoom.getEast());
+ }
+ else
+ {
+ gameMessage.add("You cannot shoot that way");
+ }
+ }
+
+ public void shootWest()
+ {
+ if (currentRoom.getWest() != null)
+ {
+ runShoot(currentRoom.getWest());
+ }
+ else
+ {
+ gameMessage.add("You cannot shoot that way");
+ }
+ }
+
+ public void moveNorth()
+ {
+ if (currentRoom.getNorth() != null)
+ {
+ runRoom(currentRoom.getNorth());
+ }
+ else
+ {
+ gameMessage.add("You cannot move that way");
+ }
+ }
+
+ public void moveSouth()
+ {
+ if (currentRoom.getSouth() != null)
+ {
+ runRoom(currentRoom.getSouth());
+ }
+ else
+ {
+ gameMessage.add("You cannot move that way");
+ }
+ }
+
+ public void moveEast()
+ {
+ if (currentRoom.getEast() != null)
+ {
+ runRoom(currentRoom.getEast());
+ }
+ else
+ {
+ gameMessage.add("You cannot move that way");
+ }
+ }
+
+ public void moveWest()
+ {
+ if (currentRoom.getWest() != null)
+ {
+ runRoom(currentRoom.getWest());
+ }
+ else
+ {
+ gameMessage.add("You cannot move that way");
+ }
+ }
+
+ public GameRoom getCurrentRoom()
+ {
+ return currentRoom;
+ }
+
+ public void setCurrentRoom(GameRoom currentRoom)
+ {
+ this.currentRoom = currentRoom;
+ }
+
+ public boolean isGameOver()
+ {
+ return gameOver;
+ }
+}
Added: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameMessage.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameMessage.java (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameMessage.java 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,29 @@
+package org.jboss.seam.xml.examples.princess;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+
+@RequestScoped
+@Named
+public class GameMessage implements Serializable
+{
+
+ StringBuilder builder = new StringBuilder();
+
+ public void add(String message)
+ {
+ if (message != null)
+ {
+ builder.append(message);
+ builder.append('\n');
+ }
+ }
+
+ public String getMessage()
+ {
+ return builder.toString();
+ }
+
+}
Added: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameRoom.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameRoom.java (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/GameRoom.java 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,170 @@
+package org.jboss.seam.xml.examples.princess;
+
+import java.io.Serializable;
+
+/**
+ * represents a room in the game. All configuration is done via XML
+ *
+ * @author stuart
+ *
+ */
+public class GameRoom implements Serializable
+{
+
+ public GameRoom()
+ {
+
+ }
+
+ /**
+ * message that is displayed when the player enters the room.
+ */
+ String message;
+ /**
+ * message that is displayed when the player is adjacent to the room
+ */
+ String adjacentMessage;
+ /**
+ * What happens if an arrow is fired into the room
+ */
+ ShootEffect shootEffect = ShootEffect.NOTHING;
+ /**
+ * Message that is displayed when the arrow hits something, even if it is
+ * just annoyed
+ */
+ String shootMessage;
+ /**
+ * Message that is display when a player enters a room that has something
+ * they just shot.
+ */
+ String killedRoomMessage;
+
+ /**
+ * if the monster in the room has been killed.
+ */
+ boolean monsterKilled = false;
+
+ /**
+ * what happens when the player enters the room. There is no difference
+ * between dying and winning, only a different message is displayed
+ */
+ RoomType roomType;
+
+ GameRoom north, south, east, west;
+
+ public void reset()
+ {
+ monsterKilled = false;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public void setMessage(String message)
+ {
+ this.message = message;
+ }
+
+ public String getAdjacentMessage()
+ {
+ return adjacentMessage;
+ }
+
+ public void setAdjacentMessage(String adjacentMessage)
+ {
+ this.adjacentMessage = adjacentMessage;
+ }
+
+ public ShootEffect getShootEffect()
+ {
+ return shootEffect;
+ }
+
+ public void setShootEffect(ShootEffect shootEffect)
+ {
+ this.shootEffect = shootEffect;
+ }
+
+ public String getShootMessage()
+ {
+ return shootMessage;
+ }
+
+ public void setShootMessage(String shootMessage)
+ {
+ this.shootMessage = shootMessage;
+ }
+
+ public String getKilledRoomMessage()
+ {
+ return killedRoomMessage;
+ }
+
+ public void setKilledRoomMessage(String killedRoomMessage)
+ {
+ this.killedRoomMessage = killedRoomMessage;
+ }
+
+ public RoomType getRoomType()
+ {
+ return roomType;
+ }
+
+ public void setRoomType(RoomType roomType)
+ {
+ this.roomType = roomType;
+ }
+
+ public GameRoom getNorth()
+ {
+ return north;
+ }
+
+ public void setNorth(GameRoom north)
+ {
+ this.north = north;
+ }
+
+ public GameRoom getSouth()
+ {
+ return south;
+ }
+
+ public void setSouth(GameRoom south)
+ {
+ this.south = south;
+ }
+
+ public GameRoom getEast()
+ {
+ return east;
+ }
+
+ public void setEast(GameRoom east)
+ {
+ this.east = east;
+ }
+
+ public GameRoom getWest()
+ {
+ return west;
+ }
+
+ public void setWest(GameRoom west)
+ {
+ this.west = west;
+ }
+
+ public boolean isMonsterKilled()
+ {
+ return monsterKilled;
+ }
+
+ public void setMonsterKilled(boolean monsterKilled)
+ {
+ this.monsterKilled = monsterKilled;
+ }
+
+}
Added: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/Room.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/Room.java (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/Room.java 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,10 @@
+package org.jboss.seam.xml.examples.princess;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+(a)Retention(RetentionPolicy.RUNTIME)
+public @interface Room
+{
+ String value();
+}
Added: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/RoomType.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/RoomType.java (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/RoomType.java 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,6 @@
+package org.jboss.seam.xml.examples.princess;
+
+public enum RoomType
+{
+ NORMAL, MONSTER, GAMEOVER;
+}
Added: modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/ShootEffect.java
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/ShootEffect.java (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/java/org/jboss/seam/xml/examples/princess/ShootEffect.java 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,6 @@
+package org.jboss.seam.xml.examples.princess;
+
+public enum ShootEffect
+{
+ NOTHING, KILL, ANNOY;
+}
Added: modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/beans.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/beans.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/beans.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ The contents of this file is permitted to be empty.
+ The schema definition is provided for your convenience.
+-->
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://java.sun.com/xml/ns/javaee
+ http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+</beans>
Added: modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/resources/META-INF/seam-beans.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+ xmlns:p="org.jboss.seam.xml.examples.princess">
+ <!-- Makes the Room annotation a qualifier -->
+ <p:Room>
+ <Qualifier/>
+ </p:Room>
+
+ <p:GameManager>
+ <extends/>
+ <p:allRooms>
+ <Any/>
+ <Inject/>
+ </p:allRooms>
+ <p:emptyRoomShootMessage>Your arrow does not appear to hit anything.</p:emptyRoomShootMessage>
+ <p:startMessage>You enter the dungeon, with you bow in your hand and your heart in your mouth.</p:startMessage>
+ <p:startRoom>
+ <!-- Inject the starting room -->
+ <Inject/>
+ <p:Room>startRoom</p:Room>
+ </p:startRoom>
+ </p:GameManager>
+
+ <p:GameRoom>
+ <p:Room value="startRoom"/>
+ <p:north><Inject/><p:Room>emptyRoom1</p:Room></p:north>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>emptyRoom1</p:Room>
+ <!-- <p:north><Inject/><Room>emptyRoom3</Room></p:north> -->
+ <p:west><Inject/><p:Room>dwarfRoom</p:Room></p:west>
+ <p:east><Inject/><p:Room>pitRoom1</p:Room></p:east>
+ <p:south><Inject/><p:Room>startRoom</p:Room></p:south>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>dwarfRoom</p:Room>
+ <p:roomType>MONSTER</p:roomType>
+ <p:shootEffect>KILL</p:shootEffect>
+ <p:adjacentMessage>You hear drunken singing.</p:adjacentMessage>
+ <p:message>You find a drunken dwarven miner. He belches in your direction, falls over, and then seems to forget you are there.</p:message>
+ <p:shootMessage>You hear a 'Thud', followed by a surprised yell.</p:shootMessage>
+ <p:killedRoomMessage>You find a dead dwarven miner with something that looks suspiciously like one of your arrows sticking out of his chest. Probably best you don't mention this to anyone...</p:killedRoomMessage>
+ <p:east><Inject/><p:Room>emptyRoom1</p:Room></p:east>
+ </p:GameRoom>
+
+ <p:GameRoom>
+ <p:Room>pitRoom1</p:Room>
+ <p:roomType>GAMEOVER</p:roomType>
+ <p:adjacentMessage>You feel a breeze.</p:adjacentMessage>
+ <p:message>You fall into a bottomless pit. Game Over. </p:message>
+ <p:west><Inject/><p:Room>emptyRoom1</p:Room></p:west>
+ </p:GameRoom>
+
+</Beans>
\ No newline at end of file
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/META-INF/context.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/META-INF/context.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/META-INF/context.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context>
+ <!-- disable storage of sessions across restarts -->
+ <Manager pathname=""/>
+ <Resource name="BeanManager" auth="Container" type="javax.enterprise.inject.spi.BeanManager" factory="org.jboss.weld.resources.ManagerObjectFactory"/>
+ <!-- Uncomment to enable injection into Servlets, Servlet Listeners and Filters in Tomcat -->
+ <!-- <Listener className="org.jboss.weld.environment.tomcat.WeldLifecycleListener"/> -->
+</Context>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/faces-config.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/faces-config.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file is not required if you don't need any extra configuration. -->
+<faces-config version="2.0"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://java.sun.com/xml/ns/javaee
+ http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
+</faces-config>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/templates/default.xhtml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:ui="http://java.sun.com/jsf/facelets">
+ <h:head>
+ <title>CDI and JSF 2 Starter Application</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <h:outputStylesheet name="css/screen.css"/>
+ </h:head>
+ <h:body>
+ <div id="container">
+ <div id="content">
+ <div id="sidebar">
+ <h3>Find out more</h3>
+ <p>
+ Explore JavaServer Faces.
+ </p>
+ <ul>
+ <li><a href="http://www.javaserverfaces.org">JSF community site</a></li>
+ </ul>
+ <p>
+ Learn more about Java EE 6 and the extensions provided by Weld and Seam.
+ </p>
+ <ul>
+ <li><a href="http://seamframework.org/Weld/JSR299AndWeldOverview">Overview</a></li>
+ <li><a href="http://seamframework.org">Project site</a></li>
+ <li><a href="http://seamframework.org/Documentation/SeamDocumentation#H-WeldReferenceD...">Documentation</a></li>
+ <li><a href="http://seamframework.org/Community/Forums">User forums</a></li>
+ <li><a href="http://seamframework.org/Community/MailingLists">Mailing lists</a></li>
+ <li><a href="https://jira.jboss.org/jira/browse/WELD">Issue tracker</a></li>
+ </ul>
+ <p>
+ If you have an add-on, please <a href="http://seamframework.org/Community/Forums">let us know</a> and
+ consider <a href="http://seamframework.org/Community/Contribute">contributing</a> it back to the
+ community!
+ </p>
+ </div>
+ <ui:insert name="content">
+ [Template content will be inserted here]
+ </ui:insert>
+ </div>
+ <div id="footer">
+ <h:graphicImage value="/resources/gfx/weld.png" alt="Weld logo"/>
+ <p>
+ This project was generated from a Maven archetype maintained by the Weld team.<br/>
+ Weld is the reference implementation of CDI, released under the Apache License, Version 2.0.<br/>
+ </p>
+ </div>
+ </div>
+ </h:body>
+</html>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/web.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/web.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/WEB-INF/web.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://java.sun.com/xml/ns/javaee
+ http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+ <!-- Activate the JSF 2.0 servlet -->
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <!-- Tell the context which URLs to send through JSF -->
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.jsf</url-pattern>
+ </servlet-mapping>
+
+ <!-- This is an optional parameter, but it makes troubleshooting errors much easier -->
+ <!-- You are advised to remove this context parameter before a production deployment -->
+ <context-param>
+ <param-name>facelets.DEVELOPMENT</param-name>
+ <param-value>true</param-value>
+ </context-param>
+
+ <!-- Weld Jetty/Tomcat specific configuration parameters -->
+ <!-- *** The <listener> and <resource-env-ref> elements can be deleted when running in a Java EE 6 container *** -->
+ <listener>
+ <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
+ </listener>
+
+ <resource-env-ref>
+ <description>Object factory for the CDI Bean Manager</description>
+ <resource-env-ref-name>BeanManager</resource-env-ref-name>
+ <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
+ </resource-env-ref>
+
+</web-app>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/home.xhtml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/home.xhtml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/home.xhtml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ template="/WEB-INF/templates/default.xhtml">
+ <ui:define name="content">
+ <h1>Welcome to Princess Rescue</h1>
+ <p>The princess has been kidnaped by a dragon, and you are the only one who can save her. Armed only with your trusty bow you bravely head into the dragon's lair, who know what horrors you will encounter, some say the caves are even home to the dreaded Wumpus.</p>
+
+ <h:form id="bv">
+ <h:commandButton id="next" action="#{gameManager.newGame}" value="Play Game"/>
+ </h:form>
+ </ui:define>
+</ui:composition>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/index.jsp
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/index.jsp (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/index.jsp 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1 @@
+<% response.sendRedirect("home.jsf"); %>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/play.xhtml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/play.xhtml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/play.xhtml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ template="/WEB-INF/templates/default.xhtml">
+ <ui:define name="content">
+ <h1>Princess Rescue</h1>
+ <p>
+ <h:outputText value="#{gameMessage.message}" />
+ </p>
+ <h:form id="bv">
+ <table>
+ <tr>
+ <td>
+ <table>
+ <tr><td colspan="3"><b>Move</b></td></tr>
+ <tr><td/><td><h:commandButton disabled="#{gameManager.currentRoom.north == null or gameManager.gameOver}" action="#{gameManager.moveNorth}" value="North"/></td><td/></tr>
+ <tr>
+ <td><h:commandButton disabled="#{gameManager.currentRoom.west == null or gameManager.gameOver}" action="#{gameManager.moveWest}" value="West"/></td>
+ <td/>
+ <td><h:commandButton disabled="#{gameManager.currentRoom.east == null or gameManager.gameOver}" action="#{gameManager.moveEast}" value="East"/></td>
+ </tr>
+ <tr><td/><td><h:commandButton disabled="#{gameManager.currentRoom.south == null or gameManager.gameOver}" action="#{gameManager.moveSouth}" value="South"/></td><td/></tr>
+ </table>
+ </td>
+ <td>
+ <table>
+ <tr><td colspan="3"><b>Shoot</b></td></tr>
+ <tr><td/><td><h:commandButton disabled="#{gameManager.currentRoom.north == null or gameManager.gameOver}" action="#{gameManager.shootNorth}" value="North"/></td><td/></tr>
+ <tr>
+ <td><h:commandButton disabled="#{gameManager.currentRoom.west == null or gameManager.gameOver}" action="#{gameManager.shootWest}" value="West"/></td>
+ <td/>
+ <td><h:commandButton disabled="#{gameManager.currentRoom.east == null or gameManager.gameOver}" action="#{gameManager.shootEast}" value="East"/></td>
+ </tr>
+ <tr><td/><td><h:commandButton disabled="#{gameManager.currentRoom.south == null or gameManager.gameOver}" action="#{gameManager.shootSouth}" value="South"/></td><td/></tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <h:commandButton value="New Game" action="home"/>
+ </h:form>
+ </ui:define>
+</ui:composition>
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/css/screen.css
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/css/screen.css (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/css/screen.css 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,39 @@
+body {
+ margin: 0;
+ padding: 0;
+ background-color: #EAECEE;
+ font-family: Verdana, sans-serif;
+ font-size: 0.9em;
+}
+#container {
+ margin: 0 auto;
+ padding: 0 20px 10px 20px;
+ border: 1px solid #666666;
+ width: 865px; /* subtract 40px from banner width for padding */
+ background: #FFFFFF url(#{request.contextPath}/resources/gfx/banner.png) no-repeat;
+ padding-top: 110px;
+}
+#sidebar {
+ font-size: 0.9em;
+ width: 225px;
+ float: right;
+ border: 1px solid #666666;
+ background: #EAECEE;
+ padding: 0 15px 5px 15px;
+}
+#sidebar ul {
+ padding-left: 30px;
+}
+#footer {
+ clear: both;
+ text-align: center;
+ color: #666666;
+ font-size: 0.85em;
+}
+code {
+ font-size: 1.1em;
+}
+span.invalid {
+ padding-left: 3px;
+ color: red;
+}
\ No newline at end of file
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/banner.png
===================================================================
(Binary files differ)
Property changes on: modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/banner.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/weld.png
===================================================================
(Binary files differ)
Property changes on: modules/xml/trunk/examples/princess-rescue/src/main/webapp/resources/gfx/weld.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: modules/xml/trunk/examples/princess-rescue/src/test/resources/jetty-env.xml
===================================================================
--- modules/xml/trunk/examples/princess-rescue/src/test/resources/jetty-env.xml (rev 0)
+++ modules/xml/trunk/examples/princess-rescue/src/test/resources/jetty-env.xml 2010-03-06 06:53:46 UTC (rev 12108)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
+<Configure id="webAppCtx" class="org.mortbay.jetty.webapp.WebAppContext">
+ <New id="beanManager" class="org.mortbay.jetty.plus.naming.Resource">
+ <Arg>
+ <Ref id="webAppCtx"/>
+ </Arg>
+ <Arg>BeanManager</Arg>
+ <Arg>
+ <New class="javax.naming.Reference">
+ <Arg>javax.enterprise.inject.spi.BeanManager</Arg>
+ <Arg>org.jboss.weld.resources.ManagerObjectFactory</Arg>
+ <Arg/>
+ </New>
+ </Arg>
+ </New>
+</Configure>
16 years, 1 month
Seam SVN: r12107 - in branches/community/Seam_2_2/examples/drools: src/org/jboss/seam/example/numberguess and 1 other directory.
by seam-commits@lists.jboss.org
Author: tsurdilovic
Date: 2010-03-05 19:48:03 -0500 (Fri, 05 Mar 2010)
New Revision: 12107
Modified:
branches/community/Seam_2_2/examples/drools/resources/pageflow.jpdl.xml
branches/community/Seam_2_2/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java
Log:
JBSEAM-4562
Modified: branches/community/Seam_2_2/examples/drools/resources/pageflow.jpdl.xml
===================================================================
--- branches/community/Seam_2_2/examples/drools/resources/pageflow.jpdl.xml 2010-03-06 00:44:18 UTC (rev 12106)
+++ branches/community/Seam_2_2/examples/drools/resources/pageflow.jpdl.xml 2010-03-06 00:48:03 UTC (rev 12107)
@@ -23,7 +23,7 @@
<!-- if a ruleflow was added, start a process -->
<!-- <startProcessId>numberguessid</startProcessId> -->
<assertObjects>
- <element>#{game}</element>
+ <!-- <element>#{game}</element> -->
<element>#{guess}</element>
</assertObjects>
</handler>
Modified: branches/community/Seam_2_2/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java
===================================================================
--- branches/community/Seam_2_2/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java 2010-03-06 00:44:18 UTC (rev 12106)
+++ branches/community/Seam_2_2/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java 2010-03-06 00:48:03 UTC (rev 12107)
@@ -3,9 +3,11 @@
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
@Name("guess")
@Scope(ScopeType.CONVERSATION)
+@BypassInterceptors
public class Guess
{
16 years, 1 month
Seam SVN: r12106 - in tags/JBoss_Seam_2_2_1_CR1/examples/drools: src/org/jboss/seam/example/numberguess and 1 other directory.
by seam-commits@lists.jboss.org
Author: tsurdilovic
Date: 2010-03-05 19:44:18 -0500 (Fri, 05 Mar 2010)
New Revision: 12106
Modified:
tags/JBoss_Seam_2_2_1_CR1/examples/drools/resources/pageflow.jpdl.xml
tags/JBoss_Seam_2_2_1_CR1/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java
Log:
JBSEAM-4562
Modified: tags/JBoss_Seam_2_2_1_CR1/examples/drools/resources/pageflow.jpdl.xml
===================================================================
--- tags/JBoss_Seam_2_2_1_CR1/examples/drools/resources/pageflow.jpdl.xml 2010-03-05 21:33:42 UTC (rev 12105)
+++ tags/JBoss_Seam_2_2_1_CR1/examples/drools/resources/pageflow.jpdl.xml 2010-03-06 00:44:18 UTC (rev 12106)
@@ -23,7 +23,7 @@
<!-- if a ruleflow was added, start a process -->
<!-- <startProcessId>numberguessid</startProcessId> -->
<assertObjects>
- <element>#{game}</element>
+ <!-- <element>#{game}</element> -->
<element>#{guess}</element>
</assertObjects>
</handler>
Modified: tags/JBoss_Seam_2_2_1_CR1/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java
===================================================================
--- tags/JBoss_Seam_2_2_1_CR1/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java 2010-03-05 21:33:42 UTC (rev 12105)
+++ tags/JBoss_Seam_2_2_1_CR1/examples/drools/src/org/jboss/seam/example/numberguess/Guess.java 2010-03-06 00:44:18 UTC (rev 12106)
@@ -3,9 +3,11 @@
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
@Name("guess")
@Scope(ScopeType.CONVERSATION)
+@BypassInterceptors
public class Guess
{
16 years, 1 month
Seam SVN: r12105 - in modules/xml/trunk/src: main/java/org/jboss/seam/xml/parser/namespace and 5 other directories.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-03-05 16:33:42 -0500 (Fri, 05 Mar 2010)
New Revision: 12105
Added:
modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java
modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/
modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructedBean.java
modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructorTest.java
modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ValueProvider.java
modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/constructor/
modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/constructor/constructor-beans.xml
Removed:
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java
modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/dependency/
Modified:
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java
modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
Log:
Added the ability to configure a bean constructor via XML
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-05 20:48:08 UTC (rev 12104)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -5,6 +5,7 @@
package org.jboss.seam.xml.model;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
@@ -14,6 +15,8 @@
import java.util.Map.Entry;
import javax.enterprise.inject.Stereotype;
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Inject;
import javax.inject.Qualifier;
import javax.interceptor.InterceptorBinding;
@@ -24,6 +27,7 @@
import org.jboss.seam.xml.parser.namespace.CompositeNamespaceElementResolver;
import org.jboss.seam.xml.parser.namespace.NamespaceElementResolver;
import org.jboss.seam.xml.parser.namespace.RootNamespaceElementResolver;
+import org.jboss.seam.xml.util.ReflectionUtils;
import org.jboss.seam.xml.util.XmlConfigurationException;
import org.jboss.seam.xml.util.XmlObjectConverter;
import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
@@ -94,7 +98,7 @@
ResultType type = getItemType(rb);
if (type == ResultType.BEAN)
{
- BeanResult<?> tp = buildAnnotatedType(rb);
+ BeanResult<?> tp = buildAnnotatedType((ClassXmlItem) rb);
if (tp.isExtend())
{
ret.getExtendBeans().add(tp);
@@ -123,11 +127,11 @@
}
else if (type == ResultType.QUALIFIER)
{
- ret.getQualifiers().add(rb.getJavaClass());
+ ret.getQualifiers().add((Class) rb.getJavaClass());
}
else if (type == ResultType.INTERCEPTOR_BINDING)
{
- ret.getInterceptorBindings().add(rb.getJavaClass());
+ ret.getInterceptorBindings().add((Class) rb.getJavaClass());
}
else if (type == ResultType.STEREOTYPE)
{
@@ -231,12 +235,12 @@
}
@SuppressWarnings("unchecked")
- <T> BeanResult<T> buildAnnotatedType(XmlItem rb)
+ BeanResult<?> buildAnnotatedType(ClassXmlItem rb)
{
- BeanResult<T> result = new BeanResult<T>(rb.getJavaClass());
- NewAnnotatedTypeBuilder<T> type = result.getBuilder();
+ BeanResult<?> result = new BeanResult(rb.getJavaClass());
+ NewAnnotatedTypeBuilder<?> type = result.getBuilder();
// list of constructor arguments
- List<XmlItem> constList = new ArrayList<XmlItem>();
+ List<ParameterXmlItem> constList = new ArrayList<ParameterXmlItem>();
boolean override = !rb.getChildrenOfType(OverrideXmlItem.class).isEmpty();
boolean extend = !rb.getChildrenOfType(ExtendsXmlItem.class).isEmpty();
@@ -252,11 +256,18 @@
Annotation a = createAnnotation(item);
type.addToClass(a);
}
-
- for (ParameterXmlItem item : rb.getChildrenOfType(ParameterXmlItem.class))
+ List<ParametersXmlItem> constructorParameters = rb.getChildrenOfType(ParametersXmlItem.class);
+ if (constructorParameters.size() > 1)
{
- constList.add(item);
+ throw new XmlConfigurationException("A method may only have a single <parameters> element", rb.getDocument(), rb.getLineno());
}
+ else if (!constructorParameters.isEmpty())
+ {
+ for (ParameterXmlItem item : constructorParameters.get(0).getChildrenOfType(ParameterXmlItem.class))
+ {
+ constList.add(item);
+ }
+ }
for (FieldXmlItem item : rb.getChildrenOfType(FieldXmlItem.class))
{
for (AnnotationXmlItem fi : item.getChildrenOfType(AnnotationXmlItem.class))
@@ -296,11 +307,40 @@
if (!constList.isEmpty())
{
- // the bean defined constructor arguments
+ int paramCount = 0;
+ Constructor<?> c = resolveConstructor(rb, constList);
+ // we automatically add inject to the constructor
+ type.addToConstructor((Constructor) c, new AnnotationLiteral<Inject>()
+ {
+ });
+ for (ParameterXmlItem fi : constList)
+ {
+ int param = paramCount++;
+ for (AnnotationXmlItem pan : fi.getChildrenOfType(AnnotationXmlItem.class))
+ {
+ Annotation a = createAnnotation(pan);
+ type.addToConstructorParameter((Constructor) c, param, a);
+ }
+ }
}
return result;
}
+ protected static Constructor<?> resolveConstructor(ClassXmlItem bean, List<ParameterXmlItem> constList)
+ {
+ Class<?>[] params = new Class[constList.size()];
+ for (int i = 0; i < constList.size(); ++i)
+ {
+ params[i] = constList.get(i).getJavaClass();
+ }
+ Constructor<?> ret = ReflectionUtils.getConstructor(bean.getJavaClass(), params);
+ if (ret == null)
+ {
+ throw new XmlConfigurationException("Could not resolve constructor for " + bean.getJavaClass() + " with arguments " + params, bean.getDocument(), bean.getLineno());
+ }
+ return ret;
+ }
+
@SuppressWarnings("unchecked")
void addStereotypeToResult(XmlResult ret, XmlItem rb)
{
@@ -320,7 +360,7 @@
}
count++;
}
- ret.getStereotypes().put(rb.getJavaClass(), values);
+ ret.getStereotypes().put((Class) rb.getJavaClass(), values);
}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java 2010-03-05 20:48:08 UTC (rev 12104)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -20,7 +20,7 @@
public XmlItemType getType();
- public Class getJavaClass();
+ public Class<?> getJavaClass();
/**
* attempts to resolve any information that is not available at parse time
Deleted: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java 2010-03-05 20:48:08 UTC (rev 12104)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -1,66 +0,0 @@
-/*
- * Distributed under the LGPL License
- *
- */
-package org.jboss.seam.xml.parser.namespace;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import org.jboss.seam.xml.model.FieldXmlItem;
-import org.jboss.seam.xml.model.MethodXmlItem;
-import org.jboss.seam.xml.model.XmlItem;
-import org.jboss.seam.xml.util.XmlConfigurationException;
-
-class NamespaceUtils
-{
- static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText, String document, int lineno)
- {
- Class<?> p = parent.getJavaClass();
- Field f = null;
- boolean methodFound = false;
- f = getField(p, name);
- for (Method m : parent.getJavaClass().getMethods())
- {
- if (m.getName().equals(name))
- {
- methodFound = true;
- break;
- }
- }
- if (methodFound && f != null)
- {
- throw new XmlConfigurationException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML", document, lineno);
- }
- if (methodFound)
- {
- return new MethodXmlItem(parent, name, document, lineno);
- }
- else if (f != null)
- {
- return new FieldXmlItem(parent, f, innerText, document, lineno);
- }
- return null;
- }
-
- /**
- * we need access to private fields so we cannot just use getField
- */
- public static Field getField(Class<?> parent, String name)
- {
- Class<?> p = parent;
- while (p != Object.class)
- {
- try
- {
- return p.getDeclaredField(name);
- }
- catch (Exception e1)
- {
-
- }
- p = p.getSuperclass();
- }
- return null;
- }
-}
Modified: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-05 20:48:08 UTC (rev 12104)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -15,6 +15,7 @@
import org.jboss.seam.xml.model.XmlItem;
import org.jboss.seam.xml.model.XmlItemType;
import org.jboss.seam.xml.parser.SaxNode;
+import org.jboss.seam.xml.util.ReflectionUtils;
public class PackageNamespaceElementResolver implements NamespaceElementResolver
{
@@ -79,7 +80,7 @@
// if the item can be a method of a FIELD
if (parent.getAllowedItem().contains(XmlItemType.METHOD) || parent.getAllowedItem().contains(XmlItemType.FIELD))
{
- return NamespaceUtils.resolveMethodOrField(name, parent, node.getInnerText(), node.getDocument(), node.getLineNo());
+ return ReflectionUtils.resolveMethodOrField(name, parent, node.getInnerText(), node.getDocument(), node.getLineNo());
}
else
{
Copied: modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java (from rev 12102, modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java)
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/ReflectionUtils.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -0,0 +1,112 @@
+/*
+ * Distributed under the LGPL License
+ *
+ */
+package org.jboss.seam.xml.util;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.jboss.seam.xml.model.FieldXmlItem;
+import org.jboss.seam.xml.model.MethodXmlItem;
+import org.jboss.seam.xml.model.XmlItem;
+
+public class ReflectionUtils
+{
+ public static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText, String document, int lineno)
+ {
+ Class<?> p = parent.getJavaClass();
+ Field f = null;
+ boolean methodFound = methodExists(p, name);
+ f = getField(p, name);
+
+ if (methodFound && f != null)
+ {
+ throw new XmlConfigurationException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML", document, lineno);
+ }
+ if (methodFound)
+ {
+ return new MethodXmlItem(parent, name, document, lineno);
+ }
+ else if (f != null)
+ {
+ return new FieldXmlItem(parent, f, innerText, document, lineno);
+ }
+ return null;
+ }
+
+ /**
+ * we need access to private fields so we cannot just use getField
+ */
+ public static Field getField(Class<?> parent, String name)
+ {
+ Class<?> p = parent;
+ while (p != Object.class)
+ {
+ try
+ {
+ return p.getDeclaredField(name);
+ }
+ catch (Exception e1)
+ {
+
+ }
+ p = p.getSuperclass();
+ }
+ return null;
+ }
+
+ public static boolean methodExists(Class<?> parent, String name)
+ {
+ Class<?> p = parent;
+ while (p != Object.class)
+ {
+ for (Method m : p.getDeclaredMethods())
+ {
+ if (m.getName().equals(name))
+ {
+ return true;
+ }
+ }
+ p = p.getSuperclass();
+ }
+ return false;
+ }
+
+ public static Method getMethod(Class<?> parent, String name, Class<?>... args)
+ {
+ Class<?> p = parent;
+ while (p != Object.class)
+ {
+ try
+ {
+ return p.getDeclaredMethod(name, args);
+ }
+ catch (Exception e1)
+ {
+
+ }
+ p = p.getSuperclass();
+ }
+ return null;
+ }
+
+ public static Constructor<?> getConstructor(Class<?> parent, Class<?>... args)
+ {
+ Class<?> p = parent;
+ while (p != Object.class)
+ {
+ try
+ {
+ return p.getDeclaredConstructor(args);
+ }
+ catch (Exception e1)
+ {
+
+ }
+ p = p.getSuperclass();
+ }
+ return null;
+ }
+}
Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructedBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructedBean.java (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructedBean.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -0,0 +1,22 @@
+package org.jboss.seam.xml.test.constructor;
+
+public class ConstructedBean
+{
+ public ConstructedBean(int val)
+ {
+ this.value = val;
+ }
+
+ public ConstructedBean()
+ {
+
+ }
+
+ int value;
+
+ public int getValue()
+ {
+ return value;
+ }
+
+}
Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructorTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructorTest.java (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ConstructorTest.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -0,0 +1,21 @@
+package org.jboss.seam.xml.test.constructor;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.testng.annotations.Test;
+
+public class ConstructorTest extends AbstractXMLTest
+{
+ @Override
+ protected String getXmlFileName()
+ {
+ return "constructor-beans.xml";
+ }
+
+ @Test
+ public void testBeanConstructorAnnotations()
+ {
+ ConstructedBean bean = getReference(ConstructedBean.class);
+ assert bean.getValue() == 10;
+
+ }
+}
Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ValueProvider.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ValueProvider.java (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/constructor/ValueProvider.java 2010-03-05 21:33:42 UTC (rev 12105)
@@ -0,0 +1,7 @@
+package org.jboss.seam.xml.test.constructor;
+
+
+public class ValueProvider
+{
+ public int value;
+}
Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/constructor/constructor-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/constructor/constructor-beans.xml (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/constructor/constructor-beans.xml 2010-03-05 21:33:42 UTC (rev 12105)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+ xmlns:test="urn:java:org.jboss.seam.xml.test.constructor">
+
+ <test:ValueProvider>
+ <test:value>
+ <Produces/>
+ <value>10</value>
+ </test:value>
+ </test:ValueProvider>
+
+ <test:ConstructedBean>
+ <override/>
+ <parameters><int/></parameters>
+ </test:ConstructedBean>
+
+</Beans>
\ No newline at end of file
16 years, 1 month