/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.core; /** * Is used to keep the state of sequences / counters throughout a single session of a Transformation, but across Steps. * * @author Matt * @since 13-05-2003 * */ public class Counter { private long counter; private long start; private long increment; private long maximum; private boolean loop; public Counter() { start = 1L; increment = 1L; maximum = 0L; loop = false; counter = start; } public Counter( long start ) { this(); this.start = start; counter = start; } public Counter( long start, long increment ) { this( start ); this.increment = increment; } public Counter( long start, long increment, long maximum ) { this( start, increment ); this.loop = true; this.maximum = maximum; } /** * @return Returns the counter. */ public long getCounter() { return counter; } /** * @return Returns the increment. */ public long getIncrement() { return increment; } /** * @return Returns the maximum. */ public long getMaximum() { return maximum; } /** * @return Returns the start. */ public long getStart() { return start; } /** * @return Returns the loop. */ public boolean isLoop() { return loop; } /** * @param counter * The counter to set. */ public void setCounter( long counter ) { this.counter = counter; } /** * @param increment * The increment to set. */ public void setIncrement( long increment ) { this.increment = increment; } /** * @param loop * The loop to set. */ public void setLoop( boolean loop ) { this.loop = loop; } /** * @param maximum * The maximum to set. */ public void setMaximum( long maximum ) { this.maximum = maximum; } public long next() { long retval = counter; counter += increment; if ( loop && counter > maximum ) { counter = start; } return retval; } }