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);
}
});
}
}
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();
}
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);
}
}
}
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());
}
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);
}
Aggregations