View.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. 'use strict';
  19. angular.module('ambariAdminConsole')
  20. .factory('View', ['$http', '$q', 'Settings', function($http, $q, Settings) {
  21. function ViewInstance(item){
  22. angular.extend(this, item);
  23. };
  24. ViewInstance.find = function(viewName, version, instanceName) {
  25. var deferred = $q.defer();
  26. var fields = [
  27. 'privileges/PrivilegeInfo',
  28. 'ViewInstanceInfo',
  29. 'resources'
  30. ];
  31. $http({
  32. method: 'GET',
  33. url: Settings.baseUrl + '/views/'+viewName+'/versions/'+version+'/instances/'+instanceName,
  34. params:{
  35. 'fields': fields.join(',')
  36. }
  37. })
  38. .success(function(data) {
  39. deferred.resolve(new ViewInstance(data));
  40. })
  41. .error(function(data) {
  42. deferred.reject(data);
  43. });
  44. return deferred.promise;
  45. };
  46. function View(item){
  47. var self = this;
  48. self.view_name = item.ViewInfo.view_name;
  49. self.versions = '';
  50. self.instances = [];
  51. self.canCreateInstance = false;
  52. var versions = {};
  53. angular.forEach(item.versions, function(version) {
  54. versions[version.ViewVersionInfo.version] = {count: version.instances.length, status: version.ViewVersionInfo.status};
  55. if(version.ViewVersionInfo.status === 'DEPLOYED'){ // if atelast one version is deployed
  56. self.canCreateInstance = true;
  57. }
  58. angular.forEach(version.instances, function(instance) {
  59. instance.label = instance.ViewInstanceInfo.label || version.ViewVersionInfo.label || instance.ViewInstanceInfo.view_name;
  60. });
  61. self.instances = self.instances.concat(version.instances);
  62. });
  63. self.versions = versions;
  64. self.versionsList = item.versions;
  65. }
  66. View.getInstance = function(viewName, version, instanceName) {
  67. return ViewInstance.find(viewName, version, instanceName);
  68. };
  69. View.deleteInstance = function(viewName, version, instanceName) {
  70. return $http.delete(Settings.baseUrl +'/views/'+viewName+'/versions/'+version+'/instances/'+instanceName, {
  71. headers: {
  72. 'X-Requested-By': 'ambari'
  73. }
  74. });
  75. };
  76. View.updateInstance = function(viewName, version, instanceName, data) {
  77. return $http({
  78. method: 'PUT',
  79. url: Settings.baseUrl + '/views/' +viewName + '/versions/'+version+'/instances/' + instanceName,
  80. data: data
  81. });
  82. };
  83. View.getPermissions = function(params) {
  84. var deferred = $q.defer();
  85. var fields = [
  86. 'permissions/PermissionInfo/permission_name'
  87. ];
  88. $http({
  89. method: 'GET',
  90. url: Settings.baseUrl + '/views/' + params.viewName + '/versions/'+ params.version,
  91. params: {
  92. 'fields': fields.join(',')
  93. }
  94. }).success(function(data) {
  95. deferred.resolve(data.permissions);
  96. })
  97. .catch(function(data) {
  98. deferred.reject(data);
  99. });
  100. return deferred.promise;
  101. };
  102. View.getPrivileges = function(params) {
  103. var deferred = $q.defer();
  104. $http({
  105. method: 'GET',
  106. url: Settings.baseUrl + '/views/' + params.viewName + '/versions/' + params.version + '/instances/' + params.instanceId,
  107. params: {
  108. fields: 'privileges/PrivilegeInfo'
  109. }
  110. })
  111. .success(function(data) {
  112. deferred.resolve(data.privileges);
  113. })
  114. .catch(function(data) {
  115. deferred.reject(data);
  116. });
  117. return deferred.promise;
  118. };
  119. View.getVersions = function(viewName) {
  120. var deferred = $q.defer();
  121. $http({
  122. method: 'GET',
  123. url: Settings.baseUrl + '/views/'+viewName + '?versions/ViewVersionInfo/status=DEPLOYED'
  124. }).success(function(data) {
  125. var versions = [];
  126. angular.forEach(data.versions, function(version) {
  127. versions.push(version.ViewVersionInfo.version);
  128. });
  129. deferred.resolve(versions);
  130. }).catch(function(data) {
  131. deferred.reject(data);
  132. });
  133. return deferred.promise;
  134. };
  135. View.createInstance = function(instanceInfo) {
  136. var deferred = $q.defer();
  137. var properties = {};
  138. angular.forEach(instanceInfo.properties, function(property) {
  139. properties[property.name] = property.value
  140. });
  141. $http({
  142. method: 'POST',
  143. url: Settings.baseUrl + '/views/' + instanceInfo.view_name +'/versions/'+instanceInfo.version + '/instances/'+instanceInfo.instance_name,
  144. data:{
  145. 'ViewInstanceInfo' : {
  146. instance_name: instanceInfo.instance_name,
  147. label: instanceInfo.label,
  148. visible: instanceInfo.visible,
  149. icon_path: instanceInfo.icon_path,
  150. icon64_path: instanceInfo.icon64_path,
  151. properties: properties,
  152. description: instanceInfo.description
  153. }
  154. }
  155. })
  156. .success(function(data) {
  157. deferred.resolve(data);
  158. })
  159. .error(function(data) {
  160. deferred.reject(data);
  161. });
  162. return deferred.promise;
  163. };
  164. View.createPrivileges = function(params, data) {
  165. return $http({
  166. method: 'POST',
  167. url: Settings.baseUrl + '/views/' + params.view_name +'/versions/'+params.version+'/instances/'+params.instance_name+'/privileges',
  168. data: data
  169. });
  170. };
  171. View.deletePrivileges = function(params, data) {
  172. return $http({
  173. method: 'DELETE',
  174. url: Settings.baseUrl + '/views/' + params.view_name +'/versions/'+params.version+'/instances/'+params.instance_name+'/privileges',
  175. data: data
  176. });
  177. };
  178. View.updatePrivileges = function(params, privileges) {
  179. return $http({
  180. method: 'PUT',
  181. url: Settings.baseUrl + '/views/' + params.view_name +'/versions/'+params.version+'/instances/'+params.instance_name+'/privileges',
  182. data: privileges
  183. });
  184. };
  185. View.deletePrivilege = function(params) {
  186. return $http({
  187. method: 'DELETE',
  188. url: Settings.baseUrl + '/views/' + params.view_name +'/versions/'+params.version+'/instances/'+params.instance_name+'/privileges',
  189. params: {
  190. 'PrivilegeInfo/principal_type': params.principalType,
  191. 'PrivilegeInfo/principal_name': params.principalName,
  192. 'PrivilegeInfo/permission_name': params.permissionName
  193. }
  194. });
  195. };
  196. View.getMeta = function(view_name, version) {
  197. return $http({
  198. method: 'GET',
  199. url: Settings.baseUrl + '/views/'+view_name+'/versions/'+version
  200. });
  201. };
  202. View.all = function() {
  203. var deferred = $q.defer();
  204. var fields = [
  205. 'versions/ViewVersionInfo/version',
  206. 'versions/instances/ViewInstanceInfo',
  207. 'versions/*'
  208. ];
  209. $http({
  210. method: 'GET',
  211. url: Settings.baseUrl + '/views',
  212. params:{
  213. 'fields': fields.join(',')
  214. }
  215. }).success(function(data) {
  216. var views = [];
  217. angular.forEach(data.items, function(item) {
  218. views.push(new View(item));
  219. });
  220. deferred.resolve(views);
  221. })
  222. .error(function(data) {
  223. deferred.reject(data);
  224. });
  225. return deferred.promise;
  226. };
  227. return View;
  228. }]);