001 package org.findata.blpwrapper; 002 003 import com.bloomberglp.blpapi.*; 004 005 import java.util.logging.Logger; 006 007 public class BulkDataResult extends DataResult { 008 private String[] requested_fields; 009 private String[] returned_fields; 010 private String[] securities; 011 private String[] data_types; 012 private String[][] result_data; 013 014 public BulkDataResult(String[] argSecurities, String[] argFields) { 015 securities = argSecurities; 016 requested_fields = argFields; 017 } 018 019 public String[][] getData() { 020 return(result_data); 021 } 022 023 public String[] getDataTypes() { 024 return(data_types); 025 } 026 027 public String[] getColumnNames() { 028 return(returned_fields); 029 } 030 031 public void processResponse(Element response, Logger logger, boolean throwInvalidTickerError) throws WrapperException { 032 Element securityDataArray = response.getElement("securityData"); 033 Element securityData = securityDataArray.getValueAsElement(0); 034 Element fieldData = securityData.getElement("fieldData"); 035 036 int seq = securityData.getElementAsInt32("sequenceNumber"); 037 if (seq > 0) { 038 throw new WrapperException("do not expect seq " + seq + " to be greater than 0."); 039 } 040 041 processSecurityError(securityData, logger, throwInvalidTickerError); 042 processFieldExceptions(securityData, logger); 043 044 if (fieldData.numElements() > 1) { 045 throw new WrapperException("not expecting more than 1 element in fieldData, got " + fieldData.numElements()); 046 } 047 048 Element x = fieldData.getElement(0); 049 050 if (x.datatype().intValue() != Schema.Datatype.Constants.SEQUENCE) { 051 throw new WrapperException("bulk data request can only handle SEQUENCE data in field " + x.name().toString()); 052 } 053 054 for (int i = 0; i < x.numValues(); i++) { 055 Element field = x.getValueAsElement(i); 056 057 if (i == 0) { 058 returned_fields = new String[field.numElements()]; 059 data_types = new String[field.numElements()]; 060 result_data = new String[x.numValues()][field.numElements()]; 061 } 062 063 for (int j = 0; j < field.numElements(); j++) { 064 Element y = field.getElement(j); 065 066 if (i == 0) { 067 returned_fields[j] = y.name().toString(); 068 data_types[j] = y.datatype().toString(); 069 } 070 071 String value = y.getValueAsString(); 072 073 if (value.equals("-2.4245362661989844E-14")) { 074 logger.info("Numeric of -2.4245362661989844E-14 encountered. Not a real value. Will be left NULL."); 075 } else { 076 result_data[i][j] = value; 077 } 078 } 079 } 080 } 081 }