001: /**
002: * ========================================
003: * JFreeReport : a free Java report library
004: * ========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2000-2007, by Object Refinery Limited, 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: * $Id: StaticTextLayoutController.java 3048 2007-07-28 18:02:42Z tmorgner $
027: * ------------
028: * (C) Copyright 2000-2005, by Object Refinery Limited.
029: * (C) Copyright 2005-2007, by Pentaho Corporation.
030: */package org.jfree.report.flow.layoutprocessor;
031:
032: import org.jfree.report.DataSourceException;
033: import org.jfree.report.ReportDataFactoryException;
034: import org.jfree.report.ReportProcessingException;
035: import org.jfree.report.flow.FlowController;
036: import org.jfree.report.flow.ReportTarget;
037: import org.jfree.report.structure.StaticText;
038:
039: /**
040: * Creation-Date: 24.11.2006, 15:06:56
041: *
042: * @author Thomas Morgner
043: */
044: public class StaticTextLayoutController extends
045: AbstractLayoutController {
046: public static final int NOT_STARTED = 0;
047: public static final int FINISHED = 2;
048:
049: private int state;
050:
051: public StaticTextLayoutController() {
052: }
053:
054: /**
055: * Advances the processing position.
056: *
057: * @param target the report target that receives generated events.
058: * @return the new layout controller instance representing the new state.
059: *
060: * @throws DataSourceException if there was a problem reading data from
061: * the datasource.
062: * @throws ReportProcessingException if there was a general problem during
063: * the report processing.
064: * @throws ReportDataFactoryException if a query failed.
065: */
066: public LayoutController advance(final ReportTarget target)
067: throws DataSourceException, ReportDataFactoryException,
068: ReportProcessingException {
069: if (state != StaticTextLayoutController.NOT_STARTED) {
070: throw new IllegalStateException();
071: }
072:
073: final StaticText text = (StaticText) getNode();
074: target.processText(text.getText());
075:
076: final StaticTextLayoutController derived = (StaticTextLayoutController) clone();
077: derived.state = StaticTextLayoutController.FINISHED;
078: return derived;
079: }
080:
081: /**
082: * Joins with a delegated process flow. This is generally called from a child
083: * flow and should *not* (I mean it!) be called from outside. If you do,
084: * you'll suffer.
085: *
086: * @param flowController the flow controller of the parent.
087: * @return the joined layout controller that incorperates all changes from
088: * the delegate.
089: */
090: public LayoutController join(final FlowController flowController) {
091: throw new UnsupportedOperationException(
092: "Static text does not have childs.");
093: }
094:
095: /**
096: * Checks, whether the layout controller would be advanceable. If this method
097: * returns true, it is generally safe to call the 'advance()' method.
098: *
099: * @return true, if the layout controller is advanceable, false otherwise.
100: */
101: public boolean isAdvanceable() {
102: return state != StaticTextLayoutController.FINISHED;
103: }
104:
105: /**
106: * Derives a copy of this controller that is suitable to perform a
107: * precomputation. The returned layout controller must be independent from
108: * the it's anchestor controller.
109: *
110: * @param fc a new flow controller for the precomputation.
111: * @return a copy that is suitable for precomputation.
112: */
113: public LayoutController createPrecomputeInstance(
114: final FlowController fc) {
115: throw new UnsupportedOperationException(
116: "Static Text does not perform any precomputation.");
117: }
118: }
|