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: * CapitalizeStringExpression.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 org.jfree.report.function.AbstractExpression;
032:
033: /**
034: * A expression that transforms all first letters of a given string into upper-case letters.
035: *
036: * @author Thomas Morgner
037: */
038: public class CapitalizeStringExpression extends AbstractExpression {
039: /** The field name from where to read the string that should be capitalized. */
040: private String field;
041: /** A flag indicating that only the first word should be capitalized. */
042: private boolean firstWordOnly;
043:
044: /**
045: * Default constructor.
046: */
047: public CapitalizeStringExpression() {
048: }
049:
050: /**
051: * Returns, whether only the first word should be capitalized.
052: *
053: * @return true, if the first word should be capitalized, false if all words should be capitalized.
054: */
055: public boolean isFirstWordOnly() {
056: return firstWordOnly;
057: }
058:
059: /**
060: * Defines, whether only the first word should be capitalized.
061: *
062: * @param firstWordOnly true, if the first word should be capitalized, false if all words should be capitalized.
063: */
064: public void setFirstWordOnly(final boolean firstWordOnly) {
065: this .firstWordOnly = firstWordOnly;
066: }
067:
068: /**
069: * Returns the name of the datarow-column from where to read the string value.
070: *
071: * @return the field.
072: */
073: public String getField() {
074: return field;
075: }
076:
077: /**
078: * Defines the name of the datarow-column from where to read the string value.
079: *
080: * @param field the field.
081: */
082: public void setField(final String field) {
083: this .field = field;
084: }
085:
086: /**
087: * Capitalizes the string that has been read from the defined field.
088: *
089: * @return the value of the function.
090: */
091: public Object getValue() {
092: final Object raw = getDataRow().get(getField());
093: if (raw == null) {
094: return null;
095: }
096: final String text = String.valueOf(raw);
097: final char[] textArray = text.toCharArray();
098:
099: boolean startOfWord = true;
100:
101: final int textLength = textArray.length;
102: for (int i = 0; i < textLength; i++) {
103: final char c = textArray[i];
104: // we ignore the punctutation chars or any other possible extra chars
105: // for now. Words start at whitespaces ...
106: if (Character.isWhitespace(c)) {
107: startOfWord = true;
108: } else {
109: if (startOfWord == true) {
110: textArray[i] = Character.toTitleCase(c);
111: }
112: if (firstWordOnly) {
113: break;
114: }
115: startOfWord = false;
116: }
117: }
118: return new String(textArray);
119: }
120: }
|