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/31 19:14:27 UTC
svn commit: r617176 - in /xmlgraphics/fop/branches/Temp_ProcessingFeedback:
./ src/codegen/java/org/apache/fop/tools/ src/java/org/apache/fop/events/
src/java/org/apache/fop/events/model/ src/java/org/apache/fop/fo/
test/java/org/apache/fop/events/
Author: jeremias
Date: Thu Jan 31 10:14:19 2008
New Revision: 617176
URL: http://svn.apache.org/viewvc?rev=617176&view=rev
Log:
Renamed FopEvent to Event as suggested by Simon.
EventProducerCollectorTask.java now reads the EventSeverity from a doclet tag.
Added generation of EventProducer translations (including simple merging, no validation, yet)
EventFormatter introduced (only basic functionality, yet).
Added a simple EventListener implementation that uses EventFormatter to convert the events to human-readable, localized messages that are sent to the log via Commons Logging.
Added:
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl (with props)
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl (with props)
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/Event.java
- copied, changed from r615779, xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEvent.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java (with props)
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml (with props)
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventListener.java
- copied, changed from r615779, xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEventListener.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java (with props)
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java (with props)
xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java (with props)
Removed:
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEvent.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEventListener.java
Modified:
xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java
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/EventSeverity.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/BasicEventTestCase.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/TestEventProducer.java
Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml?rev=617176&r1=617175&r2=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/build.xml Thu Jan 31 10:14:19 2008
@@ -438,6 +438,11 @@
<pathelement location="${build.classes.dir}"/>
</classpath>
</javac>
+ <copy todir="${build.codegen-classes.dir}">
+ <fileset dir="${src.codegen.dir}/java">
+ <include name="**/*.xsl"/>
+ </fileset>
+ </copy>
<taskdef name="eventResourceGenerator"
classname="org.apache.fop.tools.EventProducerCollectorTask">
@@ -448,7 +453,9 @@
</classpath>
</taskdef>
- <eventResourceGenerator modelfile="${build.gensrc.dir}/org/apache/fop/events/event-model.xml">
+ <eventResourceGenerator
+ modelfile="${build.gensrc.dir}/org/apache/fop/events/event-model.xml"
+ translationfile="${src.java.dir}/org/apache/fop/events/EventFormatter.xml">
<fileset dir="${src.java.dir}">
<include name="**/*.java"/>
</fileset>
Modified: 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=617176&r1=617175&r2=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollector.java Thu Jan 31 10:14:19 2008
@@ -32,6 +32,7 @@
import com.thoughtworks.qdox.JavaDocBuilder;
import com.thoughtworks.qdox.model.DefaultDocletTagFactory;
+import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.DocletTagFactory;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
@@ -116,8 +117,15 @@
}
//build method model
+ DocletTag tag = method.getTagByName("event.severity");
+ EventSeverity severity;
+ if (tag != null) {
+ severity = EventSeverity.valueOf(tag.getValue());
+ } else {
+ severity = EventSeverity.INFO;
+ }
EventMethodModel methodMeta = new EventMethodModel(
- method.getName(), EventSeverity.INFO);
+ method.getName(), severity);
if (params.length > 1) {
for (int j = 1, cj = params.length; j < cj; j++) {
JavaParameter p = params[j];
Modified: 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=617176&r1=617175&r2=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/EventProducerCollectorTask.java Thu Jan 31 10:14:19 2008
@@ -20,10 +20,24 @@
package org.apache.fop.tools;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.w3c.dom.Node;
+
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
@@ -35,6 +49,7 @@
private List filesets = new java.util.ArrayList();
private File modelFile;
+ private File translationFile;
/** {@inheritDoc} */
public void execute() throws BuildException {
@@ -44,6 +59,9 @@
getModelFile().getParentFile().mkdirs();
collector.saveModelToXML(getModelFile());
log("Event model written to " + getModelFile());
+ if (getTranslationFile() != null) {
+ updateTranslationFile();
+ }
} catch (ClassNotFoundException e) {
throw new BuildException(e);
} catch (EventConventionException ece) {
@@ -53,6 +71,66 @@
}
}
+ private static final String MODEL2TRANSLATION = "model2translation.xsl";
+ private static final String MERGETRANSLATION = "merge-translation.xsl";
+
+ protected void updateTranslationFile() throws IOException {
+ try {
+ boolean resultExists = getTranslationFile().exists();
+ SAXTransformerFactory tFactory
+ = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+
+ //Generate fresh generated translation file as template
+ Source src = new StreamSource(getModelFile());
+ StreamSource xslt1 = new StreamSource(
+ getClass().getResourceAsStream(MODEL2TRANSLATION));
+ if (xslt1.getInputStream() == null) {
+ throw new FileNotFoundException(MODEL2TRANSLATION + " not found");
+ }
+ DOMResult domres = new DOMResult();
+ Transformer transformer = tFactory.newTransformer(xslt1);
+ transformer.transform(src, domres);
+ final Node generated = domres.getNode();
+
+ Node sourceDocument;
+ if (resultExists) {
+ //Load existing translation file into memory (because we overwrite it later)
+ src = new StreamSource(getTranslationFile());
+ domres = new DOMResult();
+ transformer = tFactory.newTransformer();
+ transformer.transform(src, domres);
+ sourceDocument = domres.getNode();
+ } else {
+ //Simply use generated as source document
+ sourceDocument = generated;
+ }
+
+ //Generate translation file (with potentially new translations)
+ src = new DOMSource(sourceDocument);
+ Result res = new StreamResult(getTranslationFile());
+ StreamSource xslt2 = new StreamSource(
+ getClass().getResourceAsStream(MERGETRANSLATION));
+ if (xslt2.getInputStream() == null) {
+ throw new FileNotFoundException(MERGETRANSLATION + " not found");
+ }
+ transformer = tFactory.newTransformer(xslt2);
+ transformer.setURIResolver(new URIResolver() {
+ public Source resolve(String href, String base) throws TransformerException {
+ if ("my:dom".equals(href)) {
+ return new DOMSource(generated);
+ }
+ return null;
+ }
+ });
+ if (resultExists) {
+ transformer.setParameter("generated-url", "my:dom");
+ }
+ transformer.transform(src, res);
+ } catch (TransformerException te) {
+ throw new IOException(te.getMessage());
+ }
+ }
+
protected void processFileSets(EventProducerCollector collector)
throws IOException, EventConventionException, ClassNotFoundException {
Iterator iter = filesets.iterator();
@@ -81,6 +159,14 @@
return this.modelFile;
}
+ public void setTranslationFile(File f) {
+ this.translationFile = f;
+ }
+
+ public File getTranslationFile() {
+ return this.translationFile;
+ }
+
public static void main(String[] args) {
try {
Project project = new Project();
@@ -100,6 +186,7 @@
targetDir.mkdirs();
generator.setModelFile(new File("D:/out.xml"));
+ generator.setTranslationFile(new File("D:/out1.xml"));
generator.execute();
} catch (Exception e) {
e.printStackTrace();
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl Thu Jan 31 10:14:19 2008
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output indent="yes" method="xml" encoding="UTF-8"/>
+
+ <xsl:param name="generated-url" select="''"/>
+
+ <xsl:template match="catalogue">
+ <catalogue>
+ <xsl:attribute name="xml:lang"><xsl:value-of select="@xml:lang"/></xsl:attribute>
+ <xsl:apply-templates/>
+ <xsl:if test="$generated-url != ''">
+ <xsl:variable name="generated" select="document($generated-url)"/>
+ <xsl:call-template name="add-new-messages">
+ <xsl:with-param name="existing" select="."/>
+ <xsl:with-param name="new" select="$generated/catalogue"/>
+ </xsl:call-template>
+ </xsl:if>
+ </catalogue>
+ </xsl:template>
+
+ <xsl:template name="add-new-messages">
+ <xsl:param name="existing"/>
+ <xsl:param name="new"/>
+ <xsl:for-each select="$new/message">
+ <xsl:variable name="k" select="@key"/>
+ <xsl:if test="not(boolean($existing/message[@key = $k]))">
+ <xsl:apply-templates select="."></xsl:apply-templates>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/merge-translation.xsl
------------------------------------------------------------------------------
svn:keywords = Id
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl Thu Jan 31 10:14:19 2008
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output indent="yes" method="xml" encoding="UTF-8"/>
+
+ <xsl:template match="event-model">
+ <catalogue>
+ <xsl:attribute name="xml:lang">en</xsl:attribute>
+ <xsl:apply-templates select="//method"></xsl:apply-templates>
+ </catalogue>
+ </xsl:template>
+
+ <xsl:template match="method">
+ <message>
+ <xsl:attribute name="key"><xsl:value-of select="../@name"/>.<xsl:value-of select="@name"/></xsl:attribute>
+ </message>
+ </xsl:template>
+
+</xsl:stylesheet>
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/codegen/java/org/apache/fop/tools/model2translation.xsl
------------------------------------------------------------------------------
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=617176&r1=617175&r2=617176&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 Thu Jan 31 10:14:19 2008
@@ -43,12 +43,12 @@
private List listeners = new java.util.ArrayList();
/** {@inheritDoc} */
- public void addFopEventListener(FopEventListener listener) {
+ public void addFopEventListener(EventListener listener) {
this.listeners.add(listener);
}
/** {@inheritDoc} */
- public void removeFopEventListener(FopEventListener listener) {
+ public void removeFopEventListener(EventListener listener) {
this.listeners.remove(listener);
}
@@ -58,9 +58,9 @@
}
/** {@inheritDoc} */
- public void broadcastEvent(FopEvent event) {
+ public void broadcastEvent(Event event) {
for (int i = 0, c = getListenerCount(); i < c; i++) {
- FopEventListener listener = (FopEventListener)this.listeners.get(i);
+ EventListener listener = (EventListener)this.listeners.get(i);
listener.processEvent(event);
}
}
@@ -90,7 +90,7 @@
IOUtils.closeQuietly(in);
}
}
-
+
public EventProducer getEventProducerFor(Class clazz) {
if (!EventProducer.class.isAssignableFrom(clazz)) {
throw new IllegalArgumentException(
@@ -136,7 +136,7 @@
params.put(param.getName(), args[i]);
i++;
}
- FopEvent ev = new FopEvent(args[0], eventID, params);
+ Event ev = new Event(args[0], eventID, methodModel.getSeverity(), params);
broadcastEvent(ev);
return null;
}
Copied: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/Event.java (from r615779, xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEvent.java)
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/Event.java?p2=xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/Event.java&p1=xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEvent.java&r1=615779&r2=617176&rev=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEvent.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/Event.java Thu Jan 31 10:14:19 2008
@@ -23,19 +23,27 @@
import java.util.EventObject;
import java.util.Map;
-public class FopEvent extends EventObject {
+import org.apache.fop.events.model.EventSeverity;
+
+public class Event extends EventObject {
private String eventID;
+ private EventSeverity severity;
private Map params;
- public FopEvent(Object source, String eventID, Map params) {
+ public Event(Object source, String eventID, EventSeverity severity, Map params) {
super(source);
this.eventID = eventID;
+ this.severity = severity;
this.params = params;
}
public String getEventID() {
return this.eventID;
+ }
+
+ public EventSeverity getSeverity() {
+ return this.severity;
}
public Object getParam(String key) {
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=617176&r1=617175&r2=617176&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 Thu Jan 31 10:14:19 2008
@@ -22,13 +22,13 @@
public interface EventBroadcaster {
- void addFopEventListener(FopEventListener listener);
+ void addFopEventListener(EventListener listener);
- void removeFopEventListener(FopEventListener listener);
+ void removeFopEventListener(EventListener listener);
int getListenerCount();
- void broadcastEvent(FopEvent event);
+ void broadcastEvent(Event event);
EventProducer getEventProducerFor(Class clazz);
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java Thu Jan 31 10:14:19 2008
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.fop.util.XMLResourceBundle;
+
+/**
+ * Converts events into human-readable, localized messages.
+ */
+public class EventFormatter {
+
+ private static ResourceBundle defaultBundle = XMLResourceBundle.getXMLBundle(
+ EventFormatter.class.getName(), EventFormatter.class.getClassLoader());
+
+ public static String format(Event event) {
+ return format(event, defaultBundle);
+ }
+
+ public static String format(Event event, ResourceBundle bundle) {
+ String template = bundle.getString(event.getEventID());
+ return format(event, template);
+ }
+
+ public static String format(Event event, String template) {
+ Map params = event.getParams();
+ Pattern p = Pattern.compile("\\$\\{[^\\}]+\\}");
+ Matcher m = p.matcher(template);
+ StringBuffer sb = new StringBuffer();
+ while (m.find()) {
+ String formatElement = m.group();
+ formatElement = formatElement.substring(2, formatElement.length() - 1);
+ //TODO Handle conditional sub-formats
+ //TODO Add advanced formatting like in MessageFormat here
+ String key = formatElement;
+ if (!params.containsKey(key)) {
+ throw new IllegalArgumentException(
+ "Message template contains unsupported variable key: " + key);
+ }
+ Object obj = params.get(key);
+ String value;
+ if (obj == null) {
+ value = "";
+ } else {
+ value = obj.toString();
+ }
+ m.appendReplacement(sb, value);
+ }
+ m.appendTail(sb);
+
+ return sb.toString();
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml Thu Jan 31 10:14:19 2008
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<catalogue xml:lang="en">
+ <message key="org.apache.fop.fo.FOValidationEventProducer.missingProperty">Element "{elementName}" is missing required property "{propertyName}"!</message>
+</catalogue>
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventFormatter.xml
------------------------------------------------------------------------------
svn:keywords = Id
Copied: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventListener.java (from r615779, xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEventListener.java)
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventListener.java?p2=xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventListener.java&p1=xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEventListener.java&r1=615779&r2=617176&rev=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/FopEventListener.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/EventListener.java Thu Jan 31 10:14:19 2008
@@ -19,10 +19,8 @@
package org.apache.fop.events;
-import java.util.EventListener;
+public interface EventListener extends java.util.EventListener {
-public interface FopEventListener extends EventListener {
-
- void processEvent(FopEvent event);
+ void processEvent(Event event);
}
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java Thu Jan 31 10:14:19 2008
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.fop.events.model.EventSeverity;
+
+/**
+ * EventListener implementation that redirects events to Commons Logging. The events are
+ * converted to localized messages.
+ */
+public class LoggingEventListener implements EventListener {
+
+ /** Default logger instance */
+ private static Log defaultLog = LogFactory.getLog(LoggingEventListener.class);
+
+ private Log log;
+ private boolean skipFatal;
+
+ public LoggingEventListener() {
+ this(defaultLog);
+ }
+
+ public LoggingEventListener(Log log) {
+ this(log, true);
+ }
+
+ public LoggingEventListener(Log log, boolean skipFatal) {
+ this.log = log;
+ this.skipFatal = skipFatal;
+ }
+
+ public Log getLog() {
+ return this.log;
+ }
+
+ /** {@inheritDoc} */
+ public void processEvent(Event event) {
+ String msg = EventFormatter.format(event);
+ EventSeverity severity = event.getSeverity();
+ if (severity == EventSeverity.INFO) {
+ log.info(msg);
+ } else if (severity == EventSeverity.WARN) {
+ log.warn(msg);
+ } else if (severity == EventSeverity.ERROR) {
+ log.error(msg);
+ } else if (severity == EventSeverity.FATAL) {
+ if (!skipFatal) {
+ log.fatal(msg);
+ }
+ } else {
+ assert false;
+ }
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/LoggingEventListener.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventSeverity.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventSeverity.java?rev=617176&r1=617175&r2=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventSeverity.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/events/model/EventSeverity.java Thu Jan 31 10:14:19 2008
@@ -57,13 +57,13 @@
* @return the enumeration object
*/
public static EventSeverity valueOf(String name) {
- if (INFO.getName().equals(name)) {
+ if (INFO.getName().equalsIgnoreCase(name)) {
return INFO;
- } else if (WARN.getName().equals(name)) {
+ } else if (WARN.getName().equalsIgnoreCase(name)) {
return WARN;
- } else if (ERROR.getName().equals(name)) {
+ } else if (ERROR.getName().equalsIgnoreCase(name)) {
return ERROR;
- } else if (FATAL.getName().equals(name)) {
+ } else if (FATAL.getName().equalsIgnoreCase(name)) {
return FATAL;
} else {
throw new IllegalArgumentException("Illegal value for enumeration: " + name);
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java Thu Jan 31 10:14:19 2008
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.fo;
+
+import org.apache.fop.events.EventProducer;
+
+public interface FOValidationEventProducer extends EventProducer {
+
+ /**
+ * Express joy about something.
+ * @param source the event source
+ * @param node the context node
+ * @param elementName the name of the context node
+ * @param propertyName the name of the missing property
+ * @event.severity FATAL
+ */
+ void missingProperty(Object source, FONode node, String elementName, String propertyName);
+}
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/fo/FOValidationEventProducer.java
------------------------------------------------------------------------------
svn:keywords = Id
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=617176&r1=617175&r2=617176&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 Thu Jan 31 10:14:19 2008
@@ -21,6 +21,8 @@
import junit.framework.TestCase;
+import org.apache.fop.events.model.EventSeverity;
+
public class BasicEventTestCase extends TestCase {
static {
@@ -36,8 +38,8 @@
broadcaster.addFopEventListener(listener);
assertEquals(1, broadcaster.getListenerCount());
- FopEvent ev = new FopEvent(this, "123",
- FopEvent.paramsBuilder()
+ Event ev = new Event(this, "123", EventSeverity.INFO,
+ Event.paramsBuilder()
.param("reason", "I'm tired")
.param("blah", new Integer(23))
.build());
@@ -46,6 +48,7 @@
ev = listener.event;
assertNotNull(ev);
assertEquals("123", listener.event.getEventID());
+ assertEquals(EventSeverity.INFO, listener.event.getSeverity());
assertEquals("I'm tired", ev.getParam("reason"));
assertEquals(new Integer(23), ev.getParam("blah"));
@@ -67,10 +70,11 @@
TestEventProducer producer = TestEventProducer.Factory.create(broadcaster);
producer.complain(this, "I'm tired", 23);
- FopEvent ev = listener.event;
+ Event ev = listener.event;
assertNotNull(ev);
assertEquals("org.apache.fop.events.TestEventProducer.complain",
listener.event.getEventID());
+ assertEquals(EventSeverity.WARN, listener.event.getSeverity());
assertEquals("I'm tired", ev.getParam("reason"));
assertEquals(new Integer(23), ev.getParam("blah"));
@@ -81,11 +85,11 @@
broadcaster.broadcastEvent(ev);
}
- private class MyEventListener implements FopEventListener {
+ private class MyEventListener implements EventListener {
- private FopEvent event;
+ private Event event;
- public void processEvent(FopEvent event) {
+ public void processEvent(Event event) {
if (this.event != null) {
fail("Multiple events received");
}
Added: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java?rev=617176&view=auto
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java (added)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java Thu Jan 31 10:14:19 2008
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import junit.framework.TestCase;
+
+import org.apache.fop.events.model.EventSeverity;
+
+/**
+ * Tests for EventFormatter.
+ */
+public class EventFormatterTestCase extends TestCase {
+
+ public void testFormatting() throws Exception {
+ Event ev;
+ String msg;
+
+ ev = new Event(this, "org.apache.fop.fo.FOValidationEventProducer.missingProperty",
+ EventSeverity.FATAL, Event.paramsBuilder()
+ .param("node", new Object())
+ .param("elementName", "fo:external-graphic")
+ .param("propertyName", "src")
+ .build());
+ String template
+ = "Element \"${elementName}\" is missing required property \"${propertyName}\"!";
+ msg = EventFormatter.format(ev, template);
+ assertEquals("Element \"fo:external-graphic\" is missing required property \"src\"!", msg);
+ }
+
+}
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/EventFormatterTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/TestEventProducer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/TestEventProducer.java?rev=617176&r1=617175&r2=617176&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/TestEventProducer.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/events/TestEventProducer.java Thu Jan 31 10:14:19 2008
@@ -21,8 +21,21 @@
public interface TestEventProducer extends EventProducer {
+ /**
+ * Complain about something.
+ * @param source the event source
+ * @param reason the reason for the complaint
+ * @param blah the complaint
+ * @event.severity WARN
+ */
void complain(Object source, String reason, int blah);
+ /**
+ * Express joy about something.
+ * @param source the event source
+ * @param what the cause for the joy
+ * @event.severity INFO
+ */
void enjoy(Object source, String what);
public class Factory {
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org