adapted AutoUpdateDelegate to the new ESH auto update infrastructure (#390)
* adapted AutoUpdateDelegate to the new ESH auto update infrastructure Related to https://github.com/eclipse/smarthome/pull/5011 Signed-off-by: Kai Kreuzer <kai@openhab.org>pull/391/head
parent
a59d5c4f11
commit
47c2e33624
|
@ -85,7 +85,6 @@ Import-Package:
|
|||
org.eclipse.jdt.annotation;resolution:=optional,
|
||||
org.eclipse.smarthome.config.core,
|
||||
org.eclipse.smarthome.core.audio,
|
||||
org.eclipse.smarthome.core.autoupdate,
|
||||
org.eclipse.smarthome.core.common.registry,
|
||||
org.eclipse.smarthome.core.events,
|
||||
org.eclipse.smarthome.core.items,
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
/*.xml
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" name="org.openhab.core.compat1x.actionservicefactory">
|
||||
<implementation class="org.openhab.core.scriptengine.action.internal.ActionServiceFactory"/>
|
||||
<reference bind="addActionService" cardinality="0..n" interface="org.openhab.core.scriptengine.action.ActionService" name="ActionService" policy="dynamic" unbind="removeActionService"/>
|
||||
</scr:component>
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.openhab.core.compat1x.autoupdateproviderdelegate">
|
||||
<implementation class="org.openhab.core.autoupdate.internal.AutoUpdateProviderDelegate"/>
|
||||
<reference bind="addAutoUpdateBindingProvider" cardinality="0..n" interface="org.openhab.core.autoupdate.AutoUpdateBindingProvider" name="AutoUpdateBindingProvider" policy="dynamic" unbind="removeAutoUpdateBindingProvider"/>
|
||||
<service>
|
||||
<provide interface="org.eclipse.smarthome.core.autoupdate.AutoUpdateBindingConfigProvider"/>
|
||||
</service>
|
||||
</scr:component>
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.openhab.core.compat1x.bindingconfigreaderfactory">
|
||||
<implementation class="org.openhab.core.binding.internal.BindingConfigReaderFactory"/>
|
||||
<reference bind="addBindingConfigReader" cardinality="0..n" interface="org.openhab.model.item.binding.BindingConfigReader" name="BindingConfigReader" policy="dynamic" unbind="removeBindingConfigReader"/>
|
||||
</scr:component>
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" name="org.openhab.core.compat1x.chartproviderfactory" immediate="true" >
|
||||
<implementation class="org.openhab.ui.chart.internal.ChartProviderFactory"/>
|
||||
<reference bind="addChartProvider" cardinality="0..n" interface="org.openhab.ui.chart.ChartProvider" name="ChartProvider" policy="dynamic" unbind="removeChartProvider"/>
|
||||
</scr:component>
|
|
@ -1,21 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.openhab.core.compat1x.eventbridge">
|
||||
<implementation class="org.openhab.core.events.internal.EventBridge"/>
|
||||
<service>
|
||||
<provide interface="org.osgi.service.event.EventHandler"/>
|
||||
<provide interface="org.eclipse.smarthome.core.events.EventSubscriber"/>
|
||||
</service>
|
||||
<reference bind="setEventAdmin" cardinality="1..1" interface="org.osgi.service.event.EventAdmin" name="EventAdmin" policy="dynamic" unbind="unsetEventAdmin"/>
|
||||
<property name="event.topics" type="String" value="smarthome/*"/>
|
||||
<reference bind="setEventPublisher" cardinality="1..1" interface="org.eclipse.smarthome.core.events.EventPublisher" name="EventPublisher" policy="static" unbind="unsetEventPublisher"/>
|
||||
</scr:component>
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.openhab.core.compat1x.eventpublisherdelegate">
|
||||
<implementation class="org.openhab.core.events.EventPublisherDelegate"/>
|
||||
<service>
|
||||
<provide interface="org.openhab.core.events.EventPublisher"/>
|
||||
</service>
|
||||
<reference bind="setEventPublisher" cardinality="1..1" interface="org.eclipse.smarthome.core.events.EventPublisher" name="EventPublisher" policy="dynamic" unbind="unsetEventPublisher"/>
|
||||
</scr:component>
|
|
@ -1,19 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Copyright (c) 2015-2018 by the respective copyright holders.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are made available under the terms of the Eclipse Public License v1.0
|
||||
which accompanies this distribution, and is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html
|
||||
|
||||
-->
|
||||
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="org.openhab.core.compat1x.itemuiregistry">
|
||||
<implementation class="org.openhab.core.items.internal.ItemUIRegistryDelegate"/>
|
||||
<service>
|
||||
<provide interface="org.openhab.core.items.ItemRegistry"/>
|
||||
<provide interface="org.openhab.ui.items.ItemUIRegistry"/>
|
||||
</service>
|
||||
<reference bind="setItemUIRegistry" cardinality="1..1" interface="org.eclipse.smarthome.ui.items.ItemUIRegistry" name="ItemUIRegistry" policy="static" unbind="unsetItemUIRegistry"/>
|
||||
</scr:component>
|
|
@ -8,10 +8,28 @@
|
|||
*/
|
||||
package org.openhab.core.autoupdate.internal;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
|
||||
import org.eclipse.smarthome.core.autoupdate.AutoUpdateBindingConfigProvider;
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.eclipse.smarthome.core.common.registry.ProviderChangeListener;
|
||||
import org.eclipse.smarthome.core.common.registry.RegistryChangeListener;
|
||||
import org.eclipse.smarthome.core.items.Item;
|
||||
import org.eclipse.smarthome.core.items.ItemRegistry;
|
||||
import org.eclipse.smarthome.core.items.Metadata;
|
||||
import org.eclipse.smarthome.core.items.MetadataKey;
|
||||
import org.eclipse.smarthome.core.items.MetadataProvider;
|
||||
import org.openhab.core.autoupdate.AutoUpdateBindingProvider;
|
||||
import org.openhab.core.binding.BindingChangeListener;
|
||||
import org.openhab.core.binding.BindingProvider;
|
||||
import org.osgi.service.component.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Deactivate;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
|
||||
/**
|
||||
* This class serves as a mapping from the "old" org.openhab namespace to the new org.eclipse.smarthome
|
||||
|
@ -20,26 +38,185 @@ import org.eclipse.smarthome.core.autoupdate.AutoUpdateBindingConfigProvider;
|
|||
*
|
||||
* @author Kai Kreuzer - Initial contribution and API
|
||||
*/
|
||||
public class AutoUpdateProviderDelegate implements AutoUpdateBindingConfigProvider {
|
||||
@NonNullByDefault
|
||||
@Component(service = MetadataProvider.class)
|
||||
public class AutoUpdateProviderDelegate
|
||||
implements MetadataProvider, RegistryChangeListener<Item>, BindingChangeListener {
|
||||
|
||||
private Set<org.openhab.core.autoupdate.AutoUpdateBindingProvider> providers = new CopyOnWriteArraySet<>();
|
||||
private static final String AUTOUPDATE_KEY = "autoupdate";
|
||||
|
||||
public void addAutoUpdateBindingProvider(org.openhab.core.autoupdate.AutoUpdateBindingProvider provider) {
|
||||
providers.add(provider);
|
||||
private Set<AutoUpdateBindingProvider> providers = new CopyOnWriteArraySet<>();
|
||||
private Set<ProviderChangeListener<Metadata>> listeners = new CopyOnWriteArraySet<>();
|
||||
private Set<String> itemUpdateVetos = new HashSet<>();
|
||||
private boolean started = false;
|
||||
|
||||
private @NonNullByDefault({}) ItemRegistry itemRegistry;
|
||||
|
||||
@Activate
|
||||
protected void activate() {
|
||||
refreshItemUpdateVetos();
|
||||
started = true;
|
||||
itemRegistry.addRegistryChangeListener(this);
|
||||
for (AutoUpdateBindingProvider provider : providers) {
|
||||
provider.addBindingChangeListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeAutoUpdateBindingProvider(org.openhab.core.autoupdate.AutoUpdateBindingProvider provider) {
|
||||
@Deactivate
|
||||
protected void deactivate() {
|
||||
for (AutoUpdateBindingProvider provider : providers) {
|
||||
provider.removeBindingChangeListener(this);
|
||||
}
|
||||
itemRegistry.removeRegistryChangeListener(this);
|
||||
started = false;
|
||||
}
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.MULTIPLE)
|
||||
public void addAutoUpdateBindingProvider(AutoUpdateBindingProvider provider) {
|
||||
providers.add(provider);
|
||||
if (started) {
|
||||
refreshItemUpdateVetos();
|
||||
provider.addBindingChangeListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeAutoUpdateBindingProvider(AutoUpdateBindingProvider provider) {
|
||||
providers.remove(provider);
|
||||
if (started) {
|
||||
refreshItemUpdateVetos();
|
||||
provider.removeBindingChangeListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Reference
|
||||
protected void setItemRegistry(ItemRegistry itemRegistry) {
|
||||
this.itemRegistry = itemRegistry;
|
||||
}
|
||||
|
||||
protected void unsetItemRegistry(ItemRegistry itemRegistry) {
|
||||
this.itemRegistry = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean autoUpdate(String itemName) {
|
||||
for (org.openhab.core.autoupdate.AutoUpdateBindingProvider provider : providers) {
|
||||
Boolean autoUpdate = provider.autoUpdate(itemName);
|
||||
if (autoUpdate != null) {
|
||||
return autoUpdate;
|
||||
public void addProviderChangeListener(ProviderChangeListener<Metadata> listener) {
|
||||
this.listeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Metadata> getAll() {
|
||||
Set<Metadata> metadataSet = new HashSet<>();
|
||||
for (Item item : itemRegistry.getAll()) {
|
||||
synchronized (itemUpdateVetos) {
|
||||
if (itemUpdateVetos.contains(item.getName())) {
|
||||
Metadata metadata = getMetadata(item.getName());
|
||||
metadataSet.add(metadata);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return metadataSet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeProviderChangeListener(ProviderChangeListener<Metadata> listener) {
|
||||
this.listeners.remove(listener);
|
||||
}
|
||||
|
||||
private void refreshItemUpdateVetos() {
|
||||
Set<String> newVetos = new HashSet<>();
|
||||
synchronized (itemUpdateVetos) {
|
||||
itemUpdateVetos.clear();
|
||||
for (Item item : itemRegistry.getAll()) {
|
||||
for (AutoUpdateBindingProvider provider : providers) {
|
||||
Boolean autoUpdate = provider.autoUpdate(item.getName());
|
||||
if (Boolean.FALSE.equals(autoUpdate)) {
|
||||
newVetos.add(item.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// find the removed ones
|
||||
Set<String> removedVetos = new HashSet<>(itemUpdateVetos);
|
||||
removedVetos.removeAll(newVetos);
|
||||
for (String itemName : removedVetos) {
|
||||
if (itemUpdateVetos.contains(itemName)) {
|
||||
Metadata md = getMetadata(itemName);
|
||||
for (ProviderChangeListener<Metadata> listener : listeners) {
|
||||
listener.removed(this, md);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// find the added ones
|
||||
Set<String> addedVetos = new HashSet<>(newVetos);
|
||||
addedVetos.removeAll(itemUpdateVetos);
|
||||
for (String itemName : addedVetos) {
|
||||
notifyAboutAddedMetadata(itemName);
|
||||
}
|
||||
itemUpdateVetos = newVetos;
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyAboutAddedMetadata(String itemName) {
|
||||
if (itemUpdateVetos.contains(itemName)) {
|
||||
Metadata md = getMetadata(itemName);
|
||||
for (ProviderChangeListener<Metadata> listener : listeners) {
|
||||
listener.added(this, md);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyAboutRemovedMetadata(String itemName) {
|
||||
for (ProviderChangeListener<Metadata> listener : listeners) {
|
||||
listener.removed(this, getMetadata(itemName));
|
||||
}
|
||||
}
|
||||
|
||||
private Metadata getMetadata(String itemName) {
|
||||
return new Metadata(new MetadataKey(AUTOUPDATE_KEY, itemName), "false", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void added(Item element) {
|
||||
String itemName = element.getName();
|
||||
refreshVetoForItem(itemName);
|
||||
}
|
||||
|
||||
private void refreshVetoForItem(String itemName) {
|
||||
synchronized (itemUpdateVetos) {
|
||||
boolean removed = itemUpdateVetos.remove(itemName);
|
||||
for (AutoUpdateBindingProvider provider : providers) {
|
||||
Boolean autoUpdate = provider.autoUpdate(itemName);
|
||||
if (Boolean.FALSE.equals(autoUpdate)) {
|
||||
itemUpdateVetos.add(itemName);
|
||||
notifyAboutAddedMetadata(itemName);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (removed) {
|
||||
notifyAboutRemovedMetadata(itemName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removed(Item element) {
|
||||
itemUpdateVetos.remove(element.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updated(Item oldElement, Item element) {
|
||||
refreshVetoForItem(element.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindingChanged(@Nullable BindingProvider provider, @Nullable String itemName) {
|
||||
if (itemName != null) {
|
||||
refreshVetoForItem(itemName);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void allBindingsChanged(@Nullable BindingProvider provider) {
|
||||
refreshItemUpdateVetos();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,12 @@ import java.util.Set;
|
|||
import org.openhab.model.item.binding.BindingConfigReader;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceRegistration;
|
||||
import org.osgi.service.component.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Deactivate;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
|
||||
/**
|
||||
* This class listens for services that implement the old binding config reader interface and registers
|
||||
|
@ -25,6 +31,7 @@ import org.osgi.framework.ServiceRegistration;
|
|||
*
|
||||
* @author Kai Kreuzer - Initial contribution and API
|
||||
*/
|
||||
@Component
|
||||
public class BindingConfigReaderFactory {
|
||||
|
||||
private Map<String, ServiceRegistration<org.eclipse.smarthome.model.item.BindingConfigReader>> delegates = new HashMap<>();
|
||||
|
@ -32,6 +39,7 @@ public class BindingConfigReaderFactory {
|
|||
|
||||
private Set<BindingConfigReader> readers = new HashSet<>();
|
||||
|
||||
@Activate
|
||||
public void activate(BundleContext context) {
|
||||
this.context = context;
|
||||
for (BindingConfigReader reader : readers) {
|
||||
|
@ -39,6 +47,7 @@ public class BindingConfigReaderFactory {
|
|||
}
|
||||
}
|
||||
|
||||
@Deactivate
|
||||
public void deactivate() {
|
||||
for (ServiceRegistration<org.eclipse.smarthome.model.item.BindingConfigReader> serviceReg : delegates
|
||||
.values()) {
|
||||
|
@ -48,6 +57,7 @@ public class BindingConfigReaderFactory {
|
|||
this.context = null;
|
||||
}
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
|
||||
public void addBindingConfigReader(BindingConfigReader reader) {
|
||||
if (context != null) {
|
||||
registerDelegateService(reader);
|
||||
|
|
|
@ -15,6 +15,8 @@ import org.eclipse.smarthome.core.items.events.ItemStateEvent;
|
|||
import org.openhab.core.compat1x.internal.TypeMapper;
|
||||
import org.openhab.core.types.Command;
|
||||
import org.openhab.core.types.State;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -22,12 +24,14 @@ import org.slf4j.LoggerFactory;
|
|||
*
|
||||
* @author Kai Kreuzer - Initial contribution
|
||||
*/
|
||||
@Component(immediate = true)
|
||||
public class EventPublisherDelegate implements org.openhab.core.events.EventPublisher {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(EventPublisherDelegate.class);
|
||||
|
||||
private EventPublisher eventPublisher;
|
||||
|
||||
@Reference
|
||||
public void setEventPublisher(EventPublisher eventPublisher) {
|
||||
this.eventPublisher = eventPublisher;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,9 @@ import org.openhab.core.types.Command;
|
|||
import org.openhab.core.types.EventType;
|
||||
import org.openhab.core.types.State;
|
||||
import org.openhab.core.types.Type;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
import org.osgi.service.event.Event;
|
||||
import org.osgi.service.event.EventAdmin;
|
||||
import org.osgi.service.event.EventHandler;
|
||||
|
@ -36,12 +39,14 @@ import org.osgi.service.event.EventHandler;
|
|||
* @author Kai Kreuzer - Initial contribution and API
|
||||
*
|
||||
*/
|
||||
@Component(immediate = true, property = "event.topics=smarthome/*")
|
||||
public class EventBridge implements EventHandler, EventSubscriber {
|
||||
|
||||
private static final String BRIDGEMARKER = "bridgemarker";
|
||||
private EventAdmin eventAdmin;
|
||||
private EventPublisher eventPublisher;
|
||||
|
||||
@Reference(policy = ReferencePolicy.DYNAMIC)
|
||||
public void setEventAdmin(EventAdmin eventAdmin) {
|
||||
this.eventAdmin = eventAdmin;
|
||||
}
|
||||
|
@ -50,6 +55,7 @@ public class EventBridge implements EventHandler, EventSubscriber {
|
|||
this.eventAdmin = null;
|
||||
}
|
||||
|
||||
@Reference
|
||||
public void setEventPublisher(EventPublisher eventPublisher) {
|
||||
this.eventPublisher = eventPublisher;
|
||||
}
|
||||
|
|
|
@ -25,23 +25,27 @@ import org.openhab.model.sitemap.LinkableWidget;
|
|||
import org.openhab.model.sitemap.Sitemap;
|
||||
import org.openhab.model.sitemap.Widget;
|
||||
import org.openhab.ui.items.ItemUIRegistry;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Kai Kreuzer - Initial contribution
|
||||
*/
|
||||
@Component(immediate = true)
|
||||
public class ItemUIRegistryDelegate
|
||||
implements ItemUIRegistry, RegistryChangeListener<org.eclipse.smarthome.core.items.Item> {
|
||||
|
||||
private org.eclipse.smarthome.ui.items.ItemUIRegistry itemUIRegistry;
|
||||
private Set<ItemRegistryChangeListener> listeners = new HashSet<>();
|
||||
|
||||
@Reference
|
||||
protected void setItemUIRegistry(org.eclipse.smarthome.ui.items.ItemUIRegistry itemUIRegistry) {
|
||||
this.itemUIRegistry = itemUIRegistry;
|
||||
itemUIRegistry.addRegistryChangeListener(this);
|
||||
}
|
||||
|
||||
protected void unsetItemUIRegistry(org.eclipse.smarthome.core.items.ItemRegistry itemUIRegistry) {
|
||||
protected void unsetItemUIRegistry(org.eclipse.smarthome.ui.items.ItemUIRegistry itemUIRegistry) {
|
||||
this.itemUIRegistry = null;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,12 @@ import java.util.Set;
|
|||
import org.openhab.core.scriptengine.action.ActionService;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceRegistration;
|
||||
import org.osgi.service.component.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Deactivate;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
|
||||
/**
|
||||
* This class listens for services that implement the old action service interface and registers
|
||||
|
@ -25,6 +31,7 @@ import org.osgi.framework.ServiceRegistration;
|
|||
*
|
||||
* @author Kai Kreuzer - Initial contribution and API
|
||||
*/
|
||||
@Component
|
||||
public class ActionServiceFactory {
|
||||
|
||||
private Map<String, ServiceRegistration<org.eclipse.smarthome.model.script.engine.action.ActionService>> delegates = new HashMap<>();
|
||||
|
@ -32,6 +39,7 @@ public class ActionServiceFactory {
|
|||
|
||||
private Set<ActionService> actionServices = new HashSet<>();
|
||||
|
||||
@Activate
|
||||
public void activate(BundleContext context) {
|
||||
this.context = context;
|
||||
for (ActionService service : actionServices) {
|
||||
|
@ -39,6 +47,7 @@ public class ActionServiceFactory {
|
|||
}
|
||||
}
|
||||
|
||||
@Deactivate
|
||||
public void deactivate() {
|
||||
for (ServiceRegistration<org.eclipse.smarthome.model.script.engine.action.ActionService> serviceReg : delegates
|
||||
.values()) {
|
||||
|
@ -48,6 +57,7 @@ public class ActionServiceFactory {
|
|||
this.context = null;
|
||||
}
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
|
||||
public void addActionService(ActionService service) {
|
||||
if (context != null) {
|
||||
registerDelegateService(service);
|
||||
|
|
|
@ -18,6 +18,12 @@ import java.util.Set;
|
|||
import org.openhab.ui.chart.ChartProvider;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceRegistration;
|
||||
import org.osgi.service.component.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Deactivate;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||
|
||||
/**
|
||||
* This class listens for services that implement the old chart provider service interface and registers
|
||||
|
@ -25,6 +31,7 @@ import org.osgi.framework.ServiceRegistration;
|
|||
*
|
||||
* @author Kai Kreuzer - Initial contribution and API
|
||||
*/
|
||||
@Component(immediate = true)
|
||||
public class ChartProviderFactory {
|
||||
|
||||
private Map<String, ServiceRegistration<org.eclipse.smarthome.ui.chart.ChartProvider>> delegates = new HashMap<>();
|
||||
|
@ -32,6 +39,7 @@ public class ChartProviderFactory {
|
|||
|
||||
private Set<ChartProvider> chartProviders = new HashSet<>();
|
||||
|
||||
@Activate
|
||||
public void activate(BundleContext context) {
|
||||
this.context = context;
|
||||
for (ChartProvider provider : chartProviders) {
|
||||
|
@ -39,6 +47,7 @@ public class ChartProviderFactory {
|
|||
}
|
||||
}
|
||||
|
||||
@Deactivate
|
||||
public void deactivate() {
|
||||
for (ServiceRegistration<org.eclipse.smarthome.ui.chart.ChartProvider> serviceReg : delegates.values()) {
|
||||
serviceReg.unregister();
|
||||
|
@ -47,6 +56,7 @@ public class ChartProviderFactory {
|
|||
this.context = null;
|
||||
}
|
||||
|
||||
@Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
|
||||
public void addChartProvider(ChartProvider provider) {
|
||||
if (context != null) {
|
||||
registerDelegateProvider(provider);
|
||||
|
|
Loading…
Reference in New Issue