You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ki...@apache.org on 2013/01/28 13:22:51 UTC

[44/50] [abbrv] Apply API refactoring changes. Make changes to Regions API to work with new code

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/api/src/org/apache/cloudstack/api/response/FindUserResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/FindUserResponse.java b/api/src/org/apache/cloudstack/api/response/FindUserResponse.java
new file mode 100644
index 0000000..c60caab
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/response/FindUserResponse.java
@@ -0,0 +1,193 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.response;
+
+import java.util.Date;
+
+import org.apache.cloudstack.api.BaseResponse;
+import org.apache.cloudstack.api.EntityReference;
+
+import com.cloud.serializer.Param;
+import com.cloud.user.User;
+import com.google.gson.annotations.SerializedName;
+
+@EntityReference(value = User.class)
+public class FindUserResponse extends BaseResponse {
+    @SerializedName("id") @Param(description="the user ID")
+    private String id ;
+
+    @SerializedName("username") @Param(description="the user name")
+    private String username;
+
+    @SerializedName("password") @Param(description="the password of the user")
+    private String password;
+    
+    @SerializedName("firstname") @Param(description="the user firstname")
+    private String firstname;
+
+    @SerializedName("lastname") @Param(description="the user lastname")
+    private String lastname;
+
+    @SerializedName("accountId") @Param(description="the account ID of the user")
+    private String accountId;
+    
+    @SerializedName("email") @Param(description="the user email address")
+    private String email;
+
+    @SerializedName("state") @Param(description="the user state")
+    private String state;
+
+    @SerializedName("apikey") @Param(description="the api key of the user")
+    private String apiKey;
+
+    @SerializedName("secretkey") @Param(description="the secret key of the user")
+    private String secretKey;
+ 
+    @SerializedName("created") @Param(description="the date and time the user account was created")
+    private Date created;
+
+    @SerializedName("timezone") @Param(description="the timezone user was created in")
+    private String timezone;
+    
+    @SerializedName("registrationtoken") @Param(description="the registration token")
+    private String registrationToken;
+    
+    @SerializedName("registered") @Param(description="registration flag")
+    boolean registered;
+    
+    @SerializedName("regionId") @Param(description="source region id of the user")
+    private int regionId;
+    
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getTimezone() {
+        return timezone;
+    }
+
+    public void setTimezone(String timezone) {
+        this.timezone = timezone;
+    }
+
+    public String getApiKey() {
+        return apiKey;
+    }
+
+    public void setApiKey(String apiKey) {
+        this.apiKey = apiKey;
+    }
+
+    public String getSecretKey() {
+        return secretKey;
+    }
+
+    public void setSecretKey(String secretKey) {
+        this.secretKey = secretKey;
+    }
+    public String getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(String accountId) {
+        this.accountId = accountId;
+    }
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getRegistrationToken() {
+		return registrationToken;
+	}
+
+	public void setRegistrationToken(String registrationToken) {
+		this.registrationToken = registrationToken;
+	}
+
+	public boolean isRegistered() {
+		return registered;
+	}
+
+	public void setRegistered(boolean registered) {
+		this.registered = registered;
+	}
+
+	public int getRegionId() {
+		return regionId;
+	}
+
+	public void setRegionId(int regionId) {
+		this.regionId = regionId;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/api/src/org/apache/cloudstack/api/response/RegionResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/RegionResponse.java b/api/src/org/apache/cloudstack/api/response/RegionResponse.java
new file mode 100644
index 0000000..cbd14b6
--- /dev/null
+++ b/api/src/org/apache/cloudstack/api/response/RegionResponse.java
@@ -0,0 +1,59 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.response;
+
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseResponse;
+
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
+
+public class RegionResponse extends BaseResponse {
+    @SerializedName(ApiConstants.ID) @Param(description="the ID of the region")
+    private Integer id;
+
+    @SerializedName(ApiConstants.NAME) @Param(description="the name of the region")
+    private String name;
+
+    @SerializedName(ApiConstants.END_POINT) @Param(description="the end point of the region")
+    private String endPoint;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getEndPoint() {
+		return endPoint;
+	}
+
+	public void setEndPoint(String endPoint) {
+		this.endPoint = endPoint;
+	}
+
+  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index cae27bd..3706d4f 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -60,80 +60,6 @@ import com.cloud.api.query.vo.UserAccountJoinVO;
 import com.cloud.api.query.vo.UserVmJoinVO;
 import com.cloud.api.query.vo.VolumeJoinVO;
 import com.cloud.api.response.ApiResponseSerializer;
-<<<<<<< HEAD
-import com.cloud.api.response.AsyncJobResponse;
-import com.cloud.api.response.CapabilityResponse;
-import com.cloud.api.response.CapacityResponse;
-import com.cloud.api.response.ClusterResponse;
-import com.cloud.api.response.ConfigurationResponse;
-import com.cloud.api.response.ControlledEntityResponse;
-import com.cloud.api.response.CreateCmdResponse;
-import com.cloud.api.response.DiskOfferingResponse;
-import com.cloud.api.response.DomainResponse;
-import com.cloud.api.response.DomainRouterResponse;
-import com.cloud.api.response.EventResponse;
-import com.cloud.api.response.ExtractResponse;
-import com.cloud.api.response.FindAccountResponse;
-import com.cloud.api.response.FindDomainResponse;
-import com.cloud.api.response.FindUserResponse;
-import com.cloud.api.response.FirewallResponse;
-import com.cloud.api.response.FirewallRuleResponse;
-import com.cloud.api.response.HostResponse;
-import com.cloud.api.response.HypervisorCapabilitiesResponse;
-import com.cloud.api.response.IPAddressResponse;
-import com.cloud.api.response.InstanceGroupResponse;
-import com.cloud.api.response.IpForwardingRuleResponse;
-import com.cloud.api.response.LBStickinessPolicyResponse;
-import com.cloud.api.response.LBStickinessResponse;
-import com.cloud.api.response.LDAPConfigResponse;
-import com.cloud.api.response.ListResponse;
-import com.cloud.api.response.LoadBalancerResponse;
-import com.cloud.api.response.NetworkACLResponse;
-import com.cloud.api.response.NetworkOfferingResponse;
-import com.cloud.api.response.NetworkResponse;
-import com.cloud.api.response.NicResponse;
-import com.cloud.api.response.PhysicalNetworkResponse;
-import com.cloud.api.response.PodResponse;
-import com.cloud.api.response.PrivateGatewayResponse;
-import com.cloud.api.response.ProjectAccountResponse;
-import com.cloud.api.response.ProjectInvitationResponse;
-import com.cloud.api.response.ProjectResponse;
-import com.cloud.api.response.ProviderResponse;
-import com.cloud.api.response.RegionResponse;
-import com.cloud.api.response.RemoteAccessVpnResponse;
-import com.cloud.api.response.ResourceCountResponse;
-import com.cloud.api.response.ResourceLimitResponse;
-import com.cloud.api.response.ResourceTagResponse;
-import com.cloud.api.response.SecurityGroupResponse;
-import com.cloud.api.response.SecurityGroupResultObject;
-import com.cloud.api.response.SecurityGroupRuleResponse;
-import com.cloud.api.response.SecurityGroupRuleResultObject;
-import com.cloud.api.response.ServiceOfferingResponse;
-import com.cloud.api.response.ServiceResponse;
-import com.cloud.api.response.Site2SiteCustomerGatewayResponse;
-import com.cloud.api.response.Site2SiteVpnConnectionResponse;
-import com.cloud.api.response.Site2SiteVpnGatewayResponse;
-import com.cloud.api.response.SnapshotPolicyResponse;
-import com.cloud.api.response.SnapshotResponse;
-import com.cloud.api.response.StaticRouteResponse;
-import com.cloud.api.response.StorageNetworkIpRangeResponse;
-import com.cloud.api.response.StoragePoolResponse;
-import com.cloud.api.response.SwiftResponse;
-import com.cloud.api.response.SystemVmInstanceResponse;
-import com.cloud.api.response.SystemVmResponse;
-import com.cloud.api.response.TemplatePermissionsResponse;
-import com.cloud.api.response.TemplateResponse;
-import com.cloud.api.response.TrafficTypeResponse;
-import com.cloud.api.response.UserResponse;
-import com.cloud.api.response.UserVmResponse;
-import com.cloud.api.response.VirtualRouterProviderResponse;
-import com.cloud.api.response.VlanIpRangeResponse;
-import com.cloud.api.response.VolumeResponse;
-import com.cloud.api.response.VpcOfferingResponse;
-import com.cloud.api.response.VpcResponse;
-import com.cloud.api.response.VpnUsersResponse;
-import com.cloud.api.response.ZoneResponse;
-=======
 import org.apache.cloudstack.api.response.AsyncJobResponse;
 import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
 import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
@@ -151,6 +77,9 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.DomainRouterResponse;
 import org.apache.cloudstack.api.response.EventResponse;
 import org.apache.cloudstack.api.response.ExtractResponse;
+import org.apache.cloudstack.api.response.FindAccountResponse;
+import org.apache.cloudstack.api.response.FindDomainResponse;
+import org.apache.cloudstack.api.response.FindUserResponse;
 import org.apache.cloudstack.api.response.FirewallResponse;
 import org.apache.cloudstack.api.response.FirewallRuleResponse;
 import org.apache.cloudstack.api.response.GuestOSResponse;
@@ -174,6 +103,7 @@ import org.apache.cloudstack.api.response.ProjectAccountResponse;
 import org.apache.cloudstack.api.response.ProjectInvitationResponse;
 import org.apache.cloudstack.api.response.ProjectResponse;
 import org.apache.cloudstack.api.response.ProviderResponse;
+import org.apache.cloudstack.api.response.RegionResponse;
 import org.apache.cloudstack.api.response.RemoteAccessVpnResponse;
 import org.apache.cloudstack.api.response.ResourceCountResponse;
 import org.apache.cloudstack.api.response.ResourceLimitResponse;
@@ -208,7 +138,6 @@ import org.apache.cloudstack.api.response.VpnUsersResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
 
 import org.apache.cloudstack.api.response.S3Response;
->>>>>>> master
 import com.cloud.async.AsyncJob;
 import com.cloud.capacity.Capacity;
 import com.cloud.capacity.CapacityVO;
@@ -2828,12 +2757,6 @@ public class ApiResponseHelper implements ResponseGenerator {
         response.setObjectName("storagenetworkiprange");
         return response;
     }
-<<<<<<< HEAD
-    
-    @Override
-    public Long getIdentiyId(String tableName, String token) {
-        return ApiDispatcher.getIdentiyId(tableName, token);
-    }
 
 	@Override
 	public RegionResponse createRegionResponse(Region region) {
@@ -2844,8 +2767,6 @@ public class ApiResponseHelper implements ResponseGenerator {
 		response.setObjectName("region");
 		return response;
 	}
-=======
->>>>>>> master
 
     @Override
     public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) {
@@ -3225,17 +3146,19 @@ public class ApiResponseHelper implements ResponseGenerator {
         response.setObjectName("vpnconnection");
         return response;
     }
-<<<<<<< HEAD
     
     @Override
     public FindUserResponse createFindUserResponse(User user) {
     	FindUserResponse userResponse = new FindUserResponse();
-    	userResponse.setId(user.getId());
+    	userResponse.setId(user.getUuid());
     	userResponse.setUsername(user.getUsername());
     	userResponse.setPassword(user.getPassword());
         userResponse.setFirstname(user.getFirstname());        
         userResponse.setLastname(user.getLastname());
-        userResponse.setAccountId(user.getAccountId());
+        Account account = ApiDBUtils.findAccountById(user.getAccountId());
+        if(account != null){
+        	userResponse.setAccountId(account.getUuid());
+        }
         userResponse.setEmail(user.getEmail());
         userResponse.setState(user.getState().toString());
         userResponse.setApiKey(user.getApiKey());
@@ -3253,11 +3176,17 @@ public class ApiResponseHelper implements ResponseGenerator {
 	@Override
 	public FindAccountResponse createFindAccountResponse(Account account) {
 		FindAccountResponse accountResponse = new FindAccountResponse();
-		accountResponse.setId(account.getId());
+		accountResponse.setId(account.getUuid());
 		accountResponse.setName(account.getAccountName());
 		accountResponse.setAccountType(account.getType());
-		accountResponse.setDefaultZone(account.getDefaultZoneId());
-		accountResponse.setDomainId(account.getDomainId());
+		DataCenterVO zone = ApiDBUtils.findZoneById(account.getDefaultZoneId());
+		if(zone != null){
+			accountResponse.setDefaultZoneId(zone.getUuid());			
+		}
+		Domain domain = ApiDBUtils.findDomainById(account.getDomainId());
+		if(domain != null){
+			accountResponse.setDomainId(domain.getUuid());
+		}
 		accountResponse.setRegionId(account.getRegionId());
 		accountResponse.setState(account.getState().toString());
 		accountResponse.setObjectName("account");
@@ -3268,18 +3197,18 @@ public class ApiResponseHelper implements ResponseGenerator {
 	public FindDomainResponse createFindDomainResponse(Domain domain) {
 		FindDomainResponse domainResponse = new FindDomainResponse();
         domainResponse.setDomainName(domain.getName());
-        domainResponse.setId(domain.getId());
+        domainResponse.setId(domain.getUuid());
         domainResponse.setLevel(domain.getLevel());
         domainResponse.setNetworkDomain(domain.getNetworkDomain());
-        domainResponse.setParent(domain.getParent());
+        Domain parentDomain = ApiDBUtils.findDomainById(domain.getParent());
+        if (parentDomain != null) {
+            domainResponse.setParent(parentDomain.getUuid());
+        }
         domainResponse.setPath(domain.getPath());
         domainResponse.setObjectName("domain");
         domainResponse.setRegionId(domain.getRegionId());
 		return domainResponse;
 	}
-=======
-
-
 
     @Override
     public GuestOSResponse createGuestOSResponse(GuestOS guestOS) {
@@ -3319,6 +3248,4 @@ public class ApiResponseHelper implements ResponseGenerator {
         return response;
     }
 
-
->>>>>>> master
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index 93089a1..07b89c3 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -162,7 +162,7 @@ public class ApiServer implements HttpRequestHandler {
 
     private Account _systemAccount = null;
     private User _systemUser = null;
-    private RegionManager _regionMgr = null;
+    @Inject private RegionManager _regionMgr = null;
     
     private static int _workerCount = 0;
     private static ApiServer s_instance = null;
@@ -197,8 +197,6 @@ public class ApiServer implements HttpRequestHandler {
         _systemAccount = _accountMgr.getSystemAccount();
         _systemUser = _accountMgr.getSystemUser();
         _dispatcher = ApiDispatcher.getInstance();
-        _domainMgr = ComponentLocator.inject(DomainManager.class);
-        _regionMgr = ComponentLocator.inject(RegionManager.class);
 
         Integer apiPort = null; // api port, null by default
         ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/server/src/com/cloud/api/MockApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/MockApiServer.java b/server/src/com/cloud/api/MockApiServer.java
index 23b78a4..52d6b57 100755
--- a/server/src/com/cloud/api/MockApiServer.java
+++ b/server/src/com/cloud/api/MockApiServer.java
@@ -40,6 +40,12 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.BaseListCmd;
+import org.apache.cloudstack.api.ResponseObject;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.ExceptionResponse;
 import org.apache.http.ConnectionClosedException;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
@@ -68,571 +74,566 @@ import org.apache.http.protocol.ResponseServer;
 import org.apache.log4j.Logger;
 
 import com.cloud.api.response.ApiResponseSerializer;
-import com.cloud.api.response.ExceptionResponse;
-import com.cloud.async.AsyncJobManager;
 import com.cloud.cluster.StackMaid;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.ConfigurationVO;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.PermissionDeniedException;
-import com.cloud.region.RegionManager;
 import com.cloud.server.ManagementService;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
-import com.cloud.user.DomainManager;
 import com.cloud.user.User;
 import com.cloud.user.UserContext;
-import com.cloud.utils.IdentityProxy;
 import com.cloud.utils.PropertiesUtil;
 import com.cloud.utils.component.ComponentLocator;
 import com.cloud.utils.concurrency.NamedThreadFactory;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.exception.CSExceptionErrorCode;
 
-public class MockApiServer implements HttpRequestHandler {
-    private static final Logger s_logger = Logger.getLogger(MockApiServer.class.getName());
-
-    public static final short ADMIN_COMMAND = 1;
-    public static final short DOMAIN_ADMIN_COMMAND = 4;
-    public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2;
-    public static final short USER_COMMAND = 8;
-    public static boolean encodeApiResponse = false;
-    public static String jsonContentType = "text/javascript";
-    private Properties _apiCommands = null;
-    private ApiDispatcher _dispatcher;
-    private AccountManager _accountMgr = null;
-    private Account _systemAccount = null;
-    private User _systemUser = null;
-
-    private static int _workerCount = 0;
-
-    private static MockApiServer s_instance = null;
-    private static List<String> s_userCommands = null;
-    private static List<String> s_resellerCommands = null; // AKA domain-admin
-    private static List<String> s_adminCommands = null;
-    private static List<String> s_resourceDomainAdminCommands = null;
-    private static List<String> s_allCommands = null;
-    private static List<String> s_pluggableServiceCommands = null;
-
-    private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory("ApiServer"));
-
-    static {
-        s_userCommands = new ArrayList<String>();
-        s_resellerCommands = new ArrayList<String>();
-        s_adminCommands = new ArrayList<String>();
-        s_resourceDomainAdminCommands = new ArrayList<String>();
-        s_allCommands = new ArrayList<String>();
-        s_pluggableServiceCommands = new ArrayList<String>();
-    }
-
-    private MockApiServer() {
-    }
-
-    public static void initApiServer(String[] apiConfig) {
-        if (s_instance == null) {
-            s_instance = new MockApiServer();
-            s_instance.init(apiConfig);
-        }
-    }
-
-    public static MockApiServer getInstance() {
-        // initApiServer();
-        return s_instance;
-    }
-
-    public Properties get_apiCommands() {
-        return _apiCommands;
-    }
-
-    private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) {
-        try {
-            if (_apiCommands == null) {
-                _apiCommands = new Properties();
-            }
-            Properties preProcessedCommands = new Properties();
-            if (apiConfig != null) {
-                for (String configFile : apiConfig) {
-                    File commandsFile = PropertiesUtil.findConfigFile(configFile);
-                    if (commandsFile != null) {
-                        try {
-                            preProcessedCommands.load(new FileInputStream(commandsFile));
-                        } catch (FileNotFoundException fnfex) {
-                            // in case of a file within a jar in classpath, try to open stream using url
-                            InputStream stream = PropertiesUtil.openStreamFromURL(configFile);
-                            if (stream != null) {
-                                preProcessedCommands.load(stream);
-                            } else {
-                                s_logger.error("Unable to find properites file", fnfex);
-                            }
-                        }
-                    }
-                }
-                for (Object key : preProcessedCommands.keySet()) {
-                    String preProcessedCommand = preProcessedCommands.getProperty((String) key);
-                    String[] commandParts = preProcessedCommand.split(";");
-                    _apiCommands.put(key, commandParts[0]);
-
-                    if (pluggableServicesConfig) {
-                        s_pluggableServiceCommands.add(commandParts[0]);
-                    }
-
-                    if (commandParts.length > 1) {
-                        try {
-                            short cmdPermissions = Short.parseShort(commandParts[1]);
-                            if ((cmdPermissions & ADMIN_COMMAND) != 0) {
-                                s_adminCommands.add((String) key);
-                            }
-                            if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) {
-                                s_resourceDomainAdminCommands.add((String) key);
-                            }
-                            if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) {
-                                s_resellerCommands.add((String) key);
-                            }
-                            if ((cmdPermissions & USER_COMMAND) != 0) {
-                                s_userCommands.add((String) key);
-                            }
-                        } catch (NumberFormatException nfe) {
-                            s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand);
-                        }
-                    }
-                }
-
-                s_allCommands.addAll(s_adminCommands);
-                s_allCommands.addAll(s_resourceDomainAdminCommands);
-                s_allCommands.addAll(s_userCommands);
-                s_allCommands.addAll(s_resellerCommands);
-            }
-        } catch (FileNotFoundException fnfex) {
-            s_logger.error("Unable to find properites file", fnfex);
-        } catch (IOException ioex) {
-            s_logger.error("Exception loading properties file", ioex);
-        }
-    }
-
-    public void init(String[] apiConfig) {
-        BaseCmd.setComponents(new ApiResponseHelper());
-        BaseListCmd.configure();
-        processConfigFiles(apiConfig, false);
-
-        ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
-        _accountMgr = locator.getManager(AccountManager.class);
-        _systemAccount = _accountMgr.getSystemAccount();
-        _systemUser = _accountMgr.getSystemUser();
-        _dispatcher = ApiDispatcher.getInstance();
-
-        Integer apiPort = null; // api port, null by default
-        ConfigurationDao configDao = locator.getDao(ConfigurationDao.class);
-        SearchCriteria<ConfigurationVO> sc = configDao.createSearchCriteria();
-        sc.addAnd("name", SearchCriteria.Op.EQ, "integration.api.port");
-        List<ConfigurationVO> values = configDao.search(sc, null);
-        if ((values != null) && (values.size() > 0)) {
-            ConfigurationVO apiPortConfig = values.get(0);
-            if (apiPortConfig.getValue() != null) {
-                apiPort = Integer.parseInt(apiPortConfig.getValue());
-            }
-        }
-
-        encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key()));
-
-        String jsonType = configDao.getValue(Config.JavaScriptDefaultContentType.key());
-        if (jsonType != null) {
-            jsonContentType = jsonType;
-        }
-
-        if (apiPort != null) {
-            ListenerThread listenerThread = new ListenerThread(this, apiPort);
-            listenerThread.start();
-        }
-    }
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    @Override
-    public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException {
-        // get some information for the access log...
-        StringBuffer sb = new StringBuffer();
-        HttpServerConnection connObj = (HttpServerConnection) context.getAttribute("http.connection");
-        if (connObj instanceof SocketHttpServerConnection) {
-            InetAddress remoteAddr = ((SocketHttpServerConnection) connObj).getRemoteAddress();
-            sb.append(remoteAddr.toString() + " -- ");
-        }
-        sb.append(request.getRequestLine());
-
-        try {
-            String uri = request.getRequestLine().getUri();
-            int requestParamsStartIndex = uri.indexOf('?');
-            if (requestParamsStartIndex >= 0) {
-                uri = uri.substring(requestParamsStartIndex + 1);
-            }
-
-            String[] paramArray = uri.split("&");
-            if (paramArray.length < 1) {
-                s_logger.info("no parameters received for request: " + uri + ", aborting...");
-                return;
-            }
-
-            Map parameterMap = new HashMap<String, String[]>();
-
-            String responseType = BaseCmd.RESPONSE_TYPE_XML;
-            for (String paramEntry : paramArray) {
-                String[] paramValue = paramEntry.split("=");
-                if (paramValue.length != 2) {
-                    s_logger.info("malformed parameter: " + paramEntry + ", skipping");
-                    continue;
-                }
-                if ("response".equalsIgnoreCase(paramValue[0])) {
-                    responseType = paramValue[1];
-                } else {
-                    // according to the servlet spec, the parameter map should be in the form (name=String,
-                    // value=String[]), so
-                    // parameter values will be stored in an array
-                    parameterMap.put(/* name */paramValue[0], /* value */new String[] { paramValue[1] });
-                }
-            }
-            try {
-                // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM
-                UserContext.registerContext(_systemUser.getId(), _systemAccount, null, true);
-                sb.insert(0, "(userId=" + User.UID_SYSTEM + " accountId=" + Account.ACCOUNT_ID_SYSTEM + " sessionId=" + null + ") ");
-                String responseText = handleRequest(parameterMap, true, responseType, sb);
-                sb.append(" 200 " + ((responseText == null) ? 0 : responseText.length()));
-
-                writeResponse(response, responseText, HttpStatus.SC_OK, responseType, null);
-            } catch (ServerApiException se) {
-                String responseText = getSerializedApiError(se.getErrorCode(), se.getDescription(), parameterMap, responseType, se);                
-                writeResponse(response, responseText, se.getErrorCode(), responseType, se.getDescription());
-                sb.append(" " + se.getErrorCode() + " " + se.getDescription());
-            } catch (RuntimeException e) {
-                // log runtime exception like NullPointerException to help identify the source easier
-                s_logger.error("Unhandled exception, ", e);
-                throw e;
-            } catch (Exception e){
-            	s_logger.info("Error: "+e.getMessage());
-            }
-        } finally {
-            UserContext.unregisterContext();
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    public String handleRequest(Map params, boolean decode, String responseType, StringBuffer auditTrailSb) throws ServerApiException {
-        String response = null;
-        String[] command = null;
-        try {
-            command = (String[]) params.get("command");
-            if (command == null) {
-                s_logger.error("invalid request, no command sent");
-                if (s_logger.isTraceEnabled()) {
-                    s_logger.trace("dumping request parameters");
-                    for (Object key : params.keySet()) {
-                        String keyStr = (String) key;
-                        String[] value = (String[]) params.get(key);
-                        s_logger.trace("   key: " + keyStr + ", value: " + ((value == null) ? "'null'" : value[0]));
-                    }
-                }
-                throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent");
-            } else {
-                Map<String, String> paramMap = new HashMap<String, String>();
-                Set keys = params.keySet();
-                Iterator keysIter = keys.iterator();
-                while (keysIter.hasNext()) {
-                    String key = (String) keysIter.next();
-                    if ("command".equalsIgnoreCase(key)) {
-                        continue;
-                    }
-                    String[] value = (String[]) params.get(key);
-
-                    String decodedValue = null;
-                    if (decode) {
-                        try {
-                            decodedValue = URLDecoder.decode(value[0], "UTF-8");
-                        } catch (UnsupportedEncodingException usex) {
-                            s_logger.warn(key + " could not be decoded, value = " + value[0]);
-                            throw new ServerApiException(BaseCmd.PARAM_ERROR, key + " could not be decoded, received value " + value[0]);
-                        } catch (IllegalArgumentException iae) {
-                            s_logger.warn(key + " could not be decoded, value = " + value[0]);
-                            throw new ServerApiException(BaseCmd.PARAM_ERROR, key + " could not be decoded, received value " + value[0] + " which contains illegal characters eg.%");
-                        }
-                    } else {
-                        decodedValue = value[0];
-                    }
-                    paramMap.put(key, decodedValue);
-                }
-                String cmdClassName = _apiCommands.getProperty(command[0]);
-                if (cmdClassName != null) {
-                    Class<?> cmdClass = Class.forName(cmdClassName);
-                    BaseCmd cmdObj = (BaseCmd) cmdClass.newInstance();
-                    cmdObj.setFullUrlParams(paramMap);
-                    cmdObj.setResponseType(responseType);
-                    // This is where the command is either serialized, or directly dispatched
-                    response = queueCommand(cmdObj, paramMap);
-                } else {
-                    if (!command[0].equalsIgnoreCase("login") && !command[0].equalsIgnoreCase("logout")) {
-                        String errorString = "Unknown API command: " + ((command == null) ? "null" : command[0]);
-                        s_logger.warn(errorString);
-                        auditTrailSb.append(" " + errorString);
-                        throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, errorString);
-                    }
-                }
-            }
-        } catch (Exception ex) {
-            if (ex instanceof InvalidParameterValueException) {
-            	InvalidParameterValueException ref = (InvalidParameterValueException)ex;
-            	ServerApiException e = new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage());            	
-                // copy over the IdentityProxy information as well and throw the serverapiexception.
-                ArrayList<IdentityProxy> idList = ref.getIdProxyList();
-                if (idList != null) {
-                	// Iterate through entire arraylist and copy over each proxy id.
-                	for (int i = 0 ; i < idList.size(); i++) {
-                		IdentityProxy obj = idList.get(i);
-                		e.addProxyObject(obj.getTableName(), obj.getValue(), obj.getidFieldName());
-                	}
-                }
-                // Also copy over the cserror code and the function/layer in which it was thrown.
-            	e.setCSErrorCode(ref.getCSErrorCode());
-                throw e;
-            } else if (ex instanceof PermissionDeniedException) {
-            	PermissionDeniedException ref = (PermissionDeniedException)ex;
-            	ServerApiException e = new ServerApiException(BaseCmd.ACCOUNT_ERROR, ex.getMessage());
-                // copy over the IdentityProxy information as well and throw the serverapiexception.
-            	ArrayList<IdentityProxy> idList = ref.getIdProxyList();
-                if (idList != null) {
-                	// Iterate through entire arraylist and copy over each proxy id.
-                	for (int i = 0 ; i < idList.size(); i++) {
-                		IdentityProxy obj = idList.get(i);
-                		e.addProxyObject(obj.getTableName(), obj.getValue(), obj.getidFieldName());
-                	}
-                }
-                e.setCSErrorCode(ref.getCSErrorCode());
-                throw e;
-            } else if (ex instanceof ServerApiException) {
-                throw (ServerApiException) ex;
-            } else {
-                s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex);
-                ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal server error, unable to execute request.");
-                e.setCSErrorCode(CSExceptionErrorCode.getCSErrCode("ServerApiException"));
-                throw e;
-            }
-        }
-        return response;
-    }
-
-    private String queueCommand(BaseCmd cmdObj, Map<String, String> params) {
-    	params.put("ctxStartEventId", String.valueOf(0L));
-    	_dispatcher.dispatch(cmdObj, params);
-    	SerializationContext.current().setUuidTranslation(true);
-    	return ApiResponseSerializer.toSerializedString((ResponseObject) cmdObj.getResponseObject(), cmdObj.getResponseType());
-    }
-
-    // FIXME: rather than isError, we might was to pass in the status code to give more flexibility
-    private void writeResponse(HttpResponse resp, final String responseText, final int statusCode, String responseType, String reasonPhrase) {
-        try {
-            resp.setStatusCode(statusCode);
-            resp.setReasonPhrase(reasonPhrase);
-
-            BasicHttpEntity body = new BasicHttpEntity();
-            if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
-                // JSON response
-                body.setContentType(jsonContentType);
-                if (responseText == null) {
-                    body.setContent(new ByteArrayInputStream("{ \"error\" : { \"description\" : \"Internal Server Error\" } }".getBytes("UTF-8")));
-                }
-            } else {
-                body.setContentType("text/xml");
-                if (responseText == null) {
-                    body.setContent(new ByteArrayInputStream("<error>Internal Server Error</error>".getBytes("UTF-8")));
-                }
-            }
-
-            if (responseText != null) {
-                body.setContent(new ByteArrayInputStream(responseText.getBytes("UTF-8")));
-            }
-            resp.setEntity(body);
-        } catch (Exception ex) {
-            s_logger.error("error!", ex);
-        }
-    }
-
-    // FIXME: the following two threads are copied from
-    // http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/ElementalHttpServer.java
-    // we have to cite a license if we are using this code directly, so we need to add the appropriate citation or
-    // modify the
-    // code to be very specific to our needs
-    static class ListenerThread extends Thread {
-        private HttpService _httpService = null;
-        private ServerSocket _serverSocket = null;
-        private HttpParams _params = null;
-
-        public ListenerThread(MockApiServer requestHandler, int port) {
-            try {
-                _serverSocket = new ServerSocket(port);
-            } catch (IOException ioex) {
-                s_logger.error("error initializing api server", ioex);
-                return;
-            }
-
-            _params = new BasicHttpParams();
-            _params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 30000).setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 * 1024)
-                    .setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false).setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
-                    .setParameter(CoreProtocolPNames.ORIGIN_SERVER, "HttpComponents/1.1");
-
-            // Set up the HTTP protocol processor
-            BasicHttpProcessor httpproc = new BasicHttpProcessor();
-            httpproc.addInterceptor(new ResponseDate());
-            httpproc.addInterceptor(new ResponseServer());
-            httpproc.addInterceptor(new ResponseContent());
-            httpproc.addInterceptor(new ResponseConnControl());
-
-            // Set up request handlers
-            HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
-            reqistry.register("*", requestHandler);
-
-            // Set up the HTTP service
-            _httpService = new HttpService(httpproc, new NoConnectionReuseStrategy(), new DefaultHttpResponseFactory());
-            _httpService.setParams(_params);
-            _httpService.setHandlerResolver(reqistry);
-        }
-
-        @Override
-        public void run() {
-            s_logger.info("ApiServer listening on port " + _serverSocket.getLocalPort());
-            while (!Thread.interrupted()) {
-                try {
-                    // Set up HTTP connection
-                    Socket socket = _serverSocket.accept();
-                    DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
-                    conn.bind(socket, _params);
-
-                    // Execute a new worker task to handle the request
-                    _executor.execute(new WorkerTask(_httpService, conn, _workerCount++));
-                } catch (InterruptedIOException ex) {
-                    break;
-                } catch (IOException e) {
-                    s_logger.error("I/O error initializing connection thread", e);
-                    break;
-                }
-            }
-        }
-    }
-
-    static class WorkerTask implements Runnable {
-        private final HttpService _httpService;
-        private final HttpServerConnection _conn;
-
-        public WorkerTask(final HttpService httpService, final HttpServerConnection conn, final int count) {
-            _httpService = httpService;
-            _conn = conn;
-        }
-
-        @Override
-        public void run() {
-            HttpContext context = new BasicHttpContext(null);
-            try {
-                while (!Thread.interrupted() && _conn.isOpen()) {
-                    try {
-                        _httpService.handleRequest(_conn, context);
-                        _conn.close();
-                    } finally {
-                        StackMaid.current().exitCleanup();
-                    }
-                }
-            } catch (ConnectionClosedException ex) {
-                if (s_logger.isTraceEnabled()) {
-                    s_logger.trace("ApiServer:  Client closed connection");
-                }
-            } catch (IOException ex) {
-                if (s_logger.isTraceEnabled()) {
-                    s_logger.trace("ApiServer:  IOException - " + ex);
-                }
-            } catch (HttpException ex) {
-                s_logger.warn("ApiServer:  Unrecoverable HTTP protocol violation" + ex);
-            } finally {
-                try {
-                    _conn.shutdown();
-                } catch (IOException ignore) {
-                }
-            }
-        }
-    }
-
-    public String getSerializedApiError(int errorCode, String errorText, Map<String, Object[]> apiCommandParams, String responseType, Exception ex) {
-        String responseName = null;
-        String cmdClassName = null;
-
-        String responseText = null;
-
-        try {
-            if (errorCode == BaseCmd.UNSUPPORTED_ACTION_ERROR || apiCommandParams == null || apiCommandParams.isEmpty()) {
-                responseName = "errorresponse";
-            } else {
-                Object cmdObj = apiCommandParams.get("command");
-                // cmd name can be null when "command" parameter is missing in the request
-                if (cmdObj != null) {
-                    String cmdName = ((String[]) cmdObj)[0];
-                    cmdClassName = _apiCommands.getProperty(cmdName);
-                    if (cmdClassName != null) {
-                        Class<?> claz = Class.forName(cmdClassName);
-                        responseName = ((BaseCmd) claz.newInstance()).getCommandName();
-                    } else {
-                        responseName = "errorresponse";
-                    }
-                }
-            }
-            ExceptionResponse apiResponse = new ExceptionResponse();
-            apiResponse.setErrorCode(errorCode);
-            apiResponse.setErrorText(errorText);
-            apiResponse.setResponseName(responseName);
-            // Also copy over the IdentityProxy object List into this new apiResponse, from
-            // the exception caught. When invoked from handle(), the exception here can
-            // be either ServerApiException, PermissionDeniedException or InvalidParameterValue
-            // Exception. When invoked from ApiServlet's processRequest(), this can be
-            // a standard exception like NumberFormatException. We'll leave the standard ones alone.
-            if (ex != null) {
-            	if (ex instanceof ServerApiException || ex instanceof PermissionDeniedException
-            			|| ex instanceof InvalidParameterValueException) {
-            		// Cast the exception appropriately and retrieve the IdentityProxy
-            		if (ex instanceof ServerApiException) {
-            			ServerApiException ref = (ServerApiException) ex;
-            			ArrayList<IdentityProxy> idList = ref.getIdProxyList();
-            			if (idList != null) {
-            				for (int i=0; i < idList.size(); i++) {
-            					IdentityProxy id = idList.get(i);
-            					apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName());
-            				}            				
-            			}
-            			// Also copy over the cserror code and the function/layer in which it was thrown.
-            			apiResponse.setCSErrorCode(ref.getCSErrorCode());
-            		} else if (ex instanceof PermissionDeniedException) {
-            			PermissionDeniedException ref = (PermissionDeniedException) ex;
-            			ArrayList<IdentityProxy> idList = ref.getIdProxyList();
-            			if (idList != null) {
-            				for (int i=0; i < idList.size(); i++) {
-            					IdentityProxy id = idList.get(i);
-            					apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName());
-            				}            				
-            			}
-            			// Also copy over the cserror code and the function/layer in which it was thrown.
-            			apiResponse.setCSErrorCode(ref.getCSErrorCode());
-            		} else if (ex instanceof InvalidParameterValueException) {
-            			InvalidParameterValueException ref = (InvalidParameterValueException) ex;
-            			ArrayList<IdentityProxy> idList = ref.getIdProxyList();
-            			if (idList != null) {
-            				for (int i=0; i < idList.size(); i++) {
-            					IdentityProxy id = idList.get(i);
-            					apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName());
-            				}            				
-            			}
-            			// Also copy over the cserror code and the function/layer in which it was thrown.
-            			apiResponse.setCSErrorCode(ref.getCSErrorCode());
-            		}
-            	}
-            }
-            SerializationContext.current().setUuidTranslation(true);
-            responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType);
-
-        } catch (Exception e) {
-            s_logger.error("Exception responding to http request", e);            
-        }
-        return responseText;
-    }
-    
+public abstract class MockApiServer implements HttpRequestHandler {
+//    private static final Logger s_logger = Logger.getLogger(MockApiServer.class.getName());
+//
+//    public static final short ADMIN_COMMAND = 1;
+//    public static final short DOMAIN_ADMIN_COMMAND = 4;
+//    public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2;
+//    public static final short USER_COMMAND = 8;
+//    public static boolean encodeApiResponse = false;
+//    public static String jsonContentType = "text/javascript";
+//    private Properties _apiCommands = null;
+//    private ApiDispatcher _dispatcher;
+//    private AccountManager _accountMgr = null;
+//    private Account _systemAccount = null;
+//    private User _systemUser = null;
+//
+//    private static int _workerCount = 0;
+//
+//    private static MockApiServer s_instance = null;
+//    private static List<String> s_userCommands = null;
+//    private static List<String> s_resellerCommands = null; // AKA domain-admin
+//    private static List<String> s_adminCommands = null;
+//    private static List<String> s_resourceDomainAdminCommands = null;
+//    private static List<String> s_allCommands = null;
+//    private static List<String> s_pluggableServiceCommands = null;
+//
+//    private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory("ApiServer"));
+//
+//    static {
+//        s_userCommands = new ArrayList<String>();
+//        s_resellerCommands = new ArrayList<String>();
+//        s_adminCommands = new ArrayList<String>();
+//        s_resourceDomainAdminCommands = new ArrayList<String>();
+//        s_allCommands = new ArrayList<String>();
+//        s_pluggableServiceCommands = new ArrayList<String>();
+//    }
+//
+//    private MockApiServer() {
+//    }
+//
+//    public static void initApiServer(String[] apiConfig) {
+//        if (s_instance == null) {
+//            s_instance = new MockApiServer();
+//            s_instance.init(apiConfig);
+//        }
+//    }
+//
+//    public static MockApiServer getInstance() {
+//        // initApiServer();
+//        return s_instance;
+//    }
+//
+//    public Properties get_apiCommands() {
+//        return _apiCommands;
+//    }
+//
+//    private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) {
+//        try {
+//            if (_apiCommands == null) {
+//                _apiCommands = new Properties();
+//            }
+//            Properties preProcessedCommands = new Properties();
+//            if (apiConfig != null) {
+//                for (String configFile : apiConfig) {
+//                    File commandsFile = PropertiesUtil.findConfigFile(configFile);
+//                    if (commandsFile != null) {
+//                        try {
+//                            preProcessedCommands.load(new FileInputStream(commandsFile));
+//                        } catch (FileNotFoundException fnfex) {
+//                            // in case of a file within a jar in classpath, try to open stream using url
+//                            InputStream stream = PropertiesUtil.openStreamFromURL(configFile);
+//                            if (stream != null) {
+//                                preProcessedCommands.load(stream);
+//                            } else {
+//                                s_logger.error("Unable to find properites file", fnfex);
+//                            }
+//                        }
+//                    }
+//                }
+//                for (Object key : preProcessedCommands.keySet()) {
+//                    String preProcessedCommand = preProcessedCommands.getProperty((String) key);
+//                    String[] commandParts = preProcessedCommand.split(";");
+//                    _apiCommands.put(key, commandParts[0]);
+//
+//                    if (pluggableServicesConfig) {
+//                        s_pluggableServiceCommands.add(commandParts[0]);
+//                    }
+//
+//                    if (commandParts.length > 1) {
+//                        try {
+//                            short cmdPermissions = Short.parseShort(commandParts[1]);
+//                            if ((cmdPermissions & ADMIN_COMMAND) != 0) {
+//                                s_adminCommands.add((String) key);
+//                            }
+//                            if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) {
+//                                s_resourceDomainAdminCommands.add((String) key);
+//                            }
+//                            if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) {
+//                                s_resellerCommands.add((String) key);
+//                            }
+//                            if ((cmdPermissions & USER_COMMAND) != 0) {
+//                                s_userCommands.add((String) key);
+//                            }
+//                        } catch (NumberFormatException nfe) {
+//                            s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand);
+//                        }
+//                    }
+//                }
+//
+//                s_allCommands.addAll(s_adminCommands);
+//                s_allCommands.addAll(s_resourceDomainAdminCommands);
+//                s_allCommands.addAll(s_userCommands);
+//                s_allCommands.addAll(s_resellerCommands);
+//            }
+//        } catch (FileNotFoundException fnfex) {
+//            s_logger.error("Unable to find properites file", fnfex);
+//        } catch (IOException ioex) {
+//            s_logger.error("Exception loading properties file", ioex);
+//        }
+//    }
+//
+//    public void init(String[] apiConfig) {
+//        BaseCmd.setComponents(new ApiResponseHelper());
+//        BaseListCmd.configure();
+//        processConfigFiles(apiConfig, false);
+//
+//        ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
+//        _accountMgr = locator.getManager(AccountManager.class);
+//        _systemAccount = _accountMgr.getSystemAccount();
+//        _systemUser = _accountMgr.getSystemUser();
+//        _dispatcher = ApiDispatcher.getInstance();
+//
+//        Integer apiPort = null; // api port, null by default
+//        ConfigurationDao configDao = locator.getDao(ConfigurationDao.class);
+//        SearchCriteria<ConfigurationVO> sc = configDao.createSearchCriteria();
+//        sc.addAnd("name", SearchCriteria.Op.EQ, "integration.api.port");
+//        List<ConfigurationVO> values = configDao.search(sc, null);
+//        if ((values != null) && (values.size() > 0)) {
+//            ConfigurationVO apiPortConfig = values.get(0);
+//            if (apiPortConfig.getValue() != null) {
+//                apiPort = Integer.parseInt(apiPortConfig.getValue());
+//            }
+//        }
+//
+//        encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key()));
+//
+//        String jsonType = configDao.getValue(Config.JavaScriptDefaultContentType.key());
+//        if (jsonType != null) {
+//            jsonContentType = jsonType;
+//        }
+//
+//        if (apiPort != null) {
+//            ListenerThread listenerThread = new ListenerThread(this, apiPort);
+//            listenerThread.start();
+//        }
+//    }
+//
+//    @SuppressWarnings({ "unchecked", "rawtypes" })
+//    @Override
+//    public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException {
+//        // get some information for the access log...
+//        StringBuffer sb = new StringBuffer();
+//        HttpServerConnection connObj = (HttpServerConnection) context.getAttribute("http.connection");
+//        if (connObj instanceof SocketHttpServerConnection) {
+//            InetAddress remoteAddr = ((SocketHttpServerConnection) connObj).getRemoteAddress();
+//            sb.append(remoteAddr.toString() + " -- ");
+//        }
+//        sb.append(request.getRequestLine());
+//
+//        try {
+//            String uri = request.getRequestLine().getUri();
+//            int requestParamsStartIndex = uri.indexOf('?');
+//            if (requestParamsStartIndex >= 0) {
+//                uri = uri.substring(requestParamsStartIndex + 1);
+//            }
+//
+//            String[] paramArray = uri.split("&");
+//            if (paramArray.length < 1) {
+//                s_logger.info("no parameters received for request: " + uri + ", aborting...");
+//                return;
+//            }
+//
+//            Map parameterMap = new HashMap<String, String[]>();
+//
+//            String responseType = BaseCmd.RESPONSE_TYPE_XML;
+//            for (String paramEntry : paramArray) {
+//                String[] paramValue = paramEntry.split("=");
+//                if (paramValue.length != 2) {
+//                    s_logger.info("malformed parameter: " + paramEntry + ", skipping");
+//                    continue;
+//                }
+//                if ("response".equalsIgnoreCase(paramValue[0])) {
+//                    responseType = paramValue[1];
+//                } else {
+//                    // according to the servlet spec, the parameter map should be in the form (name=String,
+//                    // value=String[]), so
+//                    // parameter values will be stored in an array
+//                    parameterMap.put(/* name */paramValue[0], /* value */new String[] { paramValue[1] });
+//                }
+//            }
+//            try {
+//                // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM
+//                UserContext.registerContext(_systemUser.getId(), _systemAccount, null, true);
+//                sb.insert(0, "(userId=" + User.UID_SYSTEM + " accountId=" + Account.ACCOUNT_ID_SYSTEM + " sessionId=" + null + ") ");
+//                String responseText = handleRequest(parameterMap, true, responseType, sb);
+//                sb.append(" 200 " + ((responseText == null) ? 0 : responseText.length()));
+//
+//                writeResponse(response, responseText, HttpStatus.SC_OK, responseType, null);
+//            } catch (ServerApiException se) {
+//                String responseText = getSerializedApiError(se.getErrorCode(), se.getDescription(), parameterMap, responseType, se);                
+//                writeResponse(response, responseText, se.getErrorCode(), responseType, se.getDescription());
+//                sb.append(" " + se.getErrorCode() + " " + se.getDescription());
+//            } catch (RuntimeException e) {
+//                // log runtime exception like NullPointerException to help identify the source easier
+//                s_logger.error("Unhandled exception, ", e);
+//                throw e;
+//            } catch (Exception e){
+//            	s_logger.info("Error: "+e.getMessage());
+//            }
+//        } finally {
+//            UserContext.unregisterContext();
+//        }
+//    }
+//
+//    @SuppressWarnings("rawtypes")
+//    public String handleRequest(Map params, boolean decode, String responseType, StringBuffer auditTrailSb) throws ServerApiException {
+//        String response = null;
+//        String[] command = null;
+//        try {
+//            command = (String[]) params.get("command");
+//            if (command == null) {
+//                s_logger.error("invalid request, no command sent");
+//                if (s_logger.isTraceEnabled()) {
+//                    s_logger.trace("dumping request parameters");
+//                    for (Object key : params.keySet()) {
+//                        String keyStr = (String) key;
+//                        String[] value = (String[]) params.get(key);
+//                        s_logger.trace("   key: " + keyStr + ", value: " + ((value == null) ? "'null'" : value[0]));
+//                    }
+//                }
+//                throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent");
+//            } else {
+//                Map<String, String> paramMap = new HashMap<String, String>();
+//                Set keys = params.keySet();
+//                Iterator keysIter = keys.iterator();
+//                while (keysIter.hasNext()) {
+//                    String key = (String) keysIter.next();
+//                    if ("command".equalsIgnoreCase(key)) {
+//                        continue;
+//                    }
+//                    String[] value = (String[]) params.get(key);
+//
+//                    String decodedValue = null;
+//                    if (decode) {
+//                        try {
+//                            decodedValue = URLDecoder.decode(value[0], "UTF-8");
+//                        } catch (UnsupportedEncodingException usex) {
+//                            s_logger.warn(key + " could not be decoded, value = " + value[0]);
+//                            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, key + " could not be decoded, received value " + value[0]);
+//                        } catch (IllegalArgumentException iae) {
+//                            s_logger.warn(key + " could not be decoded, value = " + value[0]);
+//                            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, key + " could not be decoded, received value " + value[0] + " which contains illegal characters eg.%");
+//                        }
+//                    } else {
+//                        decodedValue = value[0];
+//                    }
+//                    paramMap.put(key, decodedValue);
+//                }
+//                String cmdClassName = _apiCommands.getProperty(command[0]);
+//                if (cmdClassName != null) {
+//                    Class<?> cmdClass = Class.forName(cmdClassName);
+//                    BaseCmd cmdObj = (BaseCmd) cmdClass.newInstance();
+//                    cmdObj.setFullUrlParams(paramMap);
+//                    cmdObj.setResponseType(responseType);
+//                    // This is where the command is either serialized, or directly dispatched
+//                    response = queueCommand(cmdObj, paramMap);
+//                } else {
+//                    if (!command[0].equalsIgnoreCase("login") && !command[0].equalsIgnoreCase("logout")) {
+//                        String errorString = "Unknown API command: " + ((command == null) ? "null" : command[0]);
+//                        s_logger.warn(errorString);
+//                        auditTrailSb.append(" " + errorString);
+//                        throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, errorString);
+//                    }
+//                }
+//            }
+//        } catch (Exception ex) {
+//            if (ex instanceof InvalidParameterValueException) {
+//            	InvalidParameterValueException ref = (InvalidParameterValueException)ex;
+//            	ServerApiException e = new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage());            	
+//                // copy over the IdentityProxy information as well and throw the serverapiexception.
+//                ArrayList<IdentityProxy> idList = ref.getIdProxyList();
+//                if (idList != null) {
+//                	// Iterate through entire arraylist and copy over each proxy id.
+//                	for (int i = 0 ; i < idList.size(); i++) {
+//                		IdentityProxy obj = idList.get(i);
+//                		e.addProxyObject(obj.getTableName(), obj.getValue(), obj.getidFieldName());
+//                	}
+//                }
+//                // Also copy over the cserror code and the function/layer in which it was thrown.
+//            	e.setCSErrorCode(ref.getCSErrorCode());
+//                throw e;
+//            } else if (ex instanceof PermissionDeniedException) {
+//            	PermissionDeniedException ref = (PermissionDeniedException)ex;
+//            	ServerApiException e = new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, ex.getMessage());
+//                // copy over the IdentityProxy information as well and throw the serverapiexception.
+//            	ArrayList<IdentityProxy> idList = ref.getIdProxyList();
+//                if (idList != null) {
+//                	// Iterate through entire arraylist and copy over each proxy id.
+//                	for (int i = 0 ; i < idList.size(); i++) {
+//                		IdentityProxy obj = idList.get(i);
+//                		e.addProxyObject(obj.getTableName(), obj.getValue(), obj.getidFieldName());
+//                	}
+//                }
+//                e.setCSErrorCode(ref.getCSErrorCode());
+//                throw e;
+//            } else if (ex instanceof ServerApiException) {
+//                throw (ServerApiException) ex;
+//            } else {
+//                s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex);
+//                ServerApiException e = new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal server error, unable to execute request.");
+//                e.setCSErrorCode(CSExceptionErrorCode.getCSErrCode("ServerApiException"));
+//                throw e;
+//            }
+//        }
+//        return response;
+//    }
+//
+//    private String queueCommand(BaseCmd cmdObj, Map<String, String> params) {
+//    	params.put("ctxStartEventId", String.valueOf(0L));
+//    	_dispatcher.dispatch(cmdObj, params);
+//    	SerializationContext.current().setUuidTranslation(true);
+//    	return ApiResponseSerializer.toSerializedString((ResponseObject) cmdObj.getResponseObject(), cmdObj.getResponseType());
+//    }
+//
+//    // FIXME: rather than isError, we might was to pass in the status code to give more flexibility
+//    private void writeResponse(HttpResponse resp, final String responseText, final int statusCode, String responseType, String reasonPhrase) {
+//        try {
+//            resp.setStatusCode(statusCode);
+//            resp.setReasonPhrase(reasonPhrase);
+//
+//            BasicHttpEntity body = new BasicHttpEntity();
+//            if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+//                // JSON response
+//                body.setContentType(jsonContentType);
+//                if (responseText == null) {
+//                    body.setContent(new ByteArrayInputStream("{ \"error\" : { \"description\" : \"Internal Server Error\" } }".getBytes("UTF-8")));
+//                }
+//            } else {
+//                body.setContentType("text/xml");
+//                if (responseText == null) {
+//                    body.setContent(new ByteArrayInputStream("<error>Internal Server Error</error>".getBytes("UTF-8")));
+//                }
+//            }
+//
+//            if (responseText != null) {
+//                body.setContent(new ByteArrayInputStream(responseText.getBytes("UTF-8")));
+//            }
+//            resp.setEntity(body);
+//        } catch (Exception ex) {
+//            s_logger.error("error!", ex);
+//        }
+//    }
+//
+//    // FIXME: the following two threads are copied from
+//    // http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/httpcore/src/examples/org/apache/http/examples/ElementalHttpServer.java
+//    // we have to cite a license if we are using this code directly, so we need to add the appropriate citation or
+//    // modify the
+//    // code to be very specific to our needs
+//    static class ListenerThread extends Thread {
+//        private HttpService _httpService = null;
+//        private ServerSocket _serverSocket = null;
+//        private HttpParams _params = null;
+//
+//        public ListenerThread(MockApiServer requestHandler, int port) {
+//            try {
+//                _serverSocket = new ServerSocket(port);
+//            } catch (IOException ioex) {
+//                s_logger.error("error initializing api server", ioex);
+//                return;
+//            }
+//
+//            _params = new BasicHttpParams();
+//            _params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 30000).setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 * 1024)
+//                    .setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false).setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
+//                    .setParameter(CoreProtocolPNames.ORIGIN_SERVER, "HttpComponents/1.1");
+//
+//            // Set up the HTTP protocol processor
+//            BasicHttpProcessor httpproc = new BasicHttpProcessor();
+//            httpproc.addInterceptor(new ResponseDate());
+//            httpproc.addInterceptor(new ResponseServer());
+//            httpproc.addInterceptor(new ResponseContent());
+//            httpproc.addInterceptor(new ResponseConnControl());
+//
+//            // Set up request handlers
+//            HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
+//            reqistry.register("*", requestHandler);
+//
+//            // Set up the HTTP service
+//            _httpService = new HttpService(httpproc, new NoConnectionReuseStrategy(), new DefaultHttpResponseFactory());
+//            _httpService.setParams(_params);
+//            _httpService.setHandlerResolver(reqistry);
+//        }
+//
+//        @Override
+//        public void run() {
+//            s_logger.info("ApiServer listening on port " + _serverSocket.getLocalPort());
+//            while (!Thread.interrupted()) {
+//                try {
+//                    // Set up HTTP connection
+//                    Socket socket = _serverSocket.accept();
+//                    DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
+//                    conn.bind(socket, _params);
+//
+//                    // Execute a new worker task to handle the request
+//                    _executor.execute(new WorkerTask(_httpService, conn, _workerCount++));
+//                } catch (InterruptedIOException ex) {
+//                    break;
+//                } catch (IOException e) {
+//                    s_logger.error("I/O error initializing connection thread", e);
+//                    break;
+//                }
+//            }
+//        }
+//    }
+//
+//    static class WorkerTask implements Runnable {
+//        private final HttpService _httpService;
+//        private final HttpServerConnection _conn;
+//
+//        public WorkerTask(final HttpService httpService, final HttpServerConnection conn, final int count) {
+//            _httpService = httpService;
+//            _conn = conn;
+//        }
+//
+//        @Override
+//        public void run() {
+//            HttpContext context = new BasicHttpContext(null);
+//            try {
+//                while (!Thread.interrupted() && _conn.isOpen()) {
+//                    try {
+//                        _httpService.handleRequest(_conn, context);
+//                        _conn.close();
+//                    } finally {
+//                        StackMaid.current().exitCleanup();
+//                    }
+//                }
+//            } catch (ConnectionClosedException ex) {
+//                if (s_logger.isTraceEnabled()) {
+//                    s_logger.trace("ApiServer:  Client closed connection");
+//                }
+//            } catch (IOException ex) {
+//                if (s_logger.isTraceEnabled()) {
+//                    s_logger.trace("ApiServer:  IOException - " + ex);
+//                }
+//            } catch (HttpException ex) {
+//                s_logger.warn("ApiServer:  Unrecoverable HTTP protocol violation" + ex);
+//            } finally {
+//                try {
+//                    _conn.shutdown();
+//                } catch (IOException ignore) {
+//                }
+//            }
+//        }
+//    }
+//
+//    public String getSerializedApiError(int errorCode, String errorText, Map<String, Object[]> apiCommandParams, String responseType, Exception ex) {
+//        String responseName = null;
+//        String cmdClassName = null;
+//
+//        String responseText = null;
+//
+//        try {
+//            if (errorCode == ApiErrorCode.UNSUPPORTED_ACTION_ERROR.ordinal() || apiCommandParams == null || apiCommandParams.isEmpty()) {
+//                responseName = "errorresponse";
+//            } else {
+//                Object cmdObj = apiCommandParams.get("command");
+//                // cmd name can be null when "command" parameter is missing in the request
+//                if (cmdObj != null) {
+//                    String cmdName = ((String[]) cmdObj)[0];
+//                    cmdClassName = _apiCommands.getProperty(cmdName);
+//                    if (cmdClassName != null) {
+//                        Class<?> claz = Class.forName(cmdClassName);
+//                        responseName = ((BaseCmd) claz.newInstance()).getCommandName();
+//                    } else {
+//                        responseName = "errorresponse";
+//                    }
+//                }
+//            }
+//            ExceptionResponse apiResponse = new ExceptionResponse();
+//            apiResponse.setErrorCode(errorCode);
+//            apiResponse.setErrorText(errorText);
+//            apiResponse.setResponseName(responseName);
+//            // Also copy over the IdentityProxy object List into this new apiResponse, from
+//            // the exception caught. When invoked from handle(), the exception here can
+//            // be either ServerApiException, PermissionDeniedException or InvalidParameterValue
+//            // Exception. When invoked from ApiServlet's processRequest(), this can be
+//            // a standard exception like NumberFormatException. We'll leave the standard ones alone.
+////            if (ex != null) {
+////            	if (ex instanceof ServerApiException || ex instanceof PermissionDeniedException
+////            			|| ex instanceof InvalidParameterValueException) {
+////            		// Cast the exception appropriately and retrieve the IdentityProxy
+////            		if (ex instanceof ServerApiException) {
+////            			ServerApiException ref = (ServerApiException) ex;
+////            			ArrayList<IdentityProxy> idList = ref.getIdProxyList();
+////            			if (idList != null) {
+////            				for (int i=0; i < idList.size(); i++) {
+////            					IdentityProxy id = idList.get(i);
+////            					apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName());
+////            				}            				
+////            			}
+////            			// Also copy over the cserror code and the function/layer in which it was thrown.
+////            			apiResponse.setCSErrorCode(ref.getCSErrorCode());
+////            		} else if (ex instanceof PermissionDeniedException) {
+////            			PermissionDeniedException ref = (PermissionDeniedException) ex;
+////            			ArrayList<IdentityProxy> idList = ref.getIdProxyList();
+////            			if (idList != null) {
+////            				for (int i=0; i < idList.size(); i++) {
+////            					IdentityProxy id = idList.get(i);
+////            					apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName());
+////            				}            				
+////            			}
+////            			// Also copy over the cserror code and the function/layer in which it was thrown.
+////            			apiResponse.setCSErrorCode(ref.getCSErrorCode());
+////            		} else if (ex instanceof InvalidParameterValueException) {
+////            			InvalidParameterValueException ref = (InvalidParameterValueException) ex;
+////            			ArrayList<IdentityProxy> idList = ref.getIdProxyList();
+////            			if (idList != null) {
+////            				for (int i=0; i < idList.size(); i++) {
+////            					IdentityProxy id = idList.get(i);
+////            					apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName());
+////            				}            				
+////            			}
+////            			// Also copy over the cserror code and the function/layer in which it was thrown.
+////            			apiResponse.setCSErrorCode(ref.getCSErrorCode());
+////            		}
+////            	}
+////            }
+//            SerializationContext.current().setUuidTranslation(true);
+//            responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType);
+//
+//        } catch (Exception e) {
+//            s_logger.error("Exception responding to http request", e);            
+//        }
+//        return responseText;
+//    }
+//    
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/server/src/com/cloud/region/RegionManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/region/RegionManager.java b/server/src/com/cloud/region/RegionManager.java
index 20e24ba..453a977 100644
--- a/server/src/com/cloud/region/RegionManager.java
+++ b/server/src/com/cloud/region/RegionManager.java
@@ -18,7 +18,7 @@ package com.cloud.region;
 
 import java.util.Map;
 
-import com.cloud.domain.DomainVO;
+import com.cloud.domain.Domain;
 import com.cloud.user.UserAccount;
 
 
@@ -32,5 +32,5 @@ public interface RegionManager {
 			String accountName, String domainUUId, String userUUID);
 	public void propogateAddDomain(String name, Long parentId, String networkDomain, String uuid);
 	UserAccount getUserAccount(String username, Long domainId);
-	DomainVO findDomainByPath(String domainPath);	
+	Domain findDomainByPath(String domainPath);	
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de20cb6c/server/src/com/cloud/region/RegionManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/region/RegionManagerImpl.java b/server/src/com/cloud/region/RegionManagerImpl.java
index 3797ea1..193c16a 100755
--- a/server/src/com/cloud/region/RegionManagerImpl.java
+++ b/server/src/com/cloud/region/RegionManagerImpl.java
@@ -23,15 +23,15 @@ import java.util.Map;
 import javax.ejb.Local;
 import javax.naming.ConfigurationException;
 
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
+import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
+import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;
+import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
+import org.apache.cloudstack.api.command.user.region.ListRegionsCmd;
 import org.apache.commons.httpclient.NameValuePair;
 import org.apache.log4j.Logger;
 
-import com.cloud.api.ApiConstants;
-import com.cloud.api.commands.DeleteUserCmd;
-import com.cloud.api.commands.ListRegionsCmd;
-import com.cloud.api.commands.UpdateAccountCmd;
-import com.cloud.api.commands.UpdateDomainCmd;
-import com.cloud.api.commands.UpdateUserCmd;
 import com.cloud.domain.Domain;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;