CSVNode.java

package edu.hawaii.ics.yucheng;

import java.util.ArrayList;

/**
 * A class that contains DDL commands. It is a derived class of
 * Java.util.ArrayList. The initial items in the list are parsed from the
 * 'ddlfile' statements file.
 * 
 * @author     Cheng Jade
 * @assignment ICS 421 Assignment 2-2
 * @date       Feb 29, 2010
 * @bugs       None
 */
public class CSVNode extends ArrayList<String> {
    
    /** The serialized version id. */
    private static final long serialVersionUID = 1L;

    public CSVNode(final String[] line){
        assert null != line;
        
        for (final String field : line)
            this.add(field);
    }

    // return the corresponding node this csv should be inserted to, 1 bounded.
    public int partitionTo(Configuration configuration, 
                           ArrayList<String> columnNames) throws ProgramException{
        int indexOfPartitionColumn = -1;
        String partitionColumn = configuration.getPartitionColumn();
        for (int i = 0; i < columnNames.size(); i++) {
            if (columnNames.get(i).equalsIgnoreCase(partitionColumn)) {
                    indexOfPartitionColumn = i;
                    break;
            }
        }
        if (indexOfPartitionColumn == -1)
            throw new ProgramException("Mismatch partition table name and the dtables");
        String partitionValue = this.get(indexOfPartitionColumn);
        try {
            int intPartitionValue = Integer.parseInt(partitionValue);
            if (configuration.getPartitionMethod().equalsIgnoreCase("range")) {
                for (int i = 0; i < configuration.nodeListsize(); i++) {
                    int param1 = Integer.parseInt(configuration.getPartition(i).param1);
                    int param2 = Integer.parseInt(configuration.getPartition(i).param2);
                    if (intPartitionValue > param1 && intPartitionValue <= param2)
                        return i + 1;
                }
                throw new ProgramException("Partition value out of range");
            }
            if (configuration.getPartitionMethod().equalsIgnoreCase("hash")) {
                int param1 = Integer.parseInt(configuration.getPartition(0).param1);
                return (intPartitionValue % param1) + 1;
            }
            throw new ProgramException("Support only range and hash partition methods.");
        } catch (NumberFormatException e) {
            throw new ProgramException("Support only numeric partion values");
        }
    }

    /**
     * Returns a readable version of the contents of the DDL command list.
     * 
     * @return A readable version of the contents of the DDL command list.
     */
    @Override
    public String toString() {
        // If the directory is empty, return a special note.
        if (this.size() == 0)
            return "The CSV Node is empty.\n";

        // Loop over each item, and add it to the string builder.
        final StringBuilder builder = new StringBuilder();
        final int size = this.size();
        for (int i = 0; i < size; i++) {
            builder.append("Column ");
            builder.append(i + 1);
            builder.append(": ");
            builder.append(this.get(i));
            builder.append("\n");
        }

        // Return the string created above.
        return builder.toString();
    }

    /**
     * The entry point for a test for this class.
     * 
     * @param args
     *            The command line arguments.
     */
    public static void main(final String[] args) {
        assert null != args;
        
        CSVNode node = new CSVNode(new String[] { "cheng", "jade", "123" });
        System.out.println(node);
        // Exit cleanly while debugging from Eclipse.
        System.exit(0);
    }
}
Valid HTML 4.01 Valid CSS