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

[42/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/1f57d925/api/src/com/cloud/domain/Domain.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/com/cloud/user/Account.java
----------------------------------------------------------------------
diff --cc api/src/com/cloud/user/Account.java
index d7d67ac,a5b3e87..e65e017
--- a/api/src/com/cloud/user/Account.java
+++ b/api/src/com/cloud/user/Account.java
@@@ -59,10 -60,7 +60,10 @@@ public interface Account extends Contro
      public Date getRemoved();
  
      public String getNetworkDomain();
-     
+ 
      public Long getDefaultZoneId();
 -
 +    
 +    public int getRegionId();
 +    
 +    public String getUuid();
  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/com/cloud/user/AccountService.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/com/cloud/user/DomainService.java
----------------------------------------------------------------------
diff --cc api/src/com/cloud/user/DomainService.java
index e2221b6,cd20060..1d207e7
--- a/api/src/com/cloud/user/DomainService.java
+++ b/api/src/com/cloud/user/DomainService.java
@@@ -40,27 -42,10 +42,27 @@@ public interface DomainService 
  
      boolean deleteDomain(long domainId, Boolean cleanup);
  
-     List<? extends Domain> searchForDomains(ListDomainsCmd cmd)
+     Pair<List<? extends Domain>, Integer> searchForDomains(ListDomainsCmd cmd)
              throws PermissionDeniedException;
  
-     List<? extends Domain> searchForDomainChildren(ListDomainChildrenCmd cmd)
+     Pair<List<? extends Domain>, Integer> searchForDomainChildren(ListDomainChildrenCmd cmd)
              throws PermissionDeniedException;
 +    /**
 +     * update an existing domain
 +     * 
 +     * @param cmd
 +     *            - the command containing domainId and new domainName
 +     * @return Domain object if the command succeeded
 +     */
 +    Domain updateDomain(UpdateDomainCmd cmd);
 +
 +    /**
 +     * find the domain by its path
 +     * 
 +     * @param domainPath
 +     *            the path to use to lookup a domain
 +     * @return domainVO the domain with the matching path, or null if no domain with the given path exists
 +     */
 +    Domain findDomainByPath(String domainPath);
  
  }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/com/cloud/user/User.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/ApiConstants.java
