Passed
Push — master ( a22cd3...a7d888 )
by Guangyu
09:44 queued 18s
created

admin/app/controllers/settings/energyflowdiagram/energyflowdiagramlink.controller.js   C

Complexity

Total Complexity 57
Complexity/F 1.63

Size

Lines of Code 297
Function Count 35

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 57
eloc 200
mnd 22
bc 22
fnc 35
dl 0
loc 297
rs 5.04
bpm 0.6284
cpm 1.6285
noi 0
c 0
b 0
f 0

How to fix   Complexity   

Complexity

Complex classes like admin/app/controllers/settings/energyflowdiagram/energyflowdiagramlink.controller.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
'use strict';
2
3
app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $translate, MeterService, VirtualMeterService, OfflineMeterService,	EnergyFlowDiagramLinkService, EnergyFlowDiagramService, EnergyFlowDiagramNodeService, toaster,SweetAlert) {
4
    $scope.currentEnergyFlowDiagram = {selected:undefined};
5
    $scope.is_show_add_link = false;
6
    $scope.energyflowdiagrams = [];
7
    $scope.energyflowdiagramlinks = [];
8
    $scope.energyflowdiagramnodes = [];
9
    $scope.meters = [];
10
    $scope.offlinemeters = [];
11
    $scope.virtualmeters = [];
12
    $scope.mergedMeters = [];
13
14
	  $scope.getAllEnergyFlowDiagrams = function() {
15
		EnergyFlowDiagramService.getAllEnergyFlowDiagrams(function (response) {
16
			if (angular.isDefined(response.status) && response.status === 200) {
17
				$scope.energyflowdiagrams = response.data;
18
				} else {
19
				$scope.energyflowdiagrams = [];
20
			 }
21
		});
22
	};
23
24
	$scope.changeEnergyFlowDiagram=function(item,model){
25
		$scope.currentEnergyFlowDiagram=item;
26
		$scope.currentEnergyFlowDiagram.selected=model;
27
    	$scope.is_show_add_link = true;
28
		$scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
29
    	$scope.getNodesByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
30
	};
31
32
	$scope.getLinksByEnergyFlowDiagramID = function(id) {
33
		EnergyFlowDiagramLinkService.getLinksByEnergyFlowDiagramID(id, function (response) {
34
			if (angular.isDefined(response.status) && response.status === 200) {
35
				$scope.energyflowdiagramlinks = response.data;
36
				$scope.showEnergyFlowDiagramMeter()
37
			} else {
38
				$scope.energyflowdiagramlinks = [];
39
			}
40
		});
41
	};
42
43
	$scope.getNodesByEnergyFlowDiagramID = function(id) {
44
45
		EnergyFlowDiagramNodeService.getNodesByEnergyFlowDiagramID(id, function (response) {
46
			if (angular.isDefined(response.status) && response.status === 200) {
47
				$scope.energyflowdiagramnodes = response.data;
48
			} else {
49
				$scope.energyflowdiagramnodes = [];
50
			}
51
		});
52
	};
53
54
	$scope.addEnergyFlowDiagramLink = function() {
55
56
		var modalInstance = $uibModal.open({
57
			templateUrl: 'views/settings/energyflowdiagram/energyflowdiagramlink.model.html',
58
			controller: 'ModalAddEnergyFlowDiagramLinkCtrl',
59
			windowClass: "animated fadeIn",
60
			resolve: {
61
				params: function() {
62
					return {
63
						energyflowdiagramnodes: angular.copy($scope.energyflowdiagramnodes),
64
						mergedmeters: angular.copy($scope.mergedmeters),
65
					};
66
				}
67
			}
68
		});
69
		modalInstance.result.then(function(energyflowdiagramlink) {
70
			var energyflowdiagramid = $scope.currentEnergyFlowDiagram.id;
71
			if (energyflowdiagramlink.source_node != null) {
72
				energyflowdiagramlink.source_node_id = energyflowdiagramlink.source_node.id;
73
			}
74
			if (energyflowdiagramlink.target_node != null) {
75
				energyflowdiagramlink.target_node_id = energyflowdiagramlink.target_node.id;
76
			}
77
			if (energyflowdiagramlink.meter != null) {
78
				energyflowdiagramlink.meter_uuid = energyflowdiagramlink.meter.uuid;
79
			}
80
81
			EnergyFlowDiagramLinkService.addEnergyFlowDiagramLink(energyflowdiagramid, energyflowdiagramlink, function (response) {
82
				if (angular.isDefined(response.status) && response.status === 201) {
83
					toaster.pop({
84
						type: "success",
85
						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
86
						body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
87
						showCloseButton: true,
88
					});
89
					$scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
90
          			$scope.$emit('handleEmitEnergyFlowDiagramLinkChanged');
91
				} else {
92
					toaster.pop({
93
						type: "error",
94
						title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
95
						body: $translate.instant(response.data.description),
96
						showCloseButton: true,
97
					});
98
				}
99
			});
100
		}, function() {
101
102
		});
103
	};
104
105
	$scope.editEnergyFlowDiagramLink = function(energyflowdiagramlink) {
106
		var modalInstance = $uibModal.open({
107
			templateUrl: 'views/settings/energyflowdiagram/energyflowdiagramlink.model.html',
108
			controller: 'ModalEditEnergyFlowDiagramLinkCtrl',
109
  			windowClass: "animated fadeIn",
110
			resolve: {
111
				params: function() {
112
					return {
113
						energyflowdiagramlink: angular.copy(energyflowdiagramlink),
114
						energyflowdiagramnodes: angular.copy($scope.energyflowdiagramnodes),
115
						mergedmeters: angular.copy($scope.mergedmeters),
116
					};
117
				}
118
			}
119
		});
120
121
		modalInstance.result.then(function(modifiedEnergyFlowDiagramLink) {
122
			if (modifiedEnergyFlowDiagramLink.source_node != null) {
123
					modifiedEnergyFlowDiagramLink.source_node_id = modifiedEnergyFlowDiagramLink.source_node.id;
124
			}
125
			if (modifiedEnergyFlowDiagramLink.target_node != null) {
126
					modifiedEnergyFlowDiagramLink.target_node_id = modifiedEnergyFlowDiagramLink.target_node.id;
127
			}
128
			if (modifiedEnergyFlowDiagramLink.meter != null) {
129
					modifiedEnergyFlowDiagramLink.meter_uuid = modifiedEnergyFlowDiagramLink.meter.uuid;
130
			}
131
			EnergyFlowDiagramLinkService.editEnergyFlowDiagramLink($scope.currentEnergyFlowDiagram.id, modifiedEnergyFlowDiagramLink, function (response) {
132
				if (angular.isDefined(response.status) && response.status === 200) {
133
					toaster.pop({
134
						type: "success",
135
						title: $translate.instant("TOASTER.SUCCESS_TITLE"),
136
						body: $translate.instant("TOASTER.SUCCESS_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
137
						showCloseButton: true,
138
					});
139
					$scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
140
          			$scope.$emit('handleEmitEnergyFlowDiagramLinkChanged');
141
				} else {
142
					toaster.pop({
143
						type: "error",
144
						title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
145
						body: $translate.instant(response.data.description),
146
						showCloseButton: true,
147
					});
148
				}
149
			});
150
		}, function() {
151
			//do nothing;
152
		});
153
	};
154
155
	$scope.deleteEnergyFlowDiagramLink = function(energyflowdiagramlink) {
156
		SweetAlert.swal({
157
				title: $translate.instant("SWEET.TITLE"),
158
				text: $translate.instant("SWEET.TEXT"),
159
				type: "warning",
160
				showCancelButton: true,
161
				confirmButtonColor: "#DD6B55",
162
				confirmButtonText: $translate.instant("SWEET.CONFIRM_BUTTON_TEXT"),
163
				cancelButtonText: $translate.instant("SWEET.CANCEL_BUTTON_TEXT"),
164
				closeOnConfirm: true,
165
				closeOnCancel: true
166
			},
167
			function(isConfirm) {
168
				if (isConfirm) {
169
					EnergyFlowDiagramLinkService.deleteEnergyFlowDiagramLink($scope.currentEnergyFlowDiagram.id, energyflowdiagramlink.id, function (response) {
170
						if (angular.isDefined(response.status) && response.status === 204) {
171
							toaster.pop({
172
								type: "success",
173
								title: $translate.instant("TOASTER.SUCCESS_TITLE"),
174
								body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
175
								showCloseButton: true,
176
							});
177
							$scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
178
              				$scope.$emit('handleEmitEnergyFlowDiagramLinkChanged');
179
						} else {
180
							toaster.pop({
181
								type: "error",
182
								title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
183
								body: $translate.instant(response.data.description),
184
								showCloseButton: true,
185
							});
186
				   		}
187
					});
188
				}
189
			});
190
	};
191
192
	$scope.colorMeterType=function(type){
193
		if(type=='meters'){
194
			return 'btn-primary'
195
		}else if(type=='virtualmeters'){
196
			return 'btn-info'
197
		}else{
198
			return 'btn-success'
199
		}
200
	};
201
202
	$scope.showEnergyFlowDiagramMeter = function(energyflowdiagramlink) {
203
204
		if (energyflowdiagramlink == null || energyflowdiagramlink.meter == null) {
205
			return '-';
206
		} else {
207
			return '(' + energyflowdiagramlink.meter.type + ')' + energyflowdiagramlink.meter.name;
208
		}
209
	};
210
211
	$scope.getMergedMeters = function() {
212
		$scope.mergedmeters = [];
213
		$scope.meters = [];
214
		$scope.offlinemeters = [];
215
		$scope.virtualmeters = [];
216
		MeterService.getAllMeters(function (response) {
217
			if (angular.isDefined(response.status) && response.status === 200) {
218
				$scope.meters = response.data;
219
				for(var i = 0; i < $scope.meters.length; i++) {
220
					var mergedmeter = {"uuid":  $scope.meters[i].uuid, "name": "meter/"+$scope.meters[i].name};
221
					$scope.mergedmeters.push(mergedmeter);
222
				}
223
			} else {
224
				$scope.meters = [];
225
				}
226
			});
227
228
		OfflineMeterService.getAllOfflineMeters(function (response) {
229
			if (angular.isDefined(response.status) && response.status === 200) {
230
				$scope.offlinemeters = response.data;
231
				for(var i = 0; i < $scope.offlinemeters.length; i++) {
232
					var mergedmeter = {"uuid":  $scope.offlinemeters[i].uuid, "name": "offlinemeter/"+$scope.offlinemeters[i].name};
233
					$scope.mergedmeters.push(mergedmeter);
234
				}
235
			} else {
236
				$scope.offlinemeters = [];
237
			}
238
		});
239
240
		VirtualMeterService.getAllVirtualMeters(function (response) {
241
			if (angular.isDefined(response.status) && response.status === 200) {
242
				$scope.virtualmeters = response.data;
243
				for(var i = 0; i < $scope.virtualmeters.length; i++) {
244
					var mergedmeter = {"uuid":  $scope.virtualmeters[i].uuid, "name": "virtualmeter/"+$scope.virtualmeters[i].name};
245
					$scope.mergedmeters.push(mergedmeter);
246
				}
247
			} else {
248
				$scope.virtualmeters = [];
249
			}
250
		});
251
	};
252
253
	$scope.getAllEnergyFlowDiagrams();
254
	$scope.getMergedMeters();
255
256
	$scope.$on('handleBroadcastEnergyFlowDiagramChanged', function(event) {
257
		$scope.getAllEnergyFlowDiagrams();
258
	});
259
260
	$scope.$on('handleBroadcastEnergyFlowDiagramNodeChanged', function(event) {
261
		$scope.getNodesByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
262
	});
263
});
264
265
app.controller('ModalAddEnergyFlowDiagramLinkCtrl', function($scope, $uibModalInstance, params) {
266
267
	$scope.operation = "ENERGY_FLOW_DIAGRAM.ADD_LINK";
268
  $scope.energyflowdiagramlink = {
269
    source_node: {id: null, name: null},
270
    target_node: {id: null, name: null},
271
    meter: {id: null, uuid: null, name: null, type: null},
272
  };
273
  $scope.energyflowdiagramnodes = params.energyflowdiagramnodes;
274
  $scope.mergedmeters = params.mergedmeters;
275
	$scope.ok = function() {
276
277
		$uibModalInstance.close($scope.energyflowdiagramlink);
278
	};
279
280
	$scope.cancel = function() {
281
		$uibModalInstance.dismiss('cancel');
282
	};
283
});
284
285
app.controller('ModalEditEnergyFlowDiagramLinkCtrl', function($scope, $uibModalInstance, params) {
286
	$scope.operation = "ENERGY_FLOW_DIAGRAM.EDIT_LINK";
287
	$scope.energyflowdiagramlink = params.energyflowdiagramlink;
288
  $scope.energyflowdiagramnodes = params.energyflowdiagramnodes;
289
  $scope.mergedmeters = params.mergedmeters;
290
	$scope.ok = function() {
291
		$uibModalInstance.close($scope.energyflowdiagramlink);
292
	};
293
294
	$scope.cancel = function() {
295
		$uibModalInstance.dismiss('cancel');
296
	};
297
});
298