Clazz.declarePackage ("JSV.source");
Clazz.load (["JSV.source.XMLReader"], "JSV.source.AnIMLReader", ["java.lang.Double", "JU.BC", "$.Base64", "JSV.source.JDXSource"], function () {
c$ = Clazz.decorateAsClass (function () {
this.inResult = false;
Clazz.instantialize (this, arguments);
}, JSV.source, "AnIMLReader", JSV.source.XMLReader);
Clazz.makeConstructor (c$, 
function () {
Clazz.superConstructor (this, JSV.source.AnIMLReader, []);
});
Clazz.overrideMethod (c$, "getXML", 
function (br) {
try {
this.source =  new JSV.source.JDXSource (0, this.filePath);
this.getSimpleXmlReader (br);
this.parser.nextEvent ();
this.processXML (0, 3);
if (!this.checkPointCount ()) return null;
this.xFactor = 1;
this.yFactor = 1;
this.populateVariables ();
} catch (pe) {
if (Clazz.exceptionOf (pe, Exception)) {
System.err.println ("That file may be empty...");
this.errorLog.append ("That file may be empty... \n");
} else {
throw pe;
}
}
this.processErrors ("anIML");
try {
br.close ();
} catch (e1) {
if (Clazz.exceptionOf (e1, java.io.IOException)) {
} else {
throw e1;
}
}
return this.source;
}, "java.io.BufferedReader");
Clazz.overrideMethod (c$, "processTag", 
function (tagId) {
switch (tagId) {
case 0:
this.processAuditTrail ();
return true;
case 1:
this.processExperimentStepSet ();
return true;
case 2:
this.processSampleSet ();
return true;
case 11:
this.processAuthor ();
return true;
case 3:
this.inResult = true;
return true;
default:
System.out.println ("AnIMLReader not processing tag " + JSV.source.XMLReader.tagNames[tagId]);
return false;
}
}, "~N");
Clazz.overrideMethod (c$, "processEndTag", 
function (tagId) {
switch (tagId) {
case 3:
case 1:
this.inResult = false;
break;
}
}, "~N");
Clazz.defineMethod (c$, "processAuditTrail", 
 function () {
if (this.tagName.equals ("user")) {
this.parser.qualifiedValue ();
} else if (this.tagName.equals ("timestamp")) {
this.parser.qualifiedValue ();
}});
Clazz.defineMethod (c$, "processSampleSet", 
 function () {
if (this.tagName.equals ("sample")) this.samplenum++;
 else if (this.tagName.equals ("parameter")) {
this.attrList = this.parser.getAttrValueLC ("name");
if (this.attrList.equals ("name")) {
this.parser.qualifiedValue ();
} else if (this.attrList.equals ("owner")) {
this.parser.qualifiedValue ();
} else if (this.attrList.equals ("molecular formula")) {
this.molForm = this.parser.qualifiedValue ();
} else if (this.attrList.equals ("cas registry number")) {
this.casRN = this.parser.qualifiedValue ();
}}});
Clazz.defineMethod (c$, "processExperimentStepSet", 
 function () {
if (this.tagName.equals ("result")) {
this.inResult = true;
} else if (this.tagName.equals ("sampleref")) {
if (this.parser.getAttrValueLC ("role").contains ("samplemeasurement")) this.sampleID = this.parser.getAttrValue ("sampleID");
} else if (this.tagName.equals ("author")) {
this.process (11, true);
} else if (this.tagName.equals ("timestamp")) {
this.LongDate = this.parser.thisValue ();
} else if (this.tagName.equals ("technique")) {
this.techname = this.parser.getAttrValue ("name").toUpperCase () + " SPECTRUM";
} else if (this.tagName.equals ("vectorset") || this.tagName.equals ("seriesset") && this.inResult) {
this.npoints = Integer.parseInt (this.parser.getAttrValue ("length"));
this.xaxisData =  Clazz.newDoubleArray (this.npoints, 0);
this.yaxisData =  Clazz.newDoubleArray (this.npoints, 0);
} else if (this.tagName.equals ("vector") || this.tagName.equals ("series") && this.inResult) {
var axisLabel = this.parser.getAttrValue ("name");
var dependency = this.parser.getAttrValueLC ("dependency");
if (dependency.equals ("independent")) {
this.xUnits = axisLabel;
this.getXValues ();
} else if (dependency.equals ("dependent")) {
this.yUnits = axisLabel;
this.getYValues ();
}} else if (this.tagName.equals ("parameter")) {
if ((this.attrList = this.parser.getAttrValueLC ("name")).equals ("identifier")) {
this.title = this.parser.qualifiedValue ();
} else if (this.attrList.equals ("nucleus")) {
this.obNucleus = this.parser.qualifiedValue ();
} else if (this.attrList.equals ("observefrequency")) {
this.StrObFreq = this.parser.qualifiedValue ();
this.obFreq = Double.parseDouble (this.StrObFreq);
} else if (this.attrList.equals ("referencepoint")) {
this.refPoint = Double.parseDouble (this.parser.qualifiedValue ());
} else if (this.attrList.equals ("sample path length")) {
this.pathlength = this.parser.qualifiedValue ();
} else if (this.attrList.equals ("scanmode")) {
this.parser.thisValue ();
} else if (this.attrList.equals ("manufacturer")) {
this.vendor = this.parser.thisValue ();
} else if (this.attrList.equals ("model name")) {
this.modelType = this.parser.thisValue ();
} else if (this.attrList.equals ("resolution")) {
this.resolution = this.parser.qualifiedValue ();
}}});
Clazz.defineMethod (c$, "getXValues", 
 function () {
this.parser.nextTag ();
if (this.parser.getTagName ().equals ("autoincrementedvalueset")) {
this.parser.nextTag ();
if (this.parser.getTagName ().equals ("startvalue")) this.firstX = Double.parseDouble (this.parser.qualifiedValue ());
this.nextStartTag ();
if (this.parser.getTagName ().equals ("increment")) this.deltaX = Double.parseDouble (this.parser.qualifiedValue ());
}if (!this.inResult) {
this.nextStartTag ();
this.xUnits = this.parser.getAttrValue ("label");
}this.increasing = (this.deltaX > 0 ? true : false);
this.continuous = true;
for (var j = 0; j < this.npoints; j++) this.xaxisData[j] = this.firstX + (this.deltaX * j);

this.lastX = this.xaxisData[this.npoints - 1];
});
Clazz.defineMethod (c$, "nextStartTag", 
 function () {
this.parser.nextStartTag ();
while (this.parser.getTagType () == 6) {
this.parser.nextStartTag ();
}
});
Clazz.defineMethod (c$, "getYValues", 
 function () {
var vectorType = this.parser.getAttrValueLC ("type");
if (vectorType.length == 0) vectorType = this.parser.getAttrValueLC ("vectorType");
this.parser.nextTag ();
this.tagName = this.parser.getTagName ();
if (this.tagName.equals ("individualvalueset")) {
for (var ii = 0; ii < this.npoints; ii++) this.yaxisData[ii] = Double.parseDouble (this.parser.qualifiedValue ());

} else if (this.tagName.equals ("encodedvalueset")) {
this.attrList = this.parser.getCharacters ();
var dataArray = JU.Base64.decodeBase64 (this.attrList);
if (dataArray.length != 0) {
if (vectorType.equals ("float64")) {
for (var i = 0, pt = 0; i < this.npoints; i++, pt += 8) this.yaxisData[i] = JU.BC.bytesToDoubleToFloat (dataArray, pt, false);

} else {
for (var i = 0, pt = 0; i < this.npoints; i++, pt += 4) this.yaxisData[i] = JU.BC.bytesToFloat (dataArray, pt, false);

}}}this.parser.nextStartTag ();
this.tagName = this.parser.getTagName ();
this.yUnits = this.parser.getAttrValue ("label");
this.firstY = this.yaxisData[0];
});
Clazz.defineMethod (c$, "processAuthor", 
 function () {
if (this.tagName.equals ("name")) this.owner = this.parser.thisValue ();
 else if (this.tagName.contains ("location")) this.origin = this.parser.thisValue ();
});
});
