/** * 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.internal; import java.util.Dictionary; import org.apache.commons.lang.StringUtils; import org.creek.accessemail.connector.mail.MailConnector; import org.openhab.binding.mailcontrol.MailControlBindingProvider; import org.openhab.binding.mailcontrol.connection.ConnectorBuilder; import org.openhab.binding.mailcontrol.service.MessagesService; import org.openhab.binding.mailcontrol.service.ServiceException; import org.openhab.core.binding.AbstractActiveBinding; import org.openhab.core.types.Command; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Implement this class if you are going create an actively polling service like * querying a Website/Device. * * @author Andrey.Pereverzin * @since 1.7.0 */ public class MailControlBinding<T extends Command> extends AbstractActiveBinding<MailControlBindingProvider> implements ManagedService { private ConnectorBuilder connectorBuilder; private MessagesService<T> service; private static final Logger logger = LoggerFactory.getLogger(MailControlBinding.class); /** * the refresh interval which is used to poll values from the MailControl * server (optional, defaults to 60000ms) */ private long refreshInterval = 6000L; private Dictionary<String, ?> config; public MailControlBinding() { } @Override public void activate() { } @Override public void deactivate() { } /** * @{inheritDoc */ @Override protected long getRefreshInterval() { return refreshInterval; } /** * @{inheritDoc */ @Override protected String getName() { return "MailControl Refresh Service"; } /** * @{inheritDoc */ @Override protected void execute() { try { MailConnector connector = connectorBuilder.createAndCheckMailConnector(); service = new MessagesService<T>(connector, eventPublisher, config); service.receiveMessages(); } catch (ServiceException ex) { logger.error("Cannot receive messages", ex); } catch (ConfigurationException ex) { logger.error("Cannot receive messages", ex); } } protected void addBindingProvider(MailControlBindingProvider bindingProvider) { super.addBindingProvider(bindingProvider); } protected void removeBindingProvider(MailControlBindingProvider bindingProvider) { super.removeBindingProvider(bindingProvider); } /** * {@inheritDoc} */ @Override public void updated(Dictionary<String, ?> config) throws ConfigurationException { if (config != null) { this.config = config; this.connectorBuilder = new ConnectorBuilder(config); connectorBuilder.createAndCheckMailConnector(); // to override the default refresh interval one has to add a // parameter to openhab.cfg like // <bindingName>:refresh=<intervalInMs> String refreshIntervalString = (String) config.get("refresh"); if (StringUtils.isNotBlank(refreshIntervalString)) { refreshInterval = Long.parseLong(refreshIntervalString); } setProperlyConfigured(true); } } }