001    package com.khubla.pragmatach.plugin.cluster.serialization;
002    
003    import java.lang.reflect.Field;
004    
005    import org.apache.commons.beanutils.BeanUtils;
006    import org.json.JSONObject;
007    
008    import com.khubla.pragmatach.framework.api.PragmatachException;
009    
010    /**
011     * @author tome
012     */
013    public class GenericJSONSerializer<T> {
014       /**
015        * deserialize
016        */
017       public T deserialize(T t, String json) throws PragmatachException {
018          try {
019             final JSONObject jsonObject = new JSONObject(json);
020             final Field[] fields = t.getClass().getDeclaredFields();
021             for (final Field field : fields) {
022                if (false == java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
023                   final String value = jsonObject.getString(field.getName());
024                   if (value != JSONObject.NULL) {
025                      BeanUtils.setProperty(t, field.getName(), value);
026                   } else {
027                      BeanUtils.setProperty(t, field.getName(), null);
028                   }
029                }
030             }
031             return t;
032          } catch (final Exception e) {
033             throw new PragmatachException("Exception in deserialize", e);
034          }
035       }
036    
037       /**
038        * serialize object to JSON
039        */
040       public String serialize(T t) throws PragmatachException {
041          try {
042             final JSONObject jsonObject = new JSONObject();
043             /*
044              * values
045              */
046             final Field[] fields = t.getClass().getDeclaredFields();
047             for (final Field field : fields) {
048                if (false == java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
049                   final String value = BeanUtils.getProperty(t, field.getName());
050                   if (null != value) {
051                      jsonObject.put(field.getName(), value);
052                   } else {
053                      jsonObject.put(field.getName(), JSONObject.NULL);
054                   }
055                }
056             }
057             /*
058              * done
059              */
060             return jsonObject.toString();
061          } catch (final Exception e) {
062             throw new PragmatachException("Exception in serialize", e);
063          }
064       }
065    }