Skip to content

Commit 0f9a105

Browse files
author
Ravi Nadahar
committed
Cleanup
Signed-off-by: Ravi Nadahar <[email protected]>
1 parent b98ad2d commit 0f9a105

File tree

2 files changed

+9
-85
lines changed

2 files changed

+9
-85
lines changed

bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/AddonSuggestionService.java

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,23 @@
1414

1515
import static org.openhab.core.config.discovery.addon.AddonFinderConstants.*;
1616

17-
import java.io.IOException;
1817
import java.util.ArrayList;
1918
import java.util.Collection;
20-
import java.util.Collections;
21-
import java.util.Dictionary;
2219
import java.util.List;
2320
import java.util.Locale;
2421
import java.util.Map;
2522
import java.util.Map.Entry;
2623
import java.util.Set;
2724
import java.util.concurrent.ConcurrentHashMap;
28-
import java.util.concurrent.ScheduledExecutorService;
29-
import java.util.concurrent.ScheduledFuture;
30-
import java.util.concurrent.TimeUnit;
31-
import java.util.function.Function;
3225
import java.util.stream.Collectors;
3326

3427
import org.eclipse.jdt.annotation.NonNullByDefault;
3528
import org.eclipse.jdt.annotation.Nullable;
3629
import org.openhab.core.OpenHAB;
3730
import org.openhab.core.addon.AddonInfo;
3831
import org.openhab.core.addon.AddonInfoProvider;
39-
import org.openhab.core.common.ThreadPoolManager;
4032
import org.openhab.core.config.core.ConfigParser;
4133
import org.openhab.core.i18n.LocaleProvider;
42-
import org.osgi.service.cm.ConfigurationAdmin;
4334
import org.osgi.service.component.annotations.Activate;
4435
import org.osgi.service.component.annotations.Component;
4536
import org.osgi.service.component.annotations.Deactivate;
@@ -66,35 +57,22 @@ public class AddonSuggestionService {
6657
private final Logger logger = LoggerFactory.getLogger(AddonSuggestionService.class);
6758

6859
private final Set<AddonInfoProvider> addonInfoProviders = ConcurrentHashMap.newKeySet();
69-
private final List<AddonFinder> addonFinders = Collections.synchronizedList(new ArrayList<>());
70-
private final ConfigurationAdmin configurationAdmin;
60+
61+
// All access must be guarded by "addonFinders"
62+
private final List<AddonFinder> addonFinders = new ArrayList<>();
7163
private final LocaleProvider localeProvider;
7264
private volatile @Nullable AddonFinderService addonFinderService;
73-
private @Nullable Map<String, Object> config;
74-
private final ScheduledExecutorService scheduler;
7565
private final Map<String, Boolean> baseFinderConfig = new ConcurrentHashMap<>();
76-
private final ScheduledFuture<?> cfgRefreshTask;
7766

7867
@Activate
79-
public AddonSuggestionService(final @Reference ConfigurationAdmin configurationAdmin,
80-
@Reference LocaleProvider localeProvider, Map<String, Object> config) {
81-
this.configurationAdmin = configurationAdmin;
68+
public AddonSuggestionService(@Reference LocaleProvider localeProvider, Map<String, Object> config) {
8269
this.localeProvider = localeProvider;
83-
8470
SUGGESTION_FINDERS.forEach(f -> baseFinderConfig.put(f, false));
85-
86-
// Changes to the configuration are expected to call the {@link modified} method. This works well when running
87-
// in Eclipse. Running in Karaf, the method was not consistently called. Therefore regularly check for changes
88-
// in configuration.
89-
// This pattern and code was re-used from {@link org.openhab.core.karaf.internal.FeatureInstaller}
9071
modified(config);
91-
scheduler = ThreadPoolManager.getScheduledPool(ThreadPoolManager.THREAD_POOL_NAME_COMMON);
92-
cfgRefreshTask = scheduler.scheduleWithFixedDelay(this::syncConfiguration, 1, 1, TimeUnit.MINUTES);
9372
}
9473

9574
@Deactivate
9675
public void deactivate() {
97-
cfgRefreshTask.cancel(true);
9876
synchronized (addonFinders) {
9977
addonFinders.clear();
10078
}
@@ -142,14 +120,6 @@ public void modified(@Nullable final Map<String, Object> config) {
142120
}
143121
}
144122
});
145-
this.config = config;
146-
}
147-
}
148-
149-
private void syncConfiguration() {
150-
final Map<String, Object> cfg = getConfiguration();
151-
if (cfg != null && !cfg.equals(config)) {
152-
modified(cfg);
153123
}
154124
}
155125

@@ -176,20 +146,6 @@ private void initAddonFinderService() {
176146
}
177147
}
178148

