/** * 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.homematic.internal.converter.state; import org.openhab.binding.homematic.internal.model.HmValueItem; import org.openhab.core.library.types.StringType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Converts between openHAB StringType and Homematic values. * * @author Gerhard Riegler * @since 1.5.0 */ public class StringTypeConverter extends AbstractTypeConverter<StringType> { private static final Logger logger = LoggerFactory.getLogger(StringTypeConverter.class); /** * {@inheritDoc} */ @Override protected Boolean toBoolean(StringType type, HmValueItem hmValueItem) { String result = toString(type, hmValueItem); return "true".equalsIgnoreCase(result) || !"0".equals(result) ? Boolean.TRUE : Boolean.FALSE; } /** * {@inheritDoc} */ @Override protected Number toNumber(StringType type, HmValueItem hmValueItem) { String value = toString(type, hmValueItem); if (hmValueItem.isIntegerValue()) { return Integer.valueOf(value); } return round(Double.valueOf(value)).doubleValue(); } /** * {@inheritDoc} */ @Override protected String toString(StringType type, HmValueItem hmValueItem) { if (hmValueItem.hasValueList()) { int idx = hmValueItem.getValueListIndex(type.toString()); if (idx != -1) { return String.valueOf(idx); } else { logger.warn("Can't find value '{}' in valueList for item {}, converting plain value", type.toString(), hmValueItem); } } return type.toString(); } /** * {@inheritDoc} */ @Override protected StringType fromBoolean(HmValueItem hmValueItem) { return fromString(hmValueItem); } /** * {@inheritDoc} */ @Override protected StringType fromNumber(HmValueItem hmValueItem) { String valueListValue = getValueListValue(hmValueItem); if (valueListValue != null) { return new StringType(valueListValue); } Double value = Double.valueOf(hmValueItem.getValue().toString()); if (hmValueItem.isIntegerValue()) { return new StringType(String.valueOf(value.intValue())); } return new StringType(String.valueOf(round(value).doubleValue())); } /** * {@inheritDoc} */ @Override protected StringType fromString(HmValueItem hmValueItem) { String valueListValue = getValueListValue(hmValueItem); if (valueListValue != null) { return new StringType(valueListValue); } return new StringType(hmValueItem.getValue().toString()); } /** * If the item is bound to a valueList variable, return the string * representation. */ private String getValueListValue(HmValueItem hmValueItem) { if (hmValueItem.hasValueList()) { String valueListValue = hmValueItem.getValueListValue(); if (valueListValue != null) { return valueListValue; } else { logger.warn("Can't find value '{}' in valueList for item {}, converting plain value", hmValueItem.getValue(), hmValueItem); } } return null; } }