Skip to content

Commit 6ffd032

Browse files
committed
♻️ isolating TMetadata retrieval logic for ServiceConfigurations in its own class
Signed-off-by: dseurotech <[email protected]>
1 parent 7ece681 commit 6ffd032

File tree

19 files changed

+127
-59
lines changed

19 files changed

+127
-59
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2016, 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.commons.configuration;
14+
15+
import java.net.URL;
16+
import java.nio.charset.StandardCharsets;
17+
import java.util.Optional;
18+
19+
import org.eclipse.kapua.commons.util.ResourceUtils;
20+
import org.eclipse.kapua.commons.util.xml.XmlUtil;
21+
import org.eclipse.kapua.model.config.metatype.KapuaTmetadata;
22+
import org.eclipse.kapua.storage.TxContext;
23+
24+
public class ResourceBasedServiceConfigurationMetadataProvider implements ServiceConfigurationMetadataProvider {
25+
26+
private final XmlUtil xmlUtil;
27+
28+
public ResourceBasedServiceConfigurationMetadataProvider(XmlUtil xmlUtil) {
29+
this.xmlUtil = xmlUtil;
30+
}
31+
32+
@Override
33+
public Optional<KapuaTmetadata> fetchMetadata(TxContext txContext, String pid) {
34+
URL url = ResourceUtils.getResource(String.format("META-INF/metatypes/%s.xml", pid));
35+
36+
if (url == null) {
37+
return Optional.empty();
38+
}
39+
40+
try {
41+
return Optional.ofNullable(xmlUtil.unmarshal(ResourceUtils.openAsReader(url, StandardCharsets.UTF_8), KapuaTmetadata.class))
42+
.filter(v -> v.getOCD() != null && !v.getOCD().isEmpty());
43+
} catch (Exception e) {
44+
throw new RuntimeException(e);
45+
}
46+
}
47+
}

commons/src/main/java/org/eclipse/kapua/commons/configuration/ResourceLimitedServiceConfigurationManagerImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.eclipse.kapua.commons.configuration.exception.ServiceConfigurationLimitExceededException;
2222
import org.eclipse.kapua.commons.configuration.exception.ServiceConfigurationParentLimitExceededException;
2323
import org.eclipse.kapua.commons.security.KapuaSecurityUtils;
24-
import org.eclipse.kapua.commons.util.xml.XmlUtil;
2524
import org.eclipse.kapua.model.config.metatype.KapuaTocd;
2625
import org.eclipse.kapua.model.id.KapuaId;
2726
import org.eclipse.kapua.service.account.Account;
@@ -45,8 +44,8 @@ public ResourceLimitedServiceConfigurationManagerImpl(
4544
RootUserTester rootUserTester,
4645
AccountRelativeFinder accountRelativeFinder,
4746
UsedEntitiesCounter usedEntitiesCounter,
48-
XmlUtil xmlUtil) {
49-
super(pid, domain, txManager, serviceConfigRepository, rootUserTester, xmlUtil);
47+
ServiceConfigurationMetadataProvider serviceConfigurationMetadataProvider) {
48+
super(pid, domain, txManager, serviceConfigRepository, rootUserTester, serviceConfigurationMetadataProvider);
5049
this.accountRelativeFinder = accountRelativeFinder;
5150
this.usedEntitiesCounter = usedEntitiesCounter;
5251
}

commons/src/main/java/org/eclipse/kapua/commons/configuration/ServiceConfigurationManagerImpl.java

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
*******************************************************************************/
1313
package org.eclipse.kapua.commons.configuration;
1414

15-
import java.io.IOException;
16-
import java.net.URL;
17-
import java.nio.charset.StandardCharsets;
1815
import java.util.Collections;
1916
import java.util.HashMap;
2017
import java.util.List;
@@ -25,7 +22,6 @@
2522
import java.util.stream.Collectors;
2623

2724
import javax.validation.constraints.NotNull;
28-
import javax.xml.bind.JAXBException;
2925
import javax.xml.namespace.QName;
3026

