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.
Original file line number Diff line number Diff line change
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);
}

}
Original file line number Diff line number Diff line change
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 + "]";
}

}
Original file line number Diff line number Diff line change
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;
}

}
Original file line number Diff line number Diff line change
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);
}

}
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Loading

0 comments on commit 8351a2f

Please sign in to comment.