Skip to content

Commit

Permalink
[binding] Added nullness annotations (#1165)
Browse files Browse the repository at this point in the history
* Added nullness annotations to o.o.c.binding.xml
* Use local variables
* Removed unuused import

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
  • Loading branch information
cweitkamp authored and kaikreuzer committed Oct 28, 2019
1 parent d7e3297 commit 8351a2f
Show file tree
Hide file tree
Showing 14 changed files with 181 additions and 128 deletions.
Expand Up @@ -12,6 +12,8 @@
*/
package org.eclipse.smarthome.core.binding.xml.internal;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.smarthome.config.core.ConfigDescription;
import org.eclipse.smarthome.config.xml.AbstractXmlConfigDescriptionProvider;
import org.eclipse.smarthome.config.xml.osgi.XmlDocumentProvider;
Expand All @@ -36,14 +38,15 @@
*
* @see BindingInfoXmlProviderFactory
*/
@NonNullByDefault
public class BindingInfoXmlProvider implements XmlDocumentProvider<BindingInfoXmlResult> {

private Logger logger = LoggerFactory.getLogger(BindingInfoXmlProvider.class);

private Bundle bundle;
private final Bundle bundle;

private XmlBindingInfoProvider bindingInfoProvider;
private AbstractXmlConfigDescriptionProvider configDescriptionProvider;
private final XmlBindingInfoProvider bindingInfoProvider;
private final AbstractXmlConfigDescriptionProvider configDescriptionProvider;

public BindingInfoXmlProvider(Bundle bundle, XmlBindingInfoProvider bindingInfoProvider,
AbstractXmlConfigDescriptionProvider configDescriptionProvider) throws IllegalArgumentException {
Expand All @@ -60,26 +63,24 @@ public BindingInfoXmlProvider(Bundle bundle, XmlBindingInfoProvider bindingInfoP
}

this.bundle = bundle;

this.bindingInfoProvider = bindingInfoProvider;
this.configDescriptionProvider = configDescriptionProvider;
}

@Override
public synchronized void addingObject(BindingInfoXmlResult bindingInfoXmlResult) {
public synchronized void addingObject(@Nullable BindingInfoXmlResult bindingInfoXmlResult) {
if (bindingInfoXmlResult != null) {
ConfigDescription configDescription = bindingInfoXmlResult.getConfigDescription();

if (configDescription != null) {
try {
this.configDescriptionProvider.add(this.bundle, configDescription);
configDescriptionProvider.add(bundle, configDescription);
} catch (Exception ex) {
this.logger.error("Could not register ConfigDescription!", ex);
logger.error("Could not register ConfigDescription!", ex);
}
}

BindingInfo bindingInfo = bindingInfoXmlResult.getBindingInfo();
this.bindingInfoProvider.add(bundle, bindingInfo);
bindingInfoProvider.add(bundle, bindingInfoXmlResult.getBindingInfo());
}
}

Expand All @@ -93,5 +94,4 @@ public synchronized void release() {
this.bindingInfoProvider.removeAll(bundle);
this.configDescriptionProvider.removeAll(bundle);
}

}
Expand Up @@ -12,6 +12,8 @@
*/
package org.eclipse.smarthome.core.binding.xml.internal;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.smarthome.config.core.ConfigDescription;
import org.eclipse.smarthome.config.core.ConfigDescriptionProvider;
import org.eclipse.smarthome.core.binding.BindingInfo;
Expand All @@ -24,12 +26,13 @@
*
* @author Michael Grammling - Initial contribution
*/
@NonNullByDefault
public class BindingInfoXmlResult {

private BindingInfo bindingInfo;
private ConfigDescription configDescription;
private @Nullable ConfigDescription configDescription;

public BindingInfoXmlResult(BindingInfo bindingInfo, ConfigDescription configDescription)
public BindingInfoXmlResult(BindingInfo bindingInfo, @Nullable ConfigDescription configDescription)
throws IllegalArgumentException {
if (bindingInfo == null) {
throw new IllegalArgumentException("The BindingInfo must not be null!");
Expand All @@ -40,16 +43,15 @@ public BindingInfoXmlResult(BindingInfo bindingInfo, ConfigDescription configDes
}

public BindingInfo getBindingInfo() {
return this.bindingInfo;
return bindingInfo;
}

public ConfigDescription getConfigDescription() {
return this.configDescription;
public @Nullable ConfigDescription getConfigDescription() {
return configDescription;
}

@Override
public String toString() {
return "BindingInfoXmlResult [bindingInfo=" + bindingInfo + ", configDescription=" + configDescription + "]";
}

}
Expand Up @@ -12,10 +12,12 @@
*/
package org.eclipse.smarthome.core.binding.xml.internal;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.smarthome.config.core.ConfigDescription;
import org.eclipse.smarthome.config.core.ConfigDescriptionProvider;
import org.eclipse.smarthome.config.core.i18n.ConfigI18nLocalizationService;
import org.eclipse.smarthome.config.xml.AbstractXmlConfigDescriptionProvider;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

Expand All @@ -25,22 +27,18 @@
* @author Simon Kaufmann - Initial contribution
*/
@Component(service = ConfigDescriptionProvider.class, immediate = true, property = { "esh.scope=core.xml.binding" })
@NonNullByDefault
public class BindingXmlConfigDescriptionProvider extends AbstractXmlConfigDescriptionProvider {

private ConfigI18nLocalizationService configI18nLocalizerService;
private final ConfigI18nLocalizationService configI18nService;

@Reference
public void setConfigI18nLocalizerService(ConfigI18nLocalizationService configI18nLocalizerService) {
this.configI18nLocalizerService = configI18nLocalizerService;
}

public void unsetConfigI18nLocalizerService(ConfigI18nLocalizationService configI18nLocalizerService) {
this.configI18nLocalizerService = null;
@Activate
public BindingXmlConfigDescriptionProvider(final @Reference ConfigI18nLocalizationService configI18nService) {
this.configI18nService = configI18nService;
}

@Override
protected ConfigI18nLocalizationService getConfigI18nLocalizerService() {
return configI18nLocalizerService;
return configI18nService;
}

}
Expand Up @@ -18,6 +18,7 @@
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;

import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.smarthome.config.core.ConfigDescriptionProvider;
import org.eclipse.smarthome.config.xml.AbstractXmlBasedProvider;
import org.eclipse.smarthome.config.xml.AbstractXmlConfigDescriptionProvider;
Expand All @@ -27,9 +28,8 @@
import org.eclipse.smarthome.config.xml.util.XmlDocumentReader;
import org.eclipse.smarthome.core.binding.BindingInfo;
import org.eclipse.smarthome.core.binding.BindingInfoProvider;
import org.eclipse.smarthome.core.binding.i18n.BindingI18nLocalizationService;
import org.eclipse.smarthome.core.common.ThreadPoolManager;
import org.eclipse.smarthome.core.i18n.BindingI18nUtil;
import org.eclipse.smarthome.core.i18n.TranslationProvider;
import org.eclipse.smarthome.core.service.ReadyService;
import org.osgi.framework.Bundle;
import org.osgi.service.component.ComponentContext;
Expand All @@ -55,19 +55,24 @@ public class XmlBindingInfoProvider extends AbstractXmlBasedProvider<String, Bin
private static final String XML_DIRECTORY = "/ESH-INF/binding/";
public static final String READY_MARKER = "esh.xmlBindingInfo";

private BindingI18nUtil bindingI18nUtil;
private final BindingI18nLocalizationService bindingI18nService;
private AbstractXmlConfigDescriptionProvider configDescriptionProvider;
private XmlDocumentBundleTracker<BindingInfoXmlResult> bindingInfoTracker;
private ReadyService readyService;

private ScheduledExecutorService scheduler = ThreadPoolManager
private @Nullable XmlDocumentBundleTracker<BindingInfoXmlResult> bindingInfoTracker;
private final ReadyService readyService;
private final ScheduledExecutorService scheduler = ThreadPoolManager
.getScheduledPool(XmlDocumentBundleTracker.THREAD_POOL_NAME);
private Future<?> trackerJob;
private @Nullable Future<?> trackerJob;

@Activate
public XmlBindingInfoProvider(final @Reference BindingI18nLocalizationService bindingI18nService,
final @Reference ReadyService readyService) {
this.bindingI18nService = bindingI18nService;
this.readyService = readyService;
}

@Activate
public void activate(ComponentContext componentContext) {
XmlDocumentReader<BindingInfoXmlResult> bindingInfoReader = new BindingInfoReader();

bindingInfoTracker = new XmlDocumentBundleTracker<>(componentContext.getBundleContext(), XML_DIRECTORY,
bindingInfoReader, this, READY_MARKER, readyService);
trackerJob = scheduler.submit(() -> {
Expand All @@ -77,33 +82,28 @@ public void activate(ComponentContext componentContext) {

@Deactivate
public void deactivate(ComponentContext componentContext) {
if (trackerJob != null && !trackerJob.isDone()) {
trackerJob.cancel(true);
Future<?> localTrackerJob = trackerJob;
if (localTrackerJob != null && !localTrackerJob.isDone()) {
localTrackerJob.cancel(true);
trackerJob = null;
}
bindingInfoTracker.close();
bindingInfoTracker = null;
XmlDocumentBundleTracker<BindingInfoXmlResult> localBindingInfoTracker = bindingInfoTracker;
if (localBindingInfoTracker != null) {
localBindingInfoTracker.close();
bindingInfoTracker = null;
}
}

@Override
public synchronized BindingInfo getBindingInfo(String id, Locale locale) {
return get(id, locale);
public synchronized @Nullable BindingInfo getBindingInfo(@Nullable String id, @Nullable Locale locale) {
return id == null ? null : get(id, locale);
}

@Override
public synchronized Set<BindingInfo> getBindingInfos(Locale locale) {
public synchronized Set<BindingInfo> getBindingInfos(@Nullable Locale locale) {
return new HashSet<>(getAll(locale));
}

@Reference
public void setTranslationProvider(TranslationProvider i18nProvider) {
this.bindingI18nUtil = new BindingI18nUtil(i18nProvider);
}

public void unsetTranslationProvider(TranslationProvider i18nProvider) {
this.bindingI18nUtil = null;
}

@Reference(target = "(esh.scope=core.xml.binding)")
public void setConfigDescriptionProvider(ConfigDescriptionProvider configDescriptionProvider) {
this.configDescriptionProvider = (AbstractXmlConfigDescriptionProvider) configDescriptionProvider;
Expand All @@ -113,32 +113,13 @@ public void unsetConfigDescriptionProvider(ConfigDescriptionProvider configDescr
this.configDescriptionProvider = null;
}

@Reference
public void setReadyService(ReadyService readyService) {
this.readyService = readyService;
}

public void unsetReadyService(ReadyService readyService) {
this.readyService = null;
}

@Override
protected BindingInfo localize(Bundle bundle, BindingInfo bindingInfo, Locale locale) {
if (this.bindingI18nUtil == null) {
return null;
}

String name = this.bindingI18nUtil.getName(bundle, bindingInfo.getUID(), bindingInfo.getName(), locale);
String description = this.bindingI18nUtil.getDescription(bundle, bindingInfo.getUID(),
bindingInfo.getDescription(), locale);

return new BindingInfo(bindingInfo.getUID(), name, description, bindingInfo.getAuthor(),
bindingInfo.getServiceId(), bindingInfo.getConfigDescriptionURI());
protected @Nullable BindingInfo localize(Bundle bundle, BindingInfo bindingInfo, @Nullable Locale locale) {
return bindingI18nService.createLocalizedBindingInfo(bundle, bindingInfo, locale);
}

@Override
public XmlDocumentProvider<BindingInfoXmlResult> createDocumentProvider(Bundle bundle) {
return new BindingInfoXmlProvider(bundle, this, configDescriptionProvider);
}

}
Expand Up @@ -23,6 +23,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.smarthome.core.common.registry.Identifiable;
import org.eclipse.smarthome.core.i18n.LocalizedKey;
import org.osgi.framework.Bundle;
Expand All @@ -48,7 +49,7 @@ public abstract class AbstractXmlBasedProvider<T_ID, T_OBJECT extends Identifiab
* @param locale the target locale
* @return a translated copy of the given object or <code>null</code> if translation was not possible.
*/
protected abstract T_OBJECT localize(Bundle bundle, T_OBJECT object, Locale locale);
protected abstract @Nullable T_OBJECT localize(Bundle bundle, T_OBJECT object, @Nullable Locale locale);

/**
* Adds an object to the internal list associated with the specified module.
Expand Down Expand Up @@ -104,7 +105,7 @@ private List<T_OBJECT> acquireObjects(Bundle bundle) {
* @param locale the locale
* @return the object if found, <code>null</code> otherwise
*/
protected final T_OBJECT get(T_ID key, Locale locale) {
protected final @Nullable T_OBJECT get(T_ID key, @Nullable Locale locale) {
for (Entry<Bundle, List<T_OBJECT>> objects : bundleObjectMap.entrySet()) {
for (T_OBJECT object : objects.getValue()) {
if (key.equals(object.getUID())) {
Expand All @@ -121,7 +122,7 @@ protected final T_OBJECT get(T_ID key, Locale locale) {
* @param locale the locale
* @return a collection containing all available objects. Never <code>null</code>
*/
protected final synchronized Collection<T_OBJECT> getAll(Locale locale) {
protected final synchronized Collection<T_OBJECT> getAll(@Nullable Locale locale) {
List<T_OBJECT> ret = new LinkedList<>();
Collection<Entry<Bundle, List<T_OBJECT>>> objectList = bundleObjectMap.entrySet();
for (Entry<Bundle, List<T_OBJECT>> objects : objectList) {
Expand Down Expand Up @@ -164,7 +165,7 @@ private void removeCachedEntries(T_OBJECT object) {
}
}

private T_OBJECT acquireLocalizedObject(Bundle bundle, T_OBJECT object, Locale locale) {
private T_OBJECT acquireLocalizedObject(Bundle bundle, T_OBJECT object, @Nullable Locale locale) {
final LocalizedKey localizedKey = getLocalizedKey(object, locale);

final T_OBJECT cacheEntry = localizedObjectCache.get(localizedKey);
Expand All @@ -181,7 +182,7 @@ private T_OBJECT acquireLocalizedObject(Bundle bundle, T_OBJECT object, Locale l
}
}

private LocalizedKey getLocalizedKey(T_OBJECT object, Locale locale) {
private LocalizedKey getLocalizedKey(T_OBJECT object, @Nullable Locale locale) {
return new LocalizedKey(object.getUID(), locale != null ? locale.toLanguageTag() : null);
}

Expand Down
Expand Up @@ -16,6 +16,7 @@
import java.util.Collection;
import java.util.Locale;

import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.smarthome.config.core.ConfigDescription;
import org.eclipse.smarthome.config.core.ConfigDescriptionProvider;
import org.eclipse.smarthome.config.core.i18n.ConfigI18nLocalizationService;
Expand All @@ -41,21 +42,19 @@ public abstract class AbstractXmlConfigDescriptionProvider extends AbstractXmlBa
implements ConfigDescriptionProvider {

@Override
public synchronized Collection<ConfigDescription> getConfigDescriptions(Locale locale) {
public synchronized Collection<ConfigDescription> getConfigDescriptions(@Nullable Locale locale) {
return getAll(locale);
}

@Override
public synchronized ConfigDescription getConfigDescription(URI uri, Locale locale) {
public synchronized @Nullable ConfigDescription getConfigDescription(URI uri, @Nullable Locale locale) {
return get(uri, locale);
}

@Override
protected ConfigDescription localize(Bundle bundle, ConfigDescription configDescription, Locale locale) {
protected @Nullable ConfigDescription localize(Bundle bundle, ConfigDescription configDescription,
@Nullable Locale locale) {
ConfigI18nLocalizationService configI18nLocalizerService = getConfigI18nLocalizerService();
if (configI18nLocalizerService == null) {
return null;
}
return configI18nLocalizerService.getLocalizedConfigDescription(bundle, configDescription, locale);
}

Expand Down

0 comments on commit 8351a2f

Please sign in to comment.