@Override public Value[] getArrayField(String fieldName) { final BNewArray refField = (BNewArray) value.get(fieldName); if (refField == null) { return null; } List<Value> list = new ArrayList<>(); final BIterator bIterator = refField.newIterator(); while (bIterator.hasNext()) { list.add(ValueImpl.createValue(bIterator.getNext())); } return list.toArray(new Value[0]); }
/** * Extract function arguments from the values sets. * @param valueSets user provided value sets * @return a list of function arguments */ private List<BValue[]> extractArguments(BValue[] valueSets) { List<BValue[]> argsList = new ArrayList<>(); for (BValue value : valueSets) { if (value instanceof BValueArray) { BValueArray array = (BValueArray) value; for (BIterator it = array.newIterator(); it.hasNext(); ) { BValue vals = it.getNext(); if (vals instanceof BNewArray) { BNewArray bNewArray = (BNewArray) vals; BValue[] args = new BValue[(int) bNewArray.size()]; for (int j = 0; j < bNewArray.size(); j++) { args[j] = bNewArray.getBValue(j); } argsList.add(args); } else { // cannot happen due to validations done at annotation processor } } } else { argsList.add(new BValue[]{value}); } } return argsList; }
@Override public Map<String, Value> getMapField(String fieldName) { final BMap refField = (BMap) value.get(fieldName); if (refField == null) { return null; } Map<String, Value> valueMap = new LinkedHashMap<>(); final BIterator bIterator = refField.newIterator(); while (bIterator.hasNext()) { final BValueArray next = (BValueArray) bIterator.getNext(); valueMap.put(next.getRefValue(0).stringValue(), ValueImpl.createValue(next.getRefValue(1))); } return valueMap; }