/** * ClarescoExperienceAPI * Copyright * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * Please contact Claresco, www.claresco.com, if you have any questions. **/ package com.claresco.tinman.json; import java.io.BufferedReader; import java.io.FileReader; import java.lang.reflect.Type; import java.util.UUID; import com.claresco.tinman.lrs.XapiActor; import com.claresco.tinman.lrs.XapiContext; import com.claresco.tinman.lrs.XapiContextActivities; import com.claresco.tinman.lrs.XapiExtension; import com.claresco.tinman.lrs.XapiGroup; import com.claresco.tinman.lrs.XapiStatementRef; import com.google.gson.Gson; 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.JsonSerializationContext; import com.google.gson.JsonSerializer; /** * XapiContextJson.java * * * * * * @author rheza * on Mar 5, 2014 * */ public class XapiContextJson implements JsonSerializer<XapiContext>, JsonDeserializer<XapiContext>{ /* (non-Javadoc) * @see com.google.gson.JsonSerializer#serialize(java.lang.Object, java.lang.reflect.Type, com.google.gson.JsonSerializationContext) */ @Override public JsonElement serialize(XapiContext arg0, Type arg1, JsonSerializationContext arg2) { JsonObject result = new JsonObject(); if(arg0.hasInstructor()){ result.add("instructor", arg2.serialize(arg0.getInstructor(), XapiActor.class)); } if(arg0.hasTeam()){ result.add("team", arg2.serialize(arg0.getTeam(), XapiGroup.class)); } if(arg0.hasRegistration()){ result.addProperty("registration", arg0.getRegistration().toString()); } if(arg0.hasRevision()){ result.addProperty("revision", arg0.getRevision()); } if(arg0.hasPlatform()){ result.addProperty("platform", arg0.getPlatform()); } if(arg0.hasLanguage()){ result.addProperty("language", arg0.getLanguage()); } if(arg0.hasContextActivities()){ result.add("contextActivities", arg2.serialize(arg0.getContextActivities(), XapiContextActivities.class)); } if(arg0.hasStatementReference()){ result.add("statement", arg2.serialize(arg0.getStatementReference(), XapiStatementRef.class)); } return result; } /* (non-Javadoc) * @see com.google.gson.JsonDeserializer#deserialize(com.google.gson.JsonElement, java.lang.reflect.Type, com.google.gson.JsonDeserializationContext) */ @Override public XapiContext deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { JsonObject theContext = JsonUtility.convertJsonElementToJsonObject(arg0); JsonElement theElement; String theUUIDString = ""; UUID theRegistration = null; if(JsonUtility.hasElement(theContext, "registration")){ try{ theUUIDString = JsonUtility.getElementAsString(theContext, "registration"); theRegistration = UUID.fromString(theUUIDString); }catch(IllegalArgumentException e){ String theMessage = "Bad UUID in context : "; if(theUUIDString == null){ theMessage += "the UUID is null"; } else if(theUUIDString.isEmpty()){ theMessage += "the UUID is empty"; } else{ theMessage += "the UUID is invalid "; } throw new XapiBadUUIDException(theMessage); } } XapiActor theInstructor = null; if(JsonUtility.hasElement(theContext, "instructor")){ theElement = JsonUtility.get(theContext, "instructor"); theInstructor = JsonUtility.delegateDeserialization(arg2, theElement, XapiActor.class); } XapiGroup theTeam = null; if(JsonUtility.hasElement(theContext, "team")){ theElement = JsonUtility.get(theContext, "team"); theTeam = JsonUtility.delegateDeserialization(arg2, theElement, XapiGroup.class); } String theRevision = JsonUtility.getElementAsString(theContext, "revision"); String thePlatform = JsonUtility.getElementAsString(theContext, "platform"); String theLanguage = JsonUtility.getElementAsString(theContext, "language"); XapiContextActivities theContextActivities = null; if(JsonUtility.hasElement(theContext, "contextActivities")){ theContextActivities = JsonUtility.delegateDeserialization(arg2, theContext.get("contextActivities"), XapiContextActivities.class); } XapiStatementRef theStatementReference = null; if(JsonUtility.hasElement(theContext, "statement")){ theElement = JsonUtility.get(theContext, "statement"); theStatementReference = JsonUtility.delegateDeserialization(arg2, theElement, XapiStatementRef.class); } XapiExtension theExtension = null; if(JsonUtility.hasElement(theContext, "extensions")){ theElement = JsonUtility.get(theContext, "extensions"); theExtension = JsonUtility.delegateDeserialization(arg2, theElement, XapiExtension.class); } return new XapiContext(theInstructor, theTeam, theRegistration, theRevision, theLanguage, thePlatform, theContextActivities, theStatementReference, theExtension); } public static void main(String[] args) { Gson gson = JsonUtility.createGson(); String path = "/Users/rheza/Documents/workspace/ClarescoExperienceAPI/src/com/claresco/tinman/json/Context.json"; try{ BufferedReader bf = new BufferedReader(new FileReader(path)); XapiContext s = gson.fromJson(bf, XapiContext.class); System.out.println(s); String json = gson.toJson(s); System.out.println(json); }catch(Exception e){ e.printStackTrace(); } } }