Search in sources :

Example 1 with PageChangeListener

use of org.openhab.core.io.rest.sitemap.internal.PageChangeListener in project openhab-core by openhab.

the class SitemapSubscriptionService method receive.

@Override
public void receive(Event event) {
    if (event instanceof ItemStatePredictedEvent) {
        ItemStatePredictedEvent prediction = (ItemStatePredictedEvent) event;
        Item item = itemUIRegistry.get(prediction.getItemName());
        if (item instanceof GroupItem) {
            // members and predictions aren't really possible in that case (or at least would be highly complex).
            return;
        }
        for (PageChangeListener pageChangeListener : pageChangeListeners.values()) {
            if (prediction.isConfirmation()) {
                pageChangeListener.keepCurrentState(item);
            } else {
                pageChangeListener.changeStateTo(item, prediction.getPredictedState());
            }
        }
    } else if (event instanceof ChannelDescriptionChangedEvent) {
        ChannelDescriptionChangedEvent channelDescriptionChangedEvent = (ChannelDescriptionChangedEvent) event;
        channelDescriptionChangedEvent.getLinkedItemNames().forEach(itemName -> {
            for (PageChangeListener pageChangeListener : pageChangeListeners.values()) {
                pageChangeListener.descriptionChanged(itemName);
            }
        });
    }
}
Also used : PageChangeListener(org.openhab.core.io.rest.sitemap.internal.PageChangeListener) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) BasicEList(org.eclipse.emf.common.util.BasicEList) EventType(org.openhab.core.model.core.EventType) EventSubscriber(org.openhab.core.events.EventSubscriber) ItemUIRegistry(org.openhab.core.ui.items.ItemUIRegistry) LoggerFactory(org.slf4j.LoggerFactory) PageChangeListener(org.openhab.core.io.rest.sitemap.internal.PageChangeListener) ArrayList(java.util.ArrayList) ItemStatePredictedEvent(org.openhab.core.items.events.ItemStatePredictedEvent) Component(org.osgi.service.component.annotations.Component) Nullable(org.eclipse.jdt.annotation.Nullable) Duration(java.time.Duration) Map(java.util.Map) ModelRepositoryChangeListener(org.openhab.core.model.core.ModelRepositoryChangeListener) EventFilter(org.openhab.core.events.EventFilter) Activate(org.osgi.service.component.annotations.Activate) NonNullByDefault(org.eclipse.jdt.annotation.NonNullByDefault) GroupItem(org.openhab.core.items.GroupItem) Logger(org.slf4j.Logger) ChannelDescriptionChangedEvent(org.openhab.core.thing.events.ChannelDescriptionChangedEvent) Sitemap(org.openhab.core.model.sitemap.sitemap.Sitemap) Widget(org.openhab.core.model.sitemap.sitemap.Widget) Deactivate(org.osgi.service.component.annotations.Deactivate) Event(org.openhab.core.events.Event) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) UUID(java.util.UUID) ReferencePolicy(org.osgi.service.component.annotations.ReferencePolicy) Instant(java.time.Instant) EList(org.eclipse.emf.common.util.EList) Item(org.openhab.core.items.Item) Objects(java.util.Objects) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) List(java.util.List) SitemapProvider(org.openhab.core.model.sitemap.SitemapProvider) Entry(java.util.Map.Entry) Modified(org.osgi.service.component.annotations.Modified) SitemapEvent(org.openhab.core.io.rest.sitemap.internal.SitemapEvent) Reference(org.osgi.service.component.annotations.Reference) GroupItem(org.openhab.core.items.GroupItem) Item(org.openhab.core.items.Item) GroupItem(org.openhab.core.items.GroupItem) ItemStatePredictedEvent(org.openhab.core.items.events.ItemStatePredictedEvent) ChannelDescriptionChangedEvent(org.openhab.core.thing.events.ChannelDescriptionChangedEvent)

Example 2 with PageChangeListener

use of org.openhab.core.io.rest.sitemap.internal.PageChangeListener in project openhab-core by openhab.

the class SitemapSubscriptionService method deactivate.