3127
import org.eclipse.kapua.KapuaEntityNotFoundException;
@@ -34,9 +30,7 @@
3430
import org.eclipse.kapua.KapuaIllegalNullArgumentException;
3531
import org.eclipse.kapua.commons.security.KapuaSecurityUtils;
3632
import org.eclipse.kapua.commons.util.ArgumentValidator;
37-
import org.eclipse.kapua.commons.util.ResourceUtils;
3833
import org.eclipse.kapua.commons.util.StringUtil;
39-
import org.eclipse.kapua.commons.util.xml.XmlUtil;
4034
import org.eclipse.kapua.model.KapuaEntityAttributes;
4135
import org.eclipse.kapua.model.config.metatype.KapuaTad;
4236
import org.eclipse.kapua.model.config.metatype.KapuaTmetadata;
@@ -46,7 +40,6 @@
4640
import org.eclipse.kapua.service.config.ServiceComponentConfiguration;
4741
import org.eclipse.kapua.storage.TxContext;
4842
import org.eclipse.kapua.storage.TxManager;
49-
import org.xml.sax.SAXException;
5043

5144
public class ServiceConfigurationManagerImpl implements ServiceConfigurationManager {
5245

@@ -55,20 +48,20 @@ public class ServiceConfigurationManagerImpl implements ServiceConfigurationMana
5548
private final String domain;
5649
private final ServiceConfigRepository serviceConfigRepository;
5750
private final RootUserTester rootUserTester;
58-
private final XmlUtil xmlUtil;
51+
private final ServiceConfigurationMetadataProvider serviceConfigurationMetadataProvider;
5952

6053
public ServiceConfigurationManagerImpl(
6154
String pid,
6255
String domain, TxManager txManager,
6356
ServiceConfigRepository serviceConfigRepository,
6457
RootUserTester rootUserTester,
65-
XmlUtil xmlUtil) {
58+
ServiceConfigurationMetadataProvider serviceConfigurationMetadataProvider) {
6659
this.pid = pid;
6760
this.txManager = txManager;
6861
this.domain = domain;
6962
this.serviceConfigRepository = serviceConfigRepository;
7063
this.rootUserTester = rootUserTester;
71-
this.xmlUtil = xmlUtil;
64+
this.serviceConfigurationMetadataProvider = serviceConfigurationMetadataProvider;
7265
}
7366

7467
/**
@@ -443,7 +436,7 @@ protected Optional<KapuaTocd> doGetConfigMetadata(TxContext txContext, KapuaId s
443436
}
444437
// Get the Tocd
445438
try {
446-
return processMetadata(txContext, readMetadata(pid), scopeId, excludeDisabled);
439+
return processMetadata(txContext, serviceConfigurationMetadataProvider.fetchMetadata(txContext, pid), scopeId, excludeDisabled);
447440
} catch (Exception e) {
448441
throw KapuaException.internalError(e);
449442
}
@@ -476,36 +469,15 @@ public Optional<ServiceComponentConfiguration> extractServiceComponentConfigurat
476469
* @return The processed {@link KapuaTocd}.
477470
* @since 1.3.0
478471
*/
479-
private Optional<KapuaTocd> processMetadata(TxContext txContext, KapuaTmetadata metadata, KapuaId scopeId, boolean excludeDisabled) {
480-
if (metadata != null && metadata.getOCD() != null && !metadata.getOCD().isEmpty()) {
481-
for (KapuaTocd ocd : metadata.getOCD()) {
472+
private Optional<KapuaTocd> processMetadata(TxContext txContext, Optional<KapuaTmetadata> metadata, KapuaId scopeId, boolean excludeDisabled) {
473+
return metadata.flatMap(meta -> {
474+
for (KapuaTocd ocd : meta.getOCD()) {
482475
if (ocd.getId() != null && ocd.getId().equals(pid) && isServiceEnabled(txContext, scopeId)) {
483476
ocd.getAD().removeIf(ad -> excludeDisabled && !isPropertyEnabled(ad, scopeId));
484477
return Optional.of(ocd);
485478
}
486479
}
487-
}
488-
return Optional.empty();
489-
}
490-
491-
/**
492-
* Reads the {@link KapuaTmetadata} for the given {@link KapuaConfigurableService} pid.
493-
*
494-
* @param pid
495-
* The {@link KapuaConfigurableService} pid
496-
* @return The {@link KapuaTmetadata} for the given {@link KapuaConfigurableService} pid.
497-
* @throws Exception
498-
* @since 1.0.0
499-
*/
500-
//TODO: this must be moved in its own provider, as the logic of "where the metadata comes from" does not belong here
501-
private KapuaTmetadata readMetadata(String pid) throws JAXBException, SAXException, IOException {
502-
URL url = ResourceUtils.getResource(String.format("META-INF/metatypes/%s.xml", pid));
503-
504-
if (url == null) {
505-
return null;
506-
}
507-
508-
return xmlUtil.unmarshal(ResourceUtils.openAsReader(url, StandardCharsets.UTF_8), KapuaTmetadata.class);
480+
return Optional.empty();
481+
});
509482
}
510-
511483
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2016, 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.commons.configuration;
14+
15+
import java.util.Optional;
16+
17+
import org.eclipse.kapua.model.config.metatype.KapuaTmetadata;
18+
import org.eclipse.kapua.model.config.metatype.KapuaTocd;
19+
import org.eclipse.kapua.service.config.KapuaConfigurableService;
20+
import org.eclipse.kapua.storage.TxContext;
21+
22+
public interface ServiceConfigurationMetadataProvider {
23+
24+
/**
25+
* Reads the {@link KapuaTmetadata} for the given {@link KapuaConfigurableService} pid. If no metadata can be found, just return Optional.empty() Same if the metadata is empty (containing no
26+
* {@link KapuaTocd}s)
27+
*
28+
* @param txContext
29+
* the transaction context (can be ignored if the data source is not transactional)
30+
* @param pid
31+
* The {@link KapuaConfigurableService} pid
32+
* @return The {@link KapuaTmetadata} for the given {@link KapuaConfigurableService} pid.
33+
* @throws Exception
34+
* @since 1.0.0
35+
*/
36+
Optional<KapuaTmetadata> fetchMetadata(TxContext txContext, String pid);
37+
}

service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountServiceConfigurationManagerModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
1818
import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
19+
import org.eclipse.kapua.commons.configuration.ResourceBasedServiceConfigurationMetadataProvider;
1920
import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
2021
import org.eclipse.kapua.commons.configuration.RootUserTester;
2122
import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
@@ -75,7 +76,7 @@ ServiceConfigurationManager accountServiceConfigurationManager(
7576
new UsedEntitiesCounterImpl(
7677
factory,
7778
accountRepository),
78-
xmlUtil
79+
new ResourceBasedServiceConfigurationMetadataProvider(xmlUtil)
7980
));
8081
}
8182
}

