@Override public List<Command> getAllCommands(String itemName) { List<Command> commands = new ArrayList<Command>(); PlugwiseBindingConfig aConfig = (PlugwiseBindingConfig) bindingConfigs.get(itemName); for (Command aCommand : aConfig.keySet()) { commands.add(aCommand); } return commands; }
@Override public List<Command> getCommandsByType(String itemName, Class<? extends Command> class1) { List<Command> commands = new ArrayList<Command>(); PlugwiseBindingConfig aConfig = (PlugwiseBindingConfig) bindingConfigs.get(itemName); for (Command aCommand : aConfig.keySet()) { PlugwiseBindingConfigElement element = aConfig.get(aCommand); if (element.getCommandType().getTypeClass().equals(class1)) { commands.add(aCommand); } } return commands; }
@Override public PlugwiseCommandType getPlugwiseCommandType(String itemName, Command someCommand) { if (itemName != null && someCommand != null) { PlugwiseBindingConfig aConfig = (PlugwiseBindingConfig) bindingConfigs.get(itemName); if (aConfig != null) { PlugwiseBindingConfigElement element = aConfig.get(someCommand); if (element != null) { return element.getCommandType(); } } } return null; }
@Override public List<String> getPlugwiseID(String itemName) { List<String> ids = new ArrayList<String>(); for (String anItem : bindingConfigs.keySet()) { PlugwiseBindingConfig aConfig = (PlugwiseBindingConfig) bindingConfigs.get(anItem); for (Command aCommand : aConfig.keySet()) { PlugwiseBindingConfigElement element = aConfig.get(aCommand); if (element != null) { ids.add(element.getId()); } } } return ids; }
@Override public List<PlugwiseBindingConfigElement> getIntervalList() { List<PlugwiseBindingConfigElement> result = new ArrayList<PlugwiseBindingConfigElement>(); Collection<String> items = getItemNames(); Iterator<String> itemIterator = items.iterator(); while (itemIterator.hasNext()) { String anItem = itemIterator.next(); PlugwiseBindingConfig pbConfig = (PlugwiseBindingConfig) bindingConfigs.get(anItem); for (Command command : pbConfig.keySet()) { boolean found = false; PlugwiseBindingConfigElement element = pbConfig.get(command); // check if we already have a reference to this {ID,command} Iterator<PlugwiseBindingConfigElement> elementIterator = result.iterator(); while (elementIterator.hasNext()) { PlugwiseBindingConfigElement resultElement = elementIterator.next(); if (resultElement.getId().equals(element.getId()) && resultElement .getCommandType() .getJobClass() .equals(element.getCommandType().getJobClass())) { // bingo - now check if the interval is smaller found = true; if (resultElement.getInterval() > element.getInterval()) { result.remove(resultElement); result.add(element); break; } } } if (!found) { result.add(element); } } } return result; }
@Override public Set<String> getItemNames(String PlugwiseID, PlugwiseCommandType type) { Set<String> result = new HashSet<String>(); Collection<String> items = getItemNames(); Iterator<String> itemIterator = items.iterator(); while (itemIterator.hasNext()) { String anItem = itemIterator.next(); PlugwiseBindingConfig pbConfig = (PlugwiseBindingConfig) bindingConfigs.get(anItem); for (Command command : pbConfig.keySet()) { PlugwiseBindingConfigElement element = pbConfig.get(command); if (element.getCommandType() == type && element.getId().equals(PlugwiseID)) { if (!result.contains(anItem)) { result.add(anItem); } } } } return result; }
/** * Parses the configuration string and update the provided config * * @param config * @param item * @param bindingConfig * @throws BindingConfigParseException */ private void parseBindingConfig(PlugwiseBindingConfig config, Item item, String bindingConfig) throws BindingConfigParseException { String commandAsString = null; String plugwiseID = null; String plugwiseCommand = null; int interval = 60; if (bindingConfig != null) { Matcher actionMatcher = ACTION_CONFIG_PATTERN.matcher(bindingConfig); Matcher statusMatcher = STATUS_CONFIG_PATTERN.matcher(bindingConfig); if (!actionMatcher.matches() && !statusMatcher.matches()) { throw new BindingConfigParseException( "Plugwise binding configuration must consist of either three [config=" + statusMatcher + "] or four parts [config=" + actionMatcher + "]"); } else { if (actionMatcher.matches()) { commandAsString = actionMatcher.group(1); plugwiseID = actionMatcher.group(2); plugwiseCommand = actionMatcher.group(3); interval = Integer.valueOf(actionMatcher.group(4)); } else if (statusMatcher.matches()) { commandAsString = null; plugwiseID = statusMatcher.group(1); plugwiseCommand = statusMatcher.group(2); interval = Integer.valueOf(statusMatcher.group(3)); } PlugwiseCommandType type = PlugwiseCommandType.getCommandType(plugwiseCommand); if (PlugwiseCommandType.validateBinding(type, item)) { PlugwiseBindingConfigElement newElement = new PlugwiseBindingConfigElement(plugwiseID, type, interval); Command command = null; if (commandAsString == null) { // for those configuration strings that are not really linked to a openHAB command we // create a dummy Command to be able to store the configuration information // I have choosen to do that with NumberItems NumberItem dummy = new NumberItem(Integer.toString(counter)); command = createCommandFromString(dummy, Integer.toString(counter)); counter++; config.put(command, newElement); } else { command = createCommandFromString(item, commandAsString); config.put(command, newElement); } } else { String validItemType = PlugwiseCommandType.getValidItemTypes(plugwiseCommand); if (StringUtils.isEmpty(validItemType)) { throw new BindingConfigParseException( "'" + bindingConfig + "' is no valid binding type"); } else { throw new BindingConfigParseException( "'" + bindingConfig + "' is not bound to a valid item type. Valid item type(s): " + validItemType); } } } } else { return; } }