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

Makes it backward compatible to old syntax as well

Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
This commit is contained in:
Rohit Yadav 2013-01-06 15:01:09 -08:00
parent b246ed7be7
commit 6f6ed85839

View File

@ -24,16 +24,7 @@ import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.*;
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.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
@ -54,12 +45,14 @@ import org.apache.cloudstack.api.response.VolumeResponse;
import com.cloud.serializer.Param; import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import org.reflections.Reflections;
public class ApiXmlDocWriter { public class ApiXmlDocWriter {
public static final Logger s_logger = Logger.getLogger(ApiXmlDocWriter.class.getName()); public static final Logger s_logger = Logger.getLogger(ApiXmlDocWriter.class.getName());
private static final short DOMAIN_ADMIN_COMMAND = 4; private static final short DOMAIN_ADMIN_COMMAND = 4;
private static final short USER_COMMAND = 8; 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> 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> domain_admin_api_commands = new LinkedHashMap<Object, String>();
private static LinkedHashMap<Object, String> regular_user_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) { 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(); LinkedProperties preProcessedCommands = new LinkedProperties();
String[] fileNames = null; String[] fileNames = null;
@ -125,13 +128,19 @@ public class ApiXmlDocWriter {
while (propertiesIterator.hasNext()) { while (propertiesIterator.hasNext()) {
String key = (String) propertiesIterator.next(); String key = (String) propertiesIterator.next();
String preProcessedCommand = preProcessedCommands.getProperty(key); String preProcessedCommand = preProcessedCommands.getProperty(key);
String[] commandParts = preProcessedCommand.split(";"); int splitIndex = preProcessedCommand.lastIndexOf(";");
String commandName = commandParts[0]; 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); all_api_commands.put(key, commandName);
short cmdPermissions = 1; short cmdPermissions = 1;
if (commandParts.length > 1 && commandParts[1] != null) { if (commandRoleMask != null) {
cmdPermissions = Short.parseShort(commandParts[1]); cmdPermissions = Short.parseShort(commandRoleMask);
} }
if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) {