/** * Copyright (c) 1999, 2014 Claresco Corporation, Berkeley, California. All rights reserved. * * * XapiPersonJson.java Jul 11, 2014 * * Copyright 2014 Claresco Corporation, Berkeley, CA 94704. All Rights Reserved. * * This software is the proprietary information of Claresco Corporation. * Use is subject to license terms. * * Author : Rheza * */ package com.claresco.tinman.json; import java.lang.reflect.Type; import java.util.ArrayList; import com.claresco.tinman.lrs.XapiAccount; import com.claresco.tinman.lrs.XapiActor; import com.claresco.tinman.lrs.XapiIRI; import com.claresco.tinman.lrs.XapiPerson; import com.claresco.tinman.lrs.XapiStatement; import com.google.gson.JsonArray; 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.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; /** * XapiPersonJson * @author Rheza * * Description: * * * Status: * * */ public class XapiPersonJson implements JsonDeserializer<XapiPerson>, JsonSerializer<XapiPerson>{ /* (non-Javadoc) * @see com.google.gson.JsonSerializer#serialize(java.lang.Object, java.lang.reflect.Type, com.google.gson.JsonSerializationContext) */ @Override public JsonElement serialize(XapiPerson arg0, Type arg1, JsonSerializationContext arg2) { JsonObject theResult = new JsonObject(); theResult.addProperty("objectType", "Person"); if(arg0.hasNames()){ JsonArray theNamesJson = JsonUtility.convertToJsonArray(arg0.getNames()); if(theNamesJson.size() > 0){ theResult.add("name", theNamesJson); } } if(arg0.hasMboxes()){ JsonArray theMboxesJson = JsonUtility.convertToJsonArrayFromIRIList(arg0.getMboxes()); if(theMboxesJson.size() > 0){ theResult.add("mbox", theMboxesJson); } } if(arg0.hasMboxSha1sums()){ JsonArray theMboxSha1sumsJson = JsonUtility.convertToJsonArray(arg0.getMboxSha1sums()); if(theMboxSha1sumsJson.size() > 0){ theResult.add("mbox_sha1sum", theMboxSha1sumsJson); } } if(arg0.hasOpendIDs()){ JsonArray theOpenIDsJson = JsonUtility.convertToJsonArray(arg0.getOpenIDs()); if(theOpenIDsJson.size() > 0){ theResult.add("openid", theOpenIDsJson); } } if(arg0.hasAccounts()){ ArrayList<XapiAccount> theAccounts = arg0.getAccounts(); JsonArray theAccountsJson = new JsonArray(); for(XapiAccount a : theAccounts){ theAccountsJson.add(arg2.serialize(a, XapiAccount.class)); } if(theAccountsJson.size() > 0){ theResult.add("account", theAccountsJson); } } return theResult; } /* (non-Javadoc) * @see com.google.gson.JsonDeserializer#deserialize(com.google.gson.JsonElement, java.lang.reflect.Type, com.google.gson.JsonDeserializationContext) */ @Override public XapiPerson deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { if(arg0.isJsonObject()){ JsonObject theJsonObject = JsonUtility.convertJsonElementToJsonObject(arg0); ArrayList<String> theName = fillTheList("name", theJsonObject); ArrayList<String> theMboxSha1sum = fillTheList("mbox_sha1sum", theJsonObject); ArrayList<String> theOpenid = fillTheList("openid", theJsonObject); ArrayList<XapiIRI> theMbox = new ArrayList<XapiIRI>(); ArrayList<XapiAccount> theAccounts = new ArrayList<XapiAccount>(); JsonArray theArray; if(JsonUtility.hasElement(theJsonObject, "mbox")){ theArray = JsonUtility.getAnArray(theJsonObject, "mbox"); for(JsonElement e : theArray){ if(!e.isJsonNull()){ String theEmailAddress = e.getAsString(); if(!theEmailAddress.startsWith("mailto:")){ throw new XapiBadIdentifierException("Mbox has to start with \'mailto:\'"); } theMbox.add(new XapiIRI(e.getAsString())); } } } if(JsonUtility.hasElement(theJsonObject, "account")){ theArray = JsonUtility.getAnArray(theJsonObject, "account"); for(JsonElement e : theArray){ theAccounts.add((XapiAccount) JsonUtility.delegateDeserialization(arg2, e, XapiAccount.class)); } } return new XapiPerson(theName, theMbox, theMboxSha1sum, theOpenid, theAccounts); }else{ throw new XapiBadPersonException("XapiPerson should be a JSON object"); } } private ArrayList<String> fillTheList(String key, JsonObject theObject){ ArrayList<String> theList = new ArrayList<String>(); if(JsonUtility.hasElement(theObject, key)){ JsonElement theElement = JsonUtility.get(theObject, key); if(theElement.isJsonArray()){ JsonArray theArray = JsonUtility.getAnArray(theObject, key); for(JsonElement e : theArray){ theList.add(e.getAsString()); } } } return theList; } }