service/account/test/src/test/java/org/eclipse/kapua/service/account/test/AccountLocatorConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import org.eclipse.kapua.KapuaException;
1616
import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
17+
import org.eclipse.kapua.commons.configuration.ResourceBasedServiceConfigurationMetadataProvider;
1718
import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
1819
import org.eclipse.kapua.commons.configuration.RootUserTester;
1920
import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
@@ -136,7 +137,7 @@ protected void configure() {
136137
new UsedEntitiesCounterImpl(
137138
accountFactory,
138139
accountRepository),
139-
new XmlUtil(new TestJAXBContextProvider())
140+
new ResourceBasedServiceConfigurationMetadataProvider(new XmlUtil(new TestJAXBContextProvider()))
140141
),
141142
new EventStorerImpl(new EventStoreRecordImplJpaRepository(jpaRepoConfig)),
142143
accountMapper));

service/datastore/internal/src/main/java/org/eclipse/kapua/service/datastore/internal/MessageStoreServiceConfigurationManagerModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import javax.inject.Singleton;
1616

1717
import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
18+
import org.eclipse.kapua.commons.configuration.ResourceBasedServiceConfigurationMetadataProvider;
1819
import org.eclipse.kapua.commons.configuration.RootUserTester;
1920
import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
2021
import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
@@ -68,7 +69,7 @@ ServiceConfigurationManager messageStoreServiceConfigurationManager(
6869
entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
6970
),
7071
rootUserTester,
71-
xmlUtil
72+
new ResourceBasedServiceConfigurationMetadataProvider(xmlUtil)
7273
) {
7374

7475
@Override

service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/DeviceConnectionServiceConfigurationManagerModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import javax.inject.Singleton;
1919

2020
import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
21+
import org.eclipse.kapua.commons.configuration.ResourceBasedServiceConfigurationMetadataProvider;
2122
import org.eclipse.kapua.commons.configuration.RootUserTester;
2223
import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
2324
import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
@@ -68,7 +69,7 @@ ServiceConfigurationManager deviceConnectionServiceConfigurationManager(
6869
rootUserTester,
6970
availableDeviceConnectionAdapters,
7071
kapuaDeviceRegistrySettings,
71-
xmlUtil)
72+
new ResourceBasedServiceConfigurationMetadataProvider(xmlUtil))
7273
);
7374
}
7475
}

