You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2008/01/25 18:25:02 UTC

svn commit: r615278 - in /xmlgraphics/fop/branches/Temp_ProcessingFeedback: ./ src/codegen/java/ src/codegen/java/org/ src/codegen/java/org/apache/ src/codegen/java/org/apache/fop/ src/codegen/java/org/apache/fop/tools/ src/java/org/apache/fop/events/ ...

Author: jeremias
Date: Fri Jan 25 09:25:00 2008
New Revision: 615278

URL: http://svn.apache.org/viewvc?rev=615278&view=rev
Log:
EventProducer interfaces now operational.

Added:
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java   (with props)
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java   (with props)
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java   (with props)
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml   (with props)
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java   (with props)
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml   (with props)
Modified:
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/DefaultEventBroadcaster.java
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventBroadcaster.java
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventMethodModel.java
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModel.java
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventProducerModel.java
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/UtilityCodeTestSuite.java
    xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/BasicEventTestCase.java

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml Fri Jan 25 09:25:00 2008
@@ -118,13 +118,15 @@
     </fileset>
   </path>
 
-  <path id="libs-run-classpath">
-    <fileset dir="${basedir}/lib">
-      <include name="*.jar"/>
-    </fileset>
-    <fileset dir="${optional.lib.dir}">
+  <path id="libs-build-tools-classpath">
+    <path refid="libs-build-classpath"/>
+    <fileset dir="${basedir}/lib/build">
       <include name="*.jar"/>
     </fileset>
+  </path>
+  
+  <path id="libs-run-classpath">
+    <path refid="libs-build-classpath"/>
     <fileset dir="${basedir}/build">
       <include name="fop.jar"/>
       <include name="fop-hyph.jar" />
@@ -393,7 +395,7 @@
   <!-- =================================================================== -->
   <!-- Compiles the source directory                                       -->
   <!-- =================================================================== -->
-  <target name="compile-java" depends="init, codegen" description="Compiles the source code">
+  <target name="compile-java" depends="init, codegen">
     <!-- create directories -->
     <mkdir dir="${build.classes.dir}"/>
     <javac destdir="${build.classes.dir}" fork="${javac.fork}" debug="${javac.debug}"
@@ -409,10 +411,61 @@
       <patternset refid="exclude-jimi"/>
       <classpath refid="libs-build-classpath"/>
     </javac>
+
+    <mkdir dir="${build.sandbox-classes.dir}"/>
+    <javac destdir="${build.sandbox-classes.dir}" fork="${javac.fork}" debug="${javac.debug}"
+           deprecation="${javac.deprecation}" optimize="${javac.optimize}"
+           source="${javac.source}" target="${javac.target}">
+      <src path="${src.sandbox.dir}"/>
+      <patternset includes="**/*.java"/>
+      <patternset refid="exclude-jai"/>
+      <classpath>
+        <path refid="libs-build-classpath"/>
+        <pathelement location="${build.classes.dir}"/>
+      </classpath>
+    </javac>
+  </target>
+
+  <target name="resourcegen" depends="compile-java">
+    <mkdir dir="${build.codegen-classes.dir}"/>
+    <javac destdir="${build.codegen-classes.dir}" fork="${javac.fork}" debug="${javac.debug}"
+      deprecation="${javac.deprecation}" optimize="${javac.optimize}"
+      source="${javac.source}" target="${javac.target}">
+      <src path="${src.codegen.dir}/java"/>
+      <patternset includes="**/*.java"/>
+      <classpath>
+        <path refid="libs-build-tools-classpath"/>
+        <pathelement location="${build.classes.dir}"/>
+      </classpath>
+    </javac>
+    
+    <taskdef name="eventResourceGenerator"
+      classname="org.apache.fop.tools.EventProducerCollectorTask">
+      <classpath>
+        <path refid="libs-build-tools-classpath"/>
+        <pathelement location="${build.classes.dir}"/>
+        <pathelement location="${build.codegen-classes.dir}"/>
+      </classpath>
+    </taskdef>
+  
+    <eventResourceGenerator modelfile="${src.java.dir}/org/apache/fop/events/event-model.xml">
+      <fileset dir="${src.java.dir}">
+        <include name="**/*.java"/>
+      </fileset>
+    </eventResourceGenerator>
+    <eventResourceGenerator modelfile="${basedir}/test/java/org/apache/fop/events/test-event-model.xml">
+      <fileset dir="${basedir}/test/java">
+        <include name="**/*.java"/>
+      </fileset>
+    </eventResourceGenerator>
+  </target>
+  
+  <target name="compile-copy-resources" depends="resourcegen">
     <copy todir="${build.classes.dir}">
       <fileset dir="${src.java.dir}">
         <include name="META-INF/**"/>
         <include name="**/*.icm"/>
