예제 #1
0
  /**
   * 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);
        }
      }
    }
  }
예제 #2
0
  /** @{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);
        }
      }
    }
  }
예제 #3
0
  /** {@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;
      }
    }
  }