21
21
* @author Alex Boyko
22
22
* @author Gunnar Hillert
23
23
*/
24
- define ( [ 'angular' ] , function ( angular ) {
24
+ define ( [ 'angular' , 'lodash' ] , function ( angular , _ ) {
25
25
'use strict' ;
26
26
27
27
return angular . module ( 'dataflowApps.services' , [ ] )
28
28
. factory ( 'AppService' , function ( $resource , $rootScope , $log , $http ) {
29
+
30
+ var listeners = [ ] ;
31
+
32
+ // Debounce notifying listeners in case of multiple register/unregister single app calls
33
+ var notifyListeners = _ . debounce ( function ( ) {
34
+ listeners . forEach ( function ( listener ) {
35
+ if ( angular . isFunction ( listener . changed ) ) {
36
+ listener . changed ( ) ;
37
+ }
38
+ } ) ;
39
+ } , 100 ) ;
40
+
29
41
return {
30
42
getDefinitions : function ( pageable ) {
31
43
var params = { } ;
@@ -47,14 +59,18 @@ define(['angular'], function (angular) {
47
59
} ,
48
60
createCompositeApp : function ( appName , definition ) {
49
61
$log . info ( 'Creating composite app name=' + appName + ' def=' + definition ) ;
50
- return $http ( {
62
+ var request = $http ( {
51
63
method : 'POST' ,
52
64
url : $rootScope . dataflowServerUrl + '/apps' ,
53
65
params : {
54
66
name : appName ,
55
67
definition : definition
56
68
}
57
69
} ) ;
70
+ request . then ( function ( ) {
71
+ notifyListeners ( ) ;
72
+ } ) ;
73
+ return request ;
58
74
} ,
59
75
getAppInfo : function ( appType , appName ) {
60
76
return $http ( {
@@ -63,7 +79,7 @@ define(['angular'], function (angular) {
63
79
} ) ;
64
80
} ,
65
81
registerApp : function ( type , name , uri , force ) {
66
- return $resource ( $rootScope . dataflowServerUrl + '/apps/' + type + '/' + name , { } , {
82
+ var request = $resource ( $rootScope . dataflowServerUrl + '/apps/' + type + '/' + name , { } , {
67
83
registerApp : {
68
84
method : 'POST' ,
69
85
params : {
@@ -72,16 +88,24 @@ define(['angular'], function (angular) {
72
88
}
73
89
}
74
90
} ) . registerApp ( ) ;
91
+ request . $promise . then ( function ( ) {
92
+ notifyListeners ( ) ;
93
+ } ) ;
94
+ return request ;
75
95
} ,
76
96
unregisterApp : function ( type , name ) {
77
- return $resource ( $rootScope . dataflowServerUrl + '/apps/' + type + '/' + name , { } , {
97
+ var request = $resource ( $rootScope . dataflowServerUrl + '/apps/' + type + '/' + name , { } , {
78
98
unregisterApp : {
79
99
method : 'DELETE'
80
100
}
81
101
} ) . unregisterApp ( ) ;
102
+ request . $promise . then ( function ( ) {
103
+ notifyListeners ( ) ;
104
+ } ) ;
105
+ return request ;
82
106
} ,
83
107
bulkImportApps : function ( uri , appsProperties , force ) {
84
- return $resource ( $rootScope . dataflowServerUrl + '/apps' , { } , {
108
+ var request = $resource ( $rootScope . dataflowServerUrl + '/apps' , { } , {
85
109
bulkImportApps : {
86
110
method : 'POST' ,
87
111
params : {
@@ -91,6 +115,19 @@ define(['angular'], function (angular) {
91
115
}
92
116
}
93
117
} ) . bulkImportApps ( ) ;
118
+ request . $promise . then ( function ( ) {
119
+ notifyListeners ( ) ;
120
+ } ) ;
121
+ return request ;
122
+ } ,
123
+ addListener : function ( listener ) {
124
+ listeners . push ( listener ) ;
125
+ } ,
126
+ removeListener : function ( listener ) {
127
+ var index = listeners . indexOf ( listener ) ;
128
+ if ( index >= 0 ) {
129
+ listeners . splice ( index ) ;
130
+ }
94
131
}
95
132
} ;
96
133
} ) ;
0 commit comments