+        <include name="**/*.xml"/>
         <include name="**/*.LICENSE.txt"/>
       </fileset>
     </copy>
@@ -424,31 +477,22 @@
     <copy todir="${build.viewer.images.dir}">
       <fileset dir="${src.viewer.images.dir}"/>
     </copy>
-
-    <mkdir dir="${build.sandbox-classes.dir}"/>
-    <javac destdir="${build.sandbox-classes.dir}" fork="${javac.fork}" debug="${javac.debug}"
-           deprecation="${javac.deprecation}" optimize="${javac.optimize}"
-           source="${javac.source}" target="${javac.target}">
-      <src path="${src.sandbox.dir}"/>
-      <patternset includes="**/*.java"/>
-      <patternset refid="exclude-jai"/>
-      <classpath>
-        <path refid="libs-build-classpath"/>
-        <pathelement location="${build.classes.dir}"/>
-      </classpath>
-    </javac>
+    
+    <!-- sandbox -->
     <copy todir="${build.sandbox-classes.dir}">
       <fileset dir="${src.sandbox.dir}">
         <include name="META-INF/**"/>
       </fileset>
     </copy>
+    
   </target>
-
+  
+  <target name="compile" depends="compile-java, compile-copy-resources" description="Compiles the source code"/>
 
   <!-- =================================================================== -->
   <!-- compiles hyphenation patterns                                       -->
   <!-- =================================================================== -->
-  <target name="compile-hyphenation" depends="compile-java">
+  <target name="compile-hyphenation" depends="compile">
     <path id="hyph-classpath">
       <path refid="libs-build-classpath"/>
       <pathelement location="${build.classes.dir}"/>
@@ -486,13 +530,13 @@
   <!-- main FOP JARs                                                       -->
   <!-- =================================================================== -->
 
-  <target name="uptodate-jar-main" depends="compile-java">
+  <target name="uptodate-jar-main" depends="compile">
     <uptodate property="jar.main.uptodate" targetfile="${build.dir}/fop.jar">
       <srcfiles dir= "${build.classes.dir}"/>
     </uptodate>
   </target>
 
-  <target name="jar-main" depends="compile-java,uptodate-jar-main" description="Generates the main jar file" unless="jar.main.uptodate">
+  <target name="jar-main" depends="compile,uptodate-jar-main" description="Generates the main jar file" unless="jar.main.uptodate">
     <tstamp>
       <format property="ts" pattern="yyyyMMdd-HHmmss-z"/>
     </tstamp>
@@ -521,13 +565,13 @@
     </jar>
   </target>
 
-  <target name="uptodate-jar-sandbox" depends="compile-java">
+  <target name="uptodate-jar-sandbox" depends="compile">
     <uptodate property="jar.sandbox.uptodate" targetfile="${build.dir}/fop-sandbox.jar">
       <srcfiles dir= "${build.sandbox-classes.dir}"/>
     </uptodate>
   </target>
 
-  <target name="jar-sandbox" depends="compile-java,uptodate-jar-sandbox" description="Generates the sandbox jar file" unless="jar.sandbox.uptodate">
+  <target name="jar-sandbox" depends="compile,uptodate-jar-sandbox" description="Generates the sandbox jar file" unless="jar.sandbox.uptodate">
     <tstamp>
       <format property="ts" pattern="yyyyMMdd-HHmmss-z"/>
     </tstamp>
@@ -643,14 +687,14 @@
     <include name="xmlgraphics-commons*.jar"/>
   </fileset>
   
