Commit 776737519d5a8fb6d7b4834b66aa7289603689c2
Merge remote-tracking branch 'upstream/master' into dao-refactoring-vs
Showing
13 changed files
with
284 additions
and
26 deletions
@@ -72,7 +72,7 @@ public class AlarmController extends BaseController { | @@ -72,7 +72,7 @@ public class AlarmController extends BaseController { | ||
72 | } | 72 | } |
73 | } | 73 | } |
74 | 74 | ||
75 | - @PreAuthorize("hasAuthority('TENANT_ADMIN')") | 75 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
76 | @RequestMapping(value = "/alarm/{alarmId}/ack", method = RequestMethod.POST) | 76 | @RequestMapping(value = "/alarm/{alarmId}/ack", method = RequestMethod.POST) |
77 | @ResponseStatus(value = HttpStatus.OK) | 77 | @ResponseStatus(value = HttpStatus.OK) |
78 | public void ackAlarm(@PathVariable("alarmId") String strAlarmId) throws ThingsboardException { | 78 | public void ackAlarm(@PathVariable("alarmId") String strAlarmId) throws ThingsboardException { |
@@ -86,7 +86,7 @@ public class AlarmController extends BaseController { | @@ -86,7 +86,7 @@ public class AlarmController extends BaseController { | ||
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
89 | - @PreAuthorize("hasAuthority('TENANT_ADMIN')") | 89 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
90 | @RequestMapping(value = "/alarm/{alarmId}/clear", method = RequestMethod.POST) | 90 | @RequestMapping(value = "/alarm/{alarmId}/clear", method = RequestMethod.POST) |
91 | @ResponseStatus(value = HttpStatus.OK) | 91 | @ResponseStatus(value = HttpStatus.OK) |
92 | public void clearAlarm(@PathVariable("alarmId") String strAlarmId) throws ThingsboardException { | 92 | public void clearAlarm(@PathVariable("alarmId") String strAlarmId) throws ThingsboardException { |
@@ -91,4 +91,13 @@ public class DeviceAttributes { | @@ -91,4 +91,13 @@ public class DeviceAttributes { | ||
91 | } | 91 | } |
92 | return map; | 92 | return map; |
93 | } | 93 | } |
94 | + | ||
95 | + @Override | ||
96 | + public String toString() { | ||
97 | + return "DeviceAttributes{" + | ||
98 | + "clientSideAttributesMap=" + clientSideAttributesMap + | ||
99 | + ", serverPrivateAttributesMap=" + serverPrivateAttributesMap + | ||
100 | + ", serverPublicAttributesMap=" + serverPublicAttributesMap + | ||
101 | + '}'; | ||
102 | + } | ||
94 | } | 103 | } |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.extensions.core.action.template; | 16 | package org.thingsboard.server.extensions.core.action.template; |
17 | 17 | ||
18 | +import lombok.extern.slf4j.Slf4j; | ||
18 | import org.apache.velocity.Template; | 19 | import org.apache.velocity.Template; |
19 | import org.apache.velocity.VelocityContext; | 20 | import org.apache.velocity.VelocityContext; |
20 | import org.apache.velocity.runtime.parser.ParseException; | 21 | import org.apache.velocity.runtime.parser.ParseException; |
@@ -35,6 +36,7 @@ import java.util.Optional; | @@ -35,6 +36,7 @@ import java.util.Optional; | ||
35 | /** | 36 | /** |
36 | * @author Andrew Shvayka | 37 | * @author Andrew Shvayka |
37 | */ | 38 | */ |
39 | +@Slf4j | ||
38 | public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfiguration> extends SimpleRuleLifecycleComponent implements PluginAction<T> { | 40 | public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfiguration> extends SimpleRuleLifecycleComponent implements PluginAction<T> { |
39 | protected T configuration; | 41 | protected T configuration; |
40 | protected Template template; | 42 | protected Template template; |
@@ -69,6 +71,7 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi | @@ -69,6 +71,7 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi | ||
69 | } | 71 | } |
70 | 72 | ||
71 | protected String getMsgBody(RuleContext ctx, ToDeviceActorMsg msg) { | 73 | protected String getMsgBody(RuleContext ctx, ToDeviceActorMsg msg) { |
74 | + log.trace("Creating context for: {} and payload {}", ctx.getDeviceAttributes(), msg.getPayload()); | ||
72 | VelocityContext context = VelocityUtils.createContext(ctx.getDeviceAttributes(), msg.getPayload()); | 75 | VelocityContext context = VelocityUtils.createContext(ctx.getDeviceAttributes(), msg.getPayload()); |
73 | return VelocityUtils.merge(template, context); | 76 | return VelocityUtils.merge(template, context); |
74 | } | 77 | } |
@@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
16 | package org.thingsboard.server.extensions.kafka.plugin; | 16 | package org.thingsboard.server.extensions.kafka.plugin; |
17 | 17 | ||
18 | import lombok.RequiredArgsConstructor; | 18 | import lombok.RequiredArgsConstructor; |
19 | +import lombok.extern.slf4j.Slf4j; | ||
19 | import org.apache.kafka.clients.producer.Producer; | 20 | import org.apache.kafka.clients.producer.Producer; |
20 | import org.apache.kafka.clients.producer.ProducerRecord; | 21 | import org.apache.kafka.clients.producer.ProducerRecord; |
21 | import org.thingsboard.server.common.data.id.RuleId; | 22 | import org.thingsboard.server.common.data.id.RuleId; |
@@ -30,6 +31,7 @@ import org.thingsboard.server.extensions.kafka.action.KafkaActionMsg; | @@ -30,6 +31,7 @@ import org.thingsboard.server.extensions.kafka.action.KafkaActionMsg; | ||
30 | import org.thingsboard.server.extensions.kafka.action.KafkaActionPayload; | 31 | import org.thingsboard.server.extensions.kafka.action.KafkaActionPayload; |
31 | 32 | ||
32 | @RequiredArgsConstructor | 33 | @RequiredArgsConstructor |
34 | +@Slf4j | ||
33 | public class KafkaMsgHandler implements RuleMsgHandler { | 35 | public class KafkaMsgHandler implements RuleMsgHandler { |
34 | 36 | ||
35 | private final Producer<?, String> producer; | 37 | private final Producer<?, String> producer; |
@@ -40,7 +42,7 @@ public class KafkaMsgHandler implements RuleMsgHandler { | @@ -40,7 +42,7 @@ public class KafkaMsgHandler implements RuleMsgHandler { | ||
40 | throw new RuleException("Unsupported message type " + msg.getClass().getName() + "!"); | 42 | throw new RuleException("Unsupported message type " + msg.getClass().getName() + "!"); |
41 | } | 43 | } |
42 | KafkaActionPayload payload = ((KafkaActionMsg) msg).getPayload(); | 44 | KafkaActionPayload payload = ((KafkaActionMsg) msg).getPayload(); |
43 | - | 45 | + log.debug("Processing kafka payload: {}", payload); |
44 | try { | 46 | try { |
45 | producer.send(new ProducerRecord<>(payload.getTopic(), payload.getMsgBody()), | 47 | producer.send(new ProducerRecord<>(payload.getTopic(), payload.getMsgBody()), |
46 | (metadata, e) -> { | 48 | (metadata, e) -> { |
@@ -78,6 +78,7 @@ public class GatewaySessionCtx { | @@ -78,6 +78,7 @@ public class GatewaySessionCtx { | ||
78 | Device newDevice = new Device(); | 78 | Device newDevice = new Device(); |
79 | newDevice.setTenantId(gateway.getTenantId()); | 79 | newDevice.setTenantId(gateway.getTenantId()); |
80 | newDevice.setName(deviceName); | 80 | newDevice.setName(deviceName); |
81 | + newDevice.setType("default"); | ||
81 | return deviceService.saveDevice(newDevice); | 82 | return deviceService.saveDevice(newDevice); |
82 | }); | 83 | }); |
83 | GatewayDeviceSessionCtx ctx = new GatewayDeviceSessionCtx(this, device); | 84 | GatewayDeviceSessionCtx ctx = new GatewayDeviceSessionCtx(this, device); |
ui/src/app/api/alarm.service.js
0 → 100644
1 | +/* | ||
2 | + * Copyright © 2016-2017 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +export default angular.module('thingsboard.api.alarm', []) | ||
17 | + .factory('alarmService', AlarmService) | ||
18 | + .name; | ||
19 | + | ||
20 | +/*@ngInject*/ | ||
21 | +function AlarmService($http, $q, $interval, $filter) { | ||
22 | + var service = { | ||
23 | + getAlarm: getAlarm, | ||
24 | + saveAlarm: saveAlarm, | ||
25 | + ackAlarm: ackAlarm, | ||
26 | + clearAlarm: clearAlarm, | ||
27 | + getAlarms: getAlarms, | ||
28 | + pollAlarms: pollAlarms, | ||
29 | + cancelPollAlarms: cancelPollAlarms | ||
30 | + } | ||
31 | + | ||
32 | + return service; | ||
33 | + | ||
34 | + function getAlarm(alarmId, ignoreErrors, config) { | ||
35 | + var deferred = $q.defer(); | ||
36 | + var url = '/api/alarm/' + alarmId; | ||
37 | + if (!config) { | ||
38 | + config = {}; | ||
39 | + } | ||
40 | + config = Object.assign(config, { ignoreErrors: ignoreErrors }); | ||
41 | + $http.get(url, config).then(function success(response) { | ||
42 | + deferred.resolve(response.data); | ||
43 | + }, function fail() { | ||
44 | + deferred.reject(); | ||
45 | + }); | ||
46 | + return deferred.promise; | ||
47 | + } | ||
48 | + | ||
49 | + function saveAlarm(alarm, ignoreErrors, config) { | ||
50 | + var deferred = $q.defer(); | ||
51 | + var url = '/api/alarm'; | ||
52 | + if (!config) { | ||
53 | + config = {}; | ||
54 | + } | ||
55 | + config = Object.assign(config, { ignoreErrors: ignoreErrors }); | ||
56 | + $http.post(url, alarm, config).then(function success(response) { | ||
57 | + deferred.resolve(response.data); | ||
58 | + }, function fail() { | ||
59 | + deferred.reject(); | ||
60 | + }); | ||
61 | + return deferred.promise; | ||
62 | + } | ||
63 | + | ||
64 | + function ackAlarm(alarmId, ignoreErrors, config) { | ||
65 | + var deferred = $q.defer(); | ||
66 | + var url = '/api/alarm/' + alarmId + '/ack'; | ||
67 | + if (!config) { | ||
68 | + config = {}; | ||
69 | + } | ||
70 | + config = Object.assign(config, { ignoreErrors: ignoreErrors }); | ||
71 | + $http.post(url, null, config).then(function success(response) { | ||
72 | + deferred.resolve(response.data); | ||
73 | + }, function fail() { | ||
74 | + deferred.reject(); | ||
75 | + }); | ||
76 | + return deferred.promise; | ||
77 | + } | ||
78 | + | ||
79 | + function clearAlarm(alarmId, ignoreErrors, config) { | ||
80 | + var deferred = $q.defer(); | ||
81 | + var url = '/api/alarm/' + alarmId + '/clear'; | ||
82 | + if (!config) { | ||
83 | + config = {}; | ||
84 | + } | ||
85 | + config = Object.assign(config, { ignoreErrors: ignoreErrors }); | ||
86 | + $http.post(url, null, config).then(function success(response) { | ||
87 | + deferred.resolve(response.data); | ||
88 | + }, function fail() { | ||
89 | + deferred.reject(); | ||
90 | + }); | ||
91 | + return deferred.promise; | ||
92 | + } | ||
93 | + | ||
94 | + function getAlarms(entityType, entityId, pageLink, alarmStatus, ascOrder, config) { | ||
95 | + var deferred = $q.defer(); | ||
96 | + var url = '/api/alarm/' + entityType + '/' + entityId + '?limit=' + pageLink.limit; | ||
97 | + | ||
98 | + if (angular.isDefined(pageLink.startTime)) { | ||
99 | + url += '&startTime=' + pageLink.startTime; | ||
100 | + } | ||
101 | + if (angular.isDefined(pageLink.endTime)) { | ||
102 | + url += '&endTime=' + pageLink.endTime; | ||
103 | + } | ||
104 | + if (angular.isDefined(pageLink.idOffset)) { | ||
105 | + url += '&offset=' + pageLink.idOffset; | ||
106 | + } | ||
107 | + if (alarmStatus) { | ||
108 | + url += '&status=' + alarmStatus; | ||
109 | + } | ||
110 | + if (angular.isDefined(ascOrder) && ascOrder != null) { | ||
111 | + url += '&ascOrder=' + (ascOrder ? 'true' : 'false'); | ||
112 | + } | ||
113 | + | ||
114 | + $http.get(url, config).then(function success(response) { | ||
115 | + deferred.resolve(response.data); | ||
116 | + }, function fail() { | ||
117 | + deferred.reject(); | ||
118 | + }); | ||
119 | + return deferred.promise; | ||
120 | + } | ||
121 | + | ||
122 | + function fetchAlarms(alarmsQuery, pageLink, deferred, alarmsList) { | ||
123 | + getAlarms(alarmsQuery.entityType, alarmsQuery.entityId, | ||
124 | + pageLink, alarmsQuery.alarmStatus, false, {ignoreLoading: true}).then( | ||
125 | + function success(alarms) { | ||
126 | + if (!alarmsList) { | ||
127 | + alarmsList = []; | ||
128 | + } | ||
129 | + alarmsList = alarmsList.concat(alarms.data); | ||
130 | + if (alarms.hasNext && !alarmsQuery.limit) { | ||
131 | + fetchAlarms(alarmsQuery, alarms.nextPageLink, deferred, alarmsList); | ||
132 | + } else { | ||
133 | + alarmsList = $filter('orderBy')(alarmsList, ['-createdTime']); | ||
134 | + deferred.resolve(alarmsList); | ||
135 | + } | ||
136 | + }, | ||
137 | + function fail() { | ||
138 | + deferred.reject(); | ||
139 | + } | ||
140 | + ); | ||
141 | + } | ||
142 | + | ||
143 | + function getAlarmsByQuery(alarmsQuery) { | ||
144 | + var deferred = $q.defer(); | ||
145 | + var time = Date.now(); | ||
146 | + var pageLink; | ||
147 | + if (alarmsQuery.limit) { | ||
148 | + pageLink = { | ||
149 | + limit: alarmsQuery.limit | ||
150 | + }; | ||
151 | + } else { | ||
152 | + pageLink = { | ||
153 | + limit: 100, | ||
154 | + startTime: time - alarmsQuery.interval | ||
155 | + }; | ||
156 | + } | ||
157 | + fetchAlarms(alarmsQuery, pageLink, deferred); | ||
158 | + return deferred.promise; | ||
159 | + } | ||
160 | + | ||
161 | + function onPollAlarms(alarmsQuery) { | ||
162 | + getAlarmsByQuery(alarmsQuery).then( | ||
163 | + function success(alarms) { | ||
164 | + alarmsQuery.onAlarms(alarms); | ||
165 | + }, | ||
166 | + function fail() {} | ||
167 | + ); | ||
168 | + } | ||
169 | + | ||
170 | + function pollAlarms(entityType, entityId, alarmStatus, interval, limit, pollingInterval, onAlarms) { | ||
171 | + var alarmsQuery = { | ||
172 | + entityType: entityType, | ||
173 | + entityId: entityId, | ||
174 | + alarmStatus: alarmStatus, | ||
175 | + interval: interval, | ||
176 | + limit: limit, | ||
177 | + onAlarms: onAlarms | ||
178 | + }; | ||
179 | + onPollAlarms(alarmsQuery); | ||
180 | + return $interval(onPollAlarms, pollingInterval, 0, false, alarmsQuery); | ||
181 | + } | ||
182 | + | ||
183 | + function cancelPollAlarms(pollPromise) { | ||
184 | + if (angular.isDefined(pollPromise)) { | ||
185 | + $interval.cancel(pollPromise); | ||
186 | + } | ||
187 | + } | ||
188 | + | ||
189 | +} |
@@ -595,8 +595,8 @@ function DatasourceSubscription(datasourceSubscription, telemetryWebsocketServic | @@ -595,8 +595,8 @@ function DatasourceSubscription(datasourceSubscription, telemetryWebsocketServic | ||
595 | } | 595 | } |
596 | series = [time, value]; | 596 | series = [time, value]; |
597 | data.push(series); | 597 | data.push(series); |
598 | - update = true; | ||
599 | } | 598 | } |
599 | + update = true; | ||
600 | } | 600 | } |
601 | if (update) { | 601 | if (update) { |
602 | datasourceData[datasourceKey].data = data; | 602 | datasourceData[datasourceKey].data = data; |
@@ -67,6 +67,7 @@ import thingsboardApiEntityRelation from './api/entity-relation.service'; | @@ -67,6 +67,7 @@ import thingsboardApiEntityRelation from './api/entity-relation.service'; | ||
67 | import thingsboardApiAsset from './api/asset.service'; | 67 | import thingsboardApiAsset from './api/asset.service'; |
68 | import thingsboardApiAttribute from './api/attribute.service'; | 68 | import thingsboardApiAttribute from './api/attribute.service'; |
69 | import thingsboardApiEntity from './api/entity.service'; | 69 | import thingsboardApiEntity from './api/entity.service'; |
70 | +import thingsboardApiAlarm from './api/alarm.service'; | ||
70 | 71 | ||
71 | import 'typeface-roboto'; | 72 | import 'typeface-roboto'; |
72 | import 'font-awesome/css/font-awesome.min.css'; | 73 | import 'font-awesome/css/font-awesome.min.css'; |
@@ -124,6 +125,7 @@ angular.module('thingsboard', [ | @@ -124,6 +125,7 @@ angular.module('thingsboard', [ | ||
124 | thingsboardApiAsset, | 125 | thingsboardApiAsset, |
125 | thingsboardApiAttribute, | 126 | thingsboardApiAttribute, |
126 | thingsboardApiEntity, | 127 | thingsboardApiEntity, |
128 | + thingsboardApiAlarm, | ||
127 | uiRouter]) | 129 | uiRouter]) |
128 | .config(AppConfig) | 130 | .config(AppConfig) |
129 | .factory('globalInterceptor', GlobalInterceptor) | 131 | .factory('globalInterceptor', GlobalInterceptor) |
@@ -59,6 +59,12 @@ export default angular.module('thingsboard.types', []) | @@ -59,6 +59,12 @@ export default angular.module('thingsboard.types', []) | ||
59 | name: "aggregation.none" | 59 | name: "aggregation.none" |
60 | } | 60 | } |
61 | }, | 61 | }, |
62 | + alarmStatus: { | ||
63 | + activeUnack: "ACTIVE_UNACK", | ||
64 | + activeAck: "ACTIVE_ACK", | ||
65 | + clearedUnack: "CLEARED_UNACK", | ||
66 | + clearedAck: "CLEARED_ACK" | ||
67 | + }, | ||
62 | position: { | 68 | position: { |
63 | top: { | 69 | top: { |
64 | value: "top", | 70 | value: "top", |
@@ -138,10 +138,10 @@ export default function DashboardController(types, dashboardUtils, widgetService | @@ -138,10 +138,10 @@ export default function DashboardController(types, dashboardUtils, widgetService | ||
138 | } | 138 | } |
139 | 139 | ||
140 | vm.mainLayoutHeight = function() { | 140 | vm.mainLayoutHeight = function() { |
141 | - if (vm.isEditingWidget && vm.editingLayoutCtx.id === 'main') { | 141 | + if (!vm.isEditingWidget || vm.editingLayoutCtx.id === 'main') { |
142 | return '100%'; | 142 | return '100%'; |
143 | } else { | 143 | } else { |
144 | - return 'auto'; | 144 | + return '0px'; |
145 | } | 145 | } |
146 | } | 146 | } |
147 | 147 | ||
@@ -154,10 +154,10 @@ export default function DashboardController(types, dashboardUtils, widgetService | @@ -154,10 +154,10 @@ export default function DashboardController(types, dashboardUtils, widgetService | ||
154 | } | 154 | } |
155 | 155 | ||
156 | vm.rightLayoutHeight = function() { | 156 | vm.rightLayoutHeight = function() { |
157 | - if (vm.isEditingWidget && vm.editingLayoutCtx.id === 'right') { | 157 | + if (!vm.isEditingWidget || vm.editingLayoutCtx.id === 'right') { |
158 | return '100%'; | 158 | return '100%'; |
159 | } else { | 159 | } else { |
160 | - return 'auto'; | 160 | + return '0px'; |
161 | } | 161 | } |
162 | } | 162 | } |
163 | 163 | ||
@@ -369,7 +369,7 @@ export default function DashboardController(types, dashboardUtils, widgetService | @@ -369,7 +369,7 @@ export default function DashboardController(types, dashboardUtils, widgetService | ||
369 | } | 369 | } |
370 | } | 370 | } |
371 | 371 | ||
372 | - function openDashboardState(state) { | 372 | + function openDashboardState(state, openRightLayout) { |
373 | var layoutsData = dashboardUtils.getStateLayoutsData(vm.dashboard, state); | 373 | var layoutsData = dashboardUtils.getStateLayoutsData(vm.dashboard, state); |
374 | if (layoutsData) { | 374 | if (layoutsData) { |
375 | vm.dashboardCtx.state = state; | 375 | vm.dashboardCtx.state = state; |
@@ -387,7 +387,7 @@ export default function DashboardController(types, dashboardUtils, widgetService | @@ -387,7 +387,7 @@ export default function DashboardController(types, dashboardUtils, widgetService | ||
387 | layoutVisibilityChanged = !vm.isMobile; | 387 | layoutVisibilityChanged = !vm.isMobile; |
388 | } | 388 | } |
389 | } | 389 | } |
390 | - vm.isRightLayoutOpened = false; | 390 | + vm.isRightLayoutOpened = openRightLayout ? true : false; |
391 | updateLayouts(layoutVisibilityChanged); | 391 | updateLayouts(layoutVisibilityChanged); |
392 | } | 392 | } |
393 | 393 |
@@ -26,12 +26,13 @@ export default function DefaultStateController($scope, $location, $state, $state | @@ -26,12 +26,13 @@ export default function DefaultStateController($scope, $location, $state, $state | ||
26 | vm.navigatePrevState = navigatePrevState; | 26 | vm.navigatePrevState = navigatePrevState; |
27 | vm.getStateId = getStateId; | 27 | vm.getStateId = getStateId; |
28 | vm.getStateParams = getStateParams; | 28 | vm.getStateParams = getStateParams; |
29 | + vm.getStateParamsByStateId = getStateParamsByStateId; | ||
29 | 30 | ||
30 | vm.getStateName = getStateName; | 31 | vm.getStateName = getStateName; |
31 | 32 | ||
32 | vm.displayStateSelection = displayStateSelection; | 33 | vm.displayStateSelection = displayStateSelection; |
33 | 34 | ||
34 | - function openState(id, params) { | 35 | + function openState(id, params, openRightLayout) { |
35 | if (vm.states && vm.states[id]) { | 36 | if (vm.states && vm.states[id]) { |
36 | if (!params) { | 37 | if (!params) { |
37 | params = {}; | 38 | params = {}; |
@@ -42,11 +43,11 @@ export default function DefaultStateController($scope, $location, $state, $state | @@ -42,11 +43,11 @@ export default function DefaultStateController($scope, $location, $state, $state | ||
42 | } | 43 | } |
43 | //append new state | 44 | //append new state |
44 | vm.stateObject[0] = newState; | 45 | vm.stateObject[0] = newState; |
45 | - gotoState(vm.stateObject[0].id, true); | 46 | + gotoState(vm.stateObject[0].id, true, openRightLayout); |
46 | } | 47 | } |
47 | } | 48 | } |
48 | 49 | ||
49 | - function updateState(id, params) { | 50 | + function updateState(id, params, openRightLayout) { |
50 | if (vm.states && vm.states[id]) { | 51 | if (vm.states && vm.states[id]) { |
51 | if (!params) { | 52 | if (!params) { |
52 | params = {}; | 53 | params = {}; |
@@ -57,7 +58,7 @@ export default function DefaultStateController($scope, $location, $state, $state | @@ -57,7 +58,7 @@ export default function DefaultStateController($scope, $location, $state, $state | ||
57 | } | 58 | } |
58 | //replace with new state | 59 | //replace with new state |
59 | vm.stateObject[0] = newState; | 60 | vm.stateObject[0] = newState; |
60 | - gotoState(vm.stateObject[0].id, true); | 61 | + gotoState(vm.stateObject[0].id, true, openRightLayout); |
61 | } | 62 | } |
62 | } | 63 | } |
63 | 64 | ||
@@ -76,6 +77,24 @@ export default function DefaultStateController($scope, $location, $state, $state | @@ -76,6 +77,24 @@ export default function DefaultStateController($scope, $location, $state, $state | ||
76 | return vm.stateObject[vm.stateObject.length-1].params; | 77 | return vm.stateObject[vm.stateObject.length-1].params; |
77 | } | 78 | } |
78 | 79 | ||
80 | + function getStateParamsByStateId(stateId) { | ||
81 | + var stateObj = getStateObjById(stateId); | ||
82 | + if (stateObj) { | ||
83 | + return stateObj.params; | ||
84 | + } else { | ||
85 | + return null; | ||
86 | + } | ||
87 | + } | ||
88 | + | ||
89 | + function getStateObjById(id) { | ||
90 | + for (var i=0; i < vm.stateObject.length; i++) { | ||
91 | + if (vm.stateObject[i].id === id) { | ||
92 | + return vm.stateObject[i]; | ||
93 | + } | ||
94 | + } | ||
95 | + return null; | ||
96 | + } | ||
97 | + | ||
79 | function getStateName(id, state) { | 98 | function getStateName(id, state) { |
80 | var result = ''; | 99 | var result = ''; |
81 | var translationId = types.translate.dashboardStatePrefix + id; | 100 | var translationId = types.translate.dashboardStatePrefix + id; |
@@ -161,9 +180,9 @@ export default function DefaultStateController($scope, $location, $state, $state | @@ -161,9 +180,9 @@ export default function DefaultStateController($scope, $location, $state, $state | ||
161 | }, true); | 180 | }, true); |
162 | } | 181 | } |
163 | 182 | ||
164 | - function gotoState(stateId, update) { | 183 | + function gotoState(stateId, update, openRightLayout) { |
165 | if (vm.dashboardCtrl.dashboardCtx.state != stateId) { | 184 | if (vm.dashboardCtrl.dashboardCtx.state != stateId) { |
166 | - vm.dashboardCtrl.openDashboardState(stateId); | 185 | + vm.dashboardCtrl.openDashboardState(stateId, openRightLayout); |
167 | if (update) { | 186 | if (update) { |
168 | updateLocation(); | 187 | updateLocation(); |
169 | } | 188 | } |
@@ -28,12 +28,13 @@ export default function EntityStateController($scope, $location, $state, $stateP | @@ -28,12 +28,13 @@ export default function EntityStateController($scope, $location, $state, $stateP | ||
28 | vm.navigatePrevState = navigatePrevState; | 28 | vm.navigatePrevState = navigatePrevState; |
29 | vm.getStateId = getStateId; | 29 | vm.getStateId = getStateId; |
30 | vm.getStateParams = getStateParams; | 30 | vm.getStateParams = getStateParams; |
31 | + vm.getStateParamsByStateId = getStateParamsByStateId; | ||
31 | 32 | ||
32 | vm.getStateName = getStateName; | 33 | vm.getStateName = getStateName; |
33 | 34 | ||
34 | vm.selectedStateIndex = -1; | 35 | vm.selectedStateIndex = -1; |
35 | 36 | ||
36 | - function openState(id, params) { | 37 | + function openState(id, params, openRightLayout) { |
37 | if (vm.states && vm.states[id]) { | 38 | if (vm.states && vm.states[id]) { |
38 | resolveEntity(params).then( | 39 | resolveEntity(params).then( |
39 | function success(entityName) { | 40 | function success(entityName) { |
@@ -45,13 +46,13 @@ export default function EntityStateController($scope, $location, $state, $stateP | @@ -45,13 +46,13 @@ export default function EntityStateController($scope, $location, $state, $stateP | ||
45 | //append new state | 46 | //append new state |
46 | vm.stateObject.push(newState); | 47 | vm.stateObject.push(newState); |
47 | vm.selectedStateIndex = vm.stateObject.length-1; | 48 | vm.selectedStateIndex = vm.stateObject.length-1; |
48 | - gotoState(vm.stateObject[vm.stateObject.length-1].id, true); | 49 | + gotoState(vm.stateObject[vm.stateObject.length-1].id, true, openRightLayout); |
49 | } | 50 | } |
50 | ); | 51 | ); |
51 | } | 52 | } |
52 | } | 53 | } |
53 | 54 | ||
54 | - function updateState(id, params) { | 55 | + function updateState(id, params, openRightLayout) { |
55 | if (vm.states && vm.states[id]) { | 56 | if (vm.states && vm.states[id]) { |
56 | resolveEntity(params).then( | 57 | resolveEntity(params).then( |
57 | function success(entityName) { | 58 | function success(entityName) { |
@@ -62,7 +63,7 @@ export default function EntityStateController($scope, $location, $state, $stateP | @@ -62,7 +63,7 @@ export default function EntityStateController($scope, $location, $state, $stateP | ||
62 | } | 63 | } |
63 | //replace with new state | 64 | //replace with new state |
64 | vm.stateObject[vm.stateObject.length - 1] = newState; | 65 | vm.stateObject[vm.stateObject.length - 1] = newState; |
65 | - gotoState(vm.stateObject[vm.stateObject.length - 1].id, true); | 66 | + gotoState(vm.stateObject[vm.stateObject.length - 1].id, true, openRightLayout); |
66 | } | 67 | } |
67 | ); | 68 | ); |
68 | } | 69 | } |
@@ -84,6 +85,24 @@ export default function EntityStateController($scope, $location, $state, $stateP | @@ -84,6 +85,24 @@ export default function EntityStateController($scope, $location, $state, $stateP | ||
84 | return vm.stateObject[vm.stateObject.length-1].params; | 85 | return vm.stateObject[vm.stateObject.length-1].params; |
85 | } | 86 | } |
86 | 87 | ||
88 | + function getStateParamsByStateId(stateId) { | ||
89 | + var stateObj = getStateObjById(stateId); | ||
90 | + if (stateObj) { | ||
91 | + return stateObj.params; | ||
92 | + } else { | ||
93 | + return null; | ||
94 | + } | ||
95 | + } | ||
96 | + | ||
97 | + function getStateObjById(id) { | ||
98 | + for (var i=0; i < vm.stateObject.length; i++) { | ||
99 | + if (vm.stateObject[i].id === id) { | ||
100 | + return vm.stateObject[i]; | ||
101 | + } | ||
102 | + } | ||
103 | + return null; | ||
104 | + } | ||
105 | + | ||
87 | function getStateName(index) { | 106 | function getStateName(index) { |
88 | var result = ''; | 107 | var result = ''; |
89 | if (vm.stateObject[index]) { | 108 | if (vm.stateObject[index]) { |
@@ -223,9 +242,9 @@ export default function EntityStateController($scope, $location, $state, $stateP | @@ -223,9 +242,9 @@ export default function EntityStateController($scope, $location, $state, $stateP | ||
223 | }); | 242 | }); |
224 | } | 243 | } |
225 | 244 | ||
226 | - function gotoState(stateId, update) { | 245 | + function gotoState(stateId, update, openRightLayout) { |
227 | if (vm.dashboardCtrl.dashboardCtx.state != stateId) { | 246 | if (vm.dashboardCtrl.dashboardCtx.state != stateId) { |
228 | - vm.dashboardCtrl.openDashboardState(stateId); | 247 | + vm.dashboardCtrl.openDashboardState(stateId, openRightLayout); |
229 | if (update) { | 248 | if (update) { |
230 | updateLocation(); | 249 | updateLocation(); |
231 | } | 250 | } |
@@ -29,15 +29,15 @@ export default function StatesComponent($compile, $templateCache, $controller, s | @@ -29,15 +29,15 @@ export default function StatesComponent($compile, $templateCache, $controller, s | ||
29 | 29 | ||
30 | var stateController = scope.dashboardCtrl.dashboardCtx.stateController; | 30 | var stateController = scope.dashboardCtrl.dashboardCtx.stateController; |
31 | 31 | ||
32 | - stateController.openState = function(id, params) { | 32 | + stateController.openState = function(id, params, openRightLayout) { |
33 | if (scope.statesController) { | 33 | if (scope.statesController) { |
34 | - scope.statesController.openState(id, params); | 34 | + scope.statesController.openState(id, params, openRightLayout); |
35 | } | 35 | } |
36 | } | 36 | } |
37 | 37 | ||
38 | - stateController.updateState = function(id, params) { | 38 | + stateController.updateState = function(id, params, openRightLayout) { |
39 | if (scope.statesController) { | 39 | if (scope.statesController) { |
40 | - scope.statesController.updateState(id, params); | 40 | + scope.statesController.updateState(id, params, openRightLayout); |
41 | } | 41 | } |
42 | } | 42 | } |
43 | 43 | ||
@@ -62,6 +62,14 @@ export default function StatesComponent($compile, $templateCache, $controller, s | @@ -62,6 +62,14 @@ export default function StatesComponent($compile, $templateCache, $controller, s | ||
62 | return {}; | 62 | return {}; |
63 | } | 63 | } |
64 | } | 64 | } |
65 | + | ||
66 | + stateController.getStateParamsByStateId = function(id) { | ||
67 | + if (scope.statesController) { | ||
68 | + return scope.statesController.getStateParamsByStateId(id); | ||
69 | + } else { | ||
70 | + return null; | ||
71 | + } | ||
72 | + } | ||
65 | } | 73 | } |
66 | 74 | ||
67 | scope.$on('$destroy', function callOnDestroyHook() { | 75 | scope.$on('$destroy', function callOnDestroyHook() { |