Skip to content
This repository has been archived by the owner on May 7, 2020. It is now read-only.

Commit

Permalink
allow setting the current page on the initial request and added logging
Browse files Browse the repository at this point in the history
Signed-off-by: Kai Kreuzer <kai@openhab.org>
  • Loading branch information
kaikreuzer committed Sep 2, 2016
1 parent c674de3 commit 18c8935
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import org.eclipse.smarthome.model.sitemap.SitemapProvider;
import org.eclipse.smarthome.model.sitemap.Widget;
import org.eclipse.smarthome.ui.items.ItemUIRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* This is a service that provides the possibility to manage subscriptions to sitemaps.
Expand All @@ -34,6 +36,10 @@
*/
public class SitemapSubscriptionService {

private static final String SITEMAP_PAGE_SEPARATOR = "#";

private final Logger logger = LoggerFactory.getLogger(SitemapSubscriptionService.class);

public interface SitemapSubscriptionCallback {

void onEvent(SitemapEvent event);
Expand Down Expand Up @@ -85,6 +91,7 @@ protected void removeSitemapProvider(SitemapProvider provider) {
public String createSubscription(SitemapSubscriptionCallback callback) {
String subscriptionId = UUID.randomUUID().toString();
callbacks.put(subscriptionId, callback);
logger.debug("Created new subscription with id {}", subscriptionId);
return subscriptionId;
}

Expand All @@ -100,6 +107,7 @@ public void removeSubscription(String subscriptionId) {
if (listener != null) {
listener.dispose();
}
logger.debug("Removed subscription with id {}", subscriptionId);
}

/**
Expand All @@ -119,7 +127,7 @@ public boolean exists(String subscriptionId) {
* @return the id of the currently active page
*/
public String getPageId(String subscriptionId) {
return pageOfSubscriptionMap.get(subscriptionId).split("-")[1];
return pageOfSubscriptionMap.get(subscriptionId).split(SITEMAP_PAGE_SEPARATOR)[1];
}

/**
Expand All @@ -129,7 +137,7 @@ public String getPageId(String subscriptionId) {
* @return the name of the current sitemap
*/
public String getSitemapName(String subscriptionId) {
return pageOfSubscriptionMap.get(subscriptionId).split("-")[0];
return pageOfSubscriptionMap.get(subscriptionId).split(SITEMAP_PAGE_SEPARATOR)[0];
}

/**
Expand All @@ -144,6 +152,8 @@ public void setPageId(String subscriptionId, String sitemapName, String pageId)
pageOfSubscriptionMap.put(subscriptionId, getValue(sitemapName, pageId));
removeOldListener(subscriptionId);
initNewListener(subscriptionId, sitemapName, pageId);
logger.debug("Subscription {} changed to page {} of sitemap {}",
new Object[] { subscriptionId, pageId, sitemapName });
} else {
throw new IllegalArgumentException("Subscription " + subscriptionId + " does not exist!");
}
Expand Down Expand Up @@ -177,7 +187,7 @@ private void removeOldListener(String subscriptionId) {
}

private String getValue(String sitemapName, String pageId) {
return sitemapName + "-" + pageId;
return sitemapName + SITEMAP_PAGE_SEPARATOR + pageId;
}

private Sitemap getSitemap(String sitemapName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.eclipse.smarthome.io.rest.sitemap.SitemapSubscriptionService;
import org.glassfish.jersey.media.sse.EventOutput;
import org.glassfish.jersey.media.sse.OutboundEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* {@link EventOutput} implementation that takes a subscription id parameter and only writes out events that match the
Expand All @@ -24,6 +26,8 @@
*/
public class SitemapEventOutput extends EventOutput {

private final Logger logger = LoggerFactory.getLogger(SitemapSubscriptionService.class);

private final String subscriptionId;
private final SitemapSubscriptionService subscriptions;

Expand All @@ -44,6 +48,10 @@ public void write(OutboundEvent chunk) throws IOException {
if (sitemapName != null && sitemapName.equals(subscriptions.getSitemapName(subscriptionId))
&& pageId != null && pageId.equals(subscriptions.getPageId(subscriptionId))) {
super.write(chunk);
if (logger.isDebugEnabled() && event instanceof SitemapWidgetEvent) {
logger.debug("Sent sitemap event for widget {} to subscription {}.",
((SitemapWidgetEvent) event).widgetId, subscriptionId);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,6 @@ public Response getPageData(@Context HttpHeaders headers,
public Object createEventSubscription() {
String subscriptionId = subscriptions.createSubscription(this);
URI uri = uriInfo.getBaseUriBuilder().path(PATH_SITEMAPS).path(SEGMENT_EVENTS).path(subscriptionId).build();
logger.debug("Created sitemap event subscription {}.", subscriptionId);
return Response.created(uri);
}

Expand All @@ -224,11 +223,16 @@ public Object createEventSubscription() {
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 404, message = "Subscription not found.") })
public Object getSitemapEvents(
@PathParam("subscriptionid") @ApiParam(value = "subscription id") String subscriptionId) {
@PathParam("subscriptionid") @ApiParam(value = "subscription id") String subscriptionId,
@QueryParam("sitemap") @ApiParam(value = "sitemap name", required = false) String sitemapname,
@QueryParam("pageid") @ApiParam(value = "page id", required = false) String pageId) {
if (!subscriptions.exists(subscriptionId)) {
return JSONResponse.createResponse(Status.NOT_FOUND, null,
"Subscription id " + subscriptionId + " does not exist.");
}
if (sitemapname != null && pageId != null) {
subscriptions.setPageId(subscriptionId, sitemapname, pageId);
}
final EventOutput eventOutput = new SitemapEventOutput(subscriptions, subscriptionId);
broadcaster.add(eventOutput);
logger.debug("Client requested sitemap event stream for subscription {}.", subscriptionId);
Expand Down

0 comments on commit 18c8935

Please sign in to comment.