/* * This file or a portion of this file is licensed under the terms of * the Globus Toolkit Public License, found in file ../GTPL, or at * http://www.globus.org/toolkit/download/license.html. This notice must * appear in redistributions of this file, with or without modification. * * Redistributions of this Software, with or without modification, must * reproduce the GTPL in: (1) the Software, or (2) the Documentation or * some other similar material which is provided with the Software (if * any). * * Copyright 1999-2004 University of Chicago and The University of * Southern California. All rights reserved. */ package org.griphyn.vdl.util; import java.text.DecimalFormat; /** * Each instance of this class produces a row of sequence numbers. * By default, the sequence string has six digits. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ */ public class SequenceGenerator { /** * The sequence counter employed by this generator. Please note * that multiple instances of this class will produce the same * sequences! */ private long m_count = 0; /** * The formatting of the number. */ private DecimalFormat m_format; /** * C'tor: This will generate an six digit sequence strings. */ public SequenceGenerator() { this.m_format = new DecimalFormat( "######000000" ); } /** * C'tor: Instances from this contructor will generate ${prefix}xxxxx. * Please note that multiple instances of this class with the same * prefix will produce the same sequences! * * @param digits are the number of digits to use. This value must be at * least one. * @exception IllegalArgumentException if the number of digits is negative */ public SequenceGenerator( int digits ) { if ( digits < 0 ) throw new IllegalArgumentException( digits + " < 1" ); if ( digits == 0 ) this.m_format = null; else { StringBuffer pattern = new StringBuffer( digits << 1 ); pattern.setLength( digits << 1 ); for ( int i=0; i<digits; ++i ) { pattern.setCharAt( i, '#' ); pattern.setCharAt( i+digits, '0' ); } this.m_format = new DecimalFormat( pattern.toString() ); } } /** * Creates the next sequence number as textual string. * @return the next sequence number string. * @exception RuntimeException, if the maximum permissable value was reached. */ public String generate() throws RuntimeException { if ( this.m_count == Long.MAX_VALUE ) throw new RuntimeException( "Reached end of sequence" ); else this.m_count++; return ( this.m_format == null ? Long.toString( this.m_count ) : this.m_format.format( this.m_count ) ); } }