Example usage for com.google.gson.reflect TypeToken get

List of usage examples for com.google.gson.reflect TypeToken get

Introduction

In this page you can find the example usage for com.google.gson.reflect TypeToken get.

Prototype

public static <T> TypeToken<T> get(Class<T> type) 

Source Link

Document

Gets type literal for the given Class instance.

Usage

From source file:org.mule.runtime.extension.internal.persistence.RestrictiveTypeAdapterFactory.java

License:Open Source License

/**
 * @param gson The actual Gson serializer
 * @param type Implementation that GSON is trying to find a {@link TypeAdapter}
 * @param <T>  type of objects that the {@link TypeAdapter} will create
 * @return if {@param type} is a {@link #clazz} a {@link TypeAdapter}, that serializes and deserialize
 * {@link T} instances//from ww  w  . j a  v  a2 s  . c  o m
 */
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
    if (clazz.equals(type.getRawType())) {
        return gson.getDelegateAdapter(this, TypeToken.get((Class<T>) implementationClazz));
    }
    return null;
}

From source file:org.springframework.cloud.iot.coap.converter.GsonCoapMessageConverter.java

License:Apache License

protected TypeToken<?> getTypeToken(Type type) {
    return TypeToken.get(type);
}

From source file:org.syphr.lametrictime.api.common.impl.typeadapters.imported.RuntimeTypeAdapterFactory.java

License:Apache License

public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) {
    if (type.getRawType() != baseType) {
        return null;
    }//from   w  w  w  .j a va2 s  .c om

    final Map<String, TypeAdapter<?>> labelToDelegate = new LinkedHashMap<String, TypeAdapter<?>>();
    final Map<Class<?>, TypeAdapter<?>> subtypeToDelegate = new LinkedHashMap<Class<?>, TypeAdapter<?>>();
    for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) {
        TypeAdapter<?> delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue()));
        labelToDelegate.put(entry.getKey(), delegate);
        subtypeToDelegate.put(entry.getValue(), delegate);
    }

    return new TypeAdapter<R>() {
        @Override
        public R read(JsonReader in) throws IOException {
            JsonElement jsonElement = RuntimeTypeAdapterFactory.parse(in);
            JsonElement labelJsonElement = jsonElement.getAsJsonObject().remove(typeFieldName);
            if (labelJsonElement == null) {
                throw new JsonParseException("cannot deserialize " + baseType
                        + " because it does not define a field named " + typeFieldName);
            }
            String label = labelJsonElement.getAsString();
            @SuppressWarnings("unchecked") // registration requires that subtype extends T
            TypeAdapter<R> delegate = (TypeAdapter<R>) labelToDelegate.get(label);
            if (delegate == null) {
                throw new JsonParseException("cannot deserialize " + baseType + " subtype named " + label
                        + "; did you forget to register a subtype?");
            }
            return delegate.fromJsonTree(jsonElement);
        }

        @Override
        public void write(JsonWriter out, R value) throws IOException {
            Class<?> srcType = value.getClass();
            String label = subtypeToLabel.get(srcType);
            @SuppressWarnings("unchecked") // registration requires that subtype extends T
            TypeAdapter<R> delegate = (TypeAdapter<R>) subtypeToDelegate.get(srcType);
            if (delegate == null) {
                throw new JsonParseException(
                        "cannot serialize " + srcType.getName() + "; did you forget to register a subtype?");
            }
            JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject();
            if (jsonObject.has(typeFieldName)) {
                throw new JsonParseException("cannot serialize " + srcType.getName()
                        + " because it already defines a field named " + typeFieldName);
            }
            JsonObject clone = new JsonObject();
            clone.add(typeFieldName, new JsonPrimitive(label));
            for (Map.Entry<String, JsonElement> e : jsonObject.entrySet()) {
                clone.add(e.getKey(), e.getValue());
            }
            RuntimeTypeAdapterFactory.write(clone, out);
        }
    }.nullSafe();
}

