/*
* Handler with callbacks for our XML parser.
*
* Copyright 2000 Andy Gill
*
* $Revision: 1.1 $
* $Date: 2000/09/15 16:14:17 $
*/
import com.microstar.xml.XmlHandler;
import com.microstar.xml.XmlParser;
/**
* @version 0.1
* @author Andy Gill
*/
public class XmlObsHandler implements XmlHandler {
private AllCDS allCDS;
private int nodeId;
private int parentNodeId;
private int parentPort;
private int portCount;
private String consName = "";
private String text = "";
private String version = "";
private void resetAttr () {
nodeId = -1;
parentNodeId = -1;
parentPort = -1;
portCount = -1;
consName = null;
text = null;
}
public XmlObsHandler(AllCDS allCDS) {
this.allCDS = allCDS;
resetAttr();
}
public void startDocument () {
// This should reset the AllCDS structure.
}
public void endDocument () {
// This should freeze the AllCDS structure.
}
public Object resolveEntity (String publicId, String systemId) {
return null;
}
public void attribute (String aname, String value, boolean isSpecified) {
if (aname.equals("node")) {
nodeId = Integer.parseInt(value);
} else if (aname.equals("pnode")) {
parentNodeId = Integer.parseInt(value);
} else if (aname.equals("pnode")) {
parentNodeId = Integer.parseInt(value);
} else if (aname.equals("pport")) {
parentPort = Integer.parseInt(value);
} else if (aname.equals("ports")) {
portCount = Integer.parseInt(value);
} else if (aname.equals("cons")) {
consName = value.intern();
} else if (aname.equals("text")) {
text = value.intern();
} else if (aname.equals("hoodversion")) {
version = value;
} else {
Message.abort("strange attribute=" + aname);
}
}
public void startElement (String elname) {
if (elname.equals("observe")) {
if (nodeId == -1 || text == null) {
Message.abort("observe not fully defined");
}
allCDS.addObserveNode(nodeId,text);
} else if (elname.equals("cons")) {
if (nodeId == -1 ||
parentNodeId == -1 ||
parentPort == -1 ||
portCount == -1 ||
consName == null) {
Message.abort("cons not fully defined");
}
allCDS.addConsNode(nodeId,parentNodeId,
parentPort,portCount,
consName);
} else if (elname.equals("fun")) {
if (nodeId == -1 ||
parentNodeId == -1 ||
parentPort == -1) {
Message.abort("fun not fully defined");
}
allCDS.addFunNode(nodeId,parentNodeId,parentPort);
} else if (elname.equals("enter")) {
if (nodeId == -1 ||
parentNodeId == -1 ||
parentPort == -1) {
Message.abort("enter not fully defined");
}
allCDS.addEnterNode(nodeId,parentNodeId,parentPort);
} else if (elname.equals("observations")) {
if (!version.equals(Hood.version)) {
Message.abort("reading wrong version of trace log" +
" expecting: " + Hood.version +
" found: " + version);
}
} else {
Message.abort("strange element=" + elname);
}
}
public void error (String message,
String systemId,
int line,
int column) {
Message.abort("<" + message + ">");
}
public void startExternalEntity (String systemId) {}
public void endExternalEntity (String systemId) {}
public void doctypeDecl (String name, String publicId, String systemId) {}
public void endElement (String elname) { }
public void charData (char ch[], int start, int length) {}
public void ignorableWhitespace (char ch[], int start, int length) {}
public void processingInstruction (String target, String data) {}
}
|