Пример #1
0
 /**
  * Transforms a Bloomberg Element into the most specific Object (for example: Double, Float,
  * Integer, DateTime, String etc.).<br>
  * Complex types are returned in the form of collections ({@code List<Object>} for arrays and
  * {@code Map<String, Object>} for sequences).
  */
 public static Object getSpecificObjectOf(Element field) {
   if (field.datatype() == Schema.Datatype.FLOAT64) {
     // likeliest data type
     return field.getValueAsFloat64();
   } else if (field.datatype() == Schema.Datatype.FLOAT32) {
     return field.getValueAsFloat32();
   } else if (field.datatype() == Schema.Datatype.BOOL) {
     return field.getValueAsBool();
   } else if (field.datatype() == Schema.Datatype.CHAR) {
     return field.getValueAsChar();
   } else if (field.datatype() == Schema.Datatype.INT32) {
     return field.getValueAsInt32();
   } else if (field.datatype() == Schema.Datatype.INT64) {
     return field.getValueAsInt64();
   } else if (field.datatype() == Schema.Datatype.STRING) {
     return field.getValueAsString();
   } else if (field.datatype() == Schema.Datatype.DATE
       || field.datatype() == Schema.Datatype.DATETIME
       || field.datatype() == Schema.Datatype.TIME) {
     return new DateTime(field.getValueAsDate().calendar());
   } else if (field.isArray()) {
     List<Object> list = new ArrayList<>(field.numValues());
     for (int i = 0; i < field.numValues(); i++) {
       list.add(getSpecificObjectOf(field.getValueAsElement(i)));
     }
     return list;
   } else if (field.datatype() == Schema.Datatype.SEQUENCE
       || field.datatype()
           == Schema.Datatype.CHOICE) { // has to be after array because arrays are sequences...
     ElementIterator it = field.elementIterator();
     Map<String, Object> map = new LinkedHashMap<>(field.numElements(), 1.0f);
     while (it.hasNext()) {
       Element e = it.next();
       map.put(e.name().toString(), getSpecificObjectOf(e));
     }
     return map;
   } else {
     return field.toString(); // always works
   }
 }