/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.sonance.internal; import org.openhab.binding.sonance.SonanceBindingProvider; import org.openhab.core.binding.BindingConfig; import org.openhab.core.items.Item; import org.openhab.core.library.items.NumberItem; import org.openhab.core.library.items.SwitchItem; import org.openhab.model.item.binding.AbstractGenericBindingProvider; import org.openhab.model.item.binding.BindingConfigParseException; /** * This class is responsible for parsing the binding configuration. Binding * configuration format: ip:port:(mute|volume|power)(:00)? Where 00 is the group * number (for example for the DSP8-130 IP Codes group codes are 00 (group A) to * 07 (group H)) * * Examples: * <ul> * <li>10.0.0.100:52000:mute:00 - mute zone A * <li>10.0.0.100:52000:volume:01 - volume of zone B * <li>10.0.0.200:52000:volume:07 - volume of zone H of another amplifier * <li>10.0.0.100:52000:power - sleep mode of amplifier * </ul> * * @author Laurens Van Acker * @since 1.8.0 */ public class SonanceGenericBindingProvider extends AbstractGenericBindingProvider implements SonanceBindingProvider { @Override public String getBindingType() { return "sonance"; } @Override public void validateItemType(Item item, String bindingConfig) throws BindingConfigParseException { if (!(item instanceof SwitchItem || item instanceof NumberItem)) { throw new BindingConfigParseException( "item '" + item.getName() + "' is of type '" + item.getClass().getSimpleName() + "', only Switch- and NumberItems are allowed - please check your *.items configuration"); } } @Override public void processBindingConfiguration(String context, Item item, String bindingConfig) throws BindingConfigParseException { super.processBindingConfiguration(context, item, bindingConfig); SonanceBindingConfig config = new SonanceBindingConfig(); String[] configParts = bindingConfig.trim().split(":"); if (configParts.length != 4 && configParts.length != 3) { throw new BindingConfigParseException("Sonance binding must contain three or four parts separated by ':'"); } config.ip = configParts[0].trim(); config.port = Integer.parseInt(configParts[1].trim()); if (configParts.length == 4) { config.group = configParts[3].trim(); } if (configParts[2].trim().equals("mute")) { config.type = Type.MUTE; } if (configParts[2].trim().equals("volume")) { config.type = Type.VOLUME; } if (configParts[2].trim().equals("power")) { config.type = Type.POWER; } if (config.type == null) { throw new BindingConfigParseException("Third part most be mute, volume or power"); } // parse bindingconfig here ... addBindingConfig(item, config); } /** * This is a helper class holding binding specific configuration details * * @author Laurens Van Acker * @since 1.8.0 */ public enum Type { MUTE, VOLUME, POWER } /** * Every item has an ip and port to connect to and a group (music zone) to * modify. Possible changes are muting a zone, changing the volume of a zone * or waking up or putting the amplifier to sleep. * * @author Laurens Van Acker * */ class SonanceBindingConfig implements BindingConfig { String ip; int port; Type type; String group; public Boolean isMute() { return type.equals(Type.MUTE); } public Boolean isVolume() { return type.equals(Type.VOLUME); } public Boolean isPower() { return type.equals(Type.POWER); } } /* * (non-Javadoc) * * @see * org.openhab.binding.sonance.SonanceBindingProvider#getIP(java.lang.String * ) */ @Override public String getIP(String itemName) { SonanceBindingConfig config = (SonanceBindingConfig) bindingConfigs.get(itemName); return config != null ? config.ip : null; } /* * (non-Javadoc) * * @see * org.openhab.binding.sonance.SonanceBindingProvider#getPort(java.lang. * String) */ @Override public int getPort(String itemName) { SonanceBindingConfig config = (SonanceBindingConfig) bindingConfigs.get(itemName); return config != null ? config.port : null; } /* * (non-Javadoc) * * @see * org.openhab.binding.sonance.SonanceBindingProvider#getGroup(java.lang * .String) */ @Override public String getGroup(String itemName) { SonanceBindingConfig config = (SonanceBindingConfig) bindingConfigs.get(itemName); return config != null ? config.group : null; } /* * (non-Javadoc) * * @see * org.openhab.binding.sonance.SonanceBindingProvider#isMute(java.lang.String * ) */ @Override public Boolean isMute(String itemName) { SonanceBindingConfig config = (SonanceBindingConfig) bindingConfigs.get(itemName); return config != null ? config.isMute() : null; } /* * (non-Javadoc) * * @see * org.openhab.binding.sonance.SonanceBindingProvider#isVolume(java.lang * .String) */ @Override public Boolean isVolume(String itemName) { SonanceBindingConfig config = (SonanceBindingConfig) bindingConfigs.get(itemName); return config != null ? config.isVolume() : null; } /* * (non-Javadoc) * * @see * org.openhab.binding.sonance.SonanceBindingProvider#isPower(java.lang. * String) */ @Override public Boolean isPower(String itemName) { SonanceBindingConfig config = (SonanceBindingConfig) bindingConfigs.get(itemName); return config != null ? config.isPower() : null; } }