Package org.exoplatform.ws.frameworks.json.value

Examples of org.exoplatform.ws.frameworks.json.value.JsonValue


   {
      Method[] methods = object.getClass().getMethods();

      List<String> transientFields = getTransientFields(object.getClass());

      JsonValue jsonRootValue = new ObjectValue();

      for (Method method : methods)
      {
         String methodName = method.getName();

         /*
          * Method must be as follow:
          * 1. Name starts from "get" plus at least one character or starts from
          * "is" plus at least one more character and return boolean type
          * 2. Must be without parameters
          * 3. Must not be in list of skipped methods
          */

         String key = null;
         if (!SKIP_METHODS.contains(methodName) && method.getParameterTypes().length == 0)
         {
            if (methodName.startsWith("get") && methodName.length() > 3)
            {
               key = methodName.substring(3);
            }
            else if (methodName.startsWith("is") && methodName.length() > 2
               && (method.getReturnType() == Boolean.class || method.getReturnType() == boolean.class))
            {
               key = methodName.substring(2);
            }
         }

         if (key != null)
         {
            // First letter of key to lower case.
            key = (key.length() > 1) ? Character.toLowerCase(key.charAt(0)) + key.substring(1) : key.toLowerCase();
            // Check is this field in list of transient field.
            if (!transientFields.contains(key))
            {
               try
               {
                  // Get result of invoke method get...
                  Object invokeResult = method.invoke(object, new Object[0]);

                  if (JsonUtils.getType(invokeResult) != null)
                  {
                     jsonRootValue.addElement(key, createJsonValue(invokeResult));
                  }
                  else
                  {
                     jsonRootValue.addElement(key, createJsonObject(invokeResult));
                  }

               }
               catch (InvocationTargetException e)
               {
View Full Code Here


         case STRING :
            return new StringValue((String)object);
         case ENUM :
            return new StringValue(((Enum)object).name());
         case ARRAY_BOOLEAN : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new BooleanValue(Array.getBoolean(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_BYTE : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new LongValue(Array.getByte(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_SHORT : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new LongValue(Array.getShort(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_INT : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new LongValue(Array.getInt(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_LONG : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new LongValue(Array.getLong(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_FLOAT : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new DoubleValue(Array.getFloat(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_DOUBLE : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new DoubleValue(Array.getDouble(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_CHAR : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new StringValue(Character.toString(Array.getChar(object, i))));
            }
            return jsonArray;
         }
         case ARRAY_STRING : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               jsonArray.addElement(new StringValue((String)Array.get(object, i)));
            }
            return jsonArray;
         }
         case ARRAY_OBJECT : {
            JsonValue jsonArray = new ArrayValue();
            int length = Array.getLength(object);
            for (int i = 0; i < length; i++)
            {
               Object el = Array.get(object, i);
               if (JsonUtils.getType(el) != null)
               {
                  jsonArray.addElement(createJsonValue(el));
               }
               else
               {
                  jsonArray.addElement(createJsonObject(el));
               }
            }

            return jsonArray;
         }
         case COLLECTION : {
            JsonValue jsonArray = new ArrayValue();
            List<Object> list = new ArrayList<Object>((Collection<?>)object);
            for (Object o : list)
            {
               if (JsonUtils.getType(o) != null)
               {
                  jsonArray.addElement(createJsonValue(o));
               }
               else
               {
                  jsonArray.addElement(createJsonObject(o));
               }
            }

            return jsonArray;
         }
         case MAP :
            JsonValue jsonObject = new ObjectValue();
            Map<String, Object> map = new HashMap<String, Object>((Map<String, Object>)object);
            Set<String> keys = map.keySet();
            for (String k : keys)
            {
               Object o = map.get(k);
               if (JsonUtils.getType(o) != null)
               {
                  jsonObject.addElement(k, createJsonValue(o));
               }
               else
               {
                  jsonObject.addElement(k, createJsonObject(o));
               }
            }

            return jsonObject;
         default :
View Full Code Here

            {
               throw new JsonException("Unsupported type of jsonValue for parameter of method " + clazz.getName() + "#"
                  + method.getName());
            }

            JsonValue childJsonValue = jsonValue.getElement(key);

            if (childJsonValue == null)
            {
               continue;
            }

            // if one of known primitive type or array of primitive type
            if (JsonUtils.isKnownType(methodParameterClazz))
            {
               method.invoke(object, new Object[]{createObjectKnownTypes(methodParameterClazz, childJsonValue)});
            }
            else
            {
               Types type = JsonUtils.getType(methodParameterClazz);
               // other type Collection, Map or Object[].
               if (type != null)
               {
                  switch (type)
                  {
                     case ENUM : {
                        Class c = methodParameterClazz;
                        Enum<?> en = Enum.valueOf(c, childJsonValue.getStringValue());
                        method.invoke(object, new Object[]{en});
                     }
                        break;
                     case ARRAY_OBJECT : {
                        Object array = createArray(methodParameterClazz, childJsonValue);
                        method.invoke(object, new Object[]{array});
                     }
                        break;
                     case COLLECTION : {
                        Type[] genericParameterTypes = method.getGenericParameterTypes();
                        Class<?> parameterizedTypeClass = null;
                        if (genericParameterTypes.length == 1)
                        {
                           if (genericParameterTypes[0] instanceof ParameterizedType)
                           {
                              ParameterizedType parameterizedType = (ParameterizedType)genericParameterTypes[0];
                              try
                              {
                                 // Collection can't be parameterized by other Collection,
                                 // Array, etc.
                                 parameterizedTypeClass = (Class<?>)parameterizedType.getActualTypeArguments()[0];
                              }
                              catch (ClassCastException e)
                              {
                                 throw new JsonException("Unsupported parameter in method " + clazz.getName() + "#"
                                    + method.getName()
                                    + ". This type of Collection can't be restored from JSON source.\n"
                                    + "Collection is parameterized by wrong Type: " + parameterizedType + ".");
                              }
                           }
                           else
                           {
                              throw new JsonException("Unsupported parameter in method " + clazz.getName() + "#"
                                 + method.getName() + ". Collection is not parameterized. "
                                 + "Collection<?> is not supported. \nCollection must be parameterized by"
                                 + " any types, or by JavaBean with 'get' and 'set' methods.");
                           }
                        }
                        Constructor<?> constructor = null;
                        if (methodParameterClazz.isInterface()
                           || Modifier.isAbstract(methodParameterClazz.getModifiers()))
                        {
                           try
                           {
                              constructor =
                                 ArrayList.class.asSubclass(methodParameterClazz).getConstructor(
                                    new Class[]{Collection.class});
                           }
                           catch (Exception e)
                           {
                              try
                              {
                                 constructor =
                                    HashSet.class.asSubclass(methodParameterClazz).getConstructor(
                                       new Class[]{Collection.class});
                              }
                              catch (Exception e1)
                              {
                                 try
                                 {
                                    constructor =
                                       LinkedList.class.asSubclass(methodParameterClazz).getConstructor(
                                          new Class[]{Collection.class});
                                 }
                                 catch (Exception e2)
                                 {
                                    // ignore exception here
                                 }
                              }
                           }
                        }
                        else
                        {
                           constructor = methodParameterClazz.getConstructor(new Class[]{Collection.class});
                        }
                        if (constructor == null)
                        {
                           throw new JsonException("Can't find satisfied constructor for : " + methodParameterClazz
                              + ", method : " + clazz.getName() + "#" + method.getName());
                        }

                        ArrayList<Object> sourceCollection = new ArrayList<Object>(childJsonValue.size());

                        Iterator<JsonValue> values = childJsonValue.getElements();

                        while (values.hasNext())
                        {
                           JsonValue v = values.next();
                           if (!JsonUtils.isKnownType(parameterizedTypeClass))
                           {
                              sourceCollection.add(createObject(parameterizedTypeClass, v));
                           }
                           else
                           {
                              sourceCollection.add(createObjectKnownTypes(parameterizedTypeClass, v));
                           }
                        }

                        constructor.newInstance(sourceCollection);
                        method.invoke(object, constructor.newInstance(sourceCollection));
                     }
                        break;
                     case MAP : {
                        Type[] genericParameterTypes = method.getGenericParameterTypes();
                        Class<?> parameterizedTypeClass = null;
                        if (genericParameterTypes.length == 1)
                        {
                           if (genericParameterTypes[0] instanceof ParameterizedType)
                           {
                              ParameterizedType parameterizedType = (ParameterizedType)genericParameterTypes[0];
                              if (!String.class
                                 .isAssignableFrom((Class<?>)parameterizedType.getActualTypeArguments()[0]))
                              {
                                 throw new JsonException("Unsupported parameter in method " + clazz.getName() + "#"
                                    + method.getName() + ". Key of Map must be String.");
                              }
                              try
                              {
                                 parameterizedTypeClass = (Class<?>)parameterizedType.getActualTypeArguments()[1];
                              }
                              catch (Exception e)
                              {
                                 throw new JsonException("Unsupported parameter in method " + clazz.getName() + "#"
                                    + method.getName() + ". This type of Map can't be restored from JSON source.\n"
                                    + "Map is parameterized by wrong Type: " + parameterizedType + ".");
                              }
                           }
                           else
                           {
                              throw new JsonException("Unsupported parameter in method " + clazz.getName() + "#"
                                 + method.getName() + ". Map is not parameterized. "
                                 + "Map<Sting, ?> is not supported. \nMap must be parameterized by"
                                 + "String and any types or JavaBean with 'get' and 'set' methods.");
                           }
                        }
                        Constructor<?> constructor = null;
                        if (methodParameterClazz.isInterface()
                           || Modifier.isAbstract(methodParameterClazz.getModifiers()))
                        {
                           try
                           {
                              constructor =
                                 HashMap.class.asSubclass(methodParameterClazz).getConstructor(new Class[]{Map.class});
                           }
                           catch (Exception e)
                           {
                              try
                              {
                                 constructor =
                                    Hashtable.class.asSubclass(methodParameterClazz).getConstructor(
                                       new Class[]{Map.class});
                              }
                              catch (Exception e1)
                              {
                                 try
                                 {
                                    constructor =
                                       LinkedHashMap.class.asSubclass(methodParameterClazz).getConstructor(
                                          new Class[]{Map.class});
                                 }
                                 catch (Exception e2)
                                 {
                                    // ignore exception here
                                 }
                              }
                           }
                        }
                        else
                        {
                           constructor = methodParameterClazz.getConstructor(new Class[]{Map.class});
                        }

                        if (constructor == null)
                        {
                           throw new JsonException("Can't find satisfied constructor for : " + methodParameterClazz
                              + ", method : " + clazz.getName() + "#" + method.getName());
                        }

                        HashMap<String, Object> sourceMap = new HashMap<String, Object>(childJsonValue.size());

                        Iterator<String> keys = childJsonValue.getKeys();

                        while (keys.hasNext())
                        {
                           String k = keys.next();
                           JsonValue v = childJsonValue.getElement(k);
                           if (!JsonUtils.isKnownType(parameterizedTypeClass))
                           {
                              sourceMap.put(k, createObject(parameterizedTypeClass, v));
                           }
                           else
View Full Code Here

      {
         if (JsonUtils.isKnownType(componentType))
         {
            while (values.hasNext())
            {
               JsonValue v = values.next();
               Array.set(array, i++, createObjectKnownTypes(componentType, v));
            }
         }
         else
         {
            while (values.hasNext())
            {
               JsonValue v = values.next();
               Array.set(array, i++, createArray(componentType, v));
            }
         }
      }
      else
      {
         while (values.hasNext())
         {
            JsonValue v = values.next();
            Array.set(array, i++, createObject(componentType, v));
         }
      }
      return array;
   }
View Full Code Here

      {
         JsonParserImpl parser = new JsonParserImpl();
         JsonDefaultHandler handler = new JsonDefaultHandler();

         parser.parse(entityStream, handler);
         JsonValue jsonValue = handler.getJsonObject();

         if (JsonValue.class.isAssignableFrom(type))
         {
            // If requested object is JsonValue then stop processing here.
            return jsonValue;
View Full Code Here

   public void writeTo(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType,
      MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException
   {
      try
      {
         JsonValue jsonValue = null;
         if (t instanceof JsonValue)
         {
            // Don't do any transformation if object is prepared JsonValue.
            jsonValue = (JsonValue)t;
         }
         else
         {
            JsonGeneratorImpl generator = new JsonGeneratorImpl();
            Types jtype = JsonUtils.getType(type);
            if (jtype == Types.ARRAY_BOOLEAN || jtype == Types.ARRAY_BYTE || jtype == Types.ARRAY_SHORT
               || jtype == Types.ARRAY_INT || jtype == Types.ARRAY_LONG || jtype == Types.ARRAY_FLOAT
               || jtype == Types.ARRAY_DOUBLE || jtype == Types.ARRAY_CHAR || jtype == Types.ARRAY_STRING
               || jtype == Types.ARRAY_OBJECT)
            {
               jsonValue = generator.createJsonArray(t);
            }
            else if (jtype == Types.COLLECTION)
            {
               jsonValue = generator.createJsonArray((Collection<?>)t);
            }
            else if (jtype == Types.MAP)
            {
               jsonValue = generator.createJsonObjectFromMap((Map<String, ?>)t);
            }
            else
            {
               jsonValue = generator.createJsonObject(t);
            }
         }
         JsonWriterImpl jsonWriter = new JsonWriterImpl(entityStream);
         jsonValue.writeTo(jsonWriter);
         jsonWriter.flush();
      }
      catch (JsonException e)
      {
         throw new IOException("Can't write to output stream " + e);
View Full Code Here

   {
      writer.writeStartObject();
      for (String key : children.keySet())
      {
         writer.writeKey(key);
         JsonValue v = children.get(key);
         v.writeTo(writer);
      }
      writer.writeEndObject();
   }
View Full Code Here

      {
         String stringRepositoryEntry = null;
         try
         {
            JsonGeneratorImpl generatorImpl = new JsonGeneratorImpl();
            JsonValue json = generatorImpl.createJsonObject(rEntry);
            stringRepositoryEntry = json.toString();
         }
         catch (JsonException e)
         {
            throw new RepositoryCreationException("Can not serialize repository entry: " + e.getMessage(), e);
         }
View Full Code Here

   {
      JsonHandler jsonHandler = new JsonDefaultHandler();
      JsonParser jsonParser = new JsonParserImpl();
      InputStream inputStream = new ByteArrayInputStream(data);
      jsonParser.parse(inputStream, jsonHandler);
      JsonValue jsonValue = jsonHandler.getJsonObject();

      return new BeanBuilder().createObject(cl, jsonValue);
   }
View Full Code Here

   public JsonValue createJsonArray(Collection<?> collection) throws JsonException
   {
      if (collection == null)
         return new NullValue();

      JsonValue jsonArray = new ArrayValue();
      for (Object o : collection)
      {
         // If :
         // 1. Known types (primitive, String, array of primitive or String)
         // 2. Array of any object (expect for Java Bean)
         // 3. Collection<?>
         // 4. Map<String, ?>
         if (JsonUtils.getType(o) != null)
            jsonArray.addElement(createJsonValue(o));
         else
            jsonArray.addElement(createJsonObject(o));
      }
      return jsonArray;
   }
View Full Code Here

TOP

Related Classes of org.exoplatform.ws.frameworks.json.value.JsonValue

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.