/** * For a given {@link Activity}, update all items who need to know about it * * @param activity */ private void updateActivity(Activity activity, String qualifier) { logger.debug("updateActivity {}" + activity.getLabel()); for (HarmonyHubBindingProvider provider : providers) { for (String itemName : provider.getItemNames()) { HarmonyHubBindingConfig config = provider.getHarmonyHubBindingConfig(itemName); if (config.matchesQualifier(qualifier) && config.getBindingType() == HarmonyHubBindingType.CurrentActivity) { updateActivityForItem(itemName, config.getItemType(), activity); } } } }
/** @{inheritDoc} */ @Override public void bindingChanged(BindingProvider provider, final String itemName) { logger.debug("bindingChanged {} {}", provider, itemName); if (harmonyHubGateway == null) { return; } if (harmonyListeners == null) { harmonyListeners = new HashMap<String, HarmonyHubListener>(); } else { for (String qualifier : harmonyListeners.keySet()) { harmonyHubGateway.removeListener(qualifier, harmonyListeners.get(qualifier)); } harmonyListeners.clear(); } if (provider instanceof HarmonyHubBindingProvider) { HarmonyHubBindingProvider harmonyProvider = (HarmonyHubBindingProvider) provider; final HarmonyHubBindingConfig config = harmonyProvider.getHarmonyHubBindingConfig(itemName); if (harmonyHubGateway != null && config != null && config.getBindingType() == HarmonyHubBindingType.CurrentActivity) { if (!harmonyListeners.containsKey(config.getQualifier())) { logger.debug("adding new listener for {}", config.getQualifier()); HarmonyHubListener listener = new HarmonyHubListener() { @Override public void removeFrom(HarmonyClient client) { logger.debug("removeFrom called for {}", config.getQualifier()); } @Override public void addTo(HarmonyClient client) { client.addListener( new ActivityChangeListener() { @Override public void activityStarted(Activity activity) { logger.debug("activityStarted called for {}", config.getQualifier()); updateActivity(activity, config.getQualifier()); } }); // now that we can hear about activity changes, make sure we get the current value updateActivity(client.getCurrentActivity(), config.getQualifier()); } }; harmonyHubGateway.addListener(config.getQualifier(), listener); harmonyListeners.put(config.getQualifier(), listener); } } } }
/** {@inheritDoc} */ @Override protected void internalReceiveCommand(String itemName, Command command) { logger.debug("internalReceiveCommand({},{}) is called!", itemName, command); if (harmonyHubGateway == null) { logger.warn( "A command was received, but could not be executed as no Harmony Hub has been configured"); return; } for (HarmonyHubBindingProvider provider : providers) { HarmonyHubBindingConfig config = provider.getHarmonyHubBindingConfig(itemName); if (config.getBindingType().getDirection() == HarmonyHubBindingDirection.IN) { logger.warn( "item {} is not configured to send outbound commands! Please change to > or * in the binding"); continue; } switch (config.getBindingType()) { case PressButton: logger.debug( "PressButton command:{} q:{} p1:{} p2:{}", command.toString(), config.getQualifier(), config.getParam1(), config.getParam2()); String cmd = config.getParam2(); if (cmd == null) { cmd = command.toString(); } try { harmonyHubGateway.pressButton( config.getQualifier(), Integer.parseInt(config.getParam1()), cmd); } catch (NumberFormatException ignored) { harmonyHubGateway.pressButton(config.getQualifier(), config.getParam1(), cmd); } break; case StartActivity: try { harmonyHubGateway.startActivity( config.getQualifier(), Integer.parseInt(config.getParam1())); } catch (NumberFormatException ignored) { harmonyHubGateway.startActivity(config.getQualifier(), config.getParam1()); } break; case CurrentActivity: harmonyHubGateway.startActivity(config.getQualifier(), command.toString()); break; default: break; } } }