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: * ImageFieldElementFactory.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.geom.Rectangle2D;
032:
033: import org.jfree.report.Element;
034: import org.jfree.report.ImageElement;
035: import org.jfree.report.filter.templates.ImageFieldTemplate;
036:
037: /**
038: * A factory to define ImageFieldElements. These elements expect an java.awt.Image or an ImageReference instance as
039: * content and will display the content in the report.
040: *
041: * @author Thomas Morgner
042: */
043: public class ImageFieldElementFactory extends ImageElementFactory {
044: /**
045: * The fieldname of the datarow from where to read the content.
046: */
047: private String fieldname;
048: /**
049: * The value-formula for this field-element.
050: */
051: private String formula;
052:
053: /**
054: * DefaultConstructor.
055: */
056: public ImageFieldElementFactory() {
057: }
058:
059: /**
060: * Returns the field name from where to read the content of the element.
061: *
062: * @return the field name.
063: */
064: public String getFieldname() {
065: return fieldname;
066: }
067:
068: /**
069: * Defines the field name from where to read the content of the element. The field name is the name of a datarow
070: * column.
071: *
072: * @param fieldname the field name.
073: */
074: public void setFieldname(final String fieldname) {
075: this .fieldname = fieldname;
076: }
077:
078: /**
079: * Returns the formula that should be used to compute the value of the field. The formula must be valid according to
080: * the OpenFormula specifications.
081: *
082: * @return the formula as string.
083: */
084: public String getFormula() {
085: return formula;
086: }
087:
088: /**
089: * Assigns a formula to the element to compute the value for this element. If a formula is defined, it will override
090: * the 'field' property.
091: *
092: * @param formula the formula as a string.
093: */
094: public void setFormula(final String formula) {
095: this .formula = formula;
096: }
097:
098: /**
099: * Creates the image element based on the defined properties.
100: *
101: * @return the created image element.
102: * @throws IllegalStateException if the fieldname is not set.
103: * @see ElementFactory#createElement()
104: */
105: public Element createElement() {
106: final ImageFieldTemplate fieldTemplate = new ImageFieldTemplate();
107: if (getFormula() != null) {
108: fieldTemplate.setFormula(getFormula());
109: } else {
110: fieldTemplate.setField(getFieldname());
111: }
112: final ImageElement element = new ImageElement();
113: applyElementName(element);
114: applyStyle(element.getStyle());
115: element.setDataSource(fieldTemplate);
116:
117: return element;
118: }
119:
120: /**
121: * Creates a new ImageElement.
122: *
123: * @param name the name of the new element
124: * @param bounds the bounds of the new element
125: * @param field the name of the column/function/expression that returns the URL for the image.
126: * @return a report element for displaying an image.
127: * @throws NullPointerException if bounds, name or source are null
128: * @throws IllegalArgumentException if the given alignment is invalid
129: */
130: public static ImageElement createImageDataRowElement(
131: final String name, final Rectangle2D bounds,
132: final String field) {
133: return createImageDataRowElement(name, bounds, field, true);
134: }
135:
136: /**
137: * Creates a new ImageElement.
138: *
139: * @param name the name of the new element.
140: * @param bounds the bounds of the new element.
141: * @param field the name of the column/function/expression that returns the URL for the image.
142: * @param scale scale the image?
143: * @return a report element for displaying an image.
144: * @throws NullPointerException if bounds, name or source are null
145: * @throws IllegalArgumentException if the given alignment is invalid
146: */
147: public static ImageElement createImageDataRowElement(
148: final String name, final Rectangle2D bounds,
149: final String field, final boolean scale) {
150: return createImageDataRowElement(name, bounds, field, scale,
151: false);
152: }
153:
154: /**
155: * Creates a new ImageElement.
156: *
157: * @param name the name of the new element.
158: * @param bounds the bounds of the new element.
159: * @param field the name of the column/function/expression that returns the URL for the image.
160: * @param scale scale the image?
161: * @param keepAspectRatio preserve the aspect ratio?
162: * @return a report element for displaying an image.
163: * @throws NullPointerException if bounds, name or source are null
164: * @throws IllegalArgumentException if the given alignment is invalid
165: */
166: public static ImageElement createImageDataRowElement(
167: final String name, final Rectangle2D bounds,
168: final String field, final boolean scale,
169: final boolean keepAspectRatio) {
170: final ImageFieldElementFactory factory = new ImageFieldElementFactory();
171: factory.setName(name);
172: factory.setX(new Float(bounds.getX()));
173: factory.setY(new Float(bounds.getY()));
174: factory.setMinimumWidth(new Float(bounds.getWidth()));
175: factory.setMinimumHeight(new Float(bounds.getHeight()));
176: factory.setScale(ElementFactory.getBooleanValue(scale));
177: factory.setKeepAspectRatio(ElementFactory
178: .getBooleanValue(keepAspectRatio));
179: factory.setFieldname(field);
180: return (ImageElement) factory.createElement();
181: }
182: }
|