Skip to content

Package: DeviceRequestManagementServiceImpl

DeviceRequestManagementServiceImpl

nameinstructionbranchcomplexitylinemethod
DeviceRequestManagementServiceImpl()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
exec(GenericRequestMessage, Long)
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
exec(KapuaId, KapuaId, GenericRequestMessage, Long)
M: 151 C: 0
0%
M: 5 C: 0
0%
M: 5 C: 0
0%
M: 37 C: 0
0%
M: 1 C: 0
0%
static {...}
M: 11 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2017, 2022 Eurotech and/or its affiliates and others
3: *
4: * This program and the accompanying materials are made
5: * available under the terms of the Eclipse Public License 2.0
6: * which is available at https://www.eclipse.org/legal/epl-2.0/
7: *
8: * SPDX-License-Identifier: EPL-2.0
9: *
10: * Contributors:
11: * Eurotech - initial API and implementation
12: * Red Hat Inc
13: *******************************************************************************/
14: package org.eclipse.kapua.service.device.management.request.internal;
15:
16: import org.eclipse.kapua.KapuaException;
17: import org.eclipse.kapua.commons.util.ArgumentValidator;
18: import org.eclipse.kapua.locator.KapuaLocator;
19: import org.eclipse.kapua.locator.KapuaProvider;
20: import org.eclipse.kapua.model.domain.Actions;
21: import org.eclipse.kapua.model.id.KapuaId;
22: import org.eclipse.kapua.service.device.management.DeviceManagementDomains;
23: import org.eclipse.kapua.service.device.management.commons.AbstractDeviceManagementServiceImpl;
24: import org.eclipse.kapua.service.device.management.commons.call.DeviceCallBuilder;
25: import org.eclipse.kapua.service.device.management.exception.DeviceManagementRequestBadMethodException;
26: import org.eclipse.kapua.service.device.management.request.DeviceRequestManagementService;
27: import org.eclipse.kapua.service.device.management.request.GenericRequestFactory;
28: import org.eclipse.kapua.service.device.management.request.message.request.GenericRequestChannel;
29: import org.eclipse.kapua.service.device.management.request.message.request.GenericRequestMessage;
30: import org.eclipse.kapua.service.device.management.request.message.request.GenericRequestPayload;
31: import org.eclipse.kapua.service.device.management.request.message.response.GenericResponseMessage;
32: import org.slf4j.Logger;
33: import org.slf4j.LoggerFactory;
34:
35: import java.util.Date;
36:
37: /**
38: * {@link DeviceRequestManagementService} implementation.
39: *
40: * @since 1.0.0
41: */
42: @KapuaProvider
43: public class DeviceRequestManagementServiceImpl extends AbstractDeviceManagementServiceImpl implements DeviceRequestManagementService {
44:
45: private static final Logger LOG = LoggerFactory.getLogger(DeviceRequestManagementServiceImpl.class);
46:
47: private static final KapuaLocator LOCATOR = KapuaLocator.getInstance();
48: private static final GenericRequestFactory FACTORY = LOCATOR.getFactory(GenericRequestFactory.class);
49:
50: @Override
51: public GenericResponseMessage exec(GenericRequestMessage requestInput, Long timeout) throws KapuaException {
52: return exec(requestInput.getScopeId(), requestInput.getDeviceId(), requestInput, timeout);
53: }
54:
55: @Override
56: public GenericResponseMessage exec(KapuaId scopeId, KapuaId deviceId, GenericRequestMessage requestInput, Long timeout) throws KapuaException {
57: //
58: // Argument Validation
59: ArgumentValidator.notNull(requestInput, "requestInput");
60:
61: //
62: // Check Access
63: Actions action;
64:• switch (requestInput.getChannel().getMethod()) {
65: case EXECUTE:
66: action = Actions.execute;
67: break;
68: case READ:
69: case OPTIONS:
70: action = Actions.read;
71: break;
72: case CREATE:
73: case WRITE:
74: action = Actions.write;
75: break;
76: case DELETE:
77: action = Actions.delete;
78: break;
79: default:
80: throw new DeviceManagementRequestBadMethodException(requestInput.getChannel().getMethod());
81: }
82: AUTHORIZATION_SERVICE.checkPermission(PERMISSION_FACTORY.newPermission(DeviceManagementDomains.DEVICE_MANAGEMENT_DOMAIN, action, requestInput.getScopeId()));
83:
84: //
85: // Prepare the request
86: GenericRequestChannel genericRequestChannel = FACTORY.newRequestChannel();
87: genericRequestChannel.setAppName(requestInput.getChannel().getAppName());
88: genericRequestChannel.setVersion(requestInput.getChannel().getVersion());
89: genericRequestChannel.setMethod(requestInput.getChannel().getMethod());
90: genericRequestChannel.setResources(requestInput.getChannel().getResources());
91:
92: GenericRequestPayload genericRequestPayload = FACTORY.newRequestPayload();
93: genericRequestPayload.setMetrics(requestInput.getPayload().getMetrics());
94: genericRequestPayload.setBody(requestInput.getPayload().getBody());
95:
96: GenericRequestMessage genericRequestMessage = FACTORY.newRequestMessage();
97: genericRequestMessage.setScopeId(requestInput.getScopeId());
98: genericRequestMessage.setDeviceId(requestInput.getDeviceId());
99: genericRequestMessage.setCapturedOn(new Date());
100: genericRequestMessage.setChannel(genericRequestChannel);
101: genericRequestMessage.setPayload(genericRequestPayload);
102: genericRequestMessage.setPosition(requestInput.getPosition());
103:
104: //
105: // Build request
106: DeviceCallBuilder<GenericRequestChannel, GenericRequestPayload, GenericRequestMessage, GenericResponseMessage> genericDeviceCallBuilder =
107: DeviceCallBuilder
108: .newBuilder()
109: .withRequestMessage(genericRequestMessage)
110: .withTimeoutOrDefault(timeout);
111:
112: //
113: // Do it
114: GenericResponseMessage responseMessage;
115: try {
116: responseMessage = genericDeviceCallBuilder.send();
117: } catch (Exception e) {
118: LOG.error("Error while sending GenericRequestMessage {} for Device {}. Error: {}", genericRequestMessage, deviceId, e.getMessage(), e);
119: throw e;
120: }
121:
122: //
123: // Create event
124: createDeviceEvent(scopeId, deviceId, genericRequestMessage, responseMessage);
125:
126: return responseMessage;
127: }
128: }