// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you 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 com.cloud.ovm.object; import java.lang.reflect.Type; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; public class Coder { private static Gson s_gson; private static Gson s_mapGson; public static Object[] s_emptyParams = new Object[0]; private static class MapDecoder implements JsonDeserializer<Map<String, String>> { @Override public Map<String, String> deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { if (!arg0.isJsonObject()) { throw new JsonParseException(arg0.toString() + " is not Json Object, cannot convert to map"); } JsonObject objs = arg0.getAsJsonObject(); Map<String, String> map = new HashMap<String, String>(); for (Entry<String, JsonElement> e : objs.entrySet()) { if (!e.getValue().isJsonPrimitive()) { throw new JsonParseException(e.getValue().toString() + " is not a Json primitive," + arg0 + " can not convert to map"); } map.put(e.getKey(), e.getValue().getAsString()); } return map; } } static { GsonBuilder _builder = new GsonBuilder(); _builder.registerTypeAdapter(Map.class, new MapDecoder()); s_mapGson = _builder.create(); s_gson = new Gson(); } public static String toJson(Object obj) { return s_gson.toJson(obj); } public static <T> T fromJson(String str, Class<T> clz) { return s_gson.fromJson(str, clz); } @SuppressWarnings("unchecked") public static Map<String, String> mapFromJson(String str) { return s_mapGson.fromJson(str, Map.class); } public static List<String> listFromJson(String str) { Type listType = new TypeToken<List<String>>() { }.getType(); return s_gson.fromJson(str, listType); } }