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 3525 2007-10-16 11:43:48Z tmorgner $ 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(final 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 }