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: FlowControlOperation.java,v 1.4 2007/04/01 18:49:25 taqua Exp $
027 * ------------
028 * (C) Copyright 2000-2005, by Object Refinery Limited.
029 * (C) Copyright 2005-2007, by Pentaho Corporation.
030 */
031 package org.jfree.report.flow;
032
033 /**
034 * These objects define, how the iteration over the report definition affects
035 * the data source.
036 *
037 * @author Thomas Morgner
038 */
039 public class FlowControlOperation
040 {
041 /**
042 * Stores the current datarow state for a later recall. Markpoints from different
043 * sources can be nested. Marking does not change the user datasource.
044 */
045 public static final FlowControlOperation MARK =
046 new FlowControlOperation("mark");
047 /**
048 * Requests that the datasource should be moved to the next row. An advance
049 * operation does not change the current cursor position. The cursor is not
050 * moved until a 'COMMIT' operation has been reached.
051 *
052 * Repeatable sections will perform an auto-commit based on the group in which
053 * they are in.
054 */
055 public static final FlowControlOperation ADVANCE =
056 new FlowControlOperation("advance");
057 /** Recalls a marked position. */
058 public static final FlowControlOperation RECALL =
059 new FlowControlOperation("recall");
060
061 /** Do nothing. */
062 public static final FlowControlOperation NO_OP =
063 new FlowControlOperation("no-op");
064
065 /**
066 * Finishes (and closes) the currently open context. If the last mark has been
067 * closed, the datasource is also closed.
068 * <p/>
069 * If all datasources have been closes, the empty datasource is used. This
070 * datasource cannot be closed (closing has no effect on it).
071 */
072 public static final FlowControlOperation DONE =
073 new FlowControlOperation("done");
074
075
076 private final String myName; // for debug only
077
078 /**
079 * A commit checks for an pending advance request and commites that request
080 * by moving the cursor of the currend datarow forward by one row.
081 */
082 public static final FlowControlOperation COMMIT =
083 new FlowControlOperation("commit");
084
085 protected FlowControlOperation(String name)
086 {
087 if (name == null)
088 {
089 throw new NullPointerException();
090 }
091 myName = name;
092 }
093
094 public String toString()
095 {
096 return myName;
097 }
098
099 public boolean equals(final Object o)
100 {
101 if (this == o)
102 {
103 return true;
104 }
105 if (o == null || getClass() != o.getClass())
106 {
107 return false;
108 }
109
110 final FlowControlOperation that = (FlowControlOperation) o;
111
112 return myName.equals(that.myName);
113 }
114
115 public int hashCode()
116 {
117 return myName.hashCode();
118 }
119 }