-  <target name="uptodate-transcoder-pkg" depends="compile-java">
+  <target name="uptodate-transcoder-pkg" depends="compile">
     <uptodate property="transcoder.pkg.uptodate" targetfile="${build.dir}/fop-transcoder.jar">
       <srcfiles refid="transcoder-classes-files"/>
       <srcfiles refid="transcoder-lib-files"/>
     </uptodate>
   </target>
 
-  <target name="transcoder-pkg" depends="uptodate-transcoder-pkg, compile-java" description="Generates the jar for the transcoder package for Batik" unless="transcoder.pkg.uptodate">
+  <target name="transcoder-pkg" depends="uptodate-transcoder-pkg, compile" description="Generates the jar for the transcoder package for Batik" unless="transcoder.pkg.uptodate">
     <echo message="Creating the jar file ${build.dir}/fop-transcoder.jar"/>
 
     <property name="fop-transcoder.name" value="FOP Transcoder Package"/>
@@ -742,6 +786,11 @@
         </fileset>
       </classpath>
     </javac>
+    <copy todir="${build.dir}/test-classes">
+      <fileset dir="${basedir}/test/java">
+        <include name="**/*.xml"/>
+      </fileset>
+    </copy>
   </target>
 
   <target name="junit-transcoder" depends="junit-compile" description="Runs FOP's JUnit transcoder tests" if="junit.present">

Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java?rev=615278&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java Fri Jan 25 09:25:00 2008
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.tools;
+
+public class EventConventionException extends Exception {
+
+    public EventConventionException(String message) {
+        super(message);
+    }
+    
+}

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventConventionException.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java?rev=615278&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java Fri Jan 25 09:25:00 2008
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.tools;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.fop.events.model.EventMethodModel;
+import org.apache.fop.events.model.EventModel;
+import org.apache.fop.events.model.EventProducerModel;
+import org.apache.fop.events.model.EventSeverity;
+
+import com.thoughtworks.qdox.JavaDocBuilder;
+import com.thoughtworks.qdox.model.DefaultDocletTagFactory;
+import com.thoughtworks.qdox.model.DocletTagFactory;
+import com.thoughtworks.qdox.model.JavaClass;
+import com.thoughtworks.qdox.model.JavaMethod;
+import com.thoughtworks.qdox.model.JavaParameter;
+import com.thoughtworks.qdox.model.Type;
+
+public class EventProducerCollector {
+
+    private static final String CLASSNAME_EVENT_PRODUCER = "org.apache.fop.events.EventProducer";
+    private static final Map PRIMITIVE_MAP;
+    
+    static {
+        Map m = new java.util.HashMap();
+        m.put("boolean", Boolean.class);
+        m.put("byte", Byte.class);
+        m.put("char", Character.class);
+        m.put("short", Short.class);
+        m.put("int", Integer.class);
+        m.put("long", Long.class);
+        m.put("float", Float.class);
+        m.put("double", Double.class);
+        PRIMITIVE_MAP = Collections.unmodifiableMap(m);
+    }
+    
+    private DocletTagFactory tagFactory;
+    private EventModel model = new EventModel();
+
+    public EventProducerCollector() {
+        this.tagFactory = createDocletTagFactory();
+    }
+
+    protected DocletTagFactory createDocletTagFactory() {
+        return new DefaultDocletTagFactory();
+    }
+
+    public void scanFile(File src, String filename)
+            throws IOException, EventConventionException, ClassNotFoundException {
+        JavaDocBuilder builder = new JavaDocBuilder(this.tagFactory);
+        builder.addSource(src);
+        JavaClass[] classes = builder.getClasses();
+        for (int i = 0, c = classes.length; i < c; i++) {
+            JavaClass clazz = classes[i];
+            if (clazz.isInterface() && implementsInterface(clazz, CLASSNAME_EVENT_PRODUCER)) {
+                processJavaClass(clazz, filename);
+            }
+        }
+    }
+
+    private boolean implementsInterface(JavaClass clazz, String intf) {
+        JavaClass[] classes = clazz.getImplementedInterfaces();
+        for (int i = 0, c = classes.length; i < c; i++) {
+            JavaClass cl = classes[i];
+            if (cl.getFullyQualifiedName().equals(intf)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    protected void processJavaClass(JavaClass clazz, String javaFilename)
+                throws EventConventionException, ClassNotFoundException {
+        EventProducerModel prodMeta = new EventProducerModel(clazz.getFullyQualifiedName());
+        JavaMethod[] methods = clazz.getMethods();
+        for (int i = 0, c = methods.length; i < c; i++) {
+            JavaMethod method = methods[i];
+            
+            //Check EventProducer conventions
+            if (!method.getReturns().isVoid()) {
+                throw new EventConventionException("All methods of interface "
+                        + clazz.getFullyQualifiedName() + " must have return type 'void'!");
+            }
+            String methodSig = clazz.getFullyQualifiedName() + "." + method.getCallSignature();
+            JavaParameter[] params = method.getParameters();
+            if (params.length < 1) {
+                throw new EventConventionException("The method " + methodSig
+                        + " must have at least one parameter: 'Object source'!");
+            }
+            Type firstType = params[0].getType();
+            if (firstType.isPrimitive() || !"source".equals(params[0].getName())) {
+                throw new EventConventionException("The first parameter of the method " + methodSig
+                        + " must be: 'Object source'!");
+            }
+            
+            //build method model
+            EventMethodModel methodMeta = new EventMethodModel(
+                    method.getName(), EventSeverity.INFO);
+            if (params.length > 1) {
+                for (int j = 1, cj = params.length; j < cj; j++) {
+                    JavaParameter p = params[j];
+                    Class type;
+                    JavaClass pClass = p.getType().getJavaClass();
+                    if (p.getType().isPrimitive()) {
+                        type = (Class)PRIMITIVE_MAP.get(pClass.getName());
+                        if (type == null) {
+                            throw new UnsupportedOperationException(
+                                    "Primitive datatype not supported: " + pClass.getName());
+                        }
+                    } else {
+                        String className = pClass.getFullyQualifiedName();
+                        type = Class.forName(className);
+                    }
+                    methodMeta.addParameter(type, p.getName());
+                }
+            }
+            prodMeta.addMethod(methodMeta);
+        }
+        this.model.addProducer(prodMeta);
+    }
+
+    public EventModel getModel() {
+        return this.model;
+    }
+    
+    public void saveModelToXML(File modelFile) throws IOException {
+        getModel().saveToXML(modelFile);
+    }
+    
+}

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java?rev=615278&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java Fri Jan 25 09:25:00 2008
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.tools;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.selectors.FilenameSelector;
+
+public class EventProducerCollectorTask extends Task {
+
+    private List filesets = new java.util.ArrayList();
+    private File modelFile;
+    
+    /** {@inheritDoc} */
+    public void execute() throws BuildException {
+        try {
+            EventProducerCollector collector = new EventProducerCollector();
+            processFileSets(collector);
+            collector.saveModelToXML(getModelFile());
+            log("Event model written to " + getModelFile());
+        } catch (ClassNotFoundException e) {
+            throw new BuildException(e);
+        } catch (EventConventionException ece) {
+            throw new BuildException(ece);
+        } catch (IOException ioe) {
+            throw new BuildException(ioe);
+        }
+    }
+    
+    protected void processFileSets(EventProducerCollector collector)
+            throws IOException, EventConventionException, ClassNotFoundException {
+        Iterator iter = filesets.iterator();
+        while (iter.hasNext()) {
+            FileSet fs = (FileSet)iter.next();
+            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
+            String[] srcFiles = ds.getIncludedFiles();
+            File directory = fs.getDir(getProject());
+            for (int i = 0, c = srcFiles.length; i < c; i++) {
+                String filename = srcFiles[i];
+                File src = new File(directory, filename);
+                collector.scanFile(src, filename);
+            }
+        }
+    }
+
+    public void addFileset(FileSet set) {
+        filesets.add(set);
+    }
+    
+    public void setModelFile(File f) {
+        this.modelFile = f;
+    }
+    
+    public File getModelFile() {
+        return this.modelFile;
+    }
+    
+    public static void main(String[] args) {
+        try {
+            Project project = new Project();
+
+            EventProducerCollectorTask generator = new EventProducerCollectorTask();
+            generator.setProject(project);
+            project.setName("Test");
+            FileSet fileset = new FileSet();
+            fileset.setDir(new File("test/java"));
+            
+            FilenameSelector selector = new FilenameSelector();
+            selector.setName("**/*.java");
+            fileset.add(selector);
+            generator.addFileset(fileset);
+            
+            File targetDir = new File("build/codegen1");
+            targetDir.mkdirs();
+            
+            generator.setModelFile(new File("D:/out.xml"));
+            generator.execute();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/DefaultEventBroadcaster.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/DefaultEventBroadcaster.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/DefaultEventBroadcaster.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/DefaultEventBroadcaster.java Fri Jan 25 09:25:00 2008
@@ -19,7 +19,24 @@
 
 package org.apache.fop.events;
 
+import java.io.InputStream;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.commons.io.IOUtils;
+
+import org.apache.fop.events.model.EventMethodModel;
+import org.apache.fop.events.model.EventModel;
+import org.apache.fop.events.model.EventModelParser;
+import org.apache.fop.events.model.EventProducerModel;
 
 public class DefaultEventBroadcaster implements EventBroadcaster {
 
@@ -48,4 +65,82 @@
         }
     }
 
+    private static final String EVENT_MODEL_FILENAME = "event-model.xml";
+    private static EventModel eventModel;
+    private Map proxies = new java.util.HashMap();
+    
+    static {
+        loadModel(DefaultEventBroadcaster.class, EVENT_MODEL_FILENAME);
+    }
+
+    public static void loadModel(Class resourceBaseClass, String resourceName) {
+        InputStream in = resourceBaseClass.getResourceAsStream(resourceName);
+        if (in == null) {
+            throw new MissingResourceException(
+                    "File " + resourceName + " not found",
+                    DefaultEventBroadcaster.class.getName(), ""); 
+        }
+        try {
+            eventModel = EventModelParser.parse(new StreamSource(in));
+        } catch (TransformerException e) {
+            throw new MissingResourceException(
+                    "Error reading " + resourceName + ": " + e.getMessage(),
+                    DefaultEventBroadcaster.class.getName(), ""); 
+        } finally {
+            IOUtils.closeQuietly(in);
+        }
+    }
+    
+    public EventProducer getEventProducerFor(Class clazz) {
+        if (!EventProducer.class.isAssignableFrom(clazz)) {
+            throw new IllegalArgumentException(
+                    "Class must be an implementation of the EventProducer interface: "
+                    + clazz.getName());
+        }
+        EventProducer producer;
+        producer = (EventProducer)this.proxies.get(clazz);
+        if (producer == null) {
+            producer = createProxyFor(clazz);
+            this.proxies.put(clazz, producer);
+        }
+        return producer;
+    }
+    
+    private EventProducer createProxyFor(Class clazz) {
+        final EventProducerModel producerModel = eventModel.getProducer(clazz);
+        if (producerModel == null) {
+            throw new IllegalStateException("Event model doesn't contain the definition for "
+                    + clazz.getName());
+        }
+        return (EventProducer)Proxy.newProxyInstance(clazz.getClassLoader(),
+                new Class[] {clazz},
+                new InvocationHandler() {
+                    public Object invoke(Object proxy, Method method, Object[] args)
+                            throws Throwable {
+                        String methodName = method.getName();
+                        EventMethodModel methodModel = producerModel.getMethod(methodName);
+                        String eventID = producerModel.getInterfaceName() + "." + methodName;
+                        if (methodModel == null) {
+                            throw new IllegalStateException(
+                                    "Event model isn't consistent"
+                                    + " with the EventProducer interface. Please rebuild FOP!"
+                                    + " Affected method: "
+                                    + eventID);
+                        }
+                        Map params = new java.util.HashMap();
+                        int i = 1;
+                        Iterator iter = methodModel.getParameters().iterator();
+                        while (iter.hasNext()) {
+                            EventMethodModel.Parameter param
+                                = (EventMethodModel.Parameter)iter.next();
+                            params.put(param.getName(), args[i]);
+                            i++;
+                        }
+                        FopEvent ev = new FopEvent(args[0], eventID, params);
+                        broadcastEvent(ev);
+                        return null;
+                    }
+                });
+    }
+    
 }

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventBroadcaster.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventBroadcaster.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventBroadcaster.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventBroadcaster.java Fri Jan 25 09:25:00 2008
@@ -30,4 +30,6 @@
     
     void broadcastEvent(FopEvent event);
     
+    EventProducer getEventProducerFor(Class clazz);
+    
 }

Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml?rev=615278&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml Fri Jan 25 09:25:00 2008
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><event-model/>

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/event-model.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventMethodModel.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventMethodModel.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventMethodModel.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventMethodModel.java Fri Jan 25 09:25:00 2008
@@ -45,8 +45,10 @@
         this.params.add(param);
     }
     
-    public void addParameter(Class type, String name) {
-        this.params.add(new Parameter(type, name));
+    public Parameter addParameter(Class type, String name) {
+        Parameter param = new Parameter(type, name); 
+        this.params.add(param);
+        return param;
     }
     
     public void setMethodName(String name) {

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModel.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModel.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModel.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModel.java Fri Jan 25 09:25:00 2008
@@ -19,10 +19,20 @@
 
 package org.apache.fop.events.model;
 
+import java.io.File;
+import java.io.IOException;
 import java.io.Serializable;
-import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
+import java.util.Map;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
 
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
@@ -32,29 +42,63 @@
 
 public class EventModel implements Serializable, XMLizable {
 
-    private List producers = new java.util.ArrayList();
+    private Map producers = new java.util.LinkedHashMap();
     
     public EventModel() {
     }
     
-    public void addProducer(EventProducerModel method) {
-        this.producers.add(method);
+    public void addProducer(EventProducerModel producer) {
+        this.producers.put(producer.getInterfaceName(), producer);
     }
     
-    public List getProducers() {
-        return Collections.unmodifiableList(this.producers);
+    public Iterator getProducers() {
+        return this.producers.values().iterator();
     }
 
+    public EventProducerModel getProducer(String interfaceName) {
+        return (EventProducerModel)this.producers.get(interfaceName);
+    }
+    
+    public EventProducerModel getProducer(Class clazz) {
+        return getProducer(clazz.getName());
+    }
+    
     /** {@inheritDoc} */
     public void toSAX(ContentHandler handler) throws SAXException {
         AttributesImpl atts = new AttributesImpl();
         String elName = "event-model";
         handler.startElement(null, elName, elName, atts);
-        Iterator iter = this.producers.iterator();
+        Iterator iter = getProducers();
         while (iter.hasNext()) {
             ((XMLizable)iter.next()).toSAX(handler);
         }
         handler.endElement(null, elName, elName);
     }
-    
+
+    private void writeXMLizable(XMLizable object, File outputFile) throws IOException {
+        Result res = new StreamResult(outputFile);
+        
+        try {
+            SAXTransformerFactory tFactory
+                = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+            TransformerHandler handler = tFactory.newTransformerHandler();
+            Transformer transformer = handler.getTransformer();
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            handler.setResult(res);
+            handler.startDocument();
+            object.toSAX(handler);
+            handler.endDocument();
+        } catch (TransformerConfigurationException e) {
+            throw new IOException(e.getMessage());
+        } catch (TransformerFactoryConfigurationError e) {
+            throw new IOException(e.getMessage());
+        } catch (SAXException e) {
+            throw new IOException(e.getMessage());
+        }
+    }
+
+    public void saveToXML(File modelFile) throws IOException {
+        writeXMLizable(this, modelFile);
+    }
+
 }

Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java?rev=615278&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java Fri Jan 25 09:25:00 2008
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.events.model;
+
+import java.util.Stack;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.fop.util.DefaultErrorListener;
+
+/**
+ * This is a parser for the event model XML.
+ */
+public class EventModelParser {
+
+    /** Logger instance */
+    protected static Log log = LogFactory.getLog(EventModelParser.class);
+
+    private static SAXTransformerFactory tFactory 
+        = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+
+    /**
+     * Parses an event model file into an EventModel instance.
+     * @param src the Source instance pointing to the XML file
+     * @return the created event model structure
+     * @throws TransformerException if an error occurs while parsing the XML file
+     */
+    public static EventModel parse(Source src) 
+            throws TransformerException {
+        Transformer transformer = tFactory.newTransformer();
+        transformer.setErrorListener(new DefaultErrorListener(log));
+        
+        EventModel model = new EventModel();
+        SAXResult res = new SAXResult(getContentHandler(model));
+
+        transformer.transform(src, res);
+        return model;
+    }
+
+    /**
+     * Creates a new ContentHandler instance that you can send the event model XML to. The parsed
+     * content is accumulated in the model structure.
+     * @param model the EventModel
+     * @return the ContentHandler instance to receive the SAX stream from the XML file
+     */
+    public static ContentHandler getContentHandler(EventModel model) {
+        return new Handler(model);
+    }
+
+    private static class Handler extends DefaultHandler {
+
+        private EventModel model;
+        private Stack objectStack = new Stack();
+
+        public Handler(EventModel model) {
+            this.model = model;
+        }
+
+        /** {@inheritDoc} */
+        public void startElement(String uri, String localName, String qName, Attributes attributes)
+                    throws SAXException {
+            try {
+                if ("event-model".equals(localName)) {
+                    if (objectStack.size() > 0) {
+                        throw new SAXException("event-model must be the root element");
+                    }
+                    objectStack.push(model);
+                } else if ("producer".equals(localName)) {
+                    EventProducerModel producer = new EventProducerModel(
+                            attributes.getValue("name"));
+                    EventModel parent = (EventModel)objectStack.peek();
+                    parent.addProducer(producer);
+                    objectStack.push(producer);
+                } else if ("method".equals(localName)) {
+                    EventSeverity severity = EventSeverity.valueOf(attributes.getValue("severity"));
+                    EventMethodModel method = new EventMethodModel(
+                            attributes.getValue("name"), severity);
+                    EventProducerModel parent = (EventProducerModel)objectStack.peek();
+                    parent.addMethod(method);
+                    objectStack.push(method);
+                } else if ("parameter".equals(localName)) {
+                    String className = attributes.getValue("type");
+                    Class type;
+                    try {
+                        type = Class.forName(className);
+                    } catch (ClassNotFoundException e) {
+                        throw new SAXException("Could not find Class for: " + className, e);
+                    }
+                    String name = attributes.getValue("name");
+                    EventMethodModel parent = (EventMethodModel)objectStack.peek();
+                    objectStack.push(parent.addParameter(type, name));
+                } else {
+                    throw new SAXException("Invalid element: " + qName);
+                }
+            } catch (ClassCastException cce) {
+                throw new SAXException("XML format error: " + qName, cce);
+            }
+        }
+
+        /** {@inheritDoc} */
+        public void endElement(String uri, String localName, String qName) throws SAXException {
+            objectStack.pop();
+        }
+
+    }
+
+}

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventModelParser.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventProducerModel.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventProducerModel.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventProducerModel.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventProducerModel.java Fri Jan 25 09:25:00 2008
@@ -20,9 +20,8 @@
 package org.apache.fop.events.model;
 
 import java.io.Serializable;
-import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
+import java.util.Map;
 
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
@@ -33,7 +32,7 @@
 public class EventProducerModel implements Serializable, XMLizable {
 
     private String interfaceName;
-    private List methods = new java.util.ArrayList();
+    private Map methods = new java.util.LinkedHashMap();
     
     public EventProducerModel(String interfaceName) {
         this.interfaceName = interfaceName;
@@ -48,11 +47,15 @@
     }
     
     public void addMethod(EventMethodModel method) {
-        this.methods.add(method);
+        this.methods.put(method.getMethodName(), method);
     }
     
-    public List getMethods() {
-        return Collections.unmodifiableList(this.methods);
+    public EventMethodModel getMethod(String methodName) {
+        return (EventMethodModel)this.methods.get(methodName);
+    }
+    
+    public Iterator getMethods() {
+        return this.methods.values().iterator();
     }
 
     /** {@inheritDoc} */
@@ -61,11 +64,12 @@
         atts.addAttribute(null, "name", "name", "CDATA", getInterfaceName());
         String elName = "producer";
         handler.startElement(null, elName, elName, atts);
-        Iterator iter = this.methods.iterator();
+        Iterator iter = getMethods();
         while (iter.hasNext()) {
             ((XMLizable)iter.next()).toSAX(handler);
         }
         handler.endElement(null, elName, elName);
     }
+
     
 }

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/UtilityCodeTestSuite.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/UtilityCodeTestSuite.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/UtilityCodeTestSuite.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/UtilityCodeTestSuite.java Fri Jan 25 09:25:00 2008
@@ -19,6 +19,10 @@
  
 package org.apache.fop;
 
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.fop.events.BasicEventTestCase;
 import org.apache.fop.traits.BorderPropsTestCase;
 import org.apache.fop.traits.TraitColorTestCase;
 import org.apache.fop.util.DataURIResolverTestCase;
@@ -26,9 +30,6 @@
 import org.apache.fop.util.PDFNumberTestCase;
 import org.apache.fop.util.UnitConvTestCase;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 /**
  * Test suite for FOP's utility classes.
  */
@@ -48,6 +49,7 @@
         suite.addTest(new TestSuite(BorderPropsTestCase.class));
         suite.addTest(new TestSuite(ElementListUtilsTestCase.class));
         suite.addTest(new TestSuite(DataURIResolverTestCase.class));
+        suite.addTest(new TestSuite(BasicEventTestCase.class));
         //$JUnit-END$
         return suite;
     }

Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/BasicEventTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/BasicEventTestCase.java?rev=615278&r1=615277&r2=615278&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/BasicEventTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/BasicEventTestCase.java Fri Jan 25 09:25:00 2008
@@ -23,6 +23,11 @@
 
 public class BasicEventTestCase extends TestCase {
 
+    static {
+        //Use local event model
+        DefaultEventBroadcaster.loadModel(BasicEventTestCase.class, "test-event-model.xml");
+    }
+    
     public void testBasics() throws Exception {
         
         MyEventListener listener = new MyEventListener();
@@ -38,7 +43,8 @@
                     .build());
         broadcaster.broadcastEvent(ev);
         
-        assertNotNull(listener.event);
+        ev = listener.event;
+        assertNotNull(ev);
         assertEquals("123", listener.event.getEventID());
         assertEquals("I'm tired", ev.getParam("reason"));
         assertEquals(new Integer(23), ev.getParam("blah"));
@@ -50,6 +56,31 @@
         broadcaster.broadcastEvent(ev);
     }
 
+    public void testEventProducer() throws Exception {
+        MyEventListener listener = new MyEventListener();
+
+        EventBroadcaster broadcaster = new DefaultEventBroadcaster();
+        broadcaster.addFopEventListener(listener);
+        assertEquals(1, broadcaster.getListenerCount());
+        
+        TestEventProducer producer = (TestEventProducer)broadcaster.getEventProducerFor(
+                TestEventProducer.class);
+        producer.complain(this, "I'm tired", 23);
+        
+        FopEvent ev = listener.event;
+        assertNotNull(ev);
+        assertEquals("org.apache.fop.events.TestEventProducer.complain",
+                listener.event.getEventID());
+        assertEquals("I'm tired", ev.getParam("reason"));
+        assertEquals(new Integer(23), ev.getParam("blah"));
+        
+        broadcaster.removeFopEventListener(listener);
+        assertEquals(0, broadcaster.getListenerCount());
+
+        //Just check that there are no NPEs
+        broadcaster.broadcastEvent(ev);
+    }
+    
     private class MyEventListener implements FopEventListener {
 
         private FopEvent event;

Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml?rev=615278&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml Fri Jan 25 09:25:00 2008
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><event-model>
+<producer name="org.apache.fop.events.TestEventProducer">
+<method name="complain" severity="INFO">
+<parameter type="java.lang.String" name="reason"/>
+<parameter type="java.lang.Integer" name="blah"/>
+</method>
+<method name="enjoy" severity="INFO">
+<parameter type="java.lang.String" name="what"/>
+</method>
+</producer>
+</event-model>

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/test-event-model.xml
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org