service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/DeviceRegistryServiceConfigurationManagerModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
1919
import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
20+
import org.eclipse.kapua.commons.configuration.ResourceBasedServiceConfigurationMetadataProvider;
2021
import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
2122
import org.eclipse.kapua.commons.configuration.RootUserTester;
2223
import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
@@ -73,7 +74,7 @@ protected ServiceConfigurationManager deviceRegistryServiceConfigurationManager(
7374
new UsedEntitiesCounterImpl(
7475
factory,
7576
deviceRepository),
76-
xmlUtil
77+
new ResourceBasedServiceConfigurationMetadataProvider(xmlUtil)
7778
));
7879
}
7980
}

service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/connection/internal/DeviceConnectionServiceConfigurationManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import org.eclipse.kapua.commons.configuration.ServiceConfigRepository;
2323
import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
2424
import org.eclipse.kapua.commons.configuration.ServiceConfigurationManagerImpl;
25+
import org.eclipse.kapua.commons.configuration.ServiceConfigurationMetadataProvider;
2526
import org.eclipse.kapua.commons.model.domains.Domains;
26-
import org.eclipse.kapua.commons.util.xml.XmlUtil;
2727
import org.eclipse.kapua.model.config.metatype.KapuaTad;
2828
import org.eclipse.kapua.model.config.metatype.KapuaTocd;
2929
import org.eclipse.kapua.model.config.metatype.KapuaToption;
@@ -64,8 +64,8 @@ public DeviceConnectionServiceConfigurationManager(
6464
RootUserTester rootUserTester,
6565
Map<String, DeviceConnectionCredentialAdapter> availableDeviceConnectionAdapters,
6666
KapuaDeviceRegistrySettings kapuaDeviceRegistrySettings,
67-
XmlUtil xmlUtil) {
68-
super(DeviceConnectionService.class.getName(), Domains.DEVICE_CONNECTION, txManager, serviceConfigRepository, rootUserTester, xmlUtil);
67+
ServiceConfigurationMetadataProvider serviceConfigurationMetadataProvider) {
68+
super(DeviceConnectionService.class.getName(), Domains.DEVICE_CONNECTION, txManager, serviceConfigRepository, rootUserTester, serviceConfigurationMetadataProvider);
6969

7070
this.availableDeviceConnectionAdapters = availableDeviceConnectionAdapters;
7171
this.deviceRegistrySettings = kapuaDeviceRegistrySettings;

0 commit comments

Comments
 (0)