home *** CD-ROM | disk | FTP | other *** search
- package jclass.chart;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.StreamTokenizer;
- import java.util.Vector;
- import jclass.bwt.JCSerializable;
- import jclass.util.JCVector;
-
- public class InputStreamDataSource implements Chartable, JCSerializable {
- private StreamTokenizer tokenizer;
- private Vector data = new Vector();
- private int dataInterpretation;
- private String name;
- private Vector seriesNames = new Vector();
- private Vector pointLabels = new Vector();
- private double holeValue;
- private final char QUOTE = '\'';
- static final int PARSE_ERR_DATA_STYLE = 1;
- static final int PARSE_ERR_HOLE_OR_VALUE = 2;
- static final int PARSE_ERR_POINT_LABEL = 3;
-
- public InputStreamDataSource(InputStream var1) throws IOException {
- this.ctor(var1);
- }
-
- protected InputStreamDataSource() {
- }
-
- protected void ctor(InputStream var1) throws IOException {
- this.tokenizer = new StreamTokenizer(var1);
- this.tokenizer.commentChar(35);
- this.tokenizer.quoteChar(39);
- this.tokenizer.slashSlashComments(false);
- this.tokenizer.slashStarComments(false);
- this.tokenizer.eolIsSignificant(false);
- this.tokenizer.lowerCaseMode(true);
- this.tokenizer.parseNumbers();
- this.tokenizer.whitespaceChars(43, 43);
- this.init();
- this.tokenizer = null;
- }
-
- private double getNextDouble() throws IOException {
- this.tokenizer.nextToken();
- if (this.tokenizer.ttype != -2) {
- if (this.tokenizer.ttype == -3) {
- String var4 = this.tokenizer.sval;
- if (var4.equalsIgnoreCase("HOLE")) {
- return Double.MAX_VALUE;
- }
- }
-
- this.displayErrorMessage(2);
- throw new IOException("Error in data file format - " + this.tokenizer);
- } else if (this.holeValue != (double)0.0F && this.tokenizer.nval == this.holeValue) {
- return Double.MAX_VALUE;
- } else {
- double var1 = this.tokenizer.nval;
- this.tokenizer.nextToken();
- if (this.tokenizer.ttype == -3 && this.tokenizer.sval != null && (this.tokenizer.sval.charAt(0) == 'e' || this.tokenizer.sval.charAt(0) == 'E')) {
- if (this.tokenizer.sval.length() == 1) {
- this.tokenizer.nextToken();
- if (this.tokenizer.ttype == -2) {
- var1 *= Math.pow((double)10.0F, this.tokenizer.nval);
- }
- } else {
- int var3 = Integer.valueOf(this.tokenizer.sval.substring(1));
- var1 *= Math.pow((double)10.0F, (double)var3);
- }
- } else {
- this.tokenizer.pushBack();
- }
-
- return var1;
- }
- }
-
- private void displayErrorMessage(int var1) {
- String var2 = "Error reading data: line " + this.tokenizer.lineno() + ": ";
- switch (var1) {
- case 1:
- var2 = var2 + "Data must start with ARRAY or GENERAL and not ";
- break;
- case 2:
- var2 = var2 + "Expect either a hole or numeric value and not ";
- break;
- case 3:
- var2 = var2 + "Expect a point label and not ";
- break;
- default:
- return;
- }
-
- if (this.tokenizer.ttype == 39) {
- var2 = var2 + "'" + this.tokenizer.sval + "'";
- } else if (this.tokenizer.ttype == -3) {
- var2 = var2 + this.tokenizer.sval;
- } else if (this.tokenizer.ttype == -2) {
- var2 = var2 + this.tokenizer.nval;
- } else {
- var2 = var2 + this.tokenizer.toString();
- }
-
- System.err.println(var2);
- }
-
- private synchronized void init() throws IOException {
- if (this.tokenizer.nextToken() == -3 && (this.tokenizer.sval.equals("array") || this.tokenizer.sval.equals("general"))) {
- if (this.tokenizer.sval.equals("array")) {
- this.dataInterpretation = 0;
- } else {
- this.dataInterpretation = 1;
- }
-
- if (this.tokenizer.nextToken() == 39) {
- this.name = new String(this.tokenizer.sval);
- } else {
- this.tokenizer.pushBack();
- }
-
- int var1 = (int)this.getNextDouble();
- int var2 = (int)this.getNextDouble();
- boolean var3;
- if (this.tokenizer.nextToken() == -3 && this.tokenizer.sval.equals("t")) {
- var3 = true;
- } else {
- var3 = false;
- this.tokenizer.pushBack();
- }
-
- if (this.tokenizer.nextToken() == -3 && this.tokenizer.sval.equals("hole")) {
- this.holeValue = this.getNextDouble();
- } else {
- this.tokenizer.pushBack();
- }
-
- switch (this.dataInterpretation) {
- case 0:
- this.readArrayData(var1, var2, var3);
- return;
- case 1:
- this.readGeneralData(var1, var2, var3);
- return;
- default:
- }
- } else {
- this.displayErrorMessage(1);
- throw new IOException("Data must start with ARRAY or GENERAL");
- }
- }
-
- private void readArrayData(int var1, int var2, boolean var3) throws IOException {
- if (var3) {
- Double[][] var6 = new Double[var1 + 1][var2];
-
- for(int var5 = 0; var5 < var1 + 1; ++var5) {
- if (this.tokenizer.nextToken() != 39) {
- this.tokenizer.pushBack();
- break;
- }
-
- this.seriesNames.addElement(new String(this.tokenizer.sval));
- }
-
- for(int var10 = 0; var10 < var2; ++var10) {
- if (this.tokenizer.nextToken() == 39) {
- this.pointLabels.addElement(new String(this.tokenizer.sval));
- } else {
- this.pointLabels.addElement("");
- this.tokenizer.pushBack();
- }
-
- for(int var4 = 0; var4 < var1 + 1; ++var4) {
- var6[var4][var10] = new Double(this.getNextDouble());
- }
- }
-
- for(int var8 = 0; var8 < var1 + 1; ++var8) {
- JCVector var7 = new JCVector(var6[var8]);
- this.data.addElement(var7);
- }
- } else {
- Object var13 = null;
-
- for(int var11 = 0; var11 < var2; ++var11) {
- if (this.tokenizer.nextToken() != 39) {
- if (var11 != 0) {
- this.displayErrorMessage(3);
- throw new IOException("Error in reading point labels - " + this.tokenizer);
- }
-
- this.tokenizer.pushBack();
- this.pointLabels = null;
- break;
- }
-
- this.pointLabels.addElement(new String(this.tokenizer.sval));
- }
-
- for(int var9 = 0; var9 < var1 + 1; ++var9) {
- if (this.tokenizer.nextToken() == 39) {
- this.seriesNames.addElement(new String(this.tokenizer.sval));
- } else {
- this.seriesNames.addElement("");
- this.tokenizer.pushBack();
- }
-
- Vector var14 = new Vector();
-
- for(int var12 = 0; var12 < var2; ++var12) {
- var14.addElement(new Double(this.getNextDouble()));
- }
-
- this.data.addElement(var14);
- }
- }
-
- if (this.seriesNames.size() > 0) {
- this.seriesNames.removeElementAt(0);
- }
-
- }
-
- private void readGeneralData(int var1, int var2, boolean var3) throws IOException {
- if (this.tokenizer.nextToken() == -3 && this.tokenizer.sval.equals("labels")) {
- for(int var7 = 0; var7 < var2; ++var7) {
- if (this.tokenizer.nextToken() != 39) {
- this.displayErrorMessage(3);
- throw new IOException("Error in reading point labels - " + this.tokenizer);
- }
-
- this.pointLabels.addElement(this.tokenizer.sval);
- }
- } else {
- this.tokenizer.pushBack();
- this.pointLabels = null;
- }
-
- if (var3) {
- for(int var12 = 0; var12 < var1; ++var12) {
- if (this.tokenizer.nextToken() == 39) {
- this.seriesNames.addElement(new String(this.tokenizer.sval));
- } else {
- this.tokenizer.pushBack();
- }
-
- var2 = (int)this.getNextDouble();
- Double[] var15 = new Double[var2];
- Double[] var8 = new Double[var2];
-
- for(int var13 = 0; var13 < var2; ++var13) {
- var15[var13] = new Double(this.getNextDouble());
- var8[var13] = new Double(this.getNextDouble());
- }
-
- JCVector var9 = new JCVector(var15);
- this.data.addElement(var9);
- var9 = new JCVector(var8);
- this.data.addElement(var9);
- }
-
- } else {
- for(int var5 = 0; var5 < var1; ++var5) {
- if (this.tokenizer.nextToken() == 39) {
- this.seriesNames.addElement(new String(this.tokenizer.sval));
- } else {
- this.tokenizer.pushBack();
- }
-
- var2 = (int)this.getNextDouble();
-
- for(int var14 = 0; var14 < 2; ++var14) {
- Vector var4 = new Vector();
-
- for(int var6 = 0; var6 < var2; ++var6) {
- var4.addElement(new Double(this.getNextDouble()));
- }
-
- this.data.addElement(var4);
- }
- }
-
- }
- }
-
- public int getDataInterpretation() {
- return this.dataInterpretation;
- }
-
- public synchronized Object getDataItem(int var1, int var2) {
- Vector var3 = (Vector)this.data.elementAt(var1);
- return var3.elementAt(var2);
- }
-
- public synchronized Vector getRow(int var1) {
- return (Vector)this.data.elementAt(var1);
- }
-
- public int getNumRows() {
- return this.data.size();
- }
-
- public String[] getPointLabels() {
- if (this.pointLabels == null) {
- return null;
- } else {
- String[] var1 = new String[this.pointLabels.size()];
- this.pointLabels.copyInto(var1);
- return var1;
- }
- }
-
- public String getSeriesName(int var1) {
- String var2;
- try {
- var2 = (String)this.seriesNames.elementAt(var1);
- } catch (Exception var3) {
- var2 = null;
- }
-
- return var2;
- }
-
- public String getSeriesLabel(int var1) {
- String var2;
- try {
- var2 = (String)this.seriesNames.elementAt(var1);
- } catch (Exception var3) {
- var2 = null;
- }
-
- return var2;
- }
-
- public String getName() {
- return this.name;
- }
- }
-