1.1 --- a/src/java/isac/util/parser/FormalizationDigest.java Mon Aug 30 18:57:59 2004 +0200
1.2 +++ b/src/java/isac/util/parser/FormalizationDigest.java Mon Aug 30 18:57:59 2004 +0200
1.3 @@ -1,12 +1,8 @@
1.4 /*
1.5 * Created on Nov 24, 2003
1.6 - *
1.7 - * To change the template for this generated file go to
1.8 - * Window>Preferences>Java>Code Generation>Code and Comments
1.9 */
1.10 package isac.util.parser;
1.11
1.12 -import isac.util.InformationProcessor;
1.13 import isac.util.Formalization;
1.14 import isac.util.Message;
1.15 import isac.util.ResponseWrapper;
1.16 @@ -33,301 +29,300 @@
1.17 import org.xml.sax.SAXParseException;
1.18
1.19 /**
1.20 - * @author gismo
1.21 - *
1.22 - * To change the template for this generated type comment go to
1.23 - * Window>Preferences>Java>Code Generation>Code and Comments
1.24 + * @author Andreas Griesmayer
1.25 */
1.26 public class FormalizationDigest {
1.27
1.28 -private Digester digester;
1.29 - private String dtdPath;
1.30 + private Digester digester;
1.31
1.32 - class BridgeErrorHandler implements ErrorHandler {
1.33 - public void error(SAXParseException e) {
1.34 - System.out.println("---xml-error " + e);
1.35 - }
1.36 - public void fatalError(SAXParseException e) {
1.37 - System.out.println("---xml-fatalerror " + e);
1.38 - }
1.39 - public void warning(SAXParseException e) {
1.40 - System.out.println("---xml-warning " + e);
1.41 - }
1.42 - }
1.43 + private String dtdPath;
1.44
1.45 - // auxillary class for feeding the dtd
1.46 - class BridgeEntityResolver implements EntityResolver {
1.47 - String dtd;
1.48 - public BridgeEntityResolver(String dtd) {
1.49 - this.dtd = dtd;
1.50 - }
1.51 - public InputSource resolveEntity(String publicId, String systemId)
1.52 - throws SAXException, IOException {
1.53 - if ((systemId != null) && systemId.endsWith("isac.dtd")) {
1.54 - //System.out.println("------->inside entity resolv");
1.55 - return new InputSource(new StringReader(dtd));
1.56 - //new StringReader("<!ELEMENT dummy EMPTY>"));
1.57 - } else {
1.58 - return null;
1.59 - }
1.60 - }
1.61 - }
1.62 + class BridgeErrorHandler implements ErrorHandler {
1.63 + public void error(SAXParseException e) {
1.64 + System.err.println("---xml-error " + e);
1.65 + }
1.66
1.67 - /**
1.68 - * Constructor: create a new XMLParserDigest object
1.69 - * @param dtdPath Path to the DTD-File (Document Type Description)
1.70 - */
1.71 - //public FormalizationDigest(String dtdPath) {
1.72 - public FormalizationDigest(){
1.73 - digester = new Digester();
1.74 -// digester.setErrorHandler(new BridgeErrorHandler());
1.75 - /*this.dtdPath = dtdPath;
1.76 - //dtd-File --> String (faster validating)
1.77 - StringBuffer sb;
1.78 - try {
1.79 - BufferedReader br = new BufferedReader(new FileReader(dtdPath));
1.80 - sb = new StringBuffer();
1.81 - while (br.ready()) {
1.82 - sb.append(br.readLine() + "\n");
1.83 - }
1.84 - // Set dtd for parser validation
1.85 - digester.setEntityResolver(new BridgeEntityResolver(sb.toString()));
1.86 - } catch (FileNotFoundException e) {
1.87 - e.printStackTrace();
1.88 - } catch (IOException e) {
1.89 - e.printStackTrace();
1.90 - }
1.91 -*/
1.92 + public void fatalError(SAXParseException e) {
1.93 + System.err.println("---xml-fatalerror " + e);
1.94 + }
1.95
1.96 - // Rules for the digester to create a formalization
1.97 - digester.addObjectCreate("EXAMPLE/FORMALIZATION", Formalization.class);
1.98 - digester.addObjectCreate("*/FORMALIZATION/VARIANT", Variant.class);
1.99 - digester.addCallMethod("*/TERMLIST/MATHML/ISA", "addNewIsaString",0);
1.100 - digester.addObjectCreate("*/VARIANT/SPECIFICATION", Specification.class);
1.101 - digester.addObjectCreate("*/SPECIFICATION/THEORY", CalcHeadSimpleID.class);
1.102 - digester.addCallMethod("*/SPECIFICATION/THEORY", "setID", 0);
1.103 - digester.addSetNext("*/SPECIFICATION/THEORY", "setTheory");
1.104 -
1.105 - digester.addObjectCreate("*/SPECIFICATION/PROBLEM", CalcHeadCompoundID.class);
1.106 - digester.addCallMethod("*/SPECIFICATION/PROBLEM/KEY/ID", "addString", 0);
1.107 - digester.addSetNext("*/SPECIFICATION/PROBLEM", "setProblem");
1.108 + public void warning(SAXParseException e) {
1.109 + System.err.println("---xml-warning " + e);
1.110 + }
1.111 + }
1.112
1.113 - digester.addObjectCreate("*/SPECIFICATION/METHOD", CalcHeadCompoundID.class);
1.114 - digester.addCallMethod("*/SPECIFICATION/METHOD/KEY/ID", "addString", 0);
1.115 - digester.addSetNext("*/SPECIFICATION/METHOD", "setMethod");
1.116 + // auxillary class for feeding the dtd
1.117 + class BridgeEntityResolver implements EntityResolver {
1.118 + String dtd;
1.119
1.120 - digester.addSetNext("*/VARIANT/SPECIFICATION", "setSpecification");
1.121 - digester.addSetNext("*/FORMALIZATION/VARIANT", "addNewVariant");
1.122 -
1.123 - // Rules for the digester to create Objects and fill them from XML-Files
1.124 - digester.addObjectCreate("ISAC", ResponseWrapper.class);
1.125 - digester.addObjectCreate("*/CALCID", CalcHeadSimpleID.class);
1.126 - digester.addCallMethod("*/CALCID", "setID", 0);
1.127 - digester.addSetRoot("*/CALCID", "setCalcID");
1.128 + public BridgeEntityResolver(String dtd) {
1.129 + this.dtd = dtd;
1.130 + }
1.131
1.132 - // Rules for parsing Position
1.133 - digester.addObjectCreate("*/POSITION", Position.class);
1.134 - digester.addCallMethod("*/POSITION/INTLIST/INT", "addInt", 0);
1.135 - digester.addCallMethod("*/POSITION/POS", "setKind", 0);
1.136 - digester.addSetNext("*/POSITION", "setPosition");
1.137 + public InputSource resolveEntity(String publicId, String systemId)
1.138 + throws SAXException, IOException {
1.139 + if ((systemId != null) && systemId.endsWith("isac.dtd")) {
1.140 + //System.out.println("------->inside entity resolv");
1.141 + return new InputSource(new StringReader(dtd));
1.142 + //new StringReader("<!ELEMENT dummy EMPTY>"));
1.143 + } else {
1.144 + return null;
1.145 + }
1.146 + }
1.147 + }
1.148
1.149 - // Rules for parsing Formula
1.150 - digester.addObjectCreate("*/REFFORMULA/FORMULA", Formula.class);
1.151 - digester.addCallMethod("*/REFFORMULA/FORMULA/MATHML/ISA", "setText", 0);
1.152 - digester.addSetNext("*/REFFORMULA/FORMULA", "setResponse");
1.153 + /**
1.154 + * Constructor: create a new XMLParserDigest object
1.155 + *
1.156 + * @param dtdPath
1.157 + * Path to the DTD-File (Document Type Description)
1.158 + */
1.159 + //public FormalizationDigest(String dtdPath) {
1.160 + public FormalizationDigest() {
1.161 + digester = new Digester();
1.162 + // digester.setErrorHandler(new BridgeErrorHandler());
1.163 + /*
1.164 + * this.dtdPath = dtdPath; //dtd-File --> String (faster validating)
1.165 + * StringBuffer sb; try { BufferedReader br = new BufferedReader(new
1.166 + * FileReader(dtdPath)); sb = new StringBuffer(); while (br.ready()) {
1.167 + * sb.append(br.readLine() + "\n"); } // Set dtd for parser validation
1.168 + * digester.setEntityResolver(new BridgeEntityResolver(sb.toString())); }
1.169 + * catch (FileNotFoundException e) { e.printStackTrace(); } catch
1.170 + * (IOException e) { e.printStackTrace(); }
1.171 + */
1.172
1.173 - // Rules for parsing CalcHead
1.174 - digester.addObjectCreate("*/CALCHEAD", CalcHead.class);
1.175 - digester.addCallMethod("*/CALCHEAD/HEAD", "setHead", 0);
1.176 - digester.addCallMethod("*/CALCHEAD/BELONGSTO", "setBelongsTo", 0);
1.177 - addItemList(digester, "Given");
1.178 - addItemList(digester, "Where");
1.179 - addItemList(digester, "Find");
1.180 - addItemList(digester, "Relate");
1.181 - digester.addObjectCreate("*/CALCHEAD/SPECIFICATION", Specification.class);
1.182 - digester.addObjectCreate("*/CALCHEAD/SPECIFICATION/THEORYID", CalcHeadSimpleID.class);
1.183 - digester.addCallMethod("*/CALCHEAD/SPECIFICATION/THEORYID", "setID", 0);
1.184 - digester.addSetNext("*/CALCHEAD/SPECIFICATION/THEORYID", "setTheory");
1.185 - digester.addObjectCreate("*/CALCHEAD/SPECIFICATION/PROBLEMID", CalcHeadCompoundID.class);
1.186 - digester.addCallMethod("*/CALCHEAD/SPECIFICATION/PROBLEMID/STRINGLIST/STRING", "addString", 0);
1.187 - digester.addSetNext("*/CALCHEAD/SPECIFICATION/PROBLEMID", "setProblem");
1.188 - digester.addObjectCreate("*/CALCHEAD/SPECIFICATION/METHODID", CalcHeadCompoundID.class);
1.189 - digester.addCallMethod("*/CALCHEAD/SPECIFICATION/METHODID/STRINGLIST/STRING", "addString", 0);
1.190 - digester.addSetNext("*/CALCHEAD/SPECIFICATION/METHODID", "setMethod");
1.191 - digester.addSetNext("*/CALCHEAD/SPECIFICATION", "setSpecification");
1.192 -
1.193 - digester.addSetNext("*/CALCHEAD", "setResponse");
1.194 + // Rules for the digester to create a formalization
1.195 + digester.addObjectCreate("EXAMPLE/FORMALIZATION", Formalization.class);
1.196 + digester.addObjectCreate("*/FORMALIZATION/VARIANT", Variant.class);
1.197 + digester.addCallMethod("*/TERMLIST/MATHML/ISA", "addNewIsaString", 0);
1.198 + digester
1.199 + .addObjectCreate("*/VARIANT/SPECIFICATION", Specification.class);
1.200 + digester.addObjectCreate("*/SPECIFICATION/THEORY",
1.201 + CalcHeadSimpleID.class);
1.202 + digester.addCallMethod("*/SPECIFICATION/THEORY", "setID", 0);
1.203 + digester.addSetNext("*/SPECIFICATION/THEORY", "setTheory");
1.204
1.205 - // Rules for parsing various Tactic Objects
1.206 - // Rules for parsing SimpleTactic
1.207 - digester.addObjectCreate("*/SIMPLETACTIC", SimpleTactic.class);
1.208 - digester.addCallMethod("*/SIMPLETACTIC/MATHML/ISA", "setArgument", 0);
1.209 - digester.addSetProperties("*/SIMPLETACTIC", "name", "name");
1.210 - digester.addSetNext("*/SIMPLETACTIC", "setResponse");
1.211 + digester.addObjectCreate("*/SPECIFICATION/PROBLEM",
1.212 + CalcHeadCompoundID.class);
1.213 + digester
1.214 + .addCallMethod("*/SPECIFICATION/PROBLEM/KEY/ID", "addString", 0);
1.215 + digester.addSetNext("*/SPECIFICATION/PROBLEM", "setProblem");
1.216
1.217 - // Rules for parsing KeyListTactic
1.218 - digester.addObjectCreate("*/STRINGLISTTACTIC", StringListTactic.class);
1.219 - digester.addCallMethod("*/STRINGLISTTACTIC/STRINGLIST/STRING", "addKey", 0);
1.220 - digester.addSetProperties("*/STRINGLISTTACTIC", "name", "name");
1.221 - digester.addSetNext("*/STRINGLISTTACTIC", "setResponse");
1.222 + digester.addObjectCreate("*/SPECIFICATION/METHOD",
1.223 + CalcHeadCompoundID.class);
1.224 + digester.addCallMethod("*/SPECIFICATION/METHOD/KEY/ID", "addString", 0);
1.225 + digester.addSetNext("*/SPECIFICATION/METHOD", "setMethod");
1.226
1.227 - // Rules for parsing RewriteSetTactic
1.228 - digester.addObjectCreate("*/REWRITESETTACTIC", RewriteSet.class);
1.229 - digester.addCallMethod("*/REWRITESETTACTIC/RULESET", "setRuleSet", 0);
1.230 - digester.addSetProperties("*/REWRITESETTACTIC", "name", "name");
1.231 - digester.addSetNext("*/REWRITESETTACTIC", "setResponse");
1.232 + digester.addSetNext("*/VARIANT/SPECIFICATION", "setSpecification");
1.233 + digester.addSetNext("*/FORMALIZATION/VARIANT", "addNewVariant");
1.234
1.235 - // Rules for parsing RewriteSetInstTactic
1.236 - digester.addObjectCreate("*/REWRITESETINSTTACTIC", RewriteSetInst.class);
1.237 - digester.addCallMethod("*/REWRITESETINSTTACTIC/RULESET", "setRuleSet", 0);
1.238 - digester.addCallMethod(
1.239 - "*/REWRITESETINSTTACTIC/SUBSTITUTION/PAIR/VARIABLE/MATHML/ISA",
1.240 - "setVariable",
1.241 - 0);
1.242 - digester.addCallMethod(
1.243 - "*/REWRITESETINSTTACTIC/SUBSTITUTION/PAIR/VALUE/MATHML/ISA",
1.244 - "setValue",
1.245 - 0);
1.246 - digester.addSetProperties("*/REWRITESETINSTTACTIC", "name", "name");
1.247 - digester.addSetNext("*/REWRITESETINSTTACTIC", "setResponse");
1.248 -
1.249 - // Rules for parsing SubProblemTactic
1.250 - digester.addObjectCreate("*/SUBPROBLEMTACTIC", SubProblemTactic.class);
1.251 - digester.addCallMethod("*/SUBPROBLEMTACTIC/THEORY", "setTheoryID", 0);
1.252 - digester.addCallMethod("*/SUBPROBLEMTACTIC/PROBLEM/STRINGLIST/STRING", "addProblemString", 0);
1.253 - digester.addSetProperties("*/SUBPROBLEMTACTIC", "name", "name");
1.254 - digester.addSetNext("*/SUBPROBLEMTACTIC", "setResponse");
1.255 + // Rules for the digester to create Objects and fill them from XML-Files
1.256 + digester.addObjectCreate("ISAC", ResponseWrapper.class);
1.257 + digester.addObjectCreate("*/CALCID", CalcHeadSimpleID.class);
1.258 + digester.addCallMethod("*/CALCID", "setID", 0);
1.259 + digester.addSetRoot("*/CALCID", "setCalcID");
1.260
1.261 - // Rules for parsing CalcIterator move message
1.262 - digester.addObjectCreate("*/CALCITERATOR", Message.class);
1.263 - digester.addCallMethod("*/CALCITERATOR/ERROR", "setError", 0);
1.264 - digester.addCallMethod("*/CALCITERATOR/OK", "setOK", 0);
1.265 - digester.addSetNext("*/CALCITERATOR", "setResponse");
1.266 + // Rules for parsing Position
1.267 + digester.addObjectCreate("*/POSITION", Position.class);
1.268 + digester.addCallMethod("*/POSITION/INTLIST/INT", "addInt", 0);
1.269 + digester.addCallMethod("*/POSITION/POS", "setKind", 0);
1.270 + digester.addSetNext("*/POSITION", "setPosition");
1.271
1.272 - // Rules for parsing CalcIterator constructor message
1.273 - digester.addObjectCreate("*/ADDUSER", CalcHeadSimpleID.class);
1.274 - digester.addCallMethod("*/ADDUSER/USERID", "setID", 0);
1.275 - digester.addSetNext("*/ADDUSER", "setResponse");
1.276 - }
1.277 + // Rules for parsing Formula
1.278 + digester.addObjectCreate("*/REFFORMULA/FORMULA", Formula.class);
1.279 + digester.addCallMethod("*/REFFORMULA/FORMULA/MATHML/ISA", "setText", 0);
1.280 + digester.addSetNext("*/REFFORMULA/FORMULA", "setResponse");
1.281
1.282 - private void addItemList(Digester digester, String modPart) {
1.283 - String modPartUp = modPart.toUpperCase();
1.284 - // Rules for parsing ItemLists in the model part of a CalcHead: Given Find Where Relate
1.285 - digester.addObjectCreate("*/CALCHEAD/MODEL/" + modPartUp, CalcHeadItemList.class);
1.286 - digester.addObjectCreate("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM", CalcHeadItem.class);
1.287 - digester.addSetProperties("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM", "status", "itemStatus");
1.288 - digester.addCallMethod("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM/MATHML/ISA", "setText", 0);
1.289 - digester.addSetNext("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM", "addItem");
1.290 - digester.addSetNext("*/CALCHEAD/MODEL/" + modPartUp, "set" + modPart);
1.291 - }
1.292 + // Rules for parsing CalcHead
1.293 + digester.addObjectCreate("*/CALCHEAD", CalcHead.class);
1.294 + digester.addCallMethod("*/CALCHEAD/HEAD", "setHead", 0);
1.295 + digester.addCallMethod("*/CALCHEAD/BELONGSTO", "setBelongsTo", 0);
1.296 + addItemList(digester, "Given");
1.297 + addItemList(digester, "Where");
1.298 + addItemList(digester, "Find");
1.299 + addItemList(digester, "Relate");
1.300 + digester.addObjectCreate("*/CALCHEAD/SPECIFICATION",
1.301 + Specification.class);
1.302 + digester.addObjectCreate("*/CALCHEAD/SPECIFICATION/THEORYID",
1.303 + CalcHeadSimpleID.class);
1.304 + digester.addCallMethod("*/CALCHEAD/SPECIFICATION/THEORYID", "setID", 0);
1.305 + digester.addSetNext("*/CALCHEAD/SPECIFICATION/THEORYID", "setTheory");
1.306 + digester.addObjectCreate("*/CALCHEAD/SPECIFICATION/PROBLEMID",
1.307 + CalcHeadCompoundID.class);
1.308 + digester.addCallMethod(
1.309 + "*/CALCHEAD/SPECIFICATION/PROBLEMID/STRINGLIST/STRING",
1.310 + "addString", 0);
1.311 + digester.addSetNext("*/CALCHEAD/SPECIFICATION/PROBLEMID", "setProblem");
1.312 + digester.addObjectCreate("*/CALCHEAD/SPECIFICATION/METHODID",
1.313 + CalcHeadCompoundID.class);
1.314 + digester.addCallMethod(
1.315 + "*/CALCHEAD/SPECIFICATION/METHODID/STRINGLIST/STRING",
1.316 + "addString", 0);
1.317 + digester.addSetNext("*/CALCHEAD/SPECIFICATION/METHODID", "setMethod");
1.318 + digester.addSetNext("*/CALCHEAD/SPECIFICATION", "setSpecification");
1.319
1.320 - /**
1.321 - * Set whether or not using the DTD for validating
1.322 - * @param validating
1.323 - * <UL>
1.324 - * <LI>true: XML is tested for validity against DTD<LI>
1.325 - * <LI>false: XML is only tested for well-formed-ness<LI>
1.326 - * </UL>
1.327 - */
1.328 - public void setValidating(boolean validating) {
1.329 - digester.setValidating(validating);
1.330 - }
1.331 - /**
1.332 - * Parse an XML string to Java Object(s)
1.333 - * @param xmlString the string containing the XML content
1.334 - * @return ResponseWrapper containing the CalcID and the parsed Object
1.335 - */
1.336 - public Formalization parseFormalization(String xmlString) {
1.337 - Object o = null;
1.338 - // xmlString =
1.339 -// "<?xml version=\"1.0\"?>"//<!DOCTYPE ISAC SYSTEM \""
1.340 - //+ dtdPath
1.341 - //+ "\">"
1.342 -// +"<ISAC>"
1.343 -// xmlString
1.344 -// + "</ISAC>";
1.345 -//;
1.346 - encodeEntities(xmlString);
1.347 - try {
1.348 - digester.clear();
1.349 - //System.out.println("root === " + digester.getRoot());
1.350 - o = digester.parse(new InputSource(new StringReader(xmlString)));
1.351 - //System.out.println("--------------->" + xmlString);
1.352 - } catch (IOException e) {
1.353 - e.printStackTrace();
1.354 - } catch (SAXException e) {
1.355 - e.printStackTrace();
1.356 - }
1.357 - Formalization form = (Formalization)o;
1.358 - //System.out.println(wrapper.getCalcID().toSMLString());
1.359 - return form;
1.360 - }
1.361 - /**
1.362 - * Parse an XML string to Java Object(s)
1.363 - * @param xmlString the string containing the XML content
1.364 - * @return ResponseWrapper containing the CalcID and the parsed Object
1.365 - */
1.366 - public ResponseWrapper parse(String xmlString) {
1.367 - Object o = null;
1.368 - xmlString =
1.369 - "<?xml version=\"1.0\"?>"//<!DOCTYPE ISAC SYSTEM \""
1.370 - //+ dtdPath
1.371 - //+ "\">"
1.372 // +"<ISAC>"
1.373 - + xmlString
1.374 -// + "</ISAC>";
1.375 -;
1.376 - encodeEntities(xmlString);
1.377 - try {
1.378 - digester.clear();
1.379 - //System.out.println("root === " + digester.getRoot());
1.380 - o = digester.parse(new InputSource(new StringReader(xmlString)));
1.381 - //System.out.println("--------------->" + xmlString);
1.382 - } catch (IOException e) {
1.383 - e.printStackTrace();
1.384 - } catch (SAXException e) {
1.385 - e.printStackTrace();
1.386 - }
1.387 - ResponseWrapper wrapper = (ResponseWrapper)o;
1.388 - //System.out.println(wrapper.getCalcID().toSMLString());
1.389 - return wrapper;
1.390 - }
1.391 -
1.392 - public static void encodeEntities(String xmlString) {
1.393 - xmlString = xmlString.replaceAll(" & ", "&");
1.394 - xmlString = xmlString.replaceAll(" > ", ">");
1.395 - xmlString = xmlString.replaceAll(" < ", "<");
1.396 - }
1.397 + digester.addSetNext("*/CALCHEAD", "setResponse");
1.398
1.399 - public static void decodeEntities(String xmlString) {
1.400 - xmlString = xmlString.replaceAll("&", " & ");
1.401 - xmlString = xmlString.replaceAll(">", " > ");
1.402 - xmlString = xmlString.replaceAll("<", " < ");
1.403 - }
1.404 + // Rules for parsing various Tactic Objects
1.405 + // Rules for parsing SimpleTactic
1.406 + digester.addObjectCreate("*/SIMPLETACTIC", SimpleTactic.class);
1.407 + digester.addCallMethod("*/SIMPLETACTIC/MATHML/ISA", "setArgument", 0);
1.408 + digester.addSetProperties("*/SIMPLETACTIC", "name", "name");
1.409 + digester.addSetNext("*/SIMPLETACTIC", "setResponse");
1.410
1.411 - public static void main(String[] args) {
1.412 - FormalizationDigest d =
1.413 - new FormalizationDigest();//"/netshares/studenthomes/rgradisc/workspace/isac/isac/util/isac.dtd");
1.414 - System.out.println(
1.415 - d.parse(
1.416 - "<ISAC><NEXTTAC><CALCID> 1 </CALCID><REWRITESETTACTIC name=\"Rewrite_Set\"><RULESET> Test_simplify</RULESET></REWRITESETTACTIC></NEXTTAC></ISAC>"));
1.417 - System.out.println(
1.418 - d.parse(
1.419 - "<ISAC><NEXTTAC><CALCID> 1 </CALCID><SIMPLETACTIC name=\"Add_Given\"><MATHML><ISA>equality (1 + -1 * 2 + x = 0)</ISA></MATHML></SIMPLETACTIC></NEXTTAC></ISAC>"));
1.420 - System.out.println(d.parse("<ISAC></ISAC>"));
1.421 + // Rules for parsing KeyListTactic
1.422 + digester.addObjectCreate("*/STRINGLISTTACTIC", StringListTactic.class);
1.423 + digester.addCallMethod("*/STRINGLISTTACTIC/STRINGLIST/STRING",
1.424 + "addKey", 0);
1.425 + digester.addSetProperties("*/STRINGLISTTACTIC", "name", "name");
1.426 + digester.addSetNext("*/STRINGLISTTACTIC", "setResponse");
1.427
1.428 - System.out.println("parse example");
1.429 - System.out.println(d.parseFormalization("<EXAMPLE><FORMALIZATION> </FORMALIZATION></EXAMPLE> "));
1.430 - System.out.println(d.parseFormalization("<EXAMPLE><FORMALIZATION> <VARIANT> <TERMLIST> <MATHML> <ISA> \"equality (1+-1*2+x=0)\" </ISA> </MATHML> "
1.431 - +"<MATHML> <ISA> \"solveFor x\" </ISA> </MATHML> "
1.432 - +" <MATHML> <ISA> \"solutions L\" </ISA> </MATHML> </TERMLIST> "
1.433 - +" <SPECIFICATION> <THEORY> \"Test.thy\" </THEORY> "
1.434 - +" <PROBLEM> <KEY> <ID> \"linear\" </ID> <ID> \"univariate\" </ID> <ID> \"equation\" </ID> <ID> \"test\" </ID> </KEY> </PROBLEM> "
1.435 - +" <METHOD> <KEY> <ID> \"Test\" </ID> <ID> \"solve_linear\" </ID> </KEY> </METHOD> "
1.436 - +"</SPECIFICATION> <HIDE> </HIDE> <DETAIL> </DETAIL> </VARIANT> </FORMALIZATION></EXAMPLE> "));
1.437 - System.out.println("done");
1.438 - String session = InformationProcessor.login("gismo", "gismo");
1.439 -// System.out.println(InformationProcessor.loadXML(session, "exp", "exp_IsacCore_Tests_1a.xml"));
1.440 - System.out.println(d.parseFormalization(InformationProcessor.loadXML(session, "exp", "exp_IsacCore_Tests_1a.xml")));
1.441 -
1.442 - };
1.443 -}
1.444 + // Rules for parsing RewriteSetTactic
1.445 + digester.addObjectCreate("*/REWRITESETTACTIC", RewriteSet.class);
1.446 + digester.addCallMethod("*/REWRITESETTACTIC/RULESET", "setRuleSet", 0);
1.447 + digester.addSetProperties("*/REWRITESETTACTIC", "name", "name");
1.448 + digester.addSetNext("*/REWRITESETTACTIC", "setResponse");
1.449 +
1.450 + // Rules for parsing RewriteSetInstTactic
1.451 + digester
1.452 + .addObjectCreate("*/REWRITESETINSTTACTIC", RewriteSetInst.class);
1.453 + digester.addCallMethod("*/REWRITESETINSTTACTIC/RULESET", "setRuleSet",
1.454 + 0);
1.455 + digester.addCallMethod(
1.456 + "*/REWRITESETINSTTACTIC/SUBSTITUTION/PAIR/VARIABLE/MATHML/ISA",
1.457 + "setVariable", 0);
1.458 + digester.addCallMethod(
1.459 + "*/REWRITESETINSTTACTIC/SUBSTITUTION/PAIR/VALUE/MATHML/ISA",
1.460 + "setValue", 0);
1.461 + digester.addSetProperties("*/REWRITESETINSTTACTIC", "name", "name");
1.462 + digester.addSetNext("*/REWRITESETINSTTACTIC", "setResponse");
1.463 +
1.464 + // Rules for parsing SubProblemTactic
1.465 + digester.addObjectCreate("*/SUBPROBLEMTACTIC", SubProblemTactic.class);
1.466 + digester.addCallMethod("*/SUBPROBLEMTACTIC/THEORY", "setTheoryID", 0);
1.467 + digester.addCallMethod("*/SUBPROBLEMTACTIC/PROBLEM/STRINGLIST/STRING",
1.468 + "addProblemString", 0);
1.469 + digester.addSetProperties("*/SUBPROBLEMTACTIC", "name", "name");
1.470 + digester.addSetNext("*/SUBPROBLEMTACTIC", "setResponse");
1.471 +
1.472 + // Rules for parsing CalcIterator move message
1.473 + digester.addObjectCreate("*/CALCITERATOR", Message.class);
1.474 + digester.addCallMethod("*/CALCITERATOR/ERROR", "setError", 0);
1.475 + digester.addCallMethod("*/CALCITERATOR/OK", "setOK", 0);
1.476 + digester.addSetNext("*/CALCITERATOR", "setResponse");
1.477 +
1.478 + // Rules for parsing CalcIterator constructor message
1.479 + digester.addObjectCreate("*/ADDUSER", CalcHeadSimpleID.class);
1.480 + digester.addCallMethod("*/ADDUSER/USERID", "setID", 0);
1.481 + digester.addSetNext("*/ADDUSER", "setResponse");
1.482 + }
1.483 +
1.484 + private void addItemList(Digester digester, String modPart) {
1.485 + String modPartUp = modPart.toUpperCase();
1.486 + // Rules for parsing ItemLists in the model part of a CalcHead: Given
1.487 + // Find Where Relate
1.488 + digester.addObjectCreate("*/CALCHEAD/MODEL/" + modPartUp,
1.489 + CalcHeadItemList.class);
1.490 + digester.addObjectCreate("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM",
1.491 + CalcHeadItem.class);
1.492 + digester.addSetProperties("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM",
1.493 + "status", "itemStatus");
1.494 + digester.addCallMethod("*/CALCHEAD/MODEL/" + modPartUp
1.495 + + "/ITEM/MATHML/ISA", "setText", 0);
1.496 + digester.addSetNext("*/CALCHEAD/MODEL/" + modPartUp + "/ITEM",
1.497 + "addItem");
1.498 + digester.addSetNext("*/CALCHEAD/MODEL/" + modPartUp, "set" + modPart);
1.499 + }
1.500 +
1.501 + /**
1.502 + * Set whether or not using the DTD for validating
1.503 + *
1.504 + * @param validating
1.505 + * <UL>
1.506 + * <LI>true: XML is tested for validity against DTD
1.507 + * <LI>
1.508 + * <LI>false: XML is only tested for well-formed-ness
1.509 + * <LI>
1.510 + * </UL>
1.511 + */
1.512 + public void setValidating(boolean validating) {
1.513 + digester.setValidating(validating);
1.514 + }
1.515 +
1.516 + /**
1.517 + * Parse an XML string to Java Object(s)
1.518 + *
1.519 + * @param xmlString
1.520 + * the string containing the XML content
1.521 + * @return ResponseWrapper containing the CalcID and the parsed Object
1.522 + */
1.523 + public Formalization parseFormalization(String xmlString) {
1.524 + Object o = null;
1.525 + // xmlString =
1.526 + // "<?xml version=\"1.0\"?>"//<!DOCTYPE ISAC SYSTEM \""
1.527 + //+ dtdPath
1.528 + //+ "\">"
1.529 + // +"<ISAC>"
1.530 + // xmlString
1.531 + // + "</ISAC>";
1.532 + //;
1.533 + encodeEntities(xmlString);
1.534 + try {
1.535 + digester.clear();
1.536 + //System.out.println("root === " + digester.getRoot());
1.537 + o = digester.parse(new InputSource(new StringReader(xmlString)));
1.538 + //System.out.println("--------------->" + xmlString);
1.539 + } catch (IOException e) {
1.540 + e.printStackTrace();
1.541 + } catch (SAXException e) {
1.542 + e.printStackTrace();
1.543 + }
1.544 + Formalization form = (Formalization) o;
1.545 + //System.out.println(wrapper.getCalcID().toSMLString());
1.546 + return form;
1.547 + }
1.548 +
1.549 + /**
1.550 + * Parse an XML string to Java Object(s)
1.551 + *
1.552 + * @param xmlString
1.553 + * the string containing the XML content
1.554 + * @return ResponseWrapper containing the CalcID and the parsed Object
1.555 + */
1.556 + public ResponseWrapper parse(String xmlString) {
1.557 + Object o = null;
1.558 + xmlString = "<?xml version=\"1.0\"?>"//<!DOCTYPE ISAC SYSTEM \""
1.559 + //+ dtdPath
1.560 + //+ "\">"
1.561 + // +"<ISAC>"
1.562 + + xmlString
1.563 + // + "</ISAC>";
1.564 + ;
1.565 + encodeEntities(xmlString);
1.566 + try {
1.567 + digester.clear();
1.568 + //System.out.println("root === " + digester.getRoot());
1.569 + o = digester.parse(new InputSource(new StringReader(xmlString)));
1.570 + //System.out.println("--------------->" + xmlString);
1.571 + } catch (IOException e) {
1.572 + e.printStackTrace();
1.573 + } catch (SAXException e) {
1.574 + e.printStackTrace();
1.575 + }
1.576 + ResponseWrapper wrapper = (ResponseWrapper) o;
1.577 + //System.out.println(wrapper.getCalcID().toSMLString());
1.578 + return wrapper;
1.579 + }
1.580 +
1.581 + public static void encodeEntities(String xmlString) {
1.582 + xmlString = xmlString.replaceAll(" & ", "&");
1.583 + xmlString = xmlString.replaceAll(" > ", ">");
1.584 + xmlString = xmlString.replaceAll(" < ", "<");
1.585 + }
1.586 +
1.587 + public static void decodeEntities(String xmlString) {
1.588 + xmlString = xmlString.replaceAll("&", " & ");
1.589 + xmlString = xmlString.replaceAll(">", " > ");
1.590 + xmlString = xmlString.replaceAll("<", " < ");
1.591 + }
1.592 +}
1.593 \ No newline at end of file
2.1 --- a/src/java/isac/util/parser/XMLParserDigest.java Mon Aug 30 18:57:59 2004 +0200
2.2 +++ b/src/java/isac/util/parser/XMLParserDigest.java Mon Aug 30 18:57:59 2004 +0200
2.3 @@ -320,40 +320,4 @@
2.4 xmlString = xmlString.replaceAll(">", " > ");
2.5 xmlString = xmlString.replaceAll("<", " < ");
2.6 }
2.7 -
2.8 - public static void main(String[] args) {
2.9 - if (args.length != 1) {
2.10 - System.out.println("Specify Path to dtd as Parameter");
2.11 - }
2.12 - XMLParserDigest d =
2.13 - new XMLParserDigest(args[0]);
2.14 - System.out.println(
2.15 - d.parse(
2.16 - "<ISAC><NEXTTAC><CALCID> 1 </CALCID><REWRITESETTACTIC name=\"Rewrite_Set\"><RULESET> Test_simplify</RULESET></REWRITESETTACTIC></NEXTTAC></ISAC>"));
2.17 - System.out.println(
2.18 - d.parse(
2.19 - "<ISAC><NEXTTAC><CALCID> 1 </CALCID><SIMPLETACTIC name=\"Add_Given\"><MATHML><ISA>equality (1 + -1 * 2 + x = 0)</ISA></MATHML></SIMPLETACTIC></NEXTTAC></ISAC>"));
2.20 -
2.21 - //Testing Rewrite Tactic
2.22 - System.out.println("----Now testing Rewrite----");
2.23 - ResponseWrapper rw = d.parse("<ISAC><REWRITETACTIC name=\"Rewrite\"><THEOREM><ID> all_left </ID><FORMULA><MATHML><ISA> ~ ?b =!= 0 ==> (?a = ?b) = (?a - ?b = 0) </ISA></MATHML></FORMULA></THEOREM></REWRITETACTIC></ISAC>");
2.24 - Rewrite r = ((Rewrite)rw.getResponse());
2.25 - System.out.println(r.getName());
2.26 - System.out.println(r.getTheorem().getId());
2.27 - System.out.println(r.getTheorem().getFormula());
2.28 - System.out.println(r.toSMLString());
2.29 -
2.30 - //Testing RewriteInst Tactic
2.31 - System.out.println("----Now testing RewriteInst----");
2.32 - rw = d.parse("<ISAC><REWRITEINSTTACTIC name=\"Rewrite_Inst\"><SUBSTITUTION><PAIR><VARIABLE><MATHML><ISA> bdv </ISA></MATHML></VARIABLE> <VALUE><MATHML><ISA> x </ISA></MATHML></VALUE></PAIR></SUBSTITUTION><THEOREM><ID> all_left </ID><FORMULA><MATHML> <ISA> ~ ?b =!= 0 ==> (?a = ?b) = (?a - ?b = 0) </ISA></MATHML></FORMULA></THEOREM></REWRITEINSTTACTIC></ISAC>");
2.33 - RewriteInst ri = ((RewriteInst)rw.getResponse());
2.34 - System.out.println(ri.getName());
2.35 - System.out.println(ri.getVariable());
2.36 - System.out.println(ri.getValue());
2.37 - System.out.println(ri.getTheorem().getId());
2.38 - System.out.println(ri.getTheorem().getFormula());
2.39 - System.out.println(ri.toSMLString());
2.40 -
2.41 System.out.println(d.parse("<ISAC></ISAC>"));
2.42 - System.out.println("done");
2.43 - };
2.44 }
3.1 --- a/src/java/isac/wsdialog/DialogGuide.java Mon Aug 30 18:57:59 2004 +0200
3.2 +++ b/src/java/isac/wsdialog/DialogGuide.java Mon Aug 30 18:57:59 2004 +0200
3.3 @@ -60,8 +60,8 @@
3.4
3.5 /**
3.6 * at the beginning of a calculation as well as of a subproblem
3.7 - * @param calc_head_
3.8 - * @return
3.9 + * @param calc_head_ coming from formalization
3.10 + * @return calc_head_ with viestyle set
3.11 */
3.12 public CalcHead startSpecifying(CalcHead calc_head_) {
3.13