diff --git a/server/src/com/cloud/api/doc/ApiXmlDocReader.java b/server/src/com/cloud/api/doc/ApiXmlDocReader.java index a9e49b2cf32..a8aa97bd584 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocReader.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocReader.java @@ -30,6 +30,7 @@ import java.util.Iterator; import java.util.List; import java.util.Arrays; +import com.google.gson.Gson; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; @@ -45,6 +46,8 @@ public class ApiXmlDocReader { ArrayList addedCommands = new ArrayList(); ArrayList removedCommands = new ArrayList(); HashMap stableCommands = new HashMap(); + HashMap jsonOut = new HashMap(); + Gson gson = new Gson(); XStream xs = new XStream(new DomDriver()); xs.alias("command", Command.class); @@ -108,49 +111,69 @@ public class ApiXmlDocReader { } try (FileWriter fstream = new FileWriter(dirName + "/diff.txt"); - BufferedWriter out = new BufferedWriter(fstream);){ + BufferedWriter out = new BufferedWriter(fstream); + FileWriter jfstream = new FileWriter(dirName + "/diff.json"); + BufferedWriter json = new BufferedWriter(jfstream);){ // Print added commands out.write("Added commands:\n"); + ArrayList> addedCmds = new ArrayList>(); for (Command c : addedCommands) { + HashMap addedCmd = new HashMap(); if (c.getDescription() != null && !c.getDescription().isEmpty()) { out.write("\n " + c.getName() + " (" + c.getDescription() + ")\n"); + addedCmd.put("description", c.getDescription()); } else { out.write("\n " + c.getName() + "\n"); } - + addedCmd.put("name", c.getName()); + addedCmds.add(addedCmd); } + jsonOut.put("commands_added", addedCmds); // Print removed commands out.write("\nRemoved commands:\n"); + ArrayList> removedCmds = new ArrayList>(); for (Command c : removedCommands) { + HashMap removedCmd = new HashMap(); if (c.getDescription() != null && !c.getDescription().isEmpty()) { out.write("\n\t" + c.getName() + " (" + c.getDescription() + ")\n"); + removedCmd.put("description", c.getDescription()); } else { out.write("\n\t" + c.getName() + "\n"); } - + removedCmd.put("name", c.getName()); + removedCmds.add(removedCmd); } + jsonOut.put("commands_removed", removedCmds); out.write("\nChanges in command type (sync versus async)\n"); + ArrayList> syncChangeCmds = new ArrayList>(); // Verify if the command was sync and became async and vice versa for (Map.Entryentry : stableCommands.entrySet()) { if (commands.get(entry.getKey()).isAsync() != oldCommands.get(entry.getKey()).isAsync()) { + HashMap syncChangeCmd = new HashMap(); String type = "Sync"; if (commands.get(entry.getKey()).isAsync()) { type = "Async"; } + syncChangeCmd.put("name", entry.getValue().getName()); + syncChangeCmd.put("sync_type", type); + syncChangeCmds.add(syncChangeCmd); out.write("\n\t" + entry.getValue().getName() + " became " + type); } } + jsonOut.put("commands_sync_changed", syncChangeCmds); // Print differences between commands arguments out.write("\n\nChanges in commands arguments:\n"); + ArrayList> argsChangeCmds = new ArrayList>(); for (String key : stableCommands.keySet()) { ArrayList newReqArgs = new ArrayList(); ArrayList removedReqArgs = new ArrayList(); HashMap stableReqArgs = new HashMap(); ArrayList newRespArgs = new ArrayList(); ArrayList removedRespArgs = new ArrayList(); + HashMap argsChangeCmd = new HashMap(); Command newCommand = commands.get(key); Command oldCommand = oldCommands.get(key); @@ -208,22 +231,30 @@ public class ApiXmlDocReader { commandInfo.append("\n\t" + key); out.write(commandInfo.toString()); out.write("\n"); + argsChangeCmd.put("name", key); // Request if (newReqArgs.size() != 0 || removedReqArgs.size() != 0 || stableReqArgs.size() != 0) { + HashMap requestChanges = new HashMap(); StringBuffer request = new StringBuffer(); request.append("\n\t\tRequest:\n"); out.write(request.toString()); if (newReqArgs.size() != 0) { StringBuffer newParameters = new StringBuffer(); newParameters.append("\n\t\t\tNew parameters: "); + ArrayList> newRequestParams = new ArrayList>(); for (Argument newArg : newReqArgs) { + HashMap newRequestParam = new HashMap(); String isRequiredParam = "optional"; if (newArg.isRequired()) { isRequiredParam = "required"; } + newRequestParam.put("name", newArg.getName()); + newRequestParam.put("required", newArg.isRequired()); + newRequestParams.add(newRequestParam); newParameters.append(newArg.getName() + " (" + isRequiredParam + "), "); } + requestChanges.put("params_new", newRequestParams); newParameters.delete(newParameters.length() - 2, newParameters.length() - 1); out.write(newParameters.toString()); out.write("\n"); @@ -231,9 +262,14 @@ public class ApiXmlDocReader { if (removedReqArgs.size() != 0) { StringBuffer removedParameters = new StringBuffer(); removedParameters.append("\n\t\t\tRemoved parameters: "); + ArrayList> removedRequestParams = new ArrayList>(); for (Argument removedArg : removedReqArgs) { + HashMap removedRequestParam = new HashMap(); + removedRequestParam.put("name", removedArg.getName()); + removedRequestParams.add(removedRequestParam); removedParameters.append(removedArg.getName() + ", "); } + requestChanges.put("params_removed", removedRequestParams); removedParameters.delete(removedParameters.length() - 2, removedParameters.length() - 1); out.write(removedParameters.toString()); out.write("\n"); @@ -242,52 +278,78 @@ public class ApiXmlDocReader { if (stableReqArgs.size() != 0) { StringBuffer changedParameters = new StringBuffer(); changedParameters.append("\n\t\t\tChanged parameters: "); + ArrayList> changedRequestParams = new ArrayList>(); for (Argument stableArg : stableReqArgs.values()) { + HashMap changedRequestParam = new HashMap(); String newRequired = "optional"; String oldRequired = "optional"; - if ((oldCommand.getReqArgByName(stableArg.getName()) != null) && (oldCommand.getReqArgByName(stableArg.getName()).isRequired() == true)) + changedRequestParam.put("required_old", false); + changedRequestParam.put("required_new", false); + if ((oldCommand.getReqArgByName(stableArg.getName()) != null) && (oldCommand.getReqArgByName(stableArg.getName()).isRequired() == true)) { oldRequired = "required"; - if ((newCommand.getReqArgByName(stableArg.getName()) != null) && (newCommand.getReqArgByName(stableArg.getName()).isRequired() == true)) + changedRequestParam.put("required_old", true); + } + if ((newCommand.getReqArgByName(stableArg.getName()) != null) && (newCommand.getReqArgByName(stableArg.getName()).isRequired() == true)) { newRequired = "required"; + changedRequestParam.put("required_new", true); + } + changedRequestParam.put("name", stableArg.getName()); + changedRequestParams.add(changedRequestParam); changedParameters.append(stableArg.getName() + " (old version - " + oldRequired + ", new version - " + newRequired + "), "); } + requestChanges.put("params_changed", changedRequestParams); changedParameters.delete(changedParameters.length() - 2, changedParameters.length() - 1); out.write(changedParameters.toString()); out.write("\n"); } + argsChangeCmd.put("request", requestChanges); } // Response if (newRespArgs.size() != 0 || removedRespArgs.size() != 0) { + HashMap responseChanges = new HashMap(); StringBuffer changedResponseParams = new StringBuffer(); changedResponseParams.append("\n\t\tResponse:\n"); out.write(changedResponseParams.toString()); if (newRespArgs.size() != 0) { + ArrayList> newResponseParams = new ArrayList>(); StringBuffer newRespParams = new StringBuffer(); newRespParams.append("\n\t\t\tNew parameters: "); for (Argument newArg : newRespArgs) { + HashMap newResponseParam = new HashMap(); + newResponseParam.put("name", newArg.getName()); + newResponseParams.add(newResponseParam); newRespParams.append(newArg.getName() + ", "); } + responseChanges.put("params_new", newResponseParams); newRespParams.delete(newRespParams.length() - 2, newRespParams.length() - 1); out.write(newRespParams.toString()); out.write("\n"); } if (removedRespArgs.size() != 0) { + ArrayList> removedResponseParams = new ArrayList>(); StringBuffer removedRespParams = new StringBuffer(); removedRespParams.append("\n\t\t\tRemoved parameters: "); for (Argument removedArg : removedRespArgs) { + HashMap removedResponseParam = new HashMap(); + removedResponseParam.put("name", removedArg.getName()); + removedResponseParams.add(removedResponseParam); removedRespParams.append(removedArg.getName() + ", "); } + responseChanges.put("params_removed", removedResponseParams); removedRespParams.delete(removedRespParams.length() - 2, removedRespParams.length() - 1); out.write(removedRespParams.toString()); out.write("\n"); } + argsChangeCmd.put("response", responseChanges); } + argsChangeCmds.add(argsChangeCmd); } } + jsonOut.put("commands_args_changed", argsChangeCmds); + json.write(gson.toJson(jsonOut)); } catch (IOException e) { e.printStackTrace(); } - } }