/**
* 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.mailcontrol.service;
import static org.creek.mailcontrol.model.data.DataType.*;
import org.creek.mailcontrol.model.data.CommandTransformable;
import org.creek.mailcontrol.model.data.DataType;
import org.creek.mailcontrol.model.data.DecimalData;
import org.creek.mailcontrol.model.data.HSBData;
import org.creek.mailcontrol.model.data.IncreaseDecreaseData;
import org.creek.mailcontrol.model.data.ItemCommandData;
import org.creek.mailcontrol.model.data.OnOffData;
import org.creek.mailcontrol.model.data.OpenClosedData;
import org.creek.mailcontrol.model.data.PercentData;
import org.creek.mailcontrol.model.data.StopMoveData;
import org.creek.mailcontrol.model.data.StringData;
import org.creek.mailcontrol.model.data.UpDownData;
import org.openhab.binding.mailcontrol.model.data.OpenhabCommandTransformable;
import org.openhab.binding.mailcontrol.model.data.OpenhabDecimalData;
import org.openhab.binding.mailcontrol.model.data.OpenhabHSBData;
import org.openhab.binding.mailcontrol.model.data.OpenhabIncreaseDecreaseData;
import org.openhab.binding.mailcontrol.model.data.OpenhabOnOffData;
import org.openhab.binding.mailcontrol.model.data.OpenhabOpenClosedData;
import org.openhab.binding.mailcontrol.model.data.OpenhabPercentData;
import org.openhab.binding.mailcontrol.model.data.OpenhabStopMoveData;
import org.openhab.binding.mailcontrol.model.data.OpenhabStringData;
import org.openhab.binding.mailcontrol.model.data.OpenhabUpDownData;
import org.openhab.core.events.EventPublisher;
import org.openhab.core.types.Command;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Andrey.Pereverzin
* @since 1.7.0
*/
public class ItemCommandProcessor<T extends Command> {
private static final Logger logger = LoggerFactory.getLogger(ItemCommandProcessor.class);
private final EventPublisher eventPublisher;
public ItemCommandProcessor(EventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
public void processItemCommand(ItemCommandData itemData) {
logger.debug("Processing item state: " + itemData);
CommandTransformable command = itemData.getCommand();
logger.debug("Command: " + command);
OpenhabCommandTransformable<T> openhabCommand = getOpenhabCommand(command);
logger.debug("openhabCommand: " + openhabCommand);
T commandValue = openhabCommand.getCommandValue();
logger.debug("commandValue: " + commandValue);
eventPublisher.postCommand(itemData.getItemId(), openhabCommand.getCommandValue());
}
@SuppressWarnings("unchecked")
private OpenhabCommandTransformable<T> getOpenhabCommand(CommandTransformable command) {
DataType dataType = command.getCommandType();
if (dataType == DECIMAL) {
return (OpenhabCommandTransformable<T>) new OpenhabDecimalData((DecimalData) command);
} else if (dataType == HSB) {
return (OpenhabCommandTransformable<T>) new OpenhabHSBData((HSBData) command);
} else if (dataType == INCREASE_DECREASE) {
return (OpenhabCommandTransformable<T>) new OpenhabIncreaseDecreaseData((IncreaseDecreaseData) command);
} else if (dataType == ON_OFF) {
return (OpenhabCommandTransformable<T>) new OpenhabOnOffData((OnOffData) command);
} else if (dataType == OPEN_CLOSED) {
return (OpenhabCommandTransformable<T>) new OpenhabOpenClosedData((OpenClosedData) command);
} else if (dataType == PERCENT) {
return (OpenhabCommandTransformable<T>) new OpenhabPercentData((PercentData) command);
} else if (dataType == STOP_MOVE) {
return (OpenhabCommandTransformable<T>) new OpenhabStopMoveData((StopMoveData) command);
} else if (dataType == STRING) {
return (OpenhabCommandTransformable<T>) new OpenhabStringData((StringData) command);
} else /* if (StateType == UP_DOWN) */ {
return (OpenhabCommandTransformable<T>) new OpenhabUpDownData((UpDownData) command);
}
}
}