@@ -6,6 +6,48 @@ jQuery(document).ready(
6
6
7
7
frontendServiceUrl = $ ( '#frontendServiceUrl' ) . text ( ) ;
8
8
9
+ // /Start ## Global AJAX Sender function ##################################
10
+ var AjaxHttpSender = function ( ) {
11
+ } ;
12
+
13
+ AjaxHttpSender . prototype . sendAjax = function ( url , type , data , callback ) {
14
+ $ . ajax ( {
15
+ url : url ,
16
+ type : type ,
17
+ data : data ,
18
+ contentType : 'application/json; charset=utf-8' ,
19
+ dataType : "json" ,
20
+ cache : false ,
21
+ beforeSend : function ( ) {
22
+ callback . beforeSend ( ) ;
23
+ } ,
24
+ error : function ( XMLHttpRequest , textStatus , errorThrown ) {
25
+ callback . error ( XMLHttpRequest , textStatus , errorThrown ) ;
26
+ } ,
27
+ success : function ( data , textStatus ) {
28
+ callback . success ( data , textStatus ) ;
29
+ } ,
30
+ complete : function ( XMLHttpRequest , textStatus ) {
31
+ callback . complete ( ) ;
32
+ }
33
+ } ) ;
34
+ }
35
+ // /Stop ## Global AJAX Sender function ##################################
36
+
37
+ //Function for validating the json format, it accepts only string json
38
+ function isValidJSON ( str ) {
39
+ if ( typeof ( str ) !== 'string' ) {
40
+ return false ;
41
+ }
42
+ try {
43
+ JSON . parse ( str ) ;
44
+ return true ;
45
+ } catch ( e ) {
46
+ return false ;
47
+ }
48
+ }
49
+
50
+ // Model for knockout(KO) binding
9
51
function AppViewModel ( rulesList ) {
10
52
var self = this ;
11
53
self . rulesBindingList = ko . observableArray ( rulesList ) ;
@@ -18,6 +60,7 @@ jQuery(document).ready(
18
60
return JSON . stringify ( item , null , 2 ) ;
19
61
} ;
20
62
63
+ //After adding a rule, this function remove the type from dropdown
21
64
self . removeDropdown = function ( name ) {
22
65
var index = self . dropdown . indexOf ( name ) ;
23
66
if ( index !== - 1 ) {
@@ -26,31 +69,46 @@ jQuery(document).ready(
26
69
return name ;
27
70
} ;
28
71
72
+ // Removing the rule
29
73
self . removeRule = function ( name ) {
30
74
self . rulesBindingList . remove ( name ) ;
31
75
self . dropdown . push ( name . Type ) ;
32
76
} ;
77
+
78
+ //This submit function for finding the aggregated object from the rules and events, This function internally call the ajax call
33
79
self . submit = function ( ) {
34
- var inputs = $ ( "#eventsListID" ) . val ( ) ;
80
+ var events = $ ( "#eventsListID" ) . val ( ) ;
35
81
var formRules = [ ] ;
36
- $ ( '.formRules' ) . each ( function ( ) {
37
- formRules . push ( $ ( this ) . val ( ) ) ;
82
+ $ ( '.formRules' ) . each ( function ( ) {
83
+ try {
84
+ formRules . push ( JSON . parse ( $ ( this ) . val ( ) ) ) ;
85
+ } catch ( e ) {
86
+ $ . jGrowl ( "Invalid json format :\n" + $ ( this ) . val ( ) , {
87
+ sticky : false ,
88
+ theme : 'Error'
89
+ } ) ;
90
+ return false ;
91
+ }
38
92
} ) ;
39
- console . log ( "Rules : " + formRules . length ) ;
40
- console . log ( formRules . toString ( ) ) ;
41
- console . log ( "Events : " ) ;
42
- console . log ( inputs . toString ( ) ) ;
93
+
43
94
var callback = {
44
95
beforeSend : function ( ) {
45
96
} ,
46
97
success : function ( data , textStatus ) {
47
- var returnData = [ data ] ;
98
+ var returnData = data ;
48
99
if ( returnData . length > 0 ) {
49
100
$ . jGrowl ( "Successfully aggregated object generated" , {
50
101
sticky : false ,
51
102
theme : 'Error'
52
103
} ) ;
53
- reload_table ( ) ;
104
+
105
+ $ ( '#aggregatedresultData' ) . text ( JSON . stringify ( data , null , 2 ) ) ;
106
+ var divText = document . getElementById ( "aggregatedresult" ) . outerHTML ;
107
+ var myWindow = window . open ( '' , '' , 'width=700,height=1000' ) ;
108
+ var doc = myWindow . document ;
109
+ doc . open ( ) ;
110
+ doc . write ( divText ) ;
111
+ doc . close ( ) ;
54
112
}
55
113
} ,
56
114
error : function ( XMLHttpRequest , textStatus , errorThrown ) {
@@ -62,13 +120,18 @@ jQuery(document).ready(
62
120
complete : function ( ) {
63
121
}
64
122
} ;
65
- // Perform AJAX
66
- // var ajaxHttpSender = new AjaxHttpSender();
67
- // ajaxHttpSender.sendAjax(frontendServiceUrl + "/rules/rule-check/aggregation", "POST", ko.toJSON("{'listRulesJson':"
68
- // + self.parsedToString(self.rulesBindingList()) + ",'listEventsJson':" + self.eventsBindingList.toString() + "}"), callback);
69
-
123
+ var eventsValid = isValidJSON ( events . toString ( ) ) ;
124
+ if ( ! eventsValid ) {
125
+ alert ( "Events are not a valid json format" ) ;
126
+ } else {
127
+ var ajaxHttpSender = new AjaxHttpSender ( ) ;
128
+ //console.log(JSON.stringify(JSON.parse('{"listRulesJson":' + JSON.stringify(formRules) + ',"listEventsJson":' + events.toString() + '}')));
129
+ ajaxHttpSender . sendAjax ( frontendServiceUrl + "/rules/rule-check/aggregation" , "POST" , JSON . stringify ( JSON . parse ( '{"listRulesJson":'
130
+ + JSON . stringify ( formRules ) + ',"listEventsJson":' + events . toString ( ) + '}' ) ) , callback ) ;
131
+ }
70
132
} ;
71
133
134
+ // This function for adding rule
72
135
self . addRule = function ( viewModel , event ) {
73
136
var newValue = event . target . value ;
74
137
if ( newValue != '' ) {
@@ -83,14 +146,19 @@ jQuery(document).ready(
83
146
return self ;
84
147
}
85
148
149
+
86
150
var vm = new AppViewModel ( [ ] ) ;
87
151
ko . applyBindings ( vm , $ ( "#submitButton" ) [ 0 ] ) ;
88
- // ko.applyBindings(vm, $(".testTulesDOMObject")[0]);
152
+ vm . rulesBindingList . push ( {
153
+ "TemplateName" : "" ,
154
+ "Type" : "EiffelArtifactCreatedEvent"
155
+
156
+ } ) ;
157
+ vm . removeDropdown ( "EiffelArtifactCreatedEvent" ) ;
158
+ ko . applyBindings ( vm , $ ( "#testTulesDOMObject" ) [ 0 ] ) ;
89
159
90
- $ ( ".container" ) . on (
91
- "click" ,
92
- "button.upload_rules" ,
93
- function ( event ) {
160
+ //Upload events list json data
161
+ $ ( ".container" ) . on ( "click" , "button.upload_rules" , function ( event ) {
94
162
event . stopPropagation ( ) ;
95
163
event . preventDefault ( ) ;
96
164
@@ -163,6 +231,7 @@ jQuery(document).ready(
163
231
}
164
232
} ) ;
165
233
234
+ //Upload list of events json data
166
235
$ ( ".container" ) . on ( "click" , "button.upload_events" , function ( event ) {
167
236
event . stopPropagation ( ) ;
168
237
event . preventDefault ( ) ;
@@ -226,4 +295,52 @@ jQuery(document).ready(
226
295
}
227
296
} ) ;
228
297
298
+ // Download the modified rule
299
+ $ ( '.container' ) . on ( 'click' , 'button.download_rules' , function ( ) {
300
+ var formRules = [ ] ;
301
+ $ ( '.formRules' ) . each ( function ( ) {
302
+ try {
303
+ formRules . push ( JSON . parse ( $ ( this ) . val ( ) ) ) ;
304
+ } catch ( e ) {
305
+ $ . jGrowl ( "Invalid json format :\n" + $ ( this ) . val ( ) , {
306
+ sticky : false ,
307
+ theme : 'Error'
308
+ } ) ;
309
+ return false ;
310
+ }
311
+ } ) ;
312
+ if ( formRules . length !== 0 ) {
313
+ var contentType = "application/json;charset=utf-8" ;
314
+ var jsonData = JSON . stringify ( formRules , null , 2 ) ;
315
+ var fileName = "rules.json"
316
+
317
+ function downloadFile ( data , type , title ) {
318
+ var link = document . createElement ( 'a' ) ;
319
+ link . setAttribute ( "href" , "data:" + type + "," + encodeURIComponent ( data ) ) ;
320
+ link . setAttribute ( "download" , fileName ) ;
321
+ link . setAttribute ( "class" , "hidden" ) ;
322
+ link . click ( ) ;
323
+ }
324
+
325
+ function downloadFileMSExplorer ( data , type , title ) {
326
+ var blob = new Blob ( [ data ] , {
327
+ type : type
328
+ } ) ;
329
+ window . navigator . msSaveOrOpenBlob ( blob , title ) ;
330
+ }
331
+
332
+ if ( window . navigator . msSaveOrOpenBlob ) {
333
+ downloadFileMSExplorer ( jsonData , contentType , fileName ) ;
334
+ } else {
335
+ downloadFile ( jsonData , contentType , fileName ) ;
336
+ }
337
+ }
338
+ else {
339
+ $ . jGrowl ( "Data not available for download!" , {
340
+ sticky : false ,
341
+ theme : 'Error'
342
+ } ) ;
343
+ }
344
+
345
+ } ) ;
229
346
} ) ;
0 commit comments