index 0000000,58a7831..e787ce2
mode 000000,100644..100644
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@@ -1,0 -1,449 +1,452 @@@
+ // 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;
+ 
+ import org.omg.CORBA.PUBLIC_MEMBER;
+ 
+ public class ApiConstants {
+     public static final String ACCOUNT = "account";
+     public static final String ACCOUNTS = "accounts";
+     public static final String ACCOUNT_TYPE = "accounttype";
+     public static final String ACCOUNT_ID = "accountid";
+     public static final String ALGORITHM = "algorithm";
+     public static final String ALLOCATED_ONLY = "allocatedonly";
+     public static final String API_KEY = "userapikey";
+     public static final String APPLIED = "applied";
+     public static final String AVAILABLE = "available";
+     public static final String BITS = "bits";
+     public static final String BOOTABLE = "bootable";
+     public static final String BIND_DN = "binddn";
+     public static final String BIND_PASSWORD = "bindpass";
+     public static final String CATEGORY = "category";
+     public static final String CERTIFICATE = "certificate";
+     public static final String PRIVATE_KEY = "privatekey";
+     public static final String DOMAIN_SUFFIX = "domainsuffix";
+     public static final String DNS_SEARCH_ORDER = "dnssearchorder";
+     public static final String CIDR = "cidr";
+     public static final String CIDR_LIST = "cidrlist";
+     public static final String CLEANUP = "cleanup";
+     public static final String CLUSTER_ID = "clusterid";
+     public static final String CLUSTER_NAME = "clustername";
+     public static final String CLUSTER_TYPE = "clustertype";
+     public static final String COMPONENT = "component";
+     public static final String CPU_NUMBER = "cpunumber";
+     public static final String CPU_SPEED = "cpuspeed";
+     public static final String CREATED = "created";
+     public static final String CUSTOMIZED = "customized";
+     public static final String DESCRIPTION = "description";
+     public static final String DESTINATION_ZONE_ID = "destzoneid";
+     public static final String DETAILS = "details";
+     public static final String DEVICE_ID = "deviceid";
+     public static final String DISK_OFFERING_ID = "diskofferingid";
+     public static final String DISK_SIZE = "disksize";
+     public static final String DISPLAY_NAME = "displayname";
+     public static final String DISPLAY_TEXT = "displaytext";
+     public static final String DNS1 = "dns1";
+     public static final String DNS2 = "dns2";
+     public static final String DOMAIN = "domain";
+     public static final String DOMAIN_ID = "domainid";
+     public static final String DURATION = "duration";
+     public static final String EMAIL = "email";
+     public static final String END_DATE = "enddate";
+     public static final String END_IP = "endip";
+     public static final String END_PORT = "endport";
+     public static final String ENTRY_TIME = "entrytime";
+     public static final String FETCH_LATEST = "fetchlatest";
+     public static final String FIRSTNAME = "firstname";
+     public static final String FORCED = "forced";
+     public static final String FORCED_DESTROY_LOCAL_STORAGE = "forcedestroylocalstorage";
+     public static final String FORMAT = "format";
+     public static final String FOR_VIRTUAL_NETWORK = "forvirtualnetwork";
+     public static final String GATEWAY = "gateway";
+     public static final String GROUP = "group";
+     public static final String GROUP_ID = "groupid";
+     public static final String GUEST_CIDR_ADDRESS = "guestcidraddress";
+     public static final String HA_ENABLE = "haenable";
+     public static final String HOST_ID = "hostid";
+     public static final String HOST_NAME = "hostname";
+     public static final String HYPERVISOR = "hypervisor";
+     public static final String INLINE = "inline";
+     public static final String INSTANCE = "instance";
+     public static final String ICMP_CODE = "icmpcode";
+     public static final String ICMP_TYPE = "icmptype";
+     public static final String ID = "id";
+     public static final String IDS = "ids";
+     public static final String INTERNAL_DNS1 = "internaldns1";
+     public static final String INTERNAL_DNS2 = "internaldns2";
+     public static final String INTERVAL_TYPE = "intervaltype";
+     public static final String IP_ADDRESS = "ipaddress";
+     public static final String IP_ADDRESS_ID = "ipaddressid";
+     public static final String IS_ASYNC = "isasync";
+     public static final String IP_AVAILABLE = "ipavailable";
+     public static final String IP_LIMIT = "iplimit";
+     public static final String IP_TOTAL = "iptotal";
+     public static final String IS_CLEANUP_REQUIRED = "iscleanuprequired";
+     public static final String IS_EXTRACTABLE = "isextractable";
+     public static final String IS_FEATURED = "isfeatured";
+     public static final String IS_PUBLIC = "ispublic";
+     public static final String IS_READY = "isready";
+     public static final String IS_RECURSIVE = "isrecursive";
+     public static final String ISO_FILTER = "isofilter";
+     public static final String ISO_GUEST_OS_NONE = "None";
+     public static final String JOB_ID = "jobid";
+     public static final String JOB_STATUS = "jobstatus";
+     public static final String LASTNAME = "lastname";
+     public static final String LEVEL = "level";
+     public static final String LENGTH = "length";
+     public static final String LIMIT_CPU_USE = "limitcpuuse";
+     public static final String LOCK = "lock";
+     public static final String LUN = "lun";
+     public static final String LBID = "lbruleid";
+     public static final String MAX = "max";
+     public static final String MAX_SNAPS = "maxsnaps";
+     public static final String MEMORY = "memory";
+     public static final String MODE = "mode";
+     public static final String NAME = "name";
+     public static final String METHOD_NAME = "methodname";
+     public static final String NETWORK_DOMAIN = "networkdomain";
+     public static final String NETMASK = "netmask";
+     public static final String NEW_NAME = "newname";
+     public static final String NUM_RETRIES = "numretries";
+     public static final String OFFER_HA = "offerha";
+     public static final String IS_SYSTEM_OFFERING = "issystem";
+     public static final String IS_DEFAULT_USE = "defaultuse";
+     public static final String OP = "op";
+     public static final String OS_CATEGORY_ID = "oscategoryid";
+     public static final String OS_TYPE_ID = "ostypeid";
+     public static final String PARAMS = "params";
+     public static final String PARENT_DOMAIN_ID = "parentdomainid";
+     public static final String PASSWORD = "password";
+     public static final String NEW_PASSWORD = "new_password";
+     public static final String PASSWORD_ENABLED = "passwordenabled";
+     public static final String SSHKEY_ENABLED = "sshkeyenabled";
+     public static final String PATH = "path";
+     public static final String POD_ID = "podid";
+     public static final String POD_IDS = "podids";
+     public static final String POLICY_ID = "policyid";
+     public static final String PORT = "port";
+     public static final String PORTAL = "portal";
+     public static final String PORT_FORWARDING_SERVICE_ID = "portforwardingserviceid";
+     public static final String PRIVATE_INTERFACE = "privateinterface";
+     public static final String PRIVATE_IP = "privateip";
+     public static final String PRIVATE_PORT = "privateport";
+     public static final String PRIVATE_START_PORT = "privateport";
+     public static final String PRIVATE_END_PORT = "privateendport";
+     public static final String PRIVATE_ZONE = "privatezone";
+     public static final String PROTOCOL = "protocol";
+     public static final String PUBLIC_INTERFACE = "publicinterface";
+     public static final String PUBLIC_IP_ID = "publicipid";
+     public static final String PUBLIC_IP = "publicip";
+     public static final String PUBLIC_PORT = "publicport";
+     public static final String PUBLIC_START_PORT = "publicport";
+     public static final String PUBLIC_END_PORT = "publicendport";
+     public static final String PUBLIC_ZONE = "publiczone";
+     public static final String RECEIVED_BYTES = "receivedbytes";
+     public static final String REQUIRES_HVM = "requireshvm";
+     public static final String RESOURCE_TYPE = "resourcetype";
+     public static final String RESPONSE = "response";
+     public static final String QUERY_FILTER = "queryfilter";
+     public static final String SCHEDULE = "schedule";
+     public static final String SCOPE = "scope";
+     public static final String SECRET_KEY = "usersecretkey";
+     public static final String SINCE = "since";
+     public static final String KEY = "key";
+     public static final String SEARCH_BASE = "searchbase";
+     public static final String SECURITY_GROUP_IDS = "securitygroupids";
+     public static final String SECURITY_GROUP_NAMES = "securitygroupnames";
+     public static final String SECURITY_GROUP_NAME = "securitygroupname";
+     public static final String SECURITY_GROUP_ID = "securitygroupid";
+     public static final String SENT = "sent";
+     public static final String SENT_BYTES = "sentbytes";
+     public static final String SERVICE_OFFERING_ID = "serviceofferingid";
+     public static final String SHOW_CAPACITIES = "showcapacities";
+     public static final String SIZE = "size";
+     public static final String SNAPSHOT_ID = "snapshotid";
+     public static final String SNAPSHOT_POLICY_ID = "snapshotpolicyid";
+     public static final String SNAPSHOT_TYPE = "snapshottype";
+     public static final String SOURCE_ZONE_ID = "sourcezoneid";
+     public static final String START_DATE = "startdate";
+     public static final String START_IP = "startip";
+     public static final String START_PORT = "startport";
+     public static final String STATE = "state";
+     public static final String STATUS = "status";
+     public static final String STORAGE_TYPE = "storagetype";
+     public static final String SYSTEM_VM_TYPE = "systemvmtype";
+     public static final String TAGS = "tags";
+     public static final String TARGET_IQN = "targetiqn";
+     public static final String TEMPLATE_FILTER = "templatefilter";
+     public static final String TEMPLATE_ID = "templateid";
+     public static final String ISO_ID = "isoid";
+     public static final String TIMEOUT = "timeout";
+     public static final String TIMEZONE = "timezone";
+     public static final String TYPE = "type";
+     public static final String TRUST_STORE = "truststore";
+     public static final String TRUST_STORE_PASSWORD = "truststorepass";
+     public static final String URL = "url";
+     public static final String USAGE_INTERFACE = "usageinterface";
+     public static final String USER_DATA = "userdata";
+     public static final String USER_ID = "userid";
+     public static final String USE_SSL = "ssl";
+     public static final String USERNAME = "username";
+     public static final String USER_SECURITY_GROUP_LIST = "usersecuritygrouplist";
+     public static final String USE_VIRTUAL_NETWORK = "usevirtualnetwork";
+     public static final String VALUE = "value";
+     public static final String VIRTUAL_MACHINE_ID = "virtualmachineid";
+     public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids";
+     public static final String VLAN = "vlan";
+     public static final String VLAN_ID = "vlanid";
+     public static final String VM_AVAILABLE = "vmavailable";
+     public static final String VM_LIMIT = "vmlimit";
+     public static final String VM_TOTAL = "vmtotal";
+     public static final String VNET = "vnet";
+     public static final String VOLUME_ID = "volumeid";
+     public static final String ZONE_ID = "zoneid";
+     public static final String ZONE_NAME = "zonename";
+     public static final String NETWORK_TYPE = "networktype";
+     public static final String PAGE = "page";
+     public static final String PAGE_SIZE = "pagesize";
+     public static final String COUNT = "count";
+     public static final String TRAFFIC_TYPE = "traffictype";
+     public static final String NETWORK_OFFERING_ID = "networkofferingid";
+     public static final String NETWORK_IDS = "networkids";
+     public static final String NETWORK_ID = "networkid";
+     public static final String SPECIFY_VLAN = "specifyvlan";
+     public static final String IS_DEFAULT = "isdefault";
+     public static final String IS_SYSTEM = "issystem";
+     public static final String AVAILABILITY = "availability";
+     public static final String NETWORKRATE = "networkrate";
+     public static final String HOST_TAGS = "hosttags";
+     public static final String SSH_KEYPAIR = "keypair";
+     public static final String HOST_CPU_CAPACITY = "hostcpucapacity";
+     public static final String HOST_CPU_NUM = "hostcpunum";
+     public static final String HOST_MEM_CAPACITY = "hostmemcapacity";
+     public static final String HOST_MAC = "hostmac";
+     public static final String HOST_TAG = "hosttag";
+     public static final String PXE_SERVER_TYPE = "pxeservertype";
+     public static final String LINMIN_USERNAME = "linminusername";
+     public static final String LINMIN_PASSWORD = "linminpassword";
+     public static final String LINMIN_APID = "linminapid";
+     public static final String DHCP_SERVER_TYPE = "dhcpservertype";
+     public static final String LINK_LOCAL_IP = "linklocalip";
+     public static final String LINK_LOCAL_MAC_ADDRESS = "linklocalmacaddress";
+     public static final String LINK_LOCAL_MAC_NETMASK = "linklocalnetmask";
+     public static final String LINK_LOCAL_NETWORK_ID = "linklocalnetworkid";
+     public static final String PRIVATE_MAC_ADDRESS = "privatemacaddress";
+     public static final String PRIVATE_NETMASK = "privatenetmask";
+     public static final String PRIVATE_NETWORK_ID = "privatenetworkid";
+     public static final String ALLOCATION_STATE = "allocationstate";
+     public static final String MANAGED_STATE = "managedstate";
+     public static final String STORAGE_ID = "storageid";
+     public static final String PING_STORAGE_SERVER_IP = "pingstorageserverip";
+     public static final String PING_DIR = "pingdir";
+     public static final String TFTP_DIR = "tftpdir";
+     public static final String PING_CIFS_USERNAME = "pingcifsusername";
+     public static final String PING_CIFS_PASSWORD = "pingcifspassword";
+     public static final String CHECKSUM = "checksum";
+     public static final String NETWORK_DEVICE_TYPE = "networkdevicetype";
+     public static final String NETWORK_DEVICE_PARAMETER_LIST = "networkdeviceparameterlist";
+     public static final String ZONE_TOKEN = "zonetoken";
+     public static final String DHCP_PROVIDER = "dhcpprovider";
+     public static final String RESULT = "success";
+     public static final String LUN_ID = "lunId";
+     public static final String IQN = "iqn";
+     public static final String AGGREGATE_NAME = "aggregatename";
+     public static final String POOL_NAME = "poolname";
+     public static final String VOLUME_NAME = "volumename";
+     public static final String SNAPSHOT_POLICY = "snapshotpolicy";
+     public static final String SNAPSHOT_RESERVATION = "snapshotreservation";
+     public static final String IP_NETWORK_LIST = "iptonetworklist";
+     public static final String PARAM_LIST = "param";
+     public static final String FOR_LOAD_BALANCING = "forloadbalancing";
+     public static final String KEYBOARD = "keyboard";
+     public static final String OPEN_FIREWALL = "openfirewall";
+     public static final String TEMPLATE_TAG = "templatetag";
+     public static final String HYPERVISOR_VERSION = "hypervisorversion";
+     public static final String MAX_GUESTS_LIMIT = "maxguestslimit";
+     public static final String PROJECT_ID = "projectid";
+     public static final String PROJECT_IDS = "projectids";
+     public static final String PROJECT = "project";
+     public static final String ROLE = "role";
+     public static final String USER = "user";
+     public static final String ACTIVE_ONLY = "activeonly";
+     public static final String TOKEN = "token";
+     public static final String ACCEPT = "accept";
+     public static final String SORT_KEY = "sortkey";
+     public static final String ACCOUNT_DETAILS = "accountdetails";
+     public static final String SERVICE_PROVIDER_LIST = "serviceproviderlist";
+     public static final String SERVICE_CAPABILITY_LIST = "servicecapabilitylist";
+     public static final String CAN_CHOOSE_SERVICE_CAPABILITY = "canchooseservicecapability";
+     public static final String PROVIDER = "provider";
+     public static final String NETWORK_SPEED = "networkspeed";
+     public static final String BROADCAST_DOMAIN_RANGE = "broadcastdomainrange";
+     public static final String ISOLATION_METHODS = "isolationmethods";
+     public static final String PHYSICAL_NETWORK_ID = "physicalnetworkid";
+     public static final String DEST_PHYSICAL_NETWORK_ID = "destinationphysicalnetworkid";
+     public static final String ENABLED = "enabled";
+     public static final String SERVICE_NAME = "servicename";
+     public static final String DHCP_RANGE = "dhcprange";
+     public static final String UUID = "uuid";
+     public static final String SECURITY_GROUP_EANBLED = "securitygroupenabled";
+     public static final String LOCAL_STORAGE_ENABLED = "localstorageenabled";
+     public static final String GUEST_IP_TYPE = "guestiptype";
+     public static final String XEN_NETWORK_LABEL = "xennetworklabel";
+     public static final String KVM_NETWORK_LABEL = "kvmnetworklabel";
+     public static final String VMWARE_NETWORK_LABEL = "vmwarenetworklabel";
+     public static final String NETWORK_SERVICE_PROVIDER_ID = "nspid";
+     public static final String SERVICE_LIST = "servicelist";
+     public static final String CAN_ENABLE_INDIVIDUAL_SERVICE = "canenableindividualservice";
+     public static final String SUPPORTED_SERVICES = "supportedservices";
+     public static final String NSP_ID = "nspid";
+     public static final String ACL_TYPE = "acltype";
+     public static final String SUBDOMAIN_ACCESS = "subdomainaccess";
+     public static final String LOAD_BALANCER_DEVICE_ID = "lbdeviceid";
+     public static final String LOAD_BALANCER_DEVICE_NAME = "lbdevicename";
+     public static final String LOAD_BALANCER_DEVICE_STATE = "lbdevicestate";
+     public static final String LOAD_BALANCER_DEVICE_CAPACITY = "lbdevicecapacity";
+     public static final String LOAD_BALANCER_DEVICE_DEDICATED = "lbdevicededicated";
+     public static final String FIREWALL_DEVICE_ID = "fwdeviceid";
+     public static final String FIREWALL_DEVICE_NAME = "fwdevicename";
+     public static final String FIREWALL_DEVICE_STATE = "fwdevicestate";
+     public static final String FIREWALL_DEVICE_CAPACITY = "fwdevicecapacity";
+     public static final String FIREWALL_DEVICE_DEDICATED = "fwdevicededicated";
+     public static final String SERVICE = "service";
+     public static final String ASSOCIATED_NETWORK_ID = "associatednetworkid";
+     public static final String ASSOCIATED_NETWORK_NAME = "associatednetworkname";
+     public static final String SOURCE_NAT_SUPPORTED = "sourcenatsupported";
+     public static final String RESOURCE_STATE = "resourcestate";
+     public static final String PROJECT_INVITE_REQUIRED = "projectinviterequired";
+     public static final String REQUIRED = "required";
+     public static final String RESTART_REQUIRED = "restartrequired";
+     public static final String ALLOW_USER_CREATE_PROJECTS = "allowusercreateprojects";
+     public static final String CONSERVE_MODE = "conservemode";
+     public static final String TRAFFIC_TYPE_IMPLEMENTOR = "traffictypeimplementor";
+     public static final String KEYWORD = "keyword";
+     public static final String LIST_ALL = "listall";
+     public static final String SPECIFY_IP_RANGES = "specifyipranges";
+     public static final String IS_SOURCE_NAT = "issourcenat";
+     public static final String IS_STATIC_NAT = "isstaticnat";
+     public static final String SORT_BY = "sortby";
+     public static final String CHANGE_CIDR = "changecidr";
+     public static final String PURPOSE = "purpose";
+     public static final String IS_TAGGED = "istagged";
+     public static final String INSTANCE_NAME = "instancename";
+     public static final String START_VM = "startvm";
+     public static final String HA_HOST = "hahost";
+     public static final String CUSTOM_DISK_OFF_MAX_SIZE = "customdiskofferingmaxsize";
+     public static final String DEFAULT_ZONE_ID = "defaultzoneid";
+     public static final String GUID = "guid";
+ 
+     public static final String EXTERNAL_SWITCH_MGMT_DEVICE_ID = "vsmdeviceid";
+     public static final String EXTERNAL_SWITCH_MGMT_DEVICE_NAME = "vsmdevicename";
+     public static final String EXTERNAL_SWITCH_MGMT_DEVICE_STATE = "vsmdevicestate";
+     // Would we need to have a capacity field for Cisco N1KV VSM? Max hosts managed by it perhaps? May remove this later.
+     public static final String EXTERNAL_SWITCH_MGMT_DEVICE_CAPACITY = "vsmdevicecapacity";
+     public static final String CISCO_NEXUS_VSM_NAME = "vsmname";
+     public static final String VSM_USERNAME = "vsmusername";
+     public static final String VSM_PASSWORD = "vsmpassword";
+     public static final String VSM_IPADDRESS = "vsmipaddress";
+     public static final String VSM_MGMT_VLAN_ID = "vsmmgmtvlanid";
+     public static final String VSM_PKT_VLAN_ID = "vsmpktvlanid";
+     public static final String VSM_CTRL_VLAN_ID = "vsmctrlvlanid";
+     public static final String VSM_STORAGE_VLAN_ID = "vsmstoragevlanid";
+     public static final String VSM_DOMAIN_ID = "vsmdomainid";
+     public static final String VSM_CONFIG_MODE = "vsmconfigmode";
+     public static final String VSM_CONFIG_STATE = "vsmconfigstate";
+     public static final String VSM_DEVICE_STATE = "vsmdevicestate";
+     public static final String ADD_VSM_FLAG = "addvsmflag";
++	public static final String END_POINT = "endpoint";
++	public static final String REGION_ID = "regionid";
++	public static final String IS_PROPAGATE = "ispropagate";
+     public static final String VPC_OFF_ID = "vpcofferingid";
+     public static final String NETWORK = "network";
+     public static final String VPC_ID = "vpcid";
+     public static final String GATEWAY_ID = "gatewayid";
+     public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy";
+     public static final String RESOURCE_IDS = "resourceids";
+     public static final String RESOURCE_ID = "resourceid";
+     public static final String CUSTOMER = "customer";
+     public static final String S2S_VPN_GATEWAY_ID = "s2svpngatewayid";
+     public static final String S2S_CUSTOMER_GATEWAY_ID = "s2scustomergatewayid";
+     public static final String IPSEC_PSK = "ipsecpsk";
+     public static final String GUEST_IP = "guestip";
+     public static final String REMOVED = "removed";
+     public static final String IKE_POLICY = "ikepolicy";
+     public static final String ESP_POLICY = "esppolicy";
+     public static final String IKE_LIFETIME = "ikelifetime";
+     public static final String ESP_LIFETIME = "esplifetime";
+     public static final String DPD = "dpd";
+     public static final String FOR_VPC = "forvpc";
+     public static final String SHRINK_OK = "shrinkok";
+     public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid";
+     public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid";
+     public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename";
+     public static final String NICIRA_NVP_GATEWAYSERVICE_UUID = "l3gatewayserviceuuid";
+     public static final String S3_ACCESS_KEY = "accesskey";
+     public static final String S3_SECRET_KEY = "secretkey";
+     public static final String S3_END_POINT = "endpoint";
+     public static final String S3_BUCKET_NAME = "bucket";
+     public static final String S3_HTTPS_FLAG = "usehttps";
+     public static final String S3_CONNECTION_TIMEOUT = "connectiontimeout";
+     public static final String S3_MAX_ERROR_RETRY = "maxerrorretry";
+     public static final String S3_SOCKET_TIMEOUT = "sockettimeout";
+     public static final String INCL_ZONES = "includezones";
+     public static final String EXCL_ZONES = "excludezones";
+     public static final String SOURCE = "source";
+     public static final String COUNTER_ID = "counterid";
+     public static final String AGGR_OPERATOR = "aggroperator";
+     public static final String AGGR_FUNCTION = "aggrfunction";
+     public static final String AGGR_VALUE = "aggrvalue";
+     public static final String THRESHOLD = "threshold";
+     public static final String RELATIONAL_OPERATOR = "relationaloperator";
+     public static final String OTHER_DEPLOY_PARAMS = "otherdeployparams";
+     public static final String MIN_MEMBERS = "minmembers";
+     public static final String MAX_MEMBERS = "maxmembers";
+     public static final String AUTOSCALE_VM_DESTROY_TIME = "destroyvmgraceperiod";
+     public static final String VMPROFILE_ID = "vmprofileid";
+     public static final String VMGROUP_ID = "vmgroupid";
+     public static final String CS_URL = "csurl";
+     public static final String SCALEUP_POLICY_IDS = "scaleuppolicyids";
+     public static final String SCALEDOWN_POLICY_IDS = "scaledownpolicyids";
+     public static final String SCALEUP_POLICIES = "scaleuppolicies";
+     public static final String SCALEDOWN_POLICIES = "scaledownpolicies";
+     public static final String INTERVAL = "interval";
+     public static final String QUIETTIME = "quiettime";
+     public static final String ACTION = "action";
+     public static final String CONDITION_ID = "conditionid";
+     public static final String CONDITION_IDS = "conditionids";
+     public static final String COUNTERPARAM_LIST = "counterparam";
+     public static final String AUTOSCALE_USER_ID = "autoscaleuserid";
+ 
+     public enum HostDetails {
+         all, capacity, events, stats, min;
+     }
+ 
+     public enum VMDetails {
+         all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min;
+     }
+ 
+     public enum LDAPParams {
+         hostname, port, usessl, queryfilter, searchbase, dn, passwd, truststore, truststorepass;
+ 
+         @Override
+         public String toString() {
+             return "ldap." + name();
+         }
+     }
+ 
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/BaseCmd.java
index 0000000,ef72af9..c0d465f
mode 000000,100644..100644
--- a/api/src/org/apache/cloudstack/api/BaseCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseCmd.java
@@@ -1,0 -1,519 +1,522 @@@
+ // 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;
+ 
+ import java.text.DateFormat;
+ import java.text.SimpleDateFormat;
+ import java.util.Date;
+ import java.util.HashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.regex.Pattern;
+ 
+ import org.apache.cloudstack.query.QueryService;
+ import org.apache.log4j.Logger;
+ 
+ import com.cloud.configuration.ConfigurationService;
+ import com.cloud.consoleproxy.ConsoleProxyService;
+ import com.cloud.dao.EntityManager;
+ import com.cloud.domain.Domain;
+ import com.cloud.exception.ConcurrentOperationException;
+ import com.cloud.exception.InsufficientCapacityException;
+ import com.cloud.exception.InvalidParameterValueException;
+ import com.cloud.exception.NetworkRuleConflictException;
+ import com.cloud.exception.PermissionDeniedException;
+ import com.cloud.exception.ResourceAllocationException;
+ import com.cloud.exception.ResourceUnavailableException;
+ import com.cloud.network.NetworkService;
+ import com.cloud.network.StorageNetworkService;
+ import com.cloud.network.VpcVirtualNetworkApplianceService;
+ import com.cloud.network.as.AutoScaleService;
+ import com.cloud.network.firewall.FirewallService;
+ import com.cloud.network.firewall.NetworkACLService;
+ import com.cloud.network.lb.LoadBalancingRulesService;
+ import com.cloud.network.rules.RulesService;
+ import com.cloud.network.security.SecurityGroupService;
+ import com.cloud.network.vpc.VpcService;
+ import com.cloud.network.vpn.RemoteAccessVpnService;
+ import com.cloud.network.vpn.Site2SiteVpnService;
+ import com.cloud.projects.Project;
+ import com.cloud.projects.ProjectService;
++import com.cloud.region.RegionService;
+ import com.cloud.resource.ResourceService;
+ import com.cloud.server.ManagementService;
+ import com.cloud.server.TaggedResourceService;
+ import com.cloud.storage.StorageService;
+ import com.cloud.storage.snapshot.SnapshotService;
+ import com.cloud.template.TemplateService;
+ import com.cloud.user.Account;
+ import com.cloud.user.AccountService;
+ import com.cloud.user.DomainService;
+ import com.cloud.user.ResourceLimitService;
+ import com.cloud.utils.Pair;
+ import com.cloud.utils.component.ComponentLocator;
+ import com.cloud.vm.BareMetalVmService;
+ import com.cloud.vm.UserVmService;
+ 
+ public abstract class BaseCmd {
+     private static final Logger s_logger = Logger.getLogger(BaseCmd.class.getName());
+ 
+     public static final String USER_ERROR_MESSAGE = "Internal error executing command, please contact your system administrator";
+     public static final int PROGRESS_INSTANCE_CREATED = 1;
+ 
+     public static final String RESPONSE_TYPE_XML = "xml";
+     public static final String RESPONSE_TYPE_JSON = "json";
+ 
+     public enum CommandType {
+         BOOLEAN, DATE, FLOAT, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, STRING, TZDATE, UUID
+     }
+ 
+     public static final DateFormat INPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
+     public static final DateFormat NEW_INPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+     public static Pattern newInputDateFormat = Pattern.compile("[\\d]+-[\\d]+-[\\d]+ [\\d]+:[\\d]+:[\\d]+");
+     private static final DateFormat _outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
+ 
+     private Object _responseObject = null;
+     private Map<String, String> fullUrlParams;
+ 
+     @Parameter(name = "response", type = CommandType.STRING)
+     private String responseType;
+ 
+     public static ComponentLocator s_locator;
+     public static ConfigurationService _configService;
+     public static AccountService _accountService;
+     public static UserVmService _userVmService;
+     public static ManagementService _mgr;
+     public static StorageService _storageService;
+     public static ResourceService _resourceService;
+     public static NetworkService _networkService;
+     public static TemplateService _templateService;
+     public static SecurityGroupService _securityGroupService;
+     public static SnapshotService _snapshotService;
+     public static ConsoleProxyService _consoleProxyService;
+     public static VpcVirtualNetworkApplianceService _routerService;
+     public static ResponseGenerator _responseGenerator;
+     public static EntityManager _entityMgr;
+     public static RulesService _rulesService;
+     public static AutoScaleService _autoScaleService;
+     public static LoadBalancingRulesService _lbService;
+     public static RemoteAccessVpnService _ravService;
+     public static BareMetalVmService _bareMetalVmService;
+     public static ProjectService _projectService;
+     public static FirewallService _firewallService;
+     public static DomainService _domainService;
+     public static ResourceLimitService _resourceLimitService;
+     public static IdentityService _identityService;
+     public static StorageNetworkService _storageNetworkService;
++    public static RegionService _regionService;
+     public static TaggedResourceService _taggedResourceService;
+     public static VpcService _vpcService;
+     public static NetworkACLService _networkACLService;
+     public static Site2SiteVpnService _s2sVpnService;
+ 
+     public static QueryService _queryService;
+ 
+     public static void setComponents(ResponseGenerator generator) {
+         ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
+         _mgr = (ManagementService) ComponentLocator.getComponent(ManagementService.Name);
+         _accountService = locator.getManager(AccountService.class);
+         _configService = locator.getManager(ConfigurationService.class);
+         _userVmService = locator.getManager(UserVmService.class);
+         _storageService = locator.getManager(StorageService.class);
+         _resourceService = locator.getManager(ResourceService.class);
+         _networkService = locator.getManager(NetworkService.class);
+         _templateService = locator.getManager(TemplateService.class);
+         _securityGroupService = locator.getManager(SecurityGroupService.class);
+         _snapshotService = locator.getManager(SnapshotService.class);
+         _consoleProxyService = locator.getManager(ConsoleProxyService.class);
+         _routerService = locator.getManager(VpcVirtualNetworkApplianceService.class);
+         _entityMgr = locator.getManager(EntityManager.class);
+         _rulesService = locator.getManager(RulesService.class);
+         _lbService = locator.getManager(LoadBalancingRulesService.class);
+         _autoScaleService = locator.getManager(AutoScaleService.class);
+         _ravService = locator.getManager(RemoteAccessVpnService.class);
+         _responseGenerator = generator;
+         _bareMetalVmService = locator.getManager(BareMetalVmService.class);
+         _projectService = locator.getManager(ProjectService.class);
+         _firewallService = locator.getManager(FirewallService.class);
+         _domainService = locator.getManager(DomainService.class);
+         _resourceLimitService = locator.getManager(ResourceLimitService.class);
+         _identityService = locator.getManager(IdentityService.class);
+         _storageNetworkService = locator.getManager(StorageNetworkService.class);
++        _regionService = locator.getManager(RegionService.class);
+         _taggedResourceService = locator.getManager(TaggedResourceService.class);
+         _vpcService = locator.getManager(VpcService.class);
+         _networkACLService = locator.getManager(NetworkACLService.class);
+         _s2sVpnService = locator.getManager(Site2SiteVpnService.class);
+         _queryService = locator.getManager(QueryService.class);
+     }
+ 
+     public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException;
+ 
+     public String getResponseType() {
+         if (responseType == null) {
+             return RESPONSE_TYPE_XML;
+         }
+         return responseType;
+     }
+ 
+     public void setResponseType(String responseType) {
+         this.responseType = responseType;
+     }
+ 
+     public abstract String getCommandName();
+ 
+     /**
+      * For commands the API framework needs to know the owner of the object being acted upon. This method is
+      * used to determine that information.
+      *
+      * @return the id of the account that owns the object being acted upon
+      */
+     public abstract long getEntityOwnerId();
+ 
+     public Object getResponseObject() {
+         return _responseObject;
+     }
+ 
+     public void setResponseObject(Object responseObject) {
+         _responseObject = responseObject;
+     }
+ 
+     public ManagementService getMgmtServiceRef() {
+         return _mgr;
+     }
+ 
+     public static String getDateString(Date date) {
+         if (date == null) {
+             return "";
+         }
+         String formattedString = null;
+         synchronized (_outputFormat) {
+             formattedString = _outputFormat.format(date);
+         }
+         return formattedString;
+     }
+ 
+     // FIXME: move this to a utils method so that maps can be unpacked and integer/long values can be appropriately cast
+     @SuppressWarnings({ "unchecked", "rawtypes" })
+     public Map<String, Object> unpackParams(Map<String, String> params) {
+         Map<String, Object> lowercaseParams = new HashMap<String, Object>();
+         for (String key : params.keySet()) {
+             int arrayStartIndex = key.indexOf('[');
+             int arrayStartLastIndex = key.lastIndexOf('[');
+             if (arrayStartIndex != arrayStartLastIndex) {
+                 throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key
+                         + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
+             }
+ 
+             if (arrayStartIndex > 0) {
+                 int arrayEndIndex = key.indexOf(']');
+                 int arrayEndLastIndex = key.lastIndexOf(']');
+                 if ((arrayEndIndex < arrayStartIndex) || (arrayEndIndex != arrayEndLastIndex)) {
+                     // malformed parameter
+                     throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key
+                             + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
+                 }
+ 
+                 // Now that we have an array object, check for a field name in the case of a complex object
+                 int fieldIndex = key.indexOf('.');
+                 String fieldName = null;
+                 if (fieldIndex < arrayEndIndex) {
+                     throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key
+                             + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
+                 } else {
+                     fieldName = key.substring(fieldIndex + 1);
+                 }
+ 
+                 // parse the parameter name as the text before the first '[' character
+                 String paramName = key.substring(0, arrayStartIndex);
+                 paramName = paramName.toLowerCase();
+ 
+                 Map<Integer, Map> mapArray = null;
+                 Map<String, Object> mapValue = null;
+                 String indexStr = key.substring(arrayStartIndex + 1, arrayEndIndex);
+                 int index = 0;
+                 boolean parsedIndex = false;
+                 try {
+                     if (indexStr != null) {
+                         index = Integer.parseInt(indexStr);
+                         parsedIndex = true;
+                     }
+                 } catch (NumberFormatException nfe) {
+                     s_logger.warn("Invalid parameter " + key + " received, unable to parse object array, returning an error.");
+                 }
+ 
+                 if (!parsedIndex) {
+                     throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key
+                             + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup");
+                 }
+ 
+                 Object value = lowercaseParams.get(paramName);
+                 if (value == null) {
+                     // for now, assume object array with sub fields
+                     mapArray = new HashMap<Integer, Map>();
+                     mapValue = new HashMap<String, Object>();
+                     mapArray.put(Integer.valueOf(index), mapValue);
+                 } else if (value instanceof Map) {
+                     mapArray = (HashMap) value;
+                     mapValue = mapArray.get(Integer.valueOf(index));
+                     if (mapValue == null) {
+                         mapValue = new HashMap<String, Object>();
+                         mapArray.put(Integer.valueOf(index), mapValue);
+                     }
+                 }
+ 
+                 // we are ready to store the value for a particular field into the map for this object
+                 mapValue.put(fieldName, params.get(key));
+ 
+                 lowercaseParams.put(paramName, mapArray);
+             } else {
+                 lowercaseParams.put(key.toLowerCase(), params.get(key));
+             }
+         }
+         return lowercaseParams;
+     }
+ 
+     public String buildResponse(ServerApiException apiException, String responseType) {
+         StringBuffer sb = new StringBuffer();
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             // JSON response
+             sb.append("{ \"" + getCommandName() + "\" : { " + "\"@attributes\":{\"cloudstack-version\":\"" + _mgr.getVersion() + "\"},");
+             sb.append("\"errorcode\" : \"" + apiException.getErrorCode() + "\", \"description\" : \"" + apiException.getDescription() + "\" } }");
+         } else {
+             sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
+             sb.append("<" + getCommandName() + ">");
+             sb.append("<errorcode>" + apiException.getErrorCode() + "</errorcode>");
+             sb.append("<description>" + escapeXml(apiException.getDescription()) + "</description>");
+             sb.append("</" + getCommandName() + " cloudstack-version=\"" + _mgr.getVersion() + "\">");
+         }
+         return sb.toString();
+     }
+ 
+     public String buildResponse(List<Pair<String, Object>> tagList, String responseType) {
+         StringBuffer prefixSb = new StringBuffer();
+         StringBuffer suffixSb = new StringBuffer();
+ 
+         // set up the return value with the name of the response
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             prefixSb.append("{ \"" + getCommandName() + "\" : { \"@attributes\":{\"cloudstack-version\":\"" + _mgr.getVersion() + "\"},");
+         } else {
+             prefixSb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
+             prefixSb.append("<" + getCommandName() + " cloudstack-version=\"" + _mgr.getVersion() + "\">");
+         }
+ 
+         int i = 0;
+         for (Pair<String, Object> tagData : tagList) {
+             String tagName = tagData.first();
+             Object tagValue = tagData.second();
+             if (tagValue instanceof Object[]) {
+                 Object[] subObjects = (Object[]) tagValue;
+                 if (subObjects.length < 1) {
+                     continue;
+                 }
+                 writeObjectArray(responseType, suffixSb, i++, tagName, subObjects);
+             } else {
+                 writeNameValuePair(suffixSb, tagName, tagValue, responseType, i++);
+             }
+         }
+ 
+         if (suffixSb.length() > 0) {
+             if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { // append comma only if we have some suffix else
+                 // not as per strict Json syntax.
+                 prefixSb.append(",");
+             }
+             prefixSb.append(suffixSb);
+         }
+         // close the response
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             prefixSb.append("} }");
+         } else {
+             prefixSb.append("</" + getCommandName() + ">");
+         }
+         return prefixSb.toString();
+     }
+ 
+     private void writeNameValuePair(StringBuffer sb, String tagName, Object tagValue, String responseType, int propertyCount) {
+         if (tagValue == null) {
+             return;
+         }
+ 
+         if (tagValue instanceof Object[]) {
+             Object[] subObjects = (Object[]) tagValue;
+             if (subObjects.length < 1) {
+                 return;
+             }
+             writeObjectArray(responseType, sb, propertyCount, tagName, subObjects);
+         } else {
+             if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+                 String seperator = ((propertyCount > 0) ? ", " : "");
+                 sb.append(seperator + "\"" + tagName + "\" : \"" + escapeJSON(tagValue.toString()) + "\"");
+             } else {
+                 sb.append("<" + tagName + ">" + escapeXml(tagValue.toString()) + "</" + tagName + ">");
+             }
+         }
+     }
+ 
+     @SuppressWarnings("rawtypes")
+     private void writeObjectArray(String responseType, StringBuffer sb, int propertyCount, String tagName, Object[] subObjects) {
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             String separator = ((propertyCount > 0) ? ", " : "");
+             sb.append(separator);
+         }
+         int j = 0;
+         for (Object subObject : subObjects) {
+             if (subObject instanceof List) {
+                 List subObjList = (List) subObject;
+                 writeSubObject(sb, tagName, subObjList, responseType, j++);
+             }
+         }
+ 
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             sb.append("]");
+         }
+     }
+ 
+     @SuppressWarnings("rawtypes")
+     private void writeSubObject(StringBuffer sb, String tagName, List tagList, String responseType, int objectCount) {
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             sb.append(((objectCount == 0) ? "\"" + tagName + "\" : [  { " : ", { "));
+         } else {
+             sb.append("<" + tagName + ">");
+         }
+ 
+         int i = 0;
+         for (Object tag : tagList) {
+             if (tag instanceof Pair) {
+                 Pair nameValuePair = (Pair) tag;
+                 writeNameValuePair(sb, (String) nameValuePair.first(), nameValuePair.second(), responseType, i++);
+             }
+         }
+ 
+         if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) {
+             sb.append("}");
+         } else {
+             sb.append("</" + tagName + ">");
+         }
+     }
+ 
+     /**
+      * Escape xml response set to false by default. API commands to override this method to allow escaping
+      */
+     public boolean requireXmlEscape() {
+         return true;
+     }
+ 
+     private String escapeXml(String xml) {
+         if (!requireXmlEscape()) {
+             return xml;
+         }
+         int iLen = xml.length();
+         if (iLen == 0) {
+             return xml;
+         }
+         StringBuffer sOUT = new StringBuffer(iLen + 256);
+         int i = 0;
+         for (; i < iLen; i++) {
+             char c = xml.charAt(i);
+             if (c == '<') {
+                 sOUT.append("&lt;");
+             } else if (c == '>') {
+                 sOUT.append("&gt;");
+             } else if (c == '&') {
+                 sOUT.append("&amp;");
+             } else if (c == '"') {
+                 sOUT.append("&quot;");
+             } else if (c == '\'') {
+                 sOUT.append("&apos;");
+             } else {
+                 sOUT.append(c);
+             }
+         }
+         return sOUT.toString();
+     }
+ 
+     private static String escapeJSON(String str) {
+         if (str == null) {
+             return str;
+         }
+ 
+         return str.replace("\"", "\\\"");
+     }
+ 
+     protected long getInstanceIdFromJobSuccessResult(String result) {
+         s_logger.debug("getInstanceIdFromJobSuccessResult not overridden in subclass " + this.getClass().getName());
+         return 0;
+     }
+ 
+     public static boolean isAdmin(short accountType) {
+         return ((accountType == Account.ACCOUNT_TYPE_ADMIN) ||
+                 (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) ||
+                 (accountType == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_READ_ONLY_ADMIN));
+     }
+ 
+     public static boolean isRootAdmin(short accountType) {
+         return ((accountType == Account.ACCOUNT_TYPE_ADMIN));
+     }
+ 
+     public void setFullUrlParams(Map<String, String> map) {
+         this.fullUrlParams = map;
+     }
+ 
+     public Map<String, String> getFullUrlParams() {
+         return this.fullUrlParams;
+     }
+ 
+     public Long finalyzeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly) {
+         if (accountName != null) {
+             if (domainId == null) {
+                 throw new InvalidParameterValueException("Account must be specified with domainId parameter");
+             }
+ 
+             Domain domain = _domainService.getDomain(domainId);
+             if (domain == null) {
+                 throw new InvalidParameterValueException("Unable to find domain by id");
+             }
+ 
+             Account account = _accountService.getActiveAccountByName(accountName, domainId);
+             if (account != null && account.getType() != Account.ACCOUNT_TYPE_PROJECT) {
+                 if (!enabledOnly || account.getState() == Account.State.enabled) {
+                     return account.getId();
+                 } else {
+                     throw new PermissionDeniedException("Can't add resources to the account id=" + account.getId() + " in state=" + account.getState() + " as it's no longer active");
+                 }
+             } else {
+                 // idList is not used anywhere, so removed it now
+                 //List<IdentityProxy> idList = new ArrayList<IdentityProxy>();
+                 //idList.add(new IdentityProxy("domain", domainId, "domainId"));
+                 throw new InvalidParameterValueException("Unable to find account by name " + accountName + " in domain with specified id");
+             }
+         }
+ 
+         if (projectId != null) {
+             Project project = _projectService.getProject(projectId);
+             if (project != null) {
+                 if (!enabledOnly || project.getState() == Project.State.Active) {
+                     return project.getProjectAccountId();
+                 } else {
+                     PermissionDeniedException ex = new PermissionDeniedException("Can't add resources to the project with specified projectId in state=" + project.getState() + " as it's no longer active");
+                     ex.addProxyObject(project, projectId, "projectId");
+                     throw ex;
+                 }
+             } else {
+                 throw new InvalidParameterValueException("Unable to find project by id");
+             }
+         }
+         return null;
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/org/apache/cloudstack/api/ResponseGenerator.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/ResponseGenerator.java
index 0000000,63df4dc..d0be69c
mode 000000,100644..100644
--- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java
+++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
@@@ -1,0 -1,375 +1,387 @@@
+ // 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;
+ 
+ import java.text.DecimalFormat;
+ import java.util.EnumSet;
+ import java.util.List;
+ 
+ import org.apache.cloudstack.api.ApiConstants.HostDetails;
+ import org.apache.cloudstack.api.ApiConstants.VMDetails;
+ import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
+ import org.apache.cloudstack.api.response.AccountResponse;
+ import org.apache.cloudstack.api.response.AsyncJobResponse;
+ import org.apache.cloudstack.api.response.AutoScalePolicyResponse;
+ import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse;
+ import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
+ import org.apache.cloudstack.api.response.CapacityResponse;
+ import org.apache.cloudstack.api.response.ClusterResponse;
+ import org.apache.cloudstack.api.response.ConditionResponse;
+ import org.apache.cloudstack.api.response.ConfigurationResponse;
+ import org.apache.cloudstack.api.response.CounterResponse;
+ import org.apache.cloudstack.api.response.CreateCmdResponse;
+ import org.apache.cloudstack.api.response.DiskOfferingResponse;
+ 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.FirewallResponse;
+ import org.apache.cloudstack.api.response.FirewallRuleResponse;
+ import org.apache.cloudstack.api.response.GuestOSResponse;
+ import org.apache.cloudstack.api.response.HostResponse;
+ import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse;
+ import org.apache.cloudstack.api.response.IPAddressResponse;
+ import org.apache.cloudstack.api.response.InstanceGroupResponse;
+ import org.apache.cloudstack.api.response.IpForwardingRuleResponse;
+ import org.apache.cloudstack.api.response.LBStickinessResponse;
+ import org.apache.cloudstack.api.response.LDAPConfigResponse;
+ import org.apache.cloudstack.api.response.LoadBalancerResponse;
+ import org.apache.cloudstack.api.response.NetworkACLResponse;
+ import org.apache.cloudstack.api.response.NetworkOfferingResponse;
+ import org.apache.cloudstack.api.response.NetworkResponse;
+ import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+ import org.apache.cloudstack.api.response.PodResponse;
+ import org.apache.cloudstack.api.response.PrivateGatewayResponse;
+ 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.RemoteAccessVpnResponse;
+ import org.apache.cloudstack.api.response.ResourceCountResponse;
+ import org.apache.cloudstack.api.response.ResourceLimitResponse;
+ import org.apache.cloudstack.api.response.ResourceTagResponse;
+ import org.apache.cloudstack.api.response.SecurityGroupResponse;
+ import org.apache.cloudstack.api.response.ServiceOfferingResponse;
+ import org.apache.cloudstack.api.response.ServiceResponse;
+ import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse;
+ import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse;
+ import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse;
+ import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
+ import org.apache.cloudstack.api.response.SnapshotResponse;
+ import org.apache.cloudstack.api.response.SnapshotScheduleResponse;
+ import org.apache.cloudstack.api.response.StaticRouteResponse;
+ import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse;
+ import org.apache.cloudstack.api.response.StoragePoolResponse;
+ import org.apache.cloudstack.api.response.SwiftResponse;
+ import org.apache.cloudstack.api.response.SystemVmInstanceResponse;
+ import org.apache.cloudstack.api.response.SystemVmResponse;
+ import org.apache.cloudstack.api.response.TemplatePermissionsResponse;
+ import org.apache.cloudstack.api.response.TemplateResponse;
+ import org.apache.cloudstack.api.response.TrafficTypeResponse;
+ import org.apache.cloudstack.api.response.UserResponse;
+ import org.apache.cloudstack.api.response.UserVmResponse;
+ import org.apache.cloudstack.api.response.VirtualRouterProviderResponse;
+ import org.apache.cloudstack.api.response.VlanIpRangeResponse;
+ import org.apache.cloudstack.api.response.VolumeResponse;
+ import org.apache.cloudstack.api.response.VpcOfferingResponse;
+ import org.apache.cloudstack.api.response.VpcResponse;
+ import org.apache.cloudstack.api.response.VpnUsersResponse;
+ import org.apache.cloudstack.api.response.ZoneResponse;
+ 
+ import org.apache.cloudstack.api.response.S3Response;
+ 
++import com.cloud.api.response.FindAccountResponse;
++import com.cloud.api.response.FindDomainResponse;
++import com.cloud.api.response.FindUserResponse;
++import com.cloud.api.response.RegionResponse;
+ import com.cloud.async.AsyncJob;
+ import com.cloud.capacity.Capacity;
+ import com.cloud.configuration.Configuration;
+ import com.cloud.configuration.ResourceCount;
+ import com.cloud.configuration.ResourceLimit;
+ import com.cloud.dc.DataCenter;
+ import com.cloud.dc.Pod;
++import com.cloud.region.Region;
+ import com.cloud.dc.StorageNetworkIpRange;
+ import com.cloud.dc.Vlan;
+ import com.cloud.domain.Domain;
+ import com.cloud.event.Event;
+ import com.cloud.host.Host;
+ import com.cloud.hypervisor.HypervisorCapabilities;
+ import com.cloud.network.IpAddress;
+ import com.cloud.network.Network;
+ import com.cloud.network.Network.Service;
+ import com.cloud.network.PhysicalNetwork;
+ import com.cloud.network.PhysicalNetworkServiceProvider;
+ import com.cloud.network.PhysicalNetworkTrafficType;
+ import com.cloud.network.RemoteAccessVpn;
+ import com.cloud.network.Site2SiteCustomerGateway;
+ import com.cloud.network.Site2SiteVpnConnection;
+ import com.cloud.network.Site2SiteVpnGateway;
+ import com.cloud.network.VirtualRouterProvider;
+ import com.cloud.network.VpnUser;
+ import com.cloud.network.as.AutoScalePolicy;
+ import com.cloud.network.as.AutoScaleVmGroup;
+ import com.cloud.network.as.AutoScaleVmProfile;
+ import com.cloud.network.as.Condition;
+ import com.cloud.network.as.Counter;
+ import com.cloud.network.router.VirtualRouter;
+ import com.cloud.network.rules.FirewallRule;
+ import com.cloud.network.rules.LoadBalancer;
+ import com.cloud.network.rules.PortForwardingRule;
+ import com.cloud.network.rules.StaticNatRule;
+ import com.cloud.network.rules.StickinessPolicy;
+ import com.cloud.network.security.SecurityGroup;
+ import com.cloud.network.security.SecurityRule;
+ import com.cloud.network.vpc.PrivateGateway;
+ import com.cloud.network.vpc.StaticRoute;
+ import com.cloud.network.vpc.Vpc;
+ import com.cloud.network.vpc.VpcOffering;
+ import com.cloud.offering.DiskOffering;
+ import com.cloud.offering.NetworkOffering;
+ import com.cloud.offering.ServiceOffering;
+ import com.cloud.org.Cluster;
+ import com.cloud.projects.Project;
+ import com.cloud.projects.ProjectAccount;
+ import com.cloud.projects.ProjectInvitation;
+ import com.cloud.server.ResourceTag;
+ import com.cloud.storage.GuestOS;
+ import com.cloud.storage.S3;
+ import com.cloud.storage.Snapshot;
+ import com.cloud.storage.StoragePool;
+ import com.cloud.storage.Swift;
+ import com.cloud.storage.Volume;
+ import com.cloud.storage.snapshot.SnapshotPolicy;
+ import com.cloud.storage.snapshot.SnapshotSchedule;
+ import com.cloud.template.VirtualMachineTemplate;
+ import com.cloud.user.Account;
+ import com.cloud.user.User;
+ import com.cloud.user.UserAccount;
+ import com.cloud.uservm.UserVm;
+ import com.cloud.vm.InstanceGroup;
+ import com.cloud.vm.VirtualMachine;
+ 
+ public interface ResponseGenerator {
+     UserResponse createUserResponse(UserAccount user);
+ 
+     AccountResponse createAccountResponse(Account account);
+ 
+     DomainResponse createDomainResponse(Domain domain);
+ 
+     DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering);
+ 
+     ResourceLimitResponse createResourceLimitResponse(ResourceLimit limit);
+ 
+     ResourceCountResponse createResourceCountResponse(ResourceCount resourceCount);
+ 
+     ServiceOfferingResponse createServiceOfferingResponse(ServiceOffering offering);
+ 
+     ConfigurationResponse createConfigurationResponse(Configuration cfg);
+ 
+     SnapshotResponse createSnapshotResponse(Snapshot snapshot);
+ 
+     SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy);
+ 
+     List<UserVmResponse> createUserVmResponse(String objectName, UserVm... userVms);
+ 
+     List<UserVmResponse> createUserVmResponse(String objectName, EnumSet<VMDetails> details, UserVm... userVms);
+ 
+     SystemVmResponse createSystemVmResponse(VirtualMachine systemVM);
+ 
+     DomainRouterResponse createDomainRouterResponse(VirtualRouter router);
+ 
+     HostResponse createHostResponse(Host host, EnumSet<HostDetails> details);
+ 
+     HostResponse createHostResponse(Host host);
+ 
+     VlanIpRangeResponse createVlanIpRangeResponse(Vlan vlan);
+ 
+     IPAddressResponse createIPAddressResponse(IpAddress ipAddress);
+ 
+     LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer);
+ 
+     LBStickinessResponse createLBStickinessPolicyResponse(List<? extends StickinessPolicy> stickinessPolicies, LoadBalancer lb);
+ 
+     LBStickinessResponse createLBStickinessPolicyResponse(StickinessPolicy stickinessPolicy, LoadBalancer lb);
+ 
+     PodResponse createPodResponse(Pod pod, Boolean showCapacities);
+ 
+     ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities);
+ 
+     VolumeResponse createVolumeResponse(Volume volume);
+ 
+     InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group);
+ 
+     StoragePoolResponse createStoragePoolResponse(StoragePool pool);
+ 
+     ClusterResponse createClusterResponse(Cluster cluster, Boolean showCapacities);
+ 
+     FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule fwRule);
+ 
+     IpForwardingRuleResponse createIpForwardingRuleResponse(StaticNatRule fwRule);
+ 
+     User findUserById(Long userId);
+ 
+     UserVm findUserVmById(Long vmId);
+ 
+     Volume findVolumeById(Long volumeId);
+ 
+     Account findAccountByNameDomain(String accountName, Long domainId);
+ 
+     VirtualMachineTemplate findTemplateById(Long templateId);
+ 
+     Host findHostById(Long hostId);
+ 
+     List<TemplateResponse> createTemplateResponses(long templateId, long zoneId, boolean readyOnly);
+ 
+     VpnUsersResponse createVpnUserResponse(VpnUser user);
+ 
+     RemoteAccessVpnResponse createRemoteAccessVpnResponse(RemoteAccessVpn vpn);
+ 
+     List<TemplateResponse> createTemplateResponses(long templateId, Long zoneId, boolean readyOnly);
+ 
+     List<TemplateResponse> createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly);
+ 
+     //ListResponse<SecurityGroupResponse> createSecurityGroupResponses(List<? extends SecurityGroupRules> networkGroups);
+ 
+     SecurityGroupResponse createSecurityGroupResponseFromSecurityGroupRule(List<? extends SecurityRule> SecurityRules);
+ 
+     SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group);
+ 
+     ExtractResponse createExtractResponse(Long uploadId, Long id, Long zoneId, Long accountId, String mode);
+ 
+     String toSerializedString(CreateCmdResponse response, String responseType);
+ 
+     AsyncJobResponse createAsyncJobResponse(AsyncJob job);
+ 
+     EventResponse createEventResponse(Event event);
+ 
+     //List<EventResponse> createEventResponse(EventJoinVO... events);
+ 
+     TemplateResponse createIsoResponse(VirtualMachineTemplate result);
+ 
+     List<CapacityResponse> createCapacityResponse(List<? extends Capacity> result, DecimalFormat format);
+ 
+     TemplatePermissionsResponse createTemplatePermissionsResponse(List<String> accountNames, Long id, boolean isAdmin);
+ 
+     AsyncJobResponse queryJobResult(QueryAsyncJobResultCmd cmd);
+ 
+     NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering offering);
+ 
+     NetworkResponse createNetworkResponse(Network network);
+ 
+     UserResponse createUserResponse(User user);
+ 
+     //List<UserResponse> createUserResponse(UserAccountJoinVO... users);
+ 
+     AccountResponse createUserAccountResponse(UserAccount user);
+ 
+     Long getSecurityGroupId(String groupName, long accountId);
+ 
+     List<TemplateResponse> createIsoResponses(long isoId, Long zoneId, boolean readyOnly);
+ 
+     ProjectResponse createProjectResponse(Project project);
+ 
+ 
+     List<TemplateResponse> createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly);
+ 
+     List<TemplateResponse> createTemplateResponses(long templateId, Long vmId);
+ 
+     FirewallResponse createFirewallResponse(FirewallRule fwRule);
+ 
+     HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(HypervisorCapabilities hpvCapabilities);
+ 
+     ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount);
+ 
+     ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite);
+ 
+     SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine systemVM);
+ 
+     SwiftResponse createSwiftResponse(Swift swift);
+ 
+     S3Response createS3Response(S3 result);
+ 
+     PhysicalNetworkResponse createPhysicalNetworkResponse(PhysicalNetwork result);
+ 
+     ServiceResponse createNetworkServiceResponse(Service service);
+ 
+     ProviderResponse createNetworkServiceProviderResponse(PhysicalNetworkServiceProvider result);
+ 
+     TrafficTypeResponse createTrafficTypeResponse(PhysicalNetworkTrafficType result);
+ 
+     VirtualRouterProviderResponse createVirtualRouterProviderResponse(VirtualRouterProvider result);
+ 
+     LDAPConfigResponse createLDAPConfigResponse(String hostname, Integer port, Boolean useSSL, String queryFilter, String baseSearch, String dn);
+ 
+     StorageNetworkIpRangeResponse createStorageNetworkIpRangeResponse(StorageNetworkIpRange result);
++    
++    RegionResponse createRegionResponse(Region region);
+ 
+     /**
+      * @param resourceTag
+      * @param keyValueOnly TODO
+      * @return
+      */
+     ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly);
+ 
+ 
+     Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result);
+ 
+ 
+     /**
+      * @param offering
+      * @return
+      */
+     VpcOfferingResponse createVpcOfferingResponse(VpcOffering offering);
+ 
+     /**
+      * @param vpc
+      * @return
+      */
+     VpcResponse createVpcResponse(Vpc vpc);
+ 
+     /**
+      * @param networkACL
+      * @return
+      */
+     NetworkACLResponse createNetworkACLResponse(FirewallRule networkACL);
+ 
+     /**
+      * @param result
+      * @return
+      */
+     PrivateGatewayResponse createPrivateGatewayResponse(PrivateGateway result);
+ 
+     /**
+      * @param result
+      * @return
+      */
+     StaticRouteResponse createStaticRouteResponse(StaticRoute result);
+ 
+     Site2SiteCustomerGatewayResponse createSite2SiteCustomerGatewayResponse(Site2SiteCustomerGateway result);
+ 
+     Site2SiteVpnConnectionResponse createSite2SiteVpnConnectionResponse(Site2SiteVpnConnection result);
+ 
++	FindUserResponse createFindUserResponse(User user);
++
++	FindAccountResponse createFindAccountResponse(Account account);
++
++	FindDomainResponse createFindDomainResponse(Domain domain);
+     CounterResponse createCounterResponse(Counter ctr);
+ 
+     ConditionResponse createConditionResponse(Condition cndn);
+ 
+     AutoScalePolicyResponse createAutoScalePolicyResponse(AutoScalePolicy policy);
+ 
+     AutoScaleVmProfileResponse createAutoScaleVmProfileResponse(AutoScaleVmProfile profile);
+ 
+     AutoScaleVmGroupResponse createAutoScaleVmGroupResponse(AutoScaleVmGroup vmGroup);
+ 
+     GuestOSResponse createGuestOSResponse(GuestOS os);
+ 
+     SnapshotScheduleResponse createSnapshotScheduleResponse(SnapshotSchedule sched);
+ }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
index 0000000,a13cf62..7c2f2d1
mode 000000,100644..100644
--- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java
@@@ -1,0 -1,157 +1,183 @@@
+ // 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.command.admin.account;
+ 
+ import java.util.Collection;
+ import java.util.Map;
+ 
+ import org.apache.cloudstack.api.*;
+ import org.apache.log4j.Logger;
+ 
+ import org.apache.cloudstack.api.APICommand;
+ import org.apache.cloudstack.api.response.AccountResponse;
+ import org.apache.cloudstack.api.response.DomainResponse;
+ import org.apache.cloudstack.api.response.UserResponse;
+ import com.cloud.user.Account;
+ import com.cloud.user.UserAccount;
+ import com.cloud.user.UserContext;
+ 
+ @APICommand(name = "createAccount", description="Creates an account", responseObject=UserResponse.class)
+ public class CreateAccountCmd extends BaseCmd {
+     public static final Logger s_logger = Logger.getLogger(CreateAccountCmd.class.getName());
+ 
+     private static final String s_name = "createaccountresponse";
+ 
+     /////////////////////////////////////////////////////
+     //////////////// API parameters /////////////////////
+     /////////////////////////////////////////////////////
+ 
+     @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Creates the user under the specified account. If no account is specified, the username will be used as the account name.")
+     private String accountName;
+ 
+     @Parameter(name=ApiConstants.ACCOUNT_TYPE, type=CommandType.SHORT, required=true, description="Type of the account.  Specify 0 for user, 1 for root admin, and 2 for domain admin")
+     private Short accountType;
+ 
+     @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class,
+             description="Creates the user under the specified domain.")
+     private Long domainId;
+ 
+     @Parameter(name=ApiConstants.EMAIL, type=CommandType.STRING, required=true, description="email")
+     private String email;
+ 
+     @Parameter(name=ApiConstants.FIRSTNAME, type=CommandType.STRING, required=true, description="firstname")
+     private String firstName;
+ 
+     @Parameter(name=ApiConstants.LASTNAME, type=CommandType.STRING, required=true, description="lastname")
+     private String lastName;
+ 
+     @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="Hashed password (Default is MD5). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.")
+     private String password;
+ 
+     @Parameter(name=ApiConstants.TIMEZONE, type=CommandType.STRING, description="Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.")
+     private String timeZone;
+ 
+     @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="Unique username.")
+     private String userName;
+ 
+     @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for the account's networks")
+     private String networkDomain;
+ 
+     @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters")
+     private Map<String, String> details;
++	
++	//@Parameter(name = ApiConstants.REGION_DETAILS, type = CommandType.MAP, description = "details for account used to store region specific parameters")
++    //private Map<String, String> regionDetails;
++	
++    @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.STRING, description="Account UUID, required for adding account from another Region")
++    private String accountUUID;
+ 
++    @Parameter(name=ApiConstants.USER_ID, type=CommandType.STRING, description="User UUID, required for adding account from another Region")
++    private String userUUID;
++
++    @Parameter(name=ApiConstants.REGION_ID, type=CommandType.INTEGER, description="Id of the Region creating the account")
++    private Integer regionId;
++
++    
+     /////////////////////////////////////////////////////
+     /////////////////// Accessors ///////////////////////
+     /////////////////////////////////////////////////////
+ 
+     public String getAccountName() {
+         return accountName;
+     }
+ 
+     public Short getAccountType() {
+         return accountType;
+     }
+ 
+     public Long getDomainId() {
+         return domainId;
+     }
+ 
+     public String getEmail() {
+         return email;
+     }
+ 
+     public String getFirstName() {
+         return firstName;
+     }
+ 
+     public String getLastName() {
+         return lastName;
+     }
+ 
+     public String getPassword() {
+         return password;
+     }
+ 
+     public String getTimeZone() {
+         return timeZone;
+     }
+ 
+     public String getUsername() {
+         return userName;
+     }
+ 
+     public String getNetworkDomain() {
+         return networkDomain;
+     }
+ 
+     public Map<String, String> getDetails() {
+         if (details == null || details.isEmpty()) {
+             return null;
+         }
+ 
+         Collection<String> paramsCollection = details.values();
+         Map<String, String> params = (Map<String, String>) (paramsCollection.toArray())[0];
+         return params;
+     }
+ 
++    public String getAccountUUID() {
++		return accountUUID;
++	}
++
++	public String getUserUUID() {
++		return userUUID;
++	}
++
++	public Integer getRegionId() {
++		return regionId;
++	}
++    
+     /////////////////////////////////////////////////////
+     /////////////// API Implementation///////////////////
+     /////////////////////////////////////////////////////
+ 
 -    @Override
