/** * 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.message.MessageType.*; import java.util.Dictionary; import java.util.List; import java.util.Set; import org.creek.accessemail.connector.mail.MailConnector; import org.creek.mailcontrol.model.data.ItemCommandData; import org.creek.mailcontrol.model.data.ItemStateData; import org.creek.mailcontrol.model.message.GenericMessage; import org.creek.mailcontrol.model.message.GenericRequestTransformer; import org.creek.mailcontrol.model.message.ItemCommandRequestMessage; import org.creek.mailcontrol.model.message.ItemStateRequestMessage; import org.creek.mailcontrol.model.message.TransformException; 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 MessagesProcessor<T extends Command> { private static final Logger logger = LoggerFactory.getLogger(MessagesProcessor.class); private final MessagesSender messagesSender; private final GenericRequestTransformer requestTransformer; private final ItemCommandProcessor<T> itemCommandProcessor; private final ItemStateRequestProcessor itemStateRequestProcessor; public MessagesProcessor(MailConnector mailConnector, EventPublisher eventPublisher, Dictionary<String, ?> config) { this.messagesSender = new MessagesSender(mailConnector, config); this.requestTransformer = new GenericRequestTransformer(); this.itemCommandProcessor = new ItemCommandProcessor<T>(eventPublisher); this.itemStateRequestProcessor = new ItemStateRequestProcessor(); } public void processReceivedMessages(Set<Object> messages) throws TransformException, ServiceException { logger.debug("Processing messages"); for (Object msg : messages) { if (msg instanceof String) { logger.debug("Message: " + msg); GenericMessage message = requestTransformer.transform((String) msg); logger.debug("Processing message: " + message); if (message.getMessageType() == ITEM_COMMAND_REQUEST_MESSAGE) { ItemCommandData itemCommand = (ItemCommandData) ((ItemCommandRequestMessage) message) .getItemCommand(); itemCommandProcessor.processItemCommand(itemCommand); } else if (message.getMessageType() == ITEM_STATE_REQUEST_MESSAGE) { ItemStateRequestMessage itemStateRequestMessage = (ItemStateRequestMessage) message; ItemStateData itemState = itemStateRequestProcessor .getItemState(itemStateRequestMessage.getItemId()); messagesSender.sendMessage(message, itemState); } else if (message.getMessageType() == ITEMS_STATE_REQUEST_MESSAGE) { List<ItemStateData> itemStates = itemStateRequestProcessor.getItemStates(); messagesSender.sendMessage(message, itemStates); } } } } }