/**
   * Find the first matching provider name according to <code>stationValue</code>.
   *
   * @param stationValue
   * @return the matching binding provider or <code>null</code> if no binding provider could be
   *     found
   */
  private String findFirstMatchingItemName(int stationValue) {
    String firstMatchingName = null;

    for (OpenSprinklerBindingProvider provider : this.providers) {
      for (String itemName : provider.getItemNames()) {
        boolean match = (provider.getStationNumber(itemName) == stationValue);

        if (match) {
          firstMatchingName = itemName;
          break;
        }
      }
    }

    return firstMatchingName;
  }
  /** @{inheritDoc} */
  @Override
  protected void internalReceiveCommand(String itemName, Command command) {
    // the code being executed when a command was sent on the openHAB
    // event bus goes here. This method is only called if one of the
    // BindingProviders provide a binding for the given 'itemName'.

    if (command instanceof OnOffType) {
      final OnOffType switchCommand = (OnOffType) command;
      final OpenSprinklerBindingProvider bindingProvider =
          findFirstMatchingBindingProvider(itemName, command);
      final int station = bindingProvider.getStationNumber(itemName);

      if (station < 0 || station >= numberOfStations) {
        logger.warn(
            "Station "
                + station
                + " is not in the valid ["
                + 0
                + ".."
                + numberOfStations
                + "] range");
        return;
      }

      switch (switchCommand) {
        case ON:
          openSprinkler.openStation(station);
          break;
        case OFF:
          openSprinkler.closeStation(station);
          break;
      }

      return;
    }

    if (command instanceof OpenClosedType) {
      // abort processing
      return;
    }

    logger.debug("Provided command " + command + " is not of type 'OnOffType' or 'OpenClosedType'");
  }