001: /**
002: * ===========================================
003: * JFreeReport : a free Java reporting library
004: * ===========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
009: *
010: * This library is free software; you can redistribute it and/or modify it under the terms
011: * of the GNU Lesser General Public License as published by the Free Software Foundation;
012: * either version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: * See the GNU Lesser General Public License for more details.
017: *
018: * You should have received a copy of the GNU Lesser General Public License along with this
019: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: *
022: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023: * in the United States and other countries.]
024: *
025: * ------------
026: * ResourceMesssageFormatExpression.java
027: * ------------
028: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
029: */package org.jfree.report.function.strings;
030:
031: import java.util.ResourceBundle;
032:
033: import org.jfree.report.ResourceBundleFactory;
034: import org.jfree.report.filter.MessageFormatSupport;
035: import org.jfree.report.function.AbstractExpression;
036: import org.jfree.report.function.ExpressionUtilities;
037:
038: /**
039: * Formats a message read from a resource-bundle using named parameters. The parameters are resolved against the current
040: * data-row.
041: * <p/>
042: * This performs the same task as the ResourceMessageFormatFilter does inside a text-element.
043: *
044: * @author Thomas Morgner
045: */
046: public class ResourceMesssageFormatExpression extends
047: AbstractExpression {
048: /**
049: * The key that gets used to lookup the message format string from the resource bundle.
050: */
051: private String formatKey;
052:
053: /**
054: * The name of the resource bundle used to lookup the message.
055: */
056: private String resourceIdentifier;
057:
058: /**
059: * The message format support translates raw message strings into useable MessageFormat parameters and read the
060: * necessary input data from the datarow.
061: */
062: private MessageFormatSupport messageFormatSupport;
063:
064: /**
065: * Default constructor.
066: */
067: public ResourceMesssageFormatExpression() {
068: messageFormatSupport = new MessageFormatSupport();
069: }
070:
071: /**
072: * Returns the name of the used resource bundle.
073: *
074: * @return the name of the resourcebundle
075: * @see org.jfree.report.ResourceBundleFactory#getResourceBundle(String)
076: */
077: public String getResourceIdentifier() {
078: return resourceIdentifier;
079: }
080:
081: /**
082: * Defines the name of the used resource bundle. If undefined, all calls to {@link
083: * ResourceMesssageFormatExpression#getValue()} will result in <code>null</code> values.
084: *
085: * @param resourceIdentifier the resource bundle name
086: */
087: public void setResourceIdentifier(final String resourceIdentifier) {
088: this .resourceIdentifier = resourceIdentifier;
089: }
090:
091: /**
092: * Defines the key that is used to lookup the format string used in the message format in the resource bundle.
093: *
094: * @param format a resourcebundle key for the message format lookup.
095: */
096: public void setFormatKey(final String format) {
097: this .formatKey = format;
098: }
099:
100: /**
101: * Returns the key that is used to lookup the format string used in the message format in the resource bundle.
102: *
103: * @return the resource bundle key.
104: */
105: public String getFormatKey() {
106: return formatKey;
107: }
108:
109: /**
110: * Returns the replacement text that is used if one of the referenced message parameters is null.
111: *
112: * @return the replacement text for null-values.
113: */
114: public String getNullString() {
115: return messageFormatSupport.getNullString();
116: }
117:
118: /**
119: * Defines the replacement text that is used if one of the referenced message parameters is null.
120: *
121: * @param nullString the replacement text for null-values.
122: */
123: public void setNullString(final String nullString) {
124: this .messageFormatSupport.setNullString(nullString);
125: }
126:
127: /**
128: * Returns the formatted message.
129: *
130: * @return the formatted message.
131: */
132: public Object getValue() {
133: final ResourceBundleFactory resourceBundleFactory = getResourceBundleFactory();
134: final ResourceBundle bundle;
135: if (resourceIdentifier == null) {
136: bundle = ExpressionUtilities.getDefaultResourceBundle(this );
137: } else {
138: bundle = resourceBundleFactory
139: .getResourceBundle(resourceIdentifier);
140: }
141:
142: final String newFormatString = bundle.getString(formatKey);
143: messageFormatSupport.setFormatString(newFormatString);
144: messageFormatSupport.setLocale(resourceBundleFactory
145: .getLocale());
146: return messageFormatSupport.performFormat(getDataRow());
147: }
148: }
|