You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2013/01/07 00:02:23 UTC

[5/5] git commit: ApiXmlDocWriter: Fix apidocs generation based on new commands.properties syntax

Updated Branches:
  refs/heads/api_refactoring b720675bf -> 6f6ed8583


ApiXmlDocWriter: Fix apidocs generation based on new commands.properties syntax

Makes it backward compatible to old syntax as well

Signed-off-by: Rohit Yadav <bh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/6f6ed858
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/6f6ed858
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/6f6ed858

Branch: refs/heads/api_refactoring
Commit: 6f6ed858399a1b9e44543ccc5d02d7ba3d8b46c4
Parents: b246ed7
Author: Rohit Yadav <bh...@apache.org>
Authored: Sun Jan 6 15:01:09 2013 -0800
Committer: Rohit Yadav <bh...@apache.org>
Committed: Sun Jan 6 15:01:09 2013 -0800

----------------------------------------------------------------------
 server/src/com/cloud/api/doc/ApiXmlDocWriter.java |   37 ++++++++++------
 1 files changed, 23 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/6f6ed858/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
index a6adcf7..b493ec4 100644
--- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
+++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
@@ -24,16 +24,7 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Properties;
-import java.util.TreeMap;
+import java.util.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -54,12 +45,14 @@ import org.apache.cloudstack.api.response.VolumeResponse;
 import com.cloud.serializer.Param;
 import com.google.gson.annotations.SerializedName;
 import com.thoughtworks.xstream.XStream;
+import org.reflections.Reflections;
 
 public class ApiXmlDocWriter {
     public static final Logger s_logger = Logger.getLogger(ApiXmlDocWriter.class.getName());
 
     private static final short DOMAIN_ADMIN_COMMAND = 4;
     private static final short USER_COMMAND = 8;
+    private static Map<String, Class<?>> _apiNameCmdClassMap = new HashMap<String, Class<?>>();
     private static LinkedHashMap<Object, String> all_api_commands = new LinkedHashMap<Object, String>();
     private static LinkedHashMap<Object, String> domain_admin_api_commands = new LinkedHashMap<Object, String>();
     private static LinkedHashMap<Object, String> regular_user_api_commands = new LinkedHashMap<Object, String>();
@@ -86,6 +79,16 @@ public class ApiXmlDocWriter {
     }
 
     public static void main(String[] args) {
+        // Populate api name and cmd class mappings
+        Reflections reflections = new Reflections("org.apache.cloudstack.api");
+        Set<Class<?>> cmdClasses = reflections.getTypesAnnotatedWith(APICommand.class);
+        reflections = new Reflections("com.cloud.api");
+        cmdClasses.addAll(reflections.getTypesAnnotatedWith(APICommand.class));
+        for(Class<?> cmdClass: cmdClasses) {
+            String apiName = cmdClass.getAnnotation(APICommand.class).name();
+            _apiNameCmdClassMap.put(apiName, cmdClass);
+        }
+
         LinkedProperties preProcessedCommands = new LinkedProperties();
         String[] fileNames = null;
 
@@ -125,13 +128,19 @@ public class ApiXmlDocWriter {
         while (propertiesIterator.hasNext()) {
             String key = (String) propertiesIterator.next();
             String preProcessedCommand = preProcessedCommands.getProperty(key);
-            String[] commandParts = preProcessedCommand.split(";");
-            String commandName = commandParts[0];
+            int splitIndex = preProcessedCommand.lastIndexOf(";");
+            String commandRoleMask = preProcessedCommand.substring(splitIndex + 1);
+            Class<?> cmdClass = _apiNameCmdClassMap.get(key);
+            if (cmdClass == null) {
+                System.out.println("Check, Null Value for key: " + key + " preProcessedCommand=" + preProcessedCommand);
+                continue;
+            }
+            String commandName = cmdClass.getName();
             all_api_commands.put(key, commandName);
 
             short cmdPermissions = 1;
-            if (commandParts.length > 1 && commandParts[1] != null) {
-                cmdPermissions = Short.parseShort(commandParts[1]);
+            if (commandRoleMask != null) {
+                cmdPermissions = Short.parseShort(commandRoleMask);
             }
 
             if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) {