From source file:org.terasology.persistence.typeHandling.gson.PolymorphicTypeAdapterFactory.java

License:Apache License

@Override
public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) {
    if (!baseClass.isAssignableFrom(type.getRawType())) {
        return null;
    }/*w  w w.j av a 2 s  .  co  m*/

    return new TypeAdapter<R>() {
        @SuppressWarnings("unchecked")
        @Override
        public void write(JsonWriter out, R value) throws IOException {
            Class<?> valueClass = value.getClass();
            String valueTypeName = valueClass.getName();

            TypeToken<?> valueType = TypeToken.get(valueClass);
            TypeAdapter<R> delegate = (TypeAdapter<R>) gson
                    .getDelegateAdapter(PolymorphicTypeAdapterFactory.this, valueType);

            if (delegate == null) {
                throw new JsonParseException("Could not serialize " + valueClass.getName());
            }

            JsonElement jsonElement = delegate.toJsonTree(value);

            if (valueClass != baseClass) {
                JsonObject jsonObject = jsonElement.getAsJsonObject();

                JsonObject clone = new JsonObject();
                clone.add(TYPE_FIELD_NAME, new JsonPrimitive(valueTypeName));

                for (Map.Entry<String, JsonElement> e : jsonObject.entrySet()) {
                    clone.add(e.getKey(), e.getValue());
                }

                Streams.write(clone, out);
            } else {
                Streams.write(jsonElement, out);
            }
        }

        @SuppressWarnings("unchecked")
        @Override
        public R read(JsonReader in) throws IOException {
            JsonElement jsonElement = Streams.parse(in);
            Class<?> valueClass;

            if (jsonElement.isJsonObject()) {
                JsonElement typeNameJsonElement = jsonElement.getAsJsonObject().remove(TYPE_FIELD_NAME);

                if (typeNameJsonElement != null) {
                    String typeName = typeNameJsonElement.getAsString();

                    try {
                        valueClass = Class.forName(typeName);
                    } catch (ClassNotFoundException e) {
                        throw new JsonParseException("Could not find class " + typeName);
                    }
                } else {
                    valueClass = baseClass;
                }
            } else {
                valueClass = baseClass;
            }

            if (!baseClass.isAssignableFrom(valueClass)) {
                throw new JsonParseException(
                        valueClass.getName() + " does not derive from " + baseClass.getName());
            }

            TypeToken<?> valueType = TypeToken.get(valueClass);
            TypeAdapter<R> delegate = (TypeAdapter<R>) gson
                    .getDelegateAdapter(PolymorphicTypeAdapterFactory.this, valueType);

            if (delegate == null) {
                throw new JsonParseException("Could not deserialize " + valueClass.getName());
            }

            return delegate.fromJsonTree(jsonElement);
        }
    };
}

From source file:org.vaadin.spring.samples.mvp.util.JSONUtil.java

License:Apache License

@SuppressWarnings("unchecked")
public static <T> T restoreFromJson(final String resourcePath, final Class<T> clazz) {
    return postSerialize((T) restoreFromJson(resourcePath, TypeToken.get(clazz).getType()));
}

From source file:org.wso2.msf4j.internal.router.ParamConvertUtils.java

License:Open Source License

/**
 * Common helper method to convert value for {@link javax.ws.rs.HeaderParam} and {@link javax.ws.rs.QueryParam}.
 *
 * @param resultType Result type//from ww  w .j  av  a 2s .  co  m
 * @return Function the function
 * @see #createHeaderParamConverter(Type)
 * @see #createQueryParamConverter(Type)
 */
private static Function<List<String>, Object> createListConverter(Type resultType) {
    TypeToken<?> typeToken = TypeToken.get(resultType);

    // Use boxed type if raw type is primitive type. Otherwise the type won't change.
    Class<?> resultClass = typeToken.getRawType();

    // For string, just return the first value
    if (resultClass == String.class) {
        return new BasicConverter(Defaults.defaultValue(resultClass)) {
            @Override
            protected Object convert(String value) throws Exception {
                return value;
            }
        };
    }

    // Creates converter based on the type

    // Primitive
    Function<List<String>, Object> converter = createPrimitiveTypeConverter(resultClass);
    if (converter != null) {
        return converter;
    }

    // String constructor
    converter = createStringConstructorConverter(resultClass);
    if (converter != null) {
        return converter;
    }

    // Static string argument methods
    converter = createStringMethodConverter(resultClass);
    if (converter != null) {
        return converter;
    }

    // Collection
    converter = createCollectionConverter(typeToken);
    if (converter != null) {
        return converter;
    }

    throw new IllegalArgumentException("Unsupported type " + typeToken);
}

From source file:org.wso2.msf4j.internal.router.ParamConvertUtils.java

License:Open Source License

/**
 * Creates a converter function that converts value into a {@link List}, {@link Set} or {@link SortedSet}.
 *
 * @param resultType Result type//from www.  j a v  a  2  s .  c o m
 * @return A converter function or {@code null} if the given type is not a {@link ParameterizedType} with raw type
 * as {@link List}, {@link Set} or {@link SortedSet}. Also, for {@link SortedSet} type, if the element type
 * doesn't implements {@link Comparable}, {@code null} is returned.
 */
@SuppressWarnings("unchecked")
private static Function<List<String>, Object> createCollectionConverter(TypeToken<?> resultType) {
    final Class<?> rawType = resultType.getRawType();

    // Collection. It must be List or Set
    if (rawType != List.class && rawType != Set.class && rawType != SortedSet.class) {
        return null;
    }

    // Must be ParameterizedType
    if (!(resultType.getType() instanceof ParameterizedType)) {
        return null;
    }

    // Must have 1 type parameter
    ParameterizedType type = (ParameterizedType) resultType.getType();
    if (type.getActualTypeArguments().length != 1) {
        return null;
    }

    // For SortedSet, the entry type must be Comparable.
    Type elementType = type.getActualTypeArguments()[0];
    if (rawType == SortedSet.class
            && !Comparable.class.isAssignableFrom(TypeToken.get(elementType).getRawType())) {
        return null;
    }

    //We only support List type for java.io.File
    if (elementType == File.class && rawType != List.class) {
        throw new IllegalArgumentException("File doesn't support " + rawType);
    }

    // Get the converter for the collection element.
    final Function<List<String>, Object> elementConverter = createQueryParamConverter(elementType);

    return new Function<List<String>, Object>() {
        @Override
        public Object apply(List<String> values) {
            Collection<? extends Comparable> collection;
            if (rawType == List.class) {
                collection = new ArrayList<>();
            } else if (rawType == Set.class) {
                collection = new HashSet<>();
            } else {
                collection = new TreeSet<>();
            }

            if (values != null) {
                for (String value : values) {
                    add(collection, elementConverter.apply(Collections.singletonList(value)));
                }
            }
            return collection;
        }

        @SuppressWarnings("unchecked")
        private <T> void add(Collection<T> collection, Object element) {
            collection.add((T) element);
        }
    };
}

From source file:retrofit.KGsonConverterFactory.java

License:Apache License

/** Create a converter for {@code type}. */
@Override/*  w w w  . j a v  a2s.  c o  m*/
public Converter<?> get(Type type) {
    TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
    return new KGsonConverter<>(adapter, cache);
}

From source file:retrofit2_source.converter.gson.GsonConverterFactory.java

License:Apache License

@Override
public retrofit2_source.Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
        retrofit2_source.Retrofit retrofit) {
    TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
    return new GsonResponseBodyConverter<>(gson, adapter);
}

From source file:retrofit2_source.converter.gson.GsonConverterFactory.java

License:Apache License

@Override
public retrofit2_source.Converter<?, RequestBody> requestBodyConverter(Type type,
        Annotation[] parameterAnnotations, Annotation[] methodAnnotations, retrofit2_source.Retrofit retrofit) {
    TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
    return new retrofit2_source.converter.gson.GsonRequestBodyConverter<>(gson, adapter);
}