EMMA Coverage Report (generated Wed Oct 26 13:47:17 EDT 2011)
[all classes][org.jclouds.json.internal]

COVERAGE SUMMARY FOR SOURCE FILE [EnumTypeAdapterThatReturnsFromValue.java]

nameclass, %method, %block, %line, %
EnumTypeAdapterThatReturnsFromValue.java100% (2/2)86%  (6/7)92%  (65/71)94%  (15/16)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class EnumTypeAdapterThatReturnsFromValue100% (1/1)80%  (4/5)87%  (41/47)90%  (9/10)
serialize (Enum, Type, JsonSerializationContext): JsonElement 0%   (0/1)0%   (0/6)0%   (0/1)
<static initializer> 100% (1/1)100% (7/7)100% (1/1)
EnumTypeAdapterThatReturnsFromValue (): void 100% (1/1)100% (3/3)100% (1/1)
deserialize (JsonElement, Type, JsonDeserializationContext): Enum 100% (1/1)100% (28/28)100% (6/6)
toString (): String 100% (1/1)100% (3/3)100% (1/1)
     
class EnumTypeAdapterThatReturnsFromValue$1100% (1/1)100% (2/2)100% (24/24)100% (6/6)
EnumTypeAdapterThatReturnsFromValue$1 (): void 100% (1/1)100% (3/3)100% (1/1)
load (Class): Method 100% (1/1)100% (21/21)100% (5/5)

1/**
2 * Licensed to jclouds, Inc. (jclouds) under one or more
3 * contributor license agreements.  See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership.  jclouds licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License.  You may obtain a copy of the License at
9 *
10 *   http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied.  See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19package org.jclouds.json.internal;
20 
21import java.lang.reflect.Method;
22import java.lang.reflect.Type;
23import java.util.concurrent.ExecutionException;
24 
25import com.google.common.cache.Cache;
26import com.google.common.cache.CacheBuilder;
27import com.google.common.cache.CacheLoader;
28import com.google.gson.JsonDeserializationContext;
29import com.google.gson.JsonDeserializer;
30import com.google.gson.JsonElement;
31import com.google.gson.JsonParseException;
32import com.google.gson.JsonPrimitive;
33import com.google.gson.JsonSerializationContext;
34import com.google.gson.JsonSerializer;
35 
36/**
37 * @author Adrian Cole
38 */
39@SuppressWarnings("unchecked")
40public class EnumTypeAdapterThatReturnsFromValue<T extends Enum<T>> implements JsonSerializer<T>, JsonDeserializer<T> {
41   public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
42      return new JsonPrimitive(src.name());
43   }
44 
45   @SuppressWarnings("cast")
46   public T deserialize(JsonElement json, Type classOfT, JsonDeserializationContext context) throws JsonParseException {
47      try {
48         return (T) Enum.valueOf((Class<T>) classOfT, json.getAsString());
49      } catch (IllegalArgumentException e) {
50         try {
51            Method converter = classToConvert.get((Class<?>) classOfT);
52            return (T) converter.invoke(null, json.getAsString());
53         } catch (Exception e1) {
54            throw e;
55         }
56      }
57   }
58 
59   private final static Cache<Class<?>, Method> classToConvert = CacheBuilder.newBuilder()
60         .build(new CacheLoader<Class<?>, Method>() {
61 
62            @Override
63            public Method load(Class<?> from) throws ExecutionException {
64               try {
65                  Method method = from.getMethod("fromValue", String.class);
66                  method.setAccessible(true);
67                  return method;
68               } catch (Exception e) {
69                  throw new ExecutionException(e);
70               }
71            }
72 
73         });
74 
75   @Override
76   public String toString() {
77      return EnumTypeAdapterThatReturnsFromValue.class.getSimpleName();
78   }
79}

[all classes][org.jclouds.json.internal]
EMMA 2.0.5312 (C) Vladimir Roubtsov