diff --git a/src/main/java/com/bwssystems/HABridge/NamedIP.java b/src/main/java/com/bwssystems/HABridge/NamedIP.java
index 145f798..b7162a2 100644
--- a/src/main/java/com/bwssystems/HABridge/NamedIP.java
+++ b/src/main/java/com/bwssystems/HABridge/NamedIP.java
@@ -2,7 +2,8 @@ package com.bwssystems.HABridge;
public class NamedIP {
private String name;
- private String ip;
+ private String ip;
+ private String webhook;
private String port;
private String username;
private String password;
@@ -20,7 +21,13 @@ public class NamedIP {
public void setIp(String ip) {
this.ip = ip;
}
- public String getPort() {
+ public String getWebhook() {
+ return webhook;
+ }
+ public void setWebhook(final String webhook) {
+ this.webhook = webhook;
+ }
+ public String getPort() {
return port;
}
public void setPort(String port) {
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java b/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java
index 4788359..521f7ed 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyServer.java
@@ -4,6 +4,8 @@ import static java.lang.String.format;
import javax.inject.Inject;
+import com.bwssystems.HABridge.plugins.http.HTTPHandler;
+import org.apache.http.client.methods.HttpGet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,69 +20,98 @@ import net.whistlingfish.harmony.HarmonyClientModule;
import net.whistlingfish.harmony.config.Activity;
import net.whistlingfish.harmony.protocol.OAReplyProvider;
+import java.net.URLEncoder;
+
public class HarmonyServer {
+
+ private static final String ACTIVIY_ID = "${activity.id}";
+ private static final String ACTIVIY_LABEL = "${activity.label}";
+
@Inject
private HarmonyClient harmonyClient;
-
+
private HarmonyHandler myHarmony;
private DevModeResponse devResponse;
private OAReplyProvider dummyProvider;
private NamedIP myNameAndIP;
private Boolean isDevMode;
+ private HTTPHandler httpClient;
private Logger log = LoggerFactory.getLogger(HarmonyServer.class);
- public HarmonyServer(NamedIP theHarmonyAddress) {
- super();
- myHarmony = null;
- dummyProvider = null;
- myNameAndIP = theHarmonyAddress;
- isDevMode = false;
- }
+ public HarmonyServer(NamedIP theHarmonyAddress) {
+ super();
+ myHarmony = null;
+ dummyProvider = null;
+ myNameAndIP = theHarmonyAddress;
+ isDevMode = false;
+ httpClient = new HTTPHandler();
+ }
- public static HarmonyServer setup(BridgeSettingsDescriptor bridgeSettings, Boolean harmonyDevMode, NamedIP theHarmonyAddress) throws Exception {
- if(!bridgeSettings.isValidHarmony() && harmonyDevMode) {
- return new HarmonyServer(theHarmonyAddress);
- }
- Injector injector = null;
- if(!harmonyDevMode)
- injector = Guice.createInjector(new HarmonyClientModule());
- HarmonyServer mainObject = new HarmonyServer(theHarmonyAddress);
- if(!harmonyDevMode)
- injector.injectMembers(mainObject);
- mainObject.execute(bridgeSettings, harmonyDevMode);
- return mainObject;
- }
-
- private void execute(BridgeSettingsDescriptor mySettings, Boolean harmonyDevMode) throws Exception {
- Boolean noopCalls = Boolean.parseBoolean(System.getProperty("noop.calls", "false"));
- isDevMode = harmonyDevMode;
- String modeString = "";
- if(dummyProvider != null)
- log.debug("something is very wrong as dummyProvider is not null...");
- if(isDevMode)
- modeString = " (development mode)";
- else if(noopCalls)
- modeString = " (no op calls to harmony)";
- log.info("setup initiated " + modeString + "....");
- if(isDevMode)
- {
- harmonyClient = null;
- devResponse = new DevModeResponse();
+ public static HarmonyServer setup(
+ BridgeSettingsDescriptor bridgeSettings,
+ Boolean harmonyDevMode,
+ NamedIP theHarmonyAddress
+ ) throws Exception {
+ if (!bridgeSettings.isValidHarmony() && harmonyDevMode) {
+ return new HarmonyServer(theHarmonyAddress);
}
- else {
- devResponse = null;
- harmonyClient.addListener(new ActivityChangeListener() {
- @Override
- public void activityStarted(Activity activity) {
- log.info(format("activity changed: [%d] %s", activity.getId(), activity.getLabel()));
- }
- });
- harmonyClient.connect(myNameAndIP.getIp());
+ Injector injector = null;
+ if (!harmonyDevMode) {
+ injector = Guice.createInjector(new HarmonyClientModule());
+ }
+ HarmonyServer mainObject = new HarmonyServer(theHarmonyAddress);
+ if (!harmonyDevMode) {
+ injector.injectMembers(mainObject);
+ }
+ mainObject.execute(bridgeSettings, harmonyDevMode);
+ return mainObject;
+ }
+
+ private void execute(BridgeSettingsDescriptor mySettings, Boolean harmonyDevMode) throws Exception {
+ Boolean noopCalls = Boolean.parseBoolean(System.getProperty("noop.calls", "false"));
+ isDevMode = harmonyDevMode;
+ String modeString = "";
+ if (dummyProvider != null) {
+ log.debug("something is very wrong as dummyProvider is not null...");
+ }
+ if (isDevMode) {
+ modeString = " (development mode)";
+ } else if (noopCalls) {
+ modeString = " (no op calls to harmony)";
+ }
+ log.info("setup initiated " + modeString + "....");
+ if (isDevMode) {
+ harmonyClient = null;
+ devResponse = new DevModeResponse();
+ } else {
+ devResponse = null;
+ harmonyClient.addListener(new ActivityChangeListener() {
+ @Override
+ public void activityStarted(Activity activity) {
+ String webhook = myNameAndIP.getWebhook();
+ if(webhook != null) {
+ try {
+ // Replacing variables
+ webhook = webhook.replace(ACTIVIY_ID, activity.getId().toString());
+ webhook = webhook.replace(ACTIVIY_LABEL, URLEncoder.encode(activity.getLabel(), "UTF-8"));
+
+ log.info(format("calling webhook: %s", webhook));
+
+ // Calling webhook
+ httpClient.doHttpRequest(webhook, HttpGet.METHOD_NAME, null, null, null);
+ } catch (Exception e) {
+ log.warn("could not call webhook: " + webhook, e);
+ }
+ }
+ log.info(format("activity changed: [%d] %s", activity.getId(), activity.getLabel()));
+ }
+ });
+ harmonyClient.connect(myNameAndIP.getIp());
}
myHarmony = new HarmonyHandler(harmonyClient, noopCalls, devResponse);
- }
+ }
- public HarmonyHandler getMyHarmony() {
- return myHarmony;
- }
+ public HarmonyHandler getMyHarmony() {
+ return myHarmony;
+ }
}
diff --git a/src/main/resources/public/views/system.html b/src/main/resources/public/views/system.html
index 62e3bd8..06fb374 100644
--- a/src/main/resources/public/views/system.html
+++ b/src/main/resources/public/views/system.html
@@ -141,25 +141,30 @@
Name
- IP
+ IP
+ Webhook
Manage