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) {