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: * LabelElementFactory.java
027: * ------------
028: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
029: */package org.jfree.report.elementfactory;
030:
031: import java.awt.Color;
032: import java.awt.geom.Rectangle2D;
033:
034: import org.jfree.report.Element;
035: import org.jfree.report.ElementAlignment;
036: import org.jfree.report.TextElement;
037: import org.jfree.report.filter.templates.LabelTemplate;
038: import org.jfree.report.style.FontDefinition;
039:
040: /**
041: * A factory to define LabelElements. LabelElements are considered immutable and should
042: * not be modified once they are created. The label expects plain text.
043: *
044: * @author Thomas Morgner
045: */
046: public class LabelElementFactory extends TextElementFactory {
047: /**
048: * The label text.
049: */
050: private String text;
051:
052: /**
053: * DefaultConstructor.
054: */
055: public LabelElementFactory() {
056: }
057:
058: /**
059: * Returns the label text.
060: *
061: * @return the text of the label.
062: */
063: public String getText() {
064: return text;
065: }
066:
067: /**
068: * Defines the text of the label.
069: *
070: * @param text the plain text of the label.
071: */
072: public void setText(final String text) {
073: this .text = text;
074: }
075:
076: /**
077: * Creates the label element.
078: *
079: * @return the generated label.
080: *
081: * @throws IllegalStateException if the text is not defined.
082: * @see org.jfree.report.elementfactory.ElementFactory#createElement()
083: */
084: public Element createElement() {
085: if (getText() == null) {
086: throw new IllegalStateException("Content is not set.");
087: }
088:
089: final LabelTemplate template = new LabelTemplate();
090: template.setContent(getText());
091: final TextElement element = new TextElement();
092: element.setDataSource(template);
093: applyElementName(element);
094: applyStyle(element.getStyle());
095: return element;
096: }
097:
098: /**
099: * Creates a new TextElement containing a label.
100: *
101: * @param name the name of the new element
102: * @param bounds the bounds of the new element
103: * @param paint the text color of this text element
104: * @param alignment the horizontal text alignment.
105: * @param font the font for this element
106: * @param labeltext the text to display
107: * @return a report element for displaying a label (static text).
108: *
109: * @throws NullPointerException if bounds, name, format or field are null
110: * @throws IllegalArgumentException if the given alignment is invalid
111: */
112: public static TextElement createLabelElement(final String name,
113: final Rectangle2D bounds, final Color paint,
114: final ElementAlignment alignment,
115: final FontDefinition font, final String labeltext) {
116: return createLabelElement(name, bounds, paint, alignment,
117: ElementAlignment.TOP, font, labeltext);
118: }
119:
120: /**
121: * Creates a new {@link org.jfree.report.TextElement} containing a label.
122: *
123: * @param name the name of the new element.
124: * @param bounds the bounds of the new element.
125: * @param paint the text color of this text element.
126: * @param alignment the horizontal alignment.
127: * @param valign the vertical alignment.
128: * @param font the font for this element.
129: * @param labeltext the text to display.
130: * @return a report element for displaying a label (static text).
131: *
132: * @throws NullPointerException if bounds, name, format or field are
133: * <code>null</code>.
134: * @throws IllegalArgumentException if the given alignment is invalid.
135: */
136: public static TextElement createLabelElement(final String name,
137: final Rectangle2D bounds, final Color paint,
138: final ElementAlignment alignment,
139: final ElementAlignment valign, final FontDefinition font,
140: final String labeltext) {
141: final LabelElementFactory factory = new LabelElementFactory();
142: factory.setX(new Float(bounds.getX()));
143: factory.setY(new Float(bounds.getY()));
144: factory.setMinimumWidth(new Float(bounds.getWidth()));
145: factory.setMinimumHeight(new Float(bounds.getHeight()));
146: factory.setName(name);
147: factory.setColor(paint);
148: factory.setHorizontalAlignment(alignment);
149: factory.setVerticalAlignment(valign);
150:
151: if (font != null) {
152: factory.setFontName(font.getFontName());
153: factory.setFontSize(new Integer(font.getFontSize()));
154: factory.setBold(ElementFactory.getBooleanValue(font
155: .isBold()));
156: factory.setItalic(ElementFactory.getBooleanValue(font
157: .isItalic()));
158: factory.setEncoding(font.getFontEncoding(null));
159: factory.setUnderline(ElementFactory.getBooleanValue(font
160: .isUnderline()));
161: factory.setStrikethrough(ElementFactory
162: .getBooleanValue(font.isStrikeThrough()));
163: factory.setEmbedFont(ElementFactory.getBooleanValue(font
164: .isEmbeddedFont()));
165: }
166: factory.setText(labeltext);
167: return (TextElement) factory.createElement();
168: }
169:
170: }
|