Skip to content

Package: ServiceConfigurations

ServiceConfigurations

nameinstructionbranchcomplexitylinemethod
ServiceConfigurations()
M: 20 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
get(ScopeId)
M: 68 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 14 C: 0
0%
M: 1 C: 0
0%
getComponent(ScopeId, String)
M: 48 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 12 C: 0
0%
M: 1 C: 0
0%
lambda$get$0(KapuaService)
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%
lambda$get$1(KapuaService)
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%
update(ScopeId, ServiceConfiguration)
M: 43 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 8 C: 0
0%
M: 1 C: 0
0%
updateComponent(ScopeId, String, ServiceComponentConfiguration)
M: 30 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 6 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2019, 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: *******************************************************************************/
13: package org.eclipse.kapua.app.api.resources.v1.resources;
14:
15: import javax.ws.rs.Consumes;
16: import javax.ws.rs.GET;
17: import javax.ws.rs.PUT;
18: import javax.ws.rs.Path;
19: import javax.ws.rs.PathParam;
20: import javax.ws.rs.Produces;
21: import javax.ws.rs.core.MediaType;
22: import javax.ws.rs.core.Response;
23: import java.util.Collections;
24: import java.util.Comparator;
25: import java.util.List;
26: import java.util.Map;
27: import java.util.stream.Collectors;
28:
29: import org.eclipse.kapua.KapuaException;
30: import org.eclipse.kapua.app.api.core.resources.AbstractKapuaResource;
31: import org.eclipse.kapua.app.api.core.model.ScopeId;
32: import org.eclipse.kapua.commons.configuration.metatype.EmptyTocd;
33: import org.eclipse.kapua.locator.KapuaLocator;
34: import org.eclipse.kapua.model.config.metatype.KapuaTocd;
35: import org.eclipse.kapua.service.KapuaService;
36: import org.eclipse.kapua.service.account.Account;
37: import org.eclipse.kapua.service.account.AccountService;
38: import org.eclipse.kapua.service.config.KapuaConfigurableService;
39: import org.eclipse.kapua.service.config.ServiceComponentConfiguration;
40: import org.eclipse.kapua.service.config.ServiceConfiguration;
41: import org.eclipse.kapua.service.config.ServiceConfigurationFactory;
42:
43: @Path("{scopeId}/serviceConfigurations")
44: public class ServiceConfigurations extends AbstractKapuaResource {
45:
46: private final KapuaLocator locator = KapuaLocator.getInstance();
47: private final AccountService accountService = locator.getService(AccountService.class);
48: private final ServiceConfigurationFactory serviceConfigurationFactory = locator.getFactory(ServiceConfigurationFactory.class);
49:
50: @GET
51: @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
52: public ServiceConfiguration get(@PathParam("scopeId") ScopeId scopeId) throws KapuaException {
53: List<KapuaConfigurableService> configurableServices = locator.getServices().stream().filter(service -> service instanceof KapuaConfigurableService).map(kapuaService -> (KapuaConfigurableService)kapuaService).collect(Collectors.toList());
54: ServiceConfiguration serviceConfiguration = serviceConfigurationFactory.newConfigurationInstance();
55:• for (KapuaConfigurableService configurableService : configurableServices) {
56: KapuaTocd metadata = configurableService.getConfigMetadata(scopeId);
57: Map<String, Object> values = configurableService.getConfigValues(scopeId);
58:• if (metadata != null && !(metadata instanceof EmptyTocd)) {
59: ServiceComponentConfiguration serviceComponentConfiguration = serviceConfigurationFactory.newComponentConfigurationInstance(metadata.getId());
60: serviceComponentConfiguration.setDefinition(metadata);
61: serviceComponentConfiguration.setName(metadata.getName());
62: serviceComponentConfiguration.setProperties(values);
63: serviceConfiguration.getComponentConfigurations().add(serviceComponentConfiguration);
64: }
65: }
66: Collections.sort(serviceConfiguration.getComponentConfigurations(), Comparator.comparing(ServiceComponentConfiguration::getName));
67:
68: return serviceConfiguration;
69: }
70:
71: @PUT
72: @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
73: @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
74: public Response update(
75: @PathParam("scopeId") ScopeId scopeId,
76: ServiceConfiguration serviceConfiguration
77: ) throws KapuaException, ClassNotFoundException {
78:• for (ServiceComponentConfiguration serviceComponentConfiguration : serviceConfiguration.getComponentConfigurations()) {
79: Class<KapuaService> configurableServiceClass = (Class<KapuaService>) Class.forName(serviceComponentConfiguration.getId()).asSubclass(KapuaService.class);
80:• if (KapuaConfigurableService.class.isAssignableFrom(configurableServiceClass)) {
81: KapuaConfigurableService configurableService = (KapuaConfigurableService) locator.getService(configurableServiceClass);
82: Account account = accountService.find(scopeId);
83: configurableService.setConfigValues(scopeId, account.getScopeId(), serviceComponentConfiguration.getProperties());
84: }
85: }
86: return Response.noContent().build();
87: }
88:
89: @GET
90: @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
91: @Path("{serviceId}")
92: public ServiceComponentConfiguration getComponent(
93: @PathParam("scopeId") ScopeId scopeId,
94: @PathParam("serviceId") String serviceId
95: ) throws KapuaException, ClassNotFoundException {
96: Class<KapuaService> configurableServiceClass = (Class<KapuaService>) Class.forName(serviceId).asSubclass(KapuaService.class);
97:• if (KapuaConfigurableService.class.isAssignableFrom(configurableServiceClass)) {
98: KapuaConfigurableService configurableService = (KapuaConfigurableService)locator.getService(configurableServiceClass);
99: KapuaTocd metadata = configurableService.getConfigMetadata(scopeId);
100: Map<String, Object> values = configurableService.getConfigValues(scopeId);
101:• if (metadata != null && !(metadata instanceof EmptyTocd)) {
102: ServiceComponentConfiguration serviceComponentConfiguration = serviceConfigurationFactory.newComponentConfigurationInstance(metadata.getId());
103: serviceComponentConfiguration.setDefinition(metadata);
104: serviceComponentConfiguration.setName(metadata.getName());
105: serviceComponentConfiguration.setProperties(values);
106: return serviceComponentConfiguration;
107: }
108: }
109: return null;
110: }
111:
112: @PUT
113: @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
114: @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
115: @Path("{serviceId}")
116: public Response updateComponent(
117: @PathParam("scopeId") ScopeId scopeId,
118: @PathParam("serviceId") String serviceId,
119: ServiceComponentConfiguration serviceComponentConfiguration
120: ) throws KapuaException, ClassNotFoundException {
121: Class<KapuaService> configurableServiceClass = (Class<KapuaService>) Class.forName(serviceId).asSubclass(KapuaService.class);
122:• if (KapuaConfigurableService.class.isAssignableFrom(configurableServiceClass)) {
123: KapuaConfigurableService configurableService = (KapuaConfigurableService) locator.getService(configurableServiceClass);
124: Account account = accountService.find(scopeId);
125: configurableService.setConfigValues(scopeId, account.getScopeId(), serviceComponentConfiguration.getProperties());
126: }
127: return Response.noContent().build();
128: }
129:
130: }