diff --git a/ui/src/app/api/component-descriptor.service.js b/ui/src/app/api/component-descriptor.service.js index b4cacf4991..b4398cb569 100644 --- a/ui/src/app/api/component-descriptor.service.js +++ b/ui/src/app/api/component-descriptor.service.js @@ -21,38 +21,63 @@ function ComponentDescriptorService($http, $q) { var componentsByType = {}; var componentsByClazz = {}; + var actionsByPlugin = {}; var service = { + getComponentDescriptorsByType: getComponentDescriptorsByType, + getComponentDescriptorByClazz: getComponentDescriptorByClazz, + getPluginActionsByPluginClazz: getPluginActionsByPluginClazz, getComponentDescriptorsByTypes: getComponentDescriptorsByTypes } return service; - function getComponentDescriptorsByTypes(componentTypes, ruleChainType) { + function getComponentDescriptorsByType(componentType) { + var deferred = $q.defer(); + if (componentsByType[componentType]) { + deferred.resolve(componentsByType[componentType]); + } else { + var url = '/api/components/' + componentType; + $http.get(url, null).then(function success(response) { + componentsByType[componentType] = response.data; + for (var i = 0; i < componentsByType[componentType].length; i++) { + var component = componentsByType[componentType][i]; + componentsByClazz[component.clazz] = component; + } + deferred.resolve(componentsByType[componentType]); + }, function fail() { + deferred.reject(); + }); + + } + return deferred.promise; + } + + function getComponentDescriptorsByTypes(componentTypes, type) { var deferred = $q.defer(); var result = []; - if (!componentsByType[ruleChainType]) { - componentsByType[ruleChainType] = {}; + if (!componentsByType[type]) { + componentsByType[type] = {}; } for (var i=componentTypes.length-1;i>=0;i--) { var componentType = componentTypes[i]; - if (componentsByType[ruleChainType][componentType]) { - result = result.concat(componentsByType[ruleChainType][componentType]); + if (componentsByType[type][componentType]) { + result = result.concat(componentsByType[type][componentType]); componentTypes.splice(i, 1); } } if (!componentTypes.length) { deferred.resolve(result); } else { - var url = '/api/components?componentTypes=' + componentTypes.join(',') + '&ruleChainType=' + ruleChainType; + var url = '/api/components?componentTypes=' + componentTypes.join(',') + '&ruleChainType=' + type; $http.get(url, null).then(function success(response) { var components = response.data; for (var i = 0; i < components.length; i++) { var component = components[i]; - var componentsList = componentsByType[ruleChainType][component.type]; + var componentsList = componentsByType[type][component.type]; if (!componentsList) { componentsList = []; - componentsByType[ruleChainType][component.type] = componentsList; + componentsByType[type][component.type] = componentsList; } componentsList.push(component); componentsByClazz[component.clazz] = component; @@ -65,4 +90,37 @@ function ComponentDescriptorService($http, $q) { } return deferred.promise; } + + function getComponentDescriptorByClazz(componentDescriptorClazz) { + var deferred = $q.defer(); + if (componentsByClazz[componentDescriptorClazz]) { + deferred.resolve(componentsByClazz[componentDescriptorClazz]); + } else { + var url = '/api/component/' + componentDescriptorClazz; + $http.get(url, null).then(function success(response) { + componentsByClazz[componentDescriptorClazz] = response.data; + deferred.resolve(componentsByClazz[componentDescriptorClazz]); + }, function fail() { + deferred.reject(); + }); + } + return deferred.promise; + } + + function getPluginActionsByPluginClazz(pluginClazz) { + var deferred = $q.defer(); + if (actionsByPlugin[pluginClazz]) { + deferred.resolve(actionsByPlugin[pluginClazz]); + } else { + var url = '/api/components/actions/' + pluginClazz; + $http.get(url, null).then(function success(response) { + actionsByPlugin[pluginClazz] = response.data; + deferred.resolve(actionsByPlugin[pluginClazz]); + }, function fail() { + deferred.reject(); + }); + } + return deferred.promise; + } + }