// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.replication.common;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
/**
* Formats replication sequence numbers into file names.
*/
public class ReplicationSequenceFormatter {
private NumberFormat sequenceFormat;
/**
* Creates a new instance.
*
* @param minimumLength
* The minimum length file sequence string to generate. For example, setting a length
* of 2 will generate sequence numbers from "00" to "99".
* @param groupingLength
* The number of characters to write before separating with a '/' character. Used for
* creating sequence numbers to be written to files in a nested directory structure.
*/
public ReplicationSequenceFormatter(int minimumLength, int groupingLength) {
DecimalFormatSymbols formatSymbols;
StringBuilder formatString;
formatSymbols = new DecimalFormatSymbols(Locale.US);
formatSymbols.setGroupingSeparator('/');
formatString = new StringBuilder();
for (int i = 0; i < minimumLength || i <= groupingLength; i++) {
if (i > 0 && groupingLength > 0 && i % groupingLength == 0) {
formatString.append(',');
}
if (i < minimumLength) {
formatString.append('0');
} else {
formatString.append('#');
}
}
formatString.reverse();
this.sequenceFormat = new DecimalFormat(formatString.toString(), formatSymbols);
}
/**
* Formats the sequence number into a file name. Any sub-directories required will be
* automatically created.
*
* @param sequenceNumber
* The sequence number.
* @param fileNameSuffix
* The suffix to append to the end of the file name.
* @return The formatted file name.
*/
public String getFormattedName(long sequenceNumber, String fileNameSuffix) {
String fileName;
fileName = sequenceFormat.format(sequenceNumber) + fileNameSuffix;
return fileName;
}
}