/*
* Increment.java
* Copyright (C) 2000-2001 Stuart Yeates
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
// the package we're in
package org.greenstone.gsdl3.selfContained;
// java standard library classes used
import java.io.IOException;
import java.io.Reader;
import java.io.Serializable;
import java.io.Writer;
/**
* Class Increment is an abstract class for incrementing streams and strings
*
*
* @author stuart yeates (s.yeates@cs.waikato.ac.nz) at the New Zealand Digital Library
* @version $Revision: 5663 $
*/
abstract public class Increment implements Cloneable, Serializable
{
/**
* Increment a string of characters
*
* @exception java.io.Exception if any of the characters in the string are outside the range of first-last
* @param str the string to be incremented
* @return the incremented string
* @see Increment
*/
abstract String incrementString(String str);
/**
* Increment a stream of characters, reading from the reader and writing the incremented characters to the writer
*
* @exception java.io.Exception if any of the characters in the string are outside the range of first-last
* @param str the string to be incremented
* @return the incremented string
* @see Increment
*/
abstract long incrementStream(Reader rdr, Writer wtr);
/**
* Print to standard out a verbose message about the
* results of incrementing this string
*
* @param s the string to increment
* @see #incrementString(String)
*/
final void checkStr(String s) {
try {
System.out.println("incrementing: \"" + s +
"\" to \"" + incrementString(s) +
"\" " + stringToOctal(s) +
" ===> " + stringToHex(incrementString(s)));
} catch (Exception e) {
System.out.println("Caught exception: " + e);
}
}
/**
* Converts a unicode string to Hex
*
* @exception java.io.IOException when ...
* @param s the string to convert
* @return a string in hex
* @see Integer#toHexString(int)
*/
static final String stringToHex(String s) {
StringBuffer buffer = new StringBuffer();
for (int i=0;i