/** * 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.rme; import java.io.InvalidClassException; import org.openhab.core.items.Item; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.PercentType; import org.openhab.core.types.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Represents all valid value selectors which could be processed by this * binding. * * @author Karel Goderis * @since 1.5.0 */ public enum RMEValueSelector { LEVEL("WaterLevel", PercentType.class, 1), MODE("Mode", OnOffType.class, 2), SOURCE("Source", OnOffType.class, 3), EXITPUMP("ExitPump", OnOffType.class, 4), ENTRYPUMP("EntryPump", OnOffType.class, 5), WATEREXCHANGE("WaterExchange", OnOffType.class, 6), CISTERNSUPPLY("CisternSupply", OnOffType.class, 7), OVERFLOWALARM("OverflowAlarm", OnOffType.class, 8), CISTERNBLOCKEDALARM("CisternBlockedAlarm", OnOffType.class, 9), FILTERCLEANING("FilterCleaning", OnOffType.class, 10); static final Logger logger = LoggerFactory.getLogger(RMEValueSelector.class); private final String text; private Class<? extends Type> typeClass; private int fieldIndex; private RMEValueSelector(final String text, Class<? extends Type> typeClass, int index) { this.text = text; this.typeClass = typeClass; this.fieldIndex = index; } @Override public String toString() { return text; } public Class<? extends Type> getTypeClass() { return typeClass; } public int getFieldIndex() { return fieldIndex; } /** * Procedure to validate selector string. * * @param valueSelector * selector string e.g. RawData, Command, Temperature * @return true if item is valid. * @throws IllegalArgumentException * Not valid value selector. * @throws InvalidClassException * Not valid class for value selector. */ public static boolean validateBinding(String valueSelector, Item item) throws IllegalArgumentException, InvalidClassException { for (RMEValueSelector c : RMEValueSelector.values()) { if (c.text.equals(valueSelector) && item != null) { logger.debug("Accepted types are {}", item.getAcceptedDataTypes()); logger.debug("typeclass is {}", c.getTypeClass()); if (item.getAcceptedDataTypes().contains(c.getTypeClass())) { return true; } else { throw new InvalidClassException("Not valid class for value selector"); } } } throw new IllegalArgumentException("Not valid value selector"); } /** * Procedure to convert selector string to value selector class. * * @param valueSelectorText * selector string e.g. RawData, Command, Temperature * @return corresponding selector value. * @throws InvalidClassException * Not valid class for value selector. */ public static RMEValueSelector getValueSelector(String valueSelectorText) throws IllegalArgumentException { for (RMEValueSelector c : RMEValueSelector.values()) { if (c.text.equals(valueSelectorText)) { return c; } } throw new IllegalArgumentException("Not valid value selector"); } }