179-
private @Nullable Map<String, Object> getConfiguration() {
180-
try {
181-
Dictionary<String, Object> cfg = configurationAdmin.getConfiguration(OpenHAB.ADDONS_SERVICE_PID)
182-
.getProperties();
183-
if (cfg != null) {
184-
List<String> keys = Collections.list(cfg.keys());
185-
return keys.stream().collect(Collectors.toMap(Function.identity(), cfg::get));
186-
}
187-
} catch (IOException | IllegalStateException e) {
188-
logger.debug("Exception occurred while trying to get the configuration: {}", e.getMessage());
189-
}
190-
return null;
191-
}
192-
193149
private boolean isFinderEnabled(AddonFinder finder) {
194150
if (finder instanceof BaseAddonFinder baseFinder) {
195151
return baseFinderConfig.getOrDefault(baseFinder.getServiceName(), true);
@@ -224,7 +180,8 @@ public void removeAddonFinder(AddonFinder addonFinder) {
224180
}
225181

226182
private void changed() {
227-
List<AddonInfo> candidates = addonInfoProviders.stream().map(p -> p.getAddonInfos(localeProvider.getLocale()))
183+
Locale locale = localeProvider.getLocale();
184+
List<AddonInfo> candidates = addonInfoProviders.stream().map(p -> p.getAddonInfos(locale))
228185
.flatMap(Collection::stream).toList();
229186
synchronized (addonFinders) {
230187
addonFinders.stream().filter(this::isFinderEnabled).forEach(f -> f.setAddonCandidates(candidates));

bundles/org.openhab.core.config.discovery.addon/src/test/java/org/openhab/core/config/discovery/addon/tests/AddonSuggestionServiceTests.java

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
import static org.mockito.Mockito.*;
1818
import static org.openhab.core.config.discovery.addon.AddonFinderConstants.*;
1919

20-
import java.io.IOException;
21-
import java.util.Dictionary;
20+
import java.util.HashMap;
2221
import java.util.HashSet;
23-
import java.util.Hashtable;
2422
import java.util.List;
2523
import java.util.Locale;
2624
import java.util.Map;
@@ -33,7 +31,6 @@
3331
import org.junit.jupiter.api.Test;
3432
import org.junit.jupiter.api.TestInstance;
3533
import org.junit.jupiter.api.TestInstance.Lifecycle;
36-
import org.openhab.core.OpenHAB;
3734
import org.openhab.core.addon.AddonDiscoveryMethod;
3835
import org.openhab.core.addon.AddonInfo;
3936
import org.openhab.core.addon.AddonInfoProvider;
@@ -43,8 +40,6 @@
4340
import org.openhab.core.config.discovery.addon.AddonFinderConstants;
4441
import org.openhab.core.config.discovery.addon.AddonSuggestionService;
4542
import org.openhab.core.i18n.LocaleProvider;
46-
import org.osgi.service.cm.Configuration;
47-
import org.osgi.service.cm.ConfigurationAdmin;
4843

4944
/**
5045
* JUnit tests for the {@link AddonSuggestionService}.
@@ -58,14 +53,13 @@ public class AddonSuggestionServiceTests {
5853

5954
public static final String MDNS_SERVICE_TYPE = "mdnsServiceType";
6055

61-
private @NonNullByDefault({}) ConfigurationAdmin configurationAdmin;
6256
private @NonNullByDefault({}) LocaleProvider localeProvider;
6357
private @NonNullByDefault({}) AddonInfoProvider addonInfoProvider;
6458
private @NonNullByDefault({}) AddonFinder mdnsAddonFinder;
6559
private @NonNullByDefault({}) AddonFinder upnpAddonFinder;
6660
private @NonNullByDefault({}) AddonSuggestionService addonSuggestionService;
6761

68-
private final Hashtable<String, Object> config = new Hashtable<>(
62+
private final HashMap<String, Object> config = new HashMap<>(
6963
Map.of(AddonFinderConstants.CFG_FINDER_MDNS, true, AddonFinderConstants.CFG_FINDER_UPNP, true));
7064

7165
@AfterAll
@@ -80,7 +74,6 @@ public void cleanUp() {
8074

8175
@BeforeAll
8276
public void setup() {
83-
setupMockConfigurationAdmin();
8477
setupMockLocaleProvider();
8578
setupMockAddonInfoProvider();
8679
setupMockMdnsAddonFinder();
@@ -89,8 +82,7 @@ public void setup() {
8982
}
9083

9184
private AddonSuggestionService createAddonSuggestionService() {
92-
AddonSuggestionService addonSuggestionService = new AddonSuggestionService(configurationAdmin, localeProvider,
93-
Map.of());
85+
AddonSuggestionService addonSuggestionService = new AddonSuggestionService(localeProvider, config);
9486
assertNotNull(addonSuggestionService);
9587

9688
addonSuggestionService.addAddonFinder(mdnsAddonFinder);
@@ -99,31 +91,6 @@ private AddonSuggestionService createAddonSuggestionService() {
9991
return addonSuggestionService;
10092
}
10193

102-
private void setupMockConfigurationAdmin() {
103-
// create the mock
104-
configurationAdmin = mock(ConfigurationAdmin.class);
105-
Configuration configuration = mock(Configuration.class);
106-
try {
107-
when(configurationAdmin.getConfiguration(any())).thenReturn(configuration);
108-
} catch (IOException e) {
109-
}
110-
when(configuration.getProperties()).thenReturn(config);
111-
112-
// check that it works
113-
assertNotNull(configurationAdmin);
114-
try {
115-
Dictionary<String, Object> cfg = configurationAdmin.getConfiguration(OpenHAB.ADDONS_SERVICE_PID)
116-
.getProperties();
117-
assertNotNull(cfg);
118-
assertTrue(cfg.get(AddonFinderConstants.CFG_FINDER_MDNS) instanceof Boolean);
119-
assertTrue((Boolean) cfg.get(AddonFinderConstants.CFG_FINDER_MDNS));
120-
assertTrue(cfg.get(AddonFinderConstants.CFG_FINDER_UPNP) instanceof Boolean);
121-
assertTrue((Boolean) cfg.get(AddonFinderConstants.CFG_FINDER_UPNP));
122-
assertNull(cfg.get(AddonFinderConstants.CFG_FINDER_USB));
123-
} catch (IOException e) {
124-
}
125-
}
126-
12794
private void setupMockLocaleProvider() {
12895
// create the mock
12996
localeProvider = mock(LocaleProvider.class);

0 commit comments

Comments
 (0)