++	@Override
+     public String getCommandName() {
+         return s_name;
+     }
+ 
+     @Override
+     public long getEntityOwnerId() {
+         return Account.ACCOUNT_ID_SYSTEM;
+     }
+ 
+     @Override
+     public void execute(){
+         UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId());
 -        UserAccount userAccount = _accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(), getDomainId(), getNetworkDomain(), getDetails());
++        UserAccount userAccount = _accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(), getDomainId(), getNetworkDomain(), getDetails(), 
++        		getAccountUUID(), getUserUUID(), getRegionId());
+         if (userAccount != null) {
+             AccountResponse response = _responseGenerator.createUserAccountResponse(userAccount);
+             response.setResponseName(getCommandName());
+             this.setResponseObject(response);
+         } else {
+             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user account");
+         }
+     }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1f57d925/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
index 0000000,86ccb4b..c918655
mode 000000,100644..100644
--- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java
@@@ -1,0 -1,102 +1,116 @@@
+ // 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.command.admin.account;
+ 
+ import org.apache.cloudstack.api.*;
+ import org.apache.log4j.Logger;
+ 
+ import org.apache.cloudstack.api.APICommand;
+ import org.apache.cloudstack.api.response.AccountResponse;
+ import org.apache.cloudstack.api.response.SuccessResponse;
+ import com.cloud.async.AsyncJob;
+ import com.cloud.event.EventTypes;
+ import com.cloud.user.Account;
+ import com.cloud.user.User;
+ import com.cloud.user.UserContext;
+ 
+ @APICommand(name = "deleteAccount", description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class)
+ public class DeleteAccountCmd extends BaseAsyncCmd {
+     public static final Logger s_logger = Logger.getLogger(DeleteAccountCmd.class.getName());
+     private static final String s_name = "deleteaccountresponse";
+ 
+     /////////////////////////////////////////////////////
+     //////////////// API parameters /////////////////////
+     /////////////////////////////////////////////////////
+ 
+     @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=AccountResponse.class,
+             required=true, description="Account id")
+     private Long id;
+ 
++    @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region")
++    private Boolean isPropagate;
++
+     /////////////////////////////////////////////////////
+     /////////////////// Accessors ///////////////////////
+     /////////////////////////////////////////////////////
+ 
 -    public Long getId() {
++
++	public Long getId() {
+         return id;
+     }
++    
++	public Boolean getIsPropagate() {
++		return isPropagate;
++	}
+ 
+     /////////////////////////////////////////////////////
+     /////////////// API Implementation///////////////////
+     /////////////////////////////////////////////////////
+ 
+     public static String getStaticName() {
+         return s_name;
+     }
+ 
+     @Override
+     public String getCommandName() {
+         return s_name;
+     }
+ 
+     @Override
+     public long getEntityOwnerId() {
+         Account account = UserContext.current().getCaller();// Let's give the caller here for event logging.
+         if (account != null) {
+             return account.getAccountId();
+         }
+ 
+         return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked
+     }
+ 
+     @Override
+     public String getEventType() {
+         return EventTypes.EVENT_ACCOUNT_DELETE;
+     }
+ 
+     @Override
+     public String getEventDescription() {
+         User user = _responseGenerator.findUserById(getId());
+         return (user != null ? ("deleting User " + user.getUsername() + " (id: " + user.getId() + ") and accountId = " + user.getAccountId()) : "user delete, but this user does not exist in the system");
+     }
+ 
+     @Override
+     public void execute(){
+         UserContext.current().setEventDetails("Account Id: "+getId());
 -        boolean result = _accountService.deleteUserAccount(getId());
++        boolean isPopagate = (getIsPropagate() != null ) ? getIsPropagate() : false; 
++        boolean result = false;
++        if(isPopagate){
++        	result = _accountService.deleteUserAccount(getId());
++        } else {
++        	result = _regionService.deleteUserAccount(getId());
++        }
+         if (result) {
+             SuccessResponse response = new SuccessResponse(getCommandName());
+             this.setResponseObject(response);
+         } else {
+             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete user account and all corresponding users");
+         }
+     }
+ 
+     @Override
+     public AsyncJob.Type getInstanceType() {
+         return AsyncJob.Type.Account;
+     }
+ }