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 }