home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / JCLASS.BIN / KLG.JAR / jclass / chart / InputStreamDataSource.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-12-05  |  5.5 KB  |  340 lines

  1. package jclass.chart;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.StreamTokenizer;
  6. import java.util.Vector;
  7. import jclass.bwt.JCSerializable;
  8. import jclass.util.JCVector;
  9.  
  10. public class InputStreamDataSource implements Chartable, JCSerializable {
  11.    private StreamTokenizer tokenizer;
  12.    private Vector data = new Vector();
  13.    private int dataInterpretation;
  14.    private String name;
  15.    private Vector seriesNames = new Vector();
  16.    private Vector pointLabels = new Vector();
  17.    private double holeValue;
  18.    private final char QUOTE = '\'';
  19.    static final int PARSE_ERR_DATA_STYLE = 1;
  20.    static final int PARSE_ERR_HOLE_OR_VALUE = 2;
  21.    static final int PARSE_ERR_POINT_LABEL = 3;
  22.  
  23.    public InputStreamDataSource(InputStream var1) throws IOException {
  24.       this.ctor(var1);
  25.    }
  26.  
  27.    protected InputStreamDataSource() {
  28.    }
  29.  
  30.    protected void ctor(InputStream var1) throws IOException {
  31.       this.tokenizer = new StreamTokenizer(var1);
  32.       this.tokenizer.commentChar(35);
  33.       this.tokenizer.quoteChar(39);
  34.       this.tokenizer.slashSlashComments(false);
  35.       this.tokenizer.slashStarComments(false);
  36.       this.tokenizer.eolIsSignificant(false);
  37.       this.tokenizer.lowerCaseMode(true);
  38.       this.tokenizer.parseNumbers();
  39.       this.tokenizer.whitespaceChars(43, 43);
  40.       this.init();
  41.       this.tokenizer = null;
  42.    }
  43.  
  44.    private double getNextDouble() throws IOException {
  45.       this.tokenizer.nextToken();
  46.       if (this.tokenizer.ttype != -2) {
  47.          if (this.tokenizer.ttype == -3) {
  48.             String var4 = this.tokenizer.sval;
  49.             if (var4.equalsIgnoreCase("HOLE")) {
  50.                return Double.MAX_VALUE;
  51.             }
  52.          }
  53.  
  54.          this.displayErrorMessage(2);
  55.          throw new IOException("Error in data file format - " + this.tokenizer);
  56.       } else if (this.holeValue != (double)0.0F && this.tokenizer.nval == this.holeValue) {
  57.          return Double.MAX_VALUE;
  58.       } else {
  59.          double var1 = this.tokenizer.nval;
  60.          this.tokenizer.nextToken();
  61.          if (this.tokenizer.ttype == -3 && this.tokenizer.sval != null && (this.tokenizer.sval.charAt(0) == 'e' || this.tokenizer.sval.charAt(0) == 'E')) {
  62.             if (this.tokenizer.sval.length() == 1) {
  63.                this.tokenizer.nextToken();
  64.                if (this.tokenizer.ttype == -2) {
  65.                   var1 *= Math.pow((double)10.0F, this.tokenizer.nval);
  66.                }
  67.             } else {
  68.                int var3 = Integer.valueOf(this.tokenizer.sval.substring(1));
  69.                var1 *= Math.pow((double)10.0F, (double)var3);
  70.             }
  71.          } else {
  72.             this.tokenizer.pushBack();
  73.          }
  74.  
  75.          return var1;
  76.       }
  77.    }
  78.  
  79.    private void displayErrorMessage(int var1) {
  80.       String var2 = "Error reading data: line " + this.tokenizer.lineno() + ": ";
  81.       switch (var1) {
  82.          case 1:
  83.             var2 = var2 + "Data must start with ARRAY or GENERAL and not ";
  84.             break;
  85.          case 2:
  86.             var2 = var2 + "Expect either a hole or numeric value and not ";
  87.             break;
  88.          case 3:
  89.             var2 = var2 + "Expect a point label and not ";
  90.             break;
  91.          default:
  92.             return;
  93.       }
  94.  
  95.       if (this.tokenizer.ttype == 39) {
  96.          var2 = var2 + "'" + this.tokenizer.sval + "'";
  97.       } else if (this.tokenizer.ttype == -3) {
  98.          var2 = var2 + this.tokenizer.sval;
  99.       } else if (this.tokenizer.ttype == -2) {
  100.          var2 = var2 + this.tokenizer.nval;
  101.       } else {
  102.          var2 = var2 + this.tokenizer.toString();
  103.       }
  104.  
  105.       System.err.println(var2);
  106.    }
  107.  
  108.    private synchronized void init() throws IOException {
  109.       if (this.tokenizer.nextToken() == -3 && (this.tokenizer.sval.equals("array") || this.tokenizer.sval.equals("general"))) {
  110.          if (this.tokenizer.sval.equals("array")) {
  111.             this.dataInterpretation = 0;
  112.          } else {
  113.             this.dataInterpretation = 1;
  114.          }
  115.  
  116.          if (this.tokenizer.nextToken() == 39) {
  117.             this.name = new String(this.tokenizer.sval);
  118.          } else {
  119.             this.tokenizer.pushBack();
  120.          }
  121.  
  122.          int var1 = (int)this.getNextDouble();
  123.          int var2 = (int)this.getNextDouble();
  124.          boolean var3;
  125.          if (this.tokenizer.nextToken() == -3 && this.tokenizer.sval.equals("t")) {
  126.             var3 = true;
  127.          } else {
  128.             var3 = false;
  129.             this.tokenizer.pushBack();
  130.          }
  131.  
  132.          if (this.tokenizer.nextToken() == -3 && this.tokenizer.sval.equals("hole")) {
  133.             this.holeValue = this.getNextDouble();
  134.          } else {
  135.             this.tokenizer.pushBack();
  136.          }
  137.  
  138.          switch (this.dataInterpretation) {
  139.             case 0:
  140.                this.readArrayData(var1, var2, var3);
  141.                return;
  142.             case 1:
  143.                this.readGeneralData(var1, var2, var3);
  144.                return;
  145.             default:
  146.          }
  147.       } else {
  148.          this.displayErrorMessage(1);
  149.          throw new IOException("Data must start with ARRAY or GENERAL");
  150.       }
  151.    }
  152.  
  153.    private void readArrayData(int var1, int var2, boolean var3) throws IOException {
  154.       if (var3) {
  155.          Double[][] var6 = new Double[var1 + 1][var2];
  156.  
  157.          for(int var5 = 0; var5 < var1 + 1; ++var5) {
  158.             if (this.tokenizer.nextToken() != 39) {
  159.                this.tokenizer.pushBack();
  160.                break;
  161.             }
  162.  
  163.             this.seriesNames.addElement(new String(this.tokenizer.sval));
  164.          }
  165.  
  166.          for(int var10 = 0; var10 < var2; ++var10) {
  167.             if (this.tokenizer.nextToken() == 39) {
  168.                this.pointLabels.addElement(new String(this.tokenizer.sval));
  169.             } else {
  170.                this.pointLabels.addElement("");
  171.                this.tokenizer.pushBack();
  172.             }
  173.  
  174.             for(int var4 = 0; var4 < var1 + 1; ++var4) {
  175.                var6[var4][var10] = new Double(this.getNextDouble());
  176.             }
  177.          }
  178.  
  179.          for(int var8 = 0; var8 < var1 + 1; ++var8) {
  180.             JCVector var7 = new JCVector(var6[var8]);
  181.             this.data.addElement(var7);
  182.          }
  183.       } else {
  184.          Object var13 = null;
  185.  
  186.          for(int var11 = 0; var11 < var2; ++var11) {
  187.             if (this.tokenizer.nextToken() != 39) {
  188.                if (var11 != 0) {
  189.                   this.displayErrorMessage(3);
  190.                   throw new IOException("Error in reading point labels - " + this.tokenizer);
  191.                }
  192.  
  193.                this.tokenizer.pushBack();
  194.                this.pointLabels = null;
  195.                break;
  196.             }
  197.  
  198.             this.pointLabels.addElement(new String(this.tokenizer.sval));
  199.          }
  200.  
  201.          for(int var9 = 0; var9 < var1 + 1; ++var9) {
  202.             if (this.tokenizer.nextToken() == 39) {
  203.                this.seriesNames.addElement(new String(this.tokenizer.sval));
  204.             } else {
  205.                this.seriesNames.addElement("");
  206.                this.tokenizer.pushBack();
  207.             }
  208.  
  209.             Vector var14 = new Vector();
  210.  
  211.             for(int var12 = 0; var12 < var2; ++var12) {
  212.                var14.addElement(new Double(this.getNextDouble()));
  213.             }
  214.  
  215.             this.data.addElement(var14);
  216.          }
  217.       }
  218.  
  219.       if (this.seriesNames.size() > 0) {
  220.          this.seriesNames.removeElementAt(0);
  221.       }
  222.  
  223.    }
  224.  
  225.    private void readGeneralData(int var1, int var2, boolean var3) throws IOException {
  226.       if (this.tokenizer.nextToken() == -3 && this.tokenizer.sval.equals("labels")) {
  227.          for(int var7 = 0; var7 < var2; ++var7) {
  228.             if (this.tokenizer.nextToken() != 39) {
  229.                this.displayErrorMessage(3);
  230.                throw new IOException("Error in reading point labels - " + this.tokenizer);
  231.             }
  232.  
  233.             this.pointLabels.addElement(this.tokenizer.sval);
  234.          }
  235.       } else {
  236.          this.tokenizer.pushBack();
  237.          this.pointLabels = null;
  238.       }
  239.  
  240.       if (var3) {
  241.          for(int var12 = 0; var12 < var1; ++var12) {
  242.             if (this.tokenizer.nextToken() == 39) {
  243.                this.seriesNames.addElement(new String(this.tokenizer.sval));
  244.             } else {
  245.                this.tokenizer.pushBack();
  246.             }
  247.  
  248.             var2 = (int)this.getNextDouble();
  249.             Double[] var15 = new Double[var2];
  250.             Double[] var8 = new Double[var2];
  251.  
  252.             for(int var13 = 0; var13 < var2; ++var13) {
  253.                var15[var13] = new Double(this.getNextDouble());
  254.                var8[var13] = new Double(this.getNextDouble());
  255.             }
  256.  
  257.             JCVector var9 = new JCVector(var15);
  258.             this.data.addElement(var9);
  259.             var9 = new JCVector(var8);
  260.             this.data.addElement(var9);
  261.          }
  262.  
  263.       } else {
  264.          for(int var5 = 0; var5 < var1; ++var5) {
  265.             if (this.tokenizer.nextToken() == 39) {
  266.                this.seriesNames.addElement(new String(this.tokenizer.sval));
  267.             } else {
  268.                this.tokenizer.pushBack();
  269.             }
  270.  
  271.             var2 = (int)this.getNextDouble();
  272.  
  273.             for(int var14 = 0; var14 < 2; ++var14) {
  274.                Vector var4 = new Vector();
  275.  
  276.                for(int var6 = 0; var6 < var2; ++var6) {
  277.                   var4.addElement(new Double(this.getNextDouble()));
  278.                }
  279.  
  280.                this.data.addElement(var4);
  281.             }
  282.          }
  283.  
  284.       }
  285.    }
  286.  
  287.    public int getDataInterpretation() {
  288.       return this.dataInterpretation;
  289.    }
  290.  
  291.    public synchronized Object getDataItem(int var1, int var2) {
  292.       Vector var3 = (Vector)this.data.elementAt(var1);
  293.       return var3.elementAt(var2);
  294.    }
  295.  
  296.    public synchronized Vector getRow(int var1) {
  297.       return (Vector)this.data.elementAt(var1);
  298.    }
  299.  
  300.    public int getNumRows() {
  301.       return this.data.size();
  302.    }
  303.  
  304.    public String[] getPointLabels() {
  305.       if (this.pointLabels == null) {
  306.          return null;
  307.       } else {
  308.          String[] var1 = new String[this.pointLabels.size()];
  309.          this.pointLabels.copyInto(var1);
  310.          return var1;
  311.       }
  312.    }
  313.  
  314.    public String getSeriesName(int var1) {
  315.       String var2;
  316.       try {
  317.          var2 = (String)this.seriesNames.elementAt(var1);
  318.       } catch (Exception var3) {
  319.          var2 = null;
  320.       }
  321.  
  322.       return var2;
  323.    }
  324.  
  325.    public String getSeriesLabel(int var1) {
  326.       String var2;
  327.       try {
  328.          var2 = (String)this.seriesNames.elementAt(var1);
  329.       } catch (Exception var3) {
  330.          var2 = null;
  331.       }
  332.  
  333.       return var2;
  334.    }
  335.  
  336.    public String getName() {
  337.       return this.name;
  338.    }
  339. }
  340.