All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cedarsoftware.io.factory.ArrayFactory Maven / Gradle / Ivy

There is a newer version: 4.30.0
Show newest version
package com.cedarsoftware.io.factory;

import java.lang.reflect.Array;

import com.cedarsoftware.io.JsonObject;
import com.cedarsoftware.io.JsonReader;
import com.cedarsoftware.io.Resolver;
import com.cedarsoftware.util.convert.Converter;

/**
 * @author John DeRegnaucourt ([email protected])
 *         
* Copyright (c) Cedar Software LLC *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* License *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class ArrayFactory implements JsonReader.ClassFactory { private final Class type; public ArrayFactory(Class c) { this.type = c; } public T newInstance(Class c, JsonObject jObj, Resolver resolver) { Object[] items = jObj.getJsonArray(); Converter converter = resolver.getConverter(); if (items == null) { jObj.setTarget(null); return null; } int len = items.length; Class arrayType = getType(); Class componentType = arrayType.getComponentType(); Object array = Array.newInstance(componentType, len); for (int i = 0; i < len; i++) { Object val = items[i]; if (val == null) { } else if (val instanceof JsonObject) { Class type; do { // Allow for {@type:long, value:{@type:int, value:3}} (and so on...) JsonObject jsonObject = (JsonObject) val; type = jsonObject.getJavaType(); if (!jsonObject.hasValue()) { break; } val = jsonObject.getValue(); } while (val instanceof JsonObject); if (type == null) { type = componentType; } val = resolver.getConverter().convert(val, type); } else { val = resolver.getConverter().convert(val, componentType); } try { Array.set(array, i, val); } catch (Exception e) { Array.set(array, i, converter.convert(val, componentType)); } } jObj.setTarget(array); return (T) jObj.getTarget(); } public Class getType() { return type; } /** * @return true. Strings are always immutable, final. */ public boolean isObjectFinal() { return true; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy