org.modelmapper.gson.JsonElementValueReader Maven / Gradle / Ivy
/*
* Copyright 2013 the original author or authors.
*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
package org.modelmapper.gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import java.util.Collection;
import java.util.Set;
import org.modelmapper.internal.util.Lists;
import org.modelmapper.spi.ValueReader;
/**
* JsonElement ValueReader implementation.
*
* @author Jonathan Halterman
*/
public class JsonElementValueReader implements ValueReader {
@Override
public Object get(JsonElement source, String memberName) {
if (source.isJsonObject()) {
JsonObject subjObj = source.getAsJsonObject();
JsonElement propertyElement = subjObj.get(memberName);
if (propertyElement == null)
return null;
if (propertyElement.isJsonObject())
return propertyElement.getAsJsonObject();
if (propertyElement.isJsonArray())
return propertyElement.getAsJsonArray();
if (propertyElement.isJsonPrimitive()) {
JsonPrimitive jsonPrim = propertyElement.getAsJsonPrimitive();
if (jsonPrim.isBoolean())
return jsonPrim.getAsBoolean();
if (jsonPrim.isNumber())
return jsonPrim.getAsNumber();
if (jsonPrim.isString())
return jsonPrim.getAsString();
}
}
return null;
}
@Override
public Member getMember(JsonElement source, String memberName) {
final Object value = get(source, memberName);
final Class> type = value != null ? value.getClass() : JsonElement.class;
return new Member(type) {
@Override
public JsonElement getOrigin() {
if (value instanceof JsonElement)
return (JsonElement) value;
return null;
}
@Override
public Object get(JsonElement source, String memberName) {
return JsonElementValueReader.this.get(source, memberName);
}
};
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Collection memberNames(JsonElement source) {
if (source.isJsonObject())
return Lists.from((Set) ((JsonObject) source).entrySet());
return null;
}
@Override
public String toString() {
return "Gson";
}
}