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/03/05 15:22:07 UTC
svn commit: r633855 - in /xmlgraphics/fop/branches/Temp_ProcessingFeedback:
src/java/org/apache/fop/util/AdvancedMessageFormat.java
test/java/org/apache/fop/util/AdvancedMessageFormatTestCase.java
Author: jeremias
Date: Wed Mar 5 06:21:57 2008
New Revision: 633855
URL: http://svn.apache.org/viewvc?rev=633855&view=rev
Log:
Added support for additional field styles:
{<fieldname>,if,<true-text>,<false-text>}
{<fieldname>,equals,<test-string>,<true-text>,<false-text>}
Modified:
xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/util/AdvancedMessageFormat.java
xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/util/AdvancedMessageFormatTestCase.java
Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/util/AdvancedMessageFormat.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/util/AdvancedMessageFormat.java?rev=633855&r1=633854&r2=633855&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/util/AdvancedMessageFormat.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/src/java/org/apache/fop/util/AdvancedMessageFormat.java Wed Mar 5 06:21:57 2008
@@ -41,6 +41,7 @@
*/
public class AdvancedMessageFormat {
+ private static final String COMMA_SEPARATOR_REGEX = "(?<!\\\\),";
private CompositePart rootPart;
/**
@@ -116,8 +117,21 @@
}
private Part parseField(String field) {
- //TODO Add advanced formatting like in MessageFormat here
- return new SimpleFieldPart(field);
+ String[] parts = field.split(COMMA_SEPARATOR_REGEX, 3);
+ if (parts.length == 1) {
+ return new SimpleFieldPart(parts[0]);
+ } else {
+ String format = parts[1];
+ if (parts.length == 2) {
+ throw new IllegalArgumentException("Pattern must have three parts!");
+ }
+ if ("if".equals(format)) {
+ return new IfFieldPart(parts[0], parts[2]);
+ } else if ("equals".equals(format)) {
+ return new EqualsFieldPart(parts[0], parts[2]);
+ }
+ return new SimpleFieldPart(parts[0]);
+ }
}
/**
@@ -141,7 +155,7 @@
boolean supportsObject(Object obj);
}
- private class TextPart implements Part {
+ private static class TextPart implements Part {
private String text;
@@ -213,7 +227,98 @@
}
}
- private class CompositePart implements Part {
+ private static class IfFieldPart implements Part {
+
+ protected String fieldName;
+ protected String ifValue;
+ protected String elseValue;
+
+ public IfFieldPart(String fieldName, String values) {
+ this.fieldName = fieldName;
+ parseValues(values);
+ }
+
+ protected void parseValues(String values) {
+ String[] parts = values.split(COMMA_SEPARATOR_REGEX, 2);
+ if (parts.length == 2) {
+ ifValue = unescapeComma(parts[0]);
+ elseValue = unescapeComma(parts[1]);
+ } else {
+ ifValue = unescapeComma(values);
+ }
+ }
+
+ public void write(StringBuffer sb, Map params) {
+ boolean isTrue = isTrue(params);
+ if (isTrue) {
+ sb.append(ifValue);
+ } else if (elseValue != null) {
+ sb.append(elseValue);
+ }
+ }
+
+ protected boolean isTrue(Map params) {
+ Object obj = params.get(fieldName);
+ boolean isTrue;
+ if (obj instanceof Boolean) {
+ return ((Boolean)obj).booleanValue();
+ } else {
+ return (obj != null);
+ }
+ }
+
+ public boolean isGenerated(Map params) {
+ return isTrue(params) || (elseValue != null);
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return "{" + this.fieldName + ", if...}";
+ }
+ }
+
+ private static class EqualsFieldPart extends IfFieldPart {
+
+ private String equalsValue;
+
+ public EqualsFieldPart(String fieldName, String values) {
+ super(fieldName, values);
+ }
+
+ /** {@inheritDoc} */
+ protected void parseValues(String values) {
+ String[] parts = values.split(COMMA_SEPARATOR_REGEX, 3);
+ this.equalsValue = parts[0];
+ if (parts.length == 1) {
+ throw new IllegalArgumentException(
+ "'equals' format must have at least 2 parameters");
+ }
+ if (parts.length == 3) {
+ ifValue = unescapeComma(parts[1]);
+ elseValue = unescapeComma(parts[2]);
+ } else {
+ ifValue = unescapeComma(parts[1]);
+ }
+ }
+
+ protected boolean isTrue(Map params) {
+ Object obj = params.get(fieldName);
+ if (obj != null) {
+ return String.valueOf(obj).equals(this.equalsValue);
+ } else {
+ return false;
+ }
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return "{" + this.fieldName + ", equals " + this.equalsValue + "}";
+ }
+
+ }
+
+
+ private static class CompositePart implements Part {
private List parts = new java.util.ArrayList();
private boolean conditional;
@@ -266,5 +371,9 @@
return obj instanceof Locator;
}
+ }
+
+ private static String unescapeComma(String string) {
+ return string.replaceAll("\\\\,", ",");
}
}
Modified: xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/util/AdvancedMessageFormatTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/util/AdvancedMessageFormatTestCase.java?rev=633855&r1=633854&r2=633855&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/util/AdvancedMessageFormatTestCase.java (original)
+++ xmlgraphics/fop/branches/Temp_ProcessingFeedback/test/java/org/apache/fop/util/AdvancedMessageFormatTestCase.java Wed Mar 5 06:21:57 2008
@@ -25,6 +25,8 @@
import org.xml.sax.helpers.LocatorImpl;
+import org.apache.fop.events.model.EventSeverity;
+
/**
* Tests for EventFormatter.
*/
@@ -75,4 +77,68 @@
assertEquals("Here\'s a Locator: 12:7", msg);
}
+ public void testIfFormatting() throws Exception {
+ String msg;
+ AdvancedMessageFormat format;
+
+ format = new AdvancedMessageFormat("You are{isBad,if, not} nice!");
+
+ Map params = new java.util.HashMap();
+
+ params.put("isBad", Boolean.FALSE);
+ msg = format.format(params);
+ assertEquals("You are nice!", msg);
+
+ params.put("isBad", Boolean.TRUE);
+ msg = format.format(params);
+ assertEquals("You are not nice!", msg);
+
+ format = new AdvancedMessageFormat("You are{isGood,if, very, not so} nice!");
+
+ params = new java.util.HashMap();
+
+ msg = format.format(params); //isGood is missing
+ assertEquals("You are not so nice!", msg);
+
+ params.put("isGood", Boolean.FALSE);
+ msg = format.format(params);
+ assertEquals("You are not so nice!", msg);
+
+ params.put("isGood", Boolean.TRUE);
+ msg = format.format(params);
+ assertEquals("You are very nice!", msg);
+
+ format = new AdvancedMessageFormat("You are{isGood,if, very\\, very} nice!");
+
+ params = new java.util.HashMap();
+
+ msg = format.format(params); //isGood is missing
+ assertEquals("You are nice!", msg);
+
+ params.put("isGood", Boolean.FALSE);
+ msg = format.format(params);
+ assertEquals("You are nice!", msg);
+
+ params.put("isGood", Boolean.TRUE);
+ msg = format.format(params);
+ assertEquals("You are very, very nice!", msg);
+ }
+
+ public void testEqualsFormatting() throws Exception {
+ String msg;
+ AdvancedMessageFormat format;
+
+ format = new AdvancedMessageFormat(
+ "Error{severity,equals,EventSeverity:FATAL,,\nSome explanation!}");
+
+ Map params = new java.util.HashMap();
+
+ params.put("severity", EventSeverity.FATAL);
+ msg = format.format(params);
+ assertEquals("Error", msg);
+
+ params.put("severity", EventSeverity.WARN);
+ msg = format.format(params);
+ assertEquals("Error\nSome explanation!", msg);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org