00001 00002 // // 00003 // Builder.java // 00004 // // 00005 // experiment.xml.Builder -- interface for SAX2 state machines // 00006 // Last edited: January 16, 2002 at 12:41 pm // 00007 // // 00008 // (c) Copyright 2002 Rice University. All rights reserved. // 00009 // // 00011 00012 00013 00014 00015 package edu.rice.cs.hpc.data.experiment.xml; 00016 00017 00018 import edu.rice.cs.hpc.data.experiment.xml.Parser; 00019 00020 00021 00022 00024 // CLASS BUILDER // 00026 00034 public abstract class Builder 00035 { 00036 00037 //Constant 00038 static public int PARSER_OK = 0; 00039 static public int PARSER_FAIL = 1; 00040 static public int PARSER_OLDXML = 2; 00041 00043 protected Parser parser; 00044 00046 protected int parseOK; 00047 00049 protected int parseErrorLineNumber; 00050 00051 00052 00053 00055 // INITIALIZATION // 00057 00058 00059 00060 00061 /************************************************************************* 00062 * Creates a ExperimentBuilder. 00063 ************************************************************************/ 00064 00065 public Builder() 00066 { 00067 this.parser = null; // must be set non-null by 'setParser' 00068 00069 this.parseErrorLineNumber = -1; 00070 } 00071 00072 00073 00074 00075 /************************************************************************* 00076 * Sets the parser owning an ExperimentBuilder. 00077 * 00078 * This is necessary because circularity prevents passing the parser 00079 * as a constructor argument. 00080 * 00081 ************************************************************************/ 00082 00083 public void setParser(Parser parser) 00084 { 00085 this.parser = parser; 00086 } 00087 00088 00089 00090 00092 // ACCESS TO RESULTS OF PARSING // 00094 00095 00096 00097 00098 /************************************************************************* 00099 * Returns whether parsing was successful. 00100 ************************************************************************/ 00101 00102 public int getParseOK() 00103 { 00104 return this.parseOK; 00105 } 00106 00107 00108 00109 00110 /************************************************************************* 00111 * Returns the line number of the first parse error in the file. 00112 ************************************************************************/ 00113 00114 public int getParseErrorLineNumber() 00115 { 00116 return this.parseErrorLineNumber; 00117 } 00118 00119 00120 00121 00123 // PARSING SEMANTICS // 00125 00126 00127 00128 00129 /************************************************************************* 00130 * Initializes the build process. 00131 ************************************************************************/ 00132 00133 public abstract void begin(); 00134 00135 00136 00137 00138 /************************************************************************* 00139 * Takes notice of the beginning of an element. 00140 * @throws OldXMLFormatException 00141 ************************************************************************/ 00142 00143 public abstract void beginElement(String element, String[] attributes, String[] values); 00144 00145 00146 00147 00148 /************************************************************************* 00149 * Takes notice of content characters within an element. 00150 ************************************************************************/ 00151 00152 public abstract void content(String s); 00153 00154 00155 00156 00157 /************************************************************************* 00158 * Takes notice of the ending of an element. 00159 ************************************************************************/ 00160 00161 public abstract void endElement(String element); 00162 00163 00164 00165 00166 /************************************************************************* 00167 * Finalizes the build process. 00168 ************************************************************************/ 00169 00170 public abstract void end(); 00171 00172 00173 00174 00175 /************************************************************************* 00176 * Takes notice of a parsing error. 00177 ************************************************************************/ 00178 00179 public void error(int lineNumber) 00180 { 00181 if( this.parseOK == Builder.PARSER_OK) 00182 { 00183 this.parseOK = Builder.PARSER_FAIL; 00184 this.parseErrorLineNumber = lineNumber; 00185 } 00186 } 00187 00188 00189 00190 00191 /************************************************************************* 00192 * Takes notice of a parsing error with an implicit line number. 00193 ************************************************************************/ 00194 00195 public void error() 00196 { 00197 this.error(this.parser.getLineNumber()); 00198 } 00199 00200 00201 00202 00203 /************************************************************************* 00204 * Causes a parse error if a predicate is not true. 00205 ************************************************************************/ 00206 00207 public void Assert(boolean predicate) 00208 { 00209 if( ! predicate ) this.error(); 00210 } 00211 00212 00213 00214 00215 } 00216 00217 00218 00219 00220 00221 00222 00223