@Deactivate
protected void deactivate() {
    pageOfSubscription.clear();
    callbacks.clear();
    creationInstants.clear();
    for (PageChangeListener listener : pageChangeListeners.values()) {
        listener.dispose();
    }
    pageChangeListeners.clear();
}
Also used : PageChangeListener(org.openhab.core.io.rest.sitemap.internal.PageChangeListener) Deactivate(org.osgi.service.component.annotations.Deactivate)

Example 3 with PageChangeListener

use of org.openhab.core.io.rest.sitemap.internal.PageChangeListener in project openhab-core by openhab.

the class SitemapSubscriptionService method removeCallbackFromListener.

private void removeCallbackFromListener(String sitemapPage, SitemapSubscriptionCallback callback) {
    PageChangeListener oldListener = pageChangeListeners.get(sitemapPage);
    if (oldListener != null) {
        oldListener.removeCallback(callback);
        if (!pageOfSubscription.values().contains(sitemapPage)) {
            // no other callbacks are left here, so we can safely dispose the listener
            oldListener.dispose();
            pageChangeListeners.remove(sitemapPage);
        }
    }
}
Also used : PageChangeListener(org.openhab.core.io.rest.sitemap.internal.PageChangeListener)

Example 4 with PageChangeListener

use of org.openhab.core.io.rest.sitemap.internal.PageChangeListener in project openhab-core by openhab.

the class SitemapSubscriptionService method removeSubscription.

/**
 * Removes an existing subscription
 *
 * @param subscriptionId the id of the subscription to remove
 */
public void removeSubscription(String subscriptionId) {
    creationInstants.remove(subscriptionId);
    callbacks.remove(subscriptionId);
    String sitemapPage = pageOfSubscription.remove(subscriptionId);
    if (sitemapPage != null && !pageOfSubscription.values().contains(sitemapPage)) {
        // this was the only subscription listening on this page, so we can dispose the listener
        PageChangeListener listener = pageChangeListeners.remove(sitemapPage);
        if (listener != null) {
            listener.dispose();
        }
    }
    logger.debug("Removed subscription with id {} ({} active subscriptions)", subscriptionId, callbacks.size());
}
Also used : PageChangeListener(org.openhab.core.io.rest.sitemap.internal.PageChangeListener)

Example 5 with PageChangeListener

use of org.openhab.core.io.rest.sitemap.internal.PageChangeListener in project openhab-core by openhab.

the class SitemapSubscriptionService method addCallbackToListener.

private void addCallbackToListener(String sitemapName, String pageId, SitemapSubscriptionCallback callback) {
    PageChangeListener listener = pageChangeListeners.get(getValue(sitemapName, pageId));
    if (listener == null) {
        // there is no listener for this page yet, so let's try to create one
        listener = new PageChangeListener(sitemapName, pageId, itemUIRegistry, collectWidgets(sitemapName, pageId));
        pageChangeListeners.put(getValue(sitemapName, pageId), listener);
    }
    listener.addCallback(callback);
}
Also used : PageChangeListener(org.openhab.core.io.rest.sitemap.internal.PageChangeListener)

Aggregations

PageChangeListener (org.openhab.core.io.rest.sitemap.internal.PageChangeListener)5 Deactivate (org.osgi.service.component.annotations.Deactivate)2 Duration (java.time.Duration)1 Instant (java.time.Instant)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Map (java.util.Map)1 Entry (java.util.Map.Entry)1 Objects (java.util.Objects)1 Set (java.util.Set)1 UUID (java.util.UUID)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 BasicEList (org.eclipse.emf.common.util.BasicEList)1 EList (org.eclipse.emf.common.util.EList)1 NonNullByDefault (org.eclipse.jdt.annotation.NonNullByDefault)1 Nullable (org.eclipse.jdt.annotation.Nullable)1 Event (org.openhab.core.events.Event)1 EventFilter (org.openhab.core.events.EventFilter)1 EventSubscriber (org.openhab.core.events.EventSubscriber)1 SitemapEvent (org.openhab.core.io.rest.sitemap.internal.SitemapEvent)1