try { CompositeType at = (CompositeType)((ArrayType)ct.getType("data")).getElementOpenType(); CompositeType rt = (CompositeType)at.getType("value"); CompositeData recordData = new CompositeDataSupport(rt, OpenType et = at.getElementOpenType(); if (value instanceof Map && et instanceof CompositeType) { CompositeType ct = (CompositeType) et;
/** {@inheritDoc} */ @Override public Object convertToObject(ArrayType type, Object pFrom) { JSONAware value = toJSON(pFrom); // prepare each value in the array and then process the array of values if (!(value instanceof JSONArray)) { throw new IllegalArgumentException( "Can not convert " + value + " to type " + type + " because JSON object type " + value.getClass() + " is not a JSONArray"); } JSONArray jsonArray = (JSONArray) value; OpenType elementOpenType = type.getElementOpenType(); Object[] valueArray = createTargetArray(elementOpenType, jsonArray.size()); int i = 0; for (Object element : jsonArray) { valueArray[i++] = getDispatcher().convertToObject(elementOpenType, element); } return valueArray; }
static Object toArrayData(ArrayType<?> atype, Object value) throws OpenDataException { List<?> items; if (value instanceof Collection) { items = new ArrayList<Object>((Collection<?>) value); } else { items = Arrays.asList(value); } Object array = getOpenTypeArray(atype, ClassLoader.getSystemClassLoader(), items.size()); OpenType<?> elementType = atype.getElementOpenType(); for (int i = 0; i < items.size(); i++) { Object val = toOpenData(elementType, items.get(i)); Array.set(array, i, val); } return array; }
static Object toArrayData(ArrayType<?> atype, Object value) throws OpenDataException { List<?> items; if (value instanceof Collection) { items = new ArrayList<Object>((Collection<?>) value); } else { items = Arrays.asList(value); } Object array = getOpenTypeArray(atype, ClassLoader.getSystemClassLoader(), items.size()); OpenType<?> elementType = atype.getElementOpenType(); for (int i = 0; i < items.size(); i++) { Object val = toOpenData(elementType, items.get(i)); Array.set(array, i, val); } return array; }
@Override protected AttributeMappingStrategy<?, ? extends OpenType<?>> caseJavaArrayAttribute(ArrayType<?> openType) { AttributeMappingStrategy<?, ? extends OpenType<?>> innerStrategy = new SimpleAttributeMappingStrategy( (SimpleType<?>) openType.getElementOpenType()); return new ArrayAttributeMappingStrategy(openType, innerStrategy); }
@Override protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseJavaArrayAttribute(ArrayType<?> openType) { SimpleType<?> innerType = (SimpleType<?>) openType.getElementOpenType(); AttributeResolvingStrategy<?, ? extends OpenType<?>> strat = new SimpleAttributeResolvingStrategy(innerType); return new ArrayAttributeResolvingStrategy(strat, openType); }
private static Object fromArrayData(ArrayType<?> atype, ClassLoader classLoader, Object value) throws OpenDataException { OpenType<?> elementType = atype.getElementOpenType(); Object array; if (value == null) { array = getJavaTypeArray(atype, classLoader, 0); } else if (value.getClass().isArray()) { int length = Array.getLength(value); array = getJavaTypeArray(atype, classLoader, length); for (int i = 0; i < length; i++) { Object val = Array.get(value, i); val = fromOpenData(elementType, classLoader, val); Array.set(array, i, val); } } else if (value instanceof Collection<?>) { List<?> list = new ArrayList<Object>((Collection<?>) value); array = getJavaTypeArray(atype, classLoader, list.size()); for (int i = 0; i < list.size(); i++) { Object val = list.get(i); val = fromOpenData(elementType, classLoader, val); Array.set(array, i, val); } } else { throw new IllegalArgumentException("Unsupported value type: " + value); } return array; }
private static Object fromArrayData(ArrayType<?> atype, ClassLoader classLoader, Object value) throws OpenDataException { OpenType<?> elementType = atype.getElementOpenType(); Object array; if (value == null) { array = getJavaTypeArray(atype, classLoader, 0); } else if (value.getClass().isArray()) { int length = Array.getLength(value); array = getJavaTypeArray(atype, classLoader, length); for (int i = 0; i < length; i++) { Object val = Array.get(value, i); val = fromOpenData(elementType, classLoader, val); Array.set(array, i, val); } } else if (value instanceof Collection<?>) { List<?> list = new ArrayList<Object>((Collection<?>) value); array = getJavaTypeArray(atype, classLoader, list.size()); for (int i = 0; i < list.size(); i++) { Object val = list.get(i); val = fromOpenData(elementType, classLoader, val); Array.set(array, i, val); } } else { throw new IllegalArgumentException("Unsupported value type: " + value); } return array; }
static Object getJavaTypeArray(ArrayType<?> atype, ClassLoader classLoader, int dimension) throws OpenDataException { Class<?> compType; OpenType<?> elementType = atype.getElementOpenType(); try { if (atype.isPrimitiveArray()) { compType = Class.forName(atype.getTypeName()).getComponentType(); } else { compType = classLoader.loadClass(elementType.getTypeName()); } } catch (ClassNotFoundException ex) { OpenDataException odex = new OpenDataException("Cannot load array type: " + atype); odex.initCause(ex); throw odex; } return Array.newInstance(compType, dimension); }
Class.forName(arrayType.getElementOpenType().getClassName()), itemValueArray.size()); int i = 0; for ( String itemValue : itemValueArray ) objArray[i++] = convertToOpenType(arrayType.getElementOpenType(), itemValue);
static Object getJavaTypeArray(ArrayType<?> atype, ClassLoader classLoader, int dimension) throws OpenDataException { Class<?> compType; OpenType<?> elementType = atype.getElementOpenType(); try { if (atype.isPrimitiveArray()) { compType = Class.forName(atype.getTypeName()).getComponentType(); } else { compType = classLoader.loadClass(elementType.getTypeName()); } } catch (ClassNotFoundException ex) { OpenDataException odex = new OpenDataException("Cannot load array type: " + atype); odex.initCause(ex); throw odex; } return Array.newInstance(compType, dimension); }
OpenType elementType = arrayType.getElementOpenType(); int dimension = arrayType.getDimension();
OpenType elementType = arrayType.getElementOpenType(); int dimension = arrayType.getDimension();
static CompositeData convertToCompositeData(Object bean, CompositeType ct) throws OpenDataException{ BeanType bt = BeanType.of(bean.getClass()); Map<String,Object> map = new LinkedHashMap<>(); for(String name : ct.keySet()) { OpenType type = ct.getType(name); Object value = bt.getProperty(name).getValue(bean); Object converted = convert(value, type); if(type instanceof ArrayType) { List list = (List)converted; Class<?> elementType = Classes.forName(((ArrayType) type).getElementOpenType().getClassName()); converted = list.toArray((Object[])Array.newInstance(elementType, list.size())); } map.put(name, converted); } return new CompositeDataSupport(ct, map); }
static Object getOpenTypeArray(ArrayType<?> atype, ClassLoader classLoader, int dimension) throws OpenDataException { Class<?> compType; OpenType<?> elementType = atype.getElementOpenType(); try { if (atype.isPrimitiveArray()) { compType = Class.forName(atype.getTypeName()).getComponentType(); } else if (elementType instanceof CompositeType) { compType = CompositeData.class; } else if (elementType instanceof TabularType) { compType = TabularData.class; } else { compType = classLoader.loadClass(elementType.getTypeName()); } } catch (ClassNotFoundException ex) { OpenDataException odex = new OpenDataException("Cannot load array type: " + atype); odex.initCause(ex); throw odex; } return Array.newInstance(compType, dimension); }
static Object getOpenTypeArray(ArrayType<?> atype, ClassLoader classLoader, int dimension) throws OpenDataException { Class<?> compType; OpenType<?> elementType = atype.getElementOpenType(); try { if (atype.isPrimitiveArray()) { compType = Class.forName(atype.getTypeName()).getComponentType(); } else if (elementType instanceof CompositeType) { compType = CompositeData.class; } else if (elementType instanceof TabularType) { compType = TabularData.class; } else { compType = classLoader.loadClass(elementType.getTypeName()); } } catch (ClassNotFoundException ex) { OpenDataException odex = new OpenDataException("Cannot load array type: " + atype); odex.initCause(ex); throw odex; } return Array.newInstance(compType, dimension); }
/** {@inheritDoc} */ @Override public Object convertToObject(ArrayType type, Object pFrom) { JSONAware value = toJSON(pFrom); // prepare each value in the array and then process the array of values if (!(value instanceof JSONArray)) { throw new IllegalArgumentException( "Can not convert " + value + " to type " + type + " because JSON object type " + value.getClass() + " is not a JSONArray"); } JSONArray jsonArray = (JSONArray) value; OpenType elementOpenType = type.getElementOpenType(); Object[] valueArray = createTargetArray(elementOpenType, jsonArray.size()); int i = 0; for (Object element : jsonArray) { valueArray[i++] = getDispatcher().convertToObject(elementOpenType, element); } return valueArray; }
/** {@inheritDoc} */ @Override public Object convertToObject(ArrayType type, Object pFrom) { JSONAware value = toJSON(pFrom); // prepare each value in the array and then process the array of values if (!(value instanceof JSONArray)) { throw new IllegalArgumentException( "Can not convert " + value + " to type " + type + " because JSON object type " + value.getClass() + " is not a JSONArray"); } JSONArray jsonArray = (JSONArray) value; OpenType elementOpenType = type.getElementOpenType(); Object[] valueArray = createTargetArray(elementOpenType, jsonArray.size()); int i = 0; for (Object element : jsonArray) { valueArray[i++] = getDispatcher().convertToObject(elementOpenType, element); } return valueArray; }
/** {@inheritDoc} */ @Override public Object convertToObject(ArrayType type, Object pFrom) { JSONAware value = toJSON(pFrom); // prepare each value in the array and then process the array of values if (!(value instanceof JSONArray)) { throw new IllegalArgumentException( "Can not convert " + value + " to type " + type + " because JSON object type " + value.getClass() + " is not a JSONArray"); } JSONArray jsonArray = (JSONArray) value; OpenType elementOpenType = type.getElementOpenType(); Object[] valueArray = createTargetArray(elementOpenType, jsonArray.size()); int i = 0; for (Object element : jsonArray) { valueArray[i++] = getDispatcher().deserialize(elementOpenType, element); } return valueArray; }
static ObjectNode serialize(final ArrayType<?> arrayType) { final ObjectNode node = ThreadLocalJsonFactory.getFactory().objectNode(); node.put(IS_PRIMITIVE_FIELD, arrayType.isPrimitiveArray()); node.put(DIMENSIONS_FIELD, arrayType.getDimension()); node.put(ARRAY_ELEMENT_FIELD, serialize(arrayType.getElementOpenType())); return node; }