You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2012/12/17 19:02:20 UTC
[1/2] git commit: api: Work in progress code in ApiDispatcher to
process annotations
Updated Branches:
refs/heads/api_refactoring f8a483fc5 -> de8aa8654
api: Work in progress code in ApiDispatcher to process annotations
- All id params are now uuids, basically for documentation
- Use injections and not component locator
- Remove resourceType field checking, it's now called entityType
- Fix indents
Signed-off-by: Rohit Yadav <bh...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/de8aa865
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/de8aa865
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/de8aa865
Branch: refs/heads/api_refactoring
Commit: de8aa86542c115362209c6c3c67e79d5616ec889
Parents: cba97b1
Author: Rohit Yadav <bh...@apache.org>
Authored: Mon Dec 17 10:00:27 2012 -0800
Committer: Rohit Yadav <bh...@apache.org>
Committed: Mon Dec 17 10:00:27 2012 -0800
----------------------------------------------------------------------
server/src/com/cloud/api/ApiDispatcher.java | 62 ++++++++++------------
1 files changed, 29 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/de8aa865/server/src/com/cloud/api/ApiDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java
index 37321a1..646bab9 100755
--- a/server/src/com/cloud/api/ApiDispatcher.java
+++ b/server/src/com/cloud/api/ApiDispatcher.java
@@ -55,6 +55,7 @@ import com.cloud.user.UserContext;
import com.cloud.utils.DateUtil;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.component.Inject;
import com.cloud.utils.component.PluggableService;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.exception.CSExceptionErrorCode;
@@ -68,25 +69,25 @@ public class ApiDispatcher {
private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName());
ComponentLocator _locator;
- AsyncJobManager _asyncMgr;
- IdentityDao _identityDao;
Long _createSnapshotQueueSizeLimit;
- AccountManager _accountMgr;
-
+ @Inject AsyncJobManager _asyncMgr = null;
+ @Inject IdentityDao _identityDao = null;
+ @Inject AccountManager _accountMgr = null;
Map<String, Class<? extends GenericDao>> _daoNameMap = new HashMap<String, Class<? extends GenericDao>>();
// singleton class
- private static ApiDispatcher s_instance = new ApiDispatcher();
+ private static ApiDispatcher s_instance = ApiDispatcher.getInstance();
public static ApiDispatcher getInstance() {
+ if (s_instance == null) {
+ s_instance = ComponentLocator.inject(ApiDispatcher.class);
+ }
return s_instance;
}
- private ApiDispatcher() {
+ protected ApiDispatcher() {
+ super();
_locator = ComponentLocator.getLocator(ManagementServer.Name);
- _asyncMgr = _locator.getManager(AsyncJobManager.class);
- _identityDao = _locator.getDao(IdentityDao.class);
-
ConfigurationDao configDao = _locator.getDao(ConfigurationDao.class);
Map<String, String> configs = configDao.getConfiguration();
String strSnapshotLimit = configs.get(Config.ConcurrentSnapshotsThresholdPerHost.key());
@@ -99,12 +100,8 @@ public class ApiDispatcher {
_createSnapshotQueueSizeLimit = snapshotLimit;
}
}
- _accountMgr = _locator.getManager(AccountManager.class);
-
_daoNameMap.put("com.cloud.network.Network", NetworkDao.class);
_daoNameMap.put("com.cloud.template.VirtualMachineTemplate", VMTemplateDao.class);
-
-
}
public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map<String, String> params) {
@@ -376,7 +373,6 @@ public class ApiDispatcher {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void setupParameters(BaseCmd cmd, Map<String, String> params, List<ControlledEntity> entitiesToAccess) {
Map<String, Object> unpackedParams = cmd.unpackParams(params);
-
if (cmd instanceof BaseListCmd) {
Object pageSizeObj = unpackedParams.get(ApiConstants.PAGE_SIZE);
@@ -456,25 +452,24 @@ public class ApiDispatcher {
// and IllegalAccessException setting one of the parameters.
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8));
}
-
-
+
//check access on the resource this field points to
try {
- ACL checkAccess = field.getAnnotation(ACL.class);
- CommandType fieldType = parameterAnnotation.type();
-
-
- if(checkAccess != null){
- // Verify that caller can perform actions in behalf of vm owner
- //acumulate all Controlled Entities together.
-
- //parse the array of resource types and in case of map check access on key or value or both as specified in @acl
- //implement external dao for classes that need findByName
- //for maps, specify access to be checkd on key or value.
-
- if(parameterAnnotation.resourceType() != null){
- Class<?>[] entityList = parameterAnnotation.resourceType();
- for (Class entity : entityList){
+ ACL checkAccess = field.getAnnotation(ACL.class);
+ CommandType fieldType = parameterAnnotation.type();
+
+ if (checkAccess != null) {
+ // Verify that caller can perform actions in behalf of vm owner
+ //acumulate all Controlled Entities together.
+
+ //parse the array of resource types and in case of map check access on key or value or both as specified in @acl
+ //implement external dao for classes that need findByName
+ //for maps, specify access to be checkd on key or value.
+
+ // find the controlled entity DBid by uuid
+ if (parameterAnnotation.entityType() != null) {
+ Class<?>[] entityList = parameterAnnotation.entityType();
+ for (Class entity : entityList){
if (ControlledEntity.class.isAssignableFrom(entity)) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("entity name is:" + entity.getName());
@@ -515,6 +510,7 @@ public class ApiDispatcher {
}
break;
case LONG:
+ case UUID:
Long entityId = (Long) field.get(cmd);
ControlledEntity entityObj = (ControlledEntity) daoClassInstance.findById(entityId);
entitiesToAccess.add(entityObj);
@@ -621,6 +617,7 @@ public class ApiDispatcher {
field.set(cmdObj, listParam);
break;
case LONG:
+ case UUID:
if (identityMapper != null)
field.set(cmdObj, s_instance._identityDao.getIdentityId(identityMapper, paramObj.toString()));
else
@@ -688,8 +685,7 @@ public class ApiDispatcher {
throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]");
}
}
-
-
+
public static Long getIdentiyId(String tableName, String token) {
return s_instance._identityDao.getIdentityId(tableName, token);
}