/*
* 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.euryale;
import java.io.IOException;
import java.io.File;
/**
*
* A Virtual Hashed File Factory that does not do any existence checks while
* creating a directory. The factory, is used to create remote paths without
* checking for correctness.
*
* Additionally, it employs a decimal numbering scheme instead of hexadecimal
* used for HashedFileFactory.
*
* @author Karan Vahi
* @version $Revision$
*/
public class VirtualDecimalHashedFileFactory
extends HashedFileFactory {
/**
* Constructor: Creates the base directory and employs sanity checks.
* @param baseDirectory is the place where the other dirs are created,
* and where the DAG file resides.
* @throws IOException if the location is not a writable directory,
* or cannot be created as such.
*/
public VirtualDecimalHashedFileFactory( File baseDirectory )
throws IOException {
super(baseDirectory);
}
/**
* Constructor: Creates the directory and employs sanity checks.
* @param baseDirectory is the place where the other dirs are created,
* and where the DAG file resides.
* @throws IOException if the location is not a writable directory,
* or cannot be created as such.
*/
public VirtualDecimalHashedFileFactory( String baseDirectory )
throws IOException {
super(baseDirectory);
}
/**
* Constructor: Creates the base directory and employs sanity checks.
* @param baseDirectory is the place where the other dirs are created,
* and where the DAG file resides.
* @param totalFiles is the number of files to support, and the number
* of times, the virtual constructor is expected to be called.
* @throws IOException if the location is not a writable directory,
* or cannot be created as such.
*/
public VirtualDecimalHashedFileFactory( File baseDirectory, int totalFiles )
throws IOException {
super(baseDirectory, totalFiles );
}
/**
* Constructor: Creates the directory and employs sanity checks.
* @param baseDirectory is the place where the other dirs are created,
* and where the DAG file resides.
* @param totalFiles is the number of files to support, and the number
* of times, the virtual constructor is expected to be called.
* @throws IOException if the location is not a writable directory,
* or cannot be created as such.
*/
public VirtualDecimalHashedFileFactory( String baseDirectory, int totalFiles )
throws IOException {
super(baseDirectory, totalFiles);
}
/**
* Resets the helper structures after changing layout parameters. You
* will also need to call this function after you invoked the virtual
* constructors, but want to change parameter pertaining to the
* directory structure. The structured file count will also be reset!
*/
public void reset() {
super.reset();
m_count = 0;
mh_level = new int[ m_levels ];
//we are using decimal instead of hexa for this!
mh_digits = (int) Math.ceil( Math.log(m_filesPerDirectory)/Math.log(10) );
mh_buffer = new StringBuffer(mh_digits);
}
/**
* Converts the given integer into hexadecimal notation, using
* the given number of digits, prefixing with zeros as necessary.
*
* @param number is the number to format.
* @return a string of appropriate length, filled with leading zeros,
* representing the number hexadecimally.
*/
public String format( int number )
{
mh_buffer.delete( 0, mh_digits );
mh_buffer.append( Integer.toString(number) );
while ( mh_buffer.length() < mh_digits ) mh_buffer.insert( 0, '0' );
return mh_buffer.toString();
}
/**
* Checks the destination location for existence, if it can
* be created, if it is writable etc. Does no check as it is
* virtual.
*
* @param dir is the new base directory to optionally create
*/
protected void sanityCheck( File dir ) throws IOException{
}
/**
* Creates a directory for the hashed file directory structure on the
* submit host. It only creates the File with correct path name, however
* does not physically create the file.
*
*
* @return the File structure to the created directory
*
* @throws IOException the exception.
*/
protected File createDirectory( ) throws IOException{
// create directory, as necessary
File d = getBaseDirectory();
for ( int i=0; i<m_levels; ++i ) {
d = new File( d, format( mh_level[i] ) );
}
return d;
}
}