// SourceDomain.java // Author: P Gray // Created: 7 Jan 99 // SourceDomain is a class which holds a 2 D dataset // designed for IS3 visualisation experiments import java.io.*; import java.util.Vector; import java.util.Enumeration; import java.util.StringTokenizer; public class SourceDomain { private Vector labels, types, dataset; public SourceDomain() { labels = new Vector(); types = new Vector(); dataset = new Vector(); } void load(String filename) { FileReader fileReader; BufferedReader buffer; String line; try { fileReader = new FileReader(new File(filename)); buffer = new BufferedReader(fileReader); // read labels line //line = buffer.readLine(); readHeader(buffer.readLine(), labels); // read the types line //line = buffer.readLine(); readHeader(buffer.readLine(), types); // line = buffer.readLine(); while ( (line = buffer.readLine()) != null) { // now read a line of data readALine(line); } // close the file fileReader.close(); } catch (FileNotFoundException e) { System.out.println("File not found when loading graph"); } catch (IOException e) { System.out.println("IO exception when loading graph"); } } void readHeader(String line, Vector headers) { // create a tokenizer to parse the line StringTokenizer segmentedLine = new StringTokenizer(line,","); // put the elements in the vector Line while (segmentedLine.hasMoreTokens()) headers.addElement(segmentedLine.nextToken()); } void readALine(String line) { // create a vector to hold the elements Vector row = new Vector(); // create a tokenizer to parse the line StringTokenizer segmentedLine = new StringTokenizer(line,","); // put the elements in the vector Line while (segmentedLine.hasMoreTokens()) row.addElement(segmentedLine.nextToken()); // put the row into the dataset dataset.addElement(row); } // accessing methods public Vector labels() { return labels; } public Vector types() { return types; } public Vector numericFieldLabels() { // return labels of fields which are reals or integers Vector numericFields = new Vector(); String typeElement; String labelElement; for (int i = 0; i < types.size(); i++) { typeElement = types.elementAt(i).toString(); if (typeElement.equals("REAL")) { numericFields.addElement(labels.elementAt(i).toString()); } else if (typeElement.equals("INT")) { numericFields.addElement(labels.elementAt(i).toString()); } } return numericFields; } public int indexOfField(String fieldName) { // return index of field with name 'fieldName' boolean found = false; int index = 0; while ((!found) && (index <= labels.size())) { if (labels.elementAt(index).toString().equals(fieldName)) found = true; else index = index + 1; } if (found) return index; else return -1; } public Vector data() { return dataset; } public int dataSize() { return dataset.size(); } public Vector record(int row) { return (Vector) dataset.elementAt(row); } public double fieldAsReal(int rowNumber, int fieldNumber) { // return real value of field in field 'fieldNumber' in row 'rowNumber' Vector rowValue = (Vector) dataset.elementAt(rowNumber); String fieldValue = (String)rowValue.elementAt(fieldNumber); Double returnVal = new Double(fieldValue); return returnVal.doubleValue(); } public double fieldAsReal(Vector row, int fieldNumber) { // return real value of field in field 'fieldNumber' of row 'row' String fieldValue = (String)row.elementAt(fieldNumber); Double returnVal = new Double(fieldValue); return returnVal.doubleValue(); } public Vector ids() { // return vector of all the record keys Vector row; Vector idList = new Vector(); Enumeration dataElements = dataset.elements(); while (dataElements.hasMoreElements()) { row = (Vector) dataElements.nextElement(); idList.addElement((String)row.elementAt(11)); } return idList; } // printing methods public void printDataset() { Vector row; Enumeration dataElements = dataset.elements(); System.out.println("Printout of full dataset"); System.out.println("++++++++++++++++++++++++"); while (dataElements.hasMoreElements()) { row = (Vector) dataElements.nextElement(); printRow(row); } } public void printRow(Vector row) { Enumeration labelElements = labels.elements(); Enumeration rowElements = row.elements(); System.out.println("***************************"); while (rowElements.hasMoreElements()) { System.out.println(labelElements.nextElement().toString() + " = " + rowElements.nextElement().toString()); System.out.println("***************************"); } } public void printRow(int rowNumber) { if (rowNumber >= dataset.size()) { System.out.println("Error: SourceDomain.printRow(): lllegal row number"); } else { printRow((Vector)dataset.elementAt(rowNumber-1)); } } }