final byte baseCode = xmlByteDecode(ats, BASE_CODE_DDF, XML_STOP);
final String codeCFI = xmlStringDecode(ats, SYMBOL_CODE_CFI, XML_PASS);
final String zoneCode = xmlStringDecode(ats, TIME_ZONE_DDF, XML_STOP);
final String symbolComment = xmlStringDecode(ats, SYMBOL_COMMENT,
XML_PASS);
final Time expire = xmlTimeDecode(ats, SYMBOL_EXPIRE, XML_PASS);
//
final DDF_TimeZone zone = DDF_TimeZone.fromCode(zoneCode);
final DDF_Exchange exchange = DDF_Exchange.fromCode(exchCode);
final DDF_Fraction frac = DDF_Fraction.fromBaseCode(baseCode);
final long priceStepMantissa = xmlDecimalDecode(frac, ats,
PRICE_TICK_INCREMENT, XML_STOP);
final String pricePointString = xmlStringDecode(ats, PRICE_POINT_VALUE,
XML_PASS);
PriceValue pricePoint = ValueBuilder.newPrice(0);
if (pricePointString != null) {
try {
pricePoint = ValueBuilder.newPrice(Double
.valueOf(pricePointString));
} catch (Exception e) {
}
}
final PriceValue priceStep = newPrice(priceStepMantissa,
frac.decimalExponent);
/* Build Lifetime, currently only have last month/year of instrument from ddf.extras */
TimeInterval lifetime;
if(expire == null || expire == com.barchart.util.value.impl.ValueConst.NULL_TIME) { // Was isNull()
lifetime = com.barchart.util.value.impl.ValueConst.NULL_TIME_INTERVAL;
} else {
lifetime = factory.newTimeInterval(0, expire.millisecond());
}
Fraction f = factory.newFraction(1, (int) frac.decimalDenominator);
return build(guid, symbolReal, symbolComment, codeCFI,