/**
* 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.zwave.internal.converter.state;
import java.lang.reflect.ParameterizedType;
import org.openhab.core.types.State;
/**
* Converts raw Z-Wave values to openHAB states.
*
* @author Jan-Willem Spuij
* @since 1.4.0
* @param <ZWAVE_TYPE> the type of the raw Z-Wave value.
* @param <OPENHAB_TYPE> the type of the openHAB state.
*/
public abstract class ZWaveStateConverter<ZWAVE_TYPE, OPENHAB_TYPE extends State> {
/**
* Returns the type of the openHAB {@link State} that this {@link ZWaveStateConverter} converts to.
*
* @return the supported {@link State}
*/
@SuppressWarnings("unchecked")
public Class<? extends State> getState() {
return (Class<? extends State>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[1];
}
/**
* Returns the type the state converter converts from.
*
* @return the supported Z-Wave type
*/
public Class<?> getType() {
return (Class<?>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
/**
* Converts a Z-Wave value to an OpenHab state.
*
* @param value the Z-Wave value to convert.
* @return the openHAB state to convert to.
*/
protected abstract OPENHAB_TYPE convert(ZWAVE_TYPE value);
/**
* Converts a Z-Wave value to an OpenHab state.
*
* @param value the Z-Wave value to convert.
* @return the openHAB state to convert to.
*/
@SuppressWarnings("unchecked")
public State convertFromValueToState(Object value) {
if (value == null) {
return null;
}
return convert((ZWAVE_TYPE) value);
}
}