org.openhab.action.twitter.internal.Twitter.java Source code

Java tutorial

Introduction

Here is the source code for org.openhab.action.twitter.internal.Twitter.java

Source

/**
 * 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.action.twitter.internal;

import org.apache.commons.lang.StringUtils;
import org.openhab.core.scriptengine.action.ActionDoc;
import org.openhab.core.scriptengine.action.ParamDoc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import twitter4j.DirectMessage;
import twitter4j.Status;
import twitter4j.TwitterException;

/**
 * This class provides static methods that can be used in automation rules for
 * sending Tweets via Twitter.
 *
 * @author Ben Jones
 * @author Thomas.Eichstaedt-Engelen
 * @author Kai Kreuzer
 * @since 1.3.0
 */
public class Twitter {

    private static final Logger logger = LoggerFactory.getLogger(Twitter.class);

    /** Flag to enable/disable the Twitter client (optional, defaults to 'false') */
    static boolean isEnabled = false;

    /** The maximum length of a Tweet or direct message */
    private static final int CHARACTER_LIMIT = 140;

    static twitter4j.Twitter client = null;

    /**
     * Sends a Tweet via Twitter
     * 
     * @param tweetTxt the Tweet to send
     * 
     * @return <code>true</code>, if sending the tweet has been successful and
     *         <code>false</code> in all other cases.
     */
    @ActionDoc(text = "Sends a Tweet via Twitter", returns = "<code>true</code>, if sending the tweet has been successful and <code>false</code> in all other cases.")
    public static boolean sendTweet(@ParamDoc(name = "tweetTxt", text = "the Tweet to send") String tweetTxt) {
        if (!TwitterActionService.isProperlyConfigured) {
            logger.debug("Twitter client is not yet configured > execution aborted!");
            return false;
        }
        if (!isEnabled) {
            logger.debug("Twitter client is disabled > execution aborted!");
            return false;
        }

        try {
            // abbreviate the Tweet to meet the 140 character limit ...
            tweetTxt = StringUtils.abbreviate(tweetTxt, CHARACTER_LIMIT);
            // send the Tweet
            Status status = client.updateStatus(tweetTxt);
            logger.debug("Successfully sent Tweet '{}'", status.getText());
            return true;
        } catch (TwitterException e) {
            logger.error("Failed to send Tweet '" + tweetTxt + "' because of: " + e.getLocalizedMessage());
            return false;
        }
    }

    /**
     * Sends a direct message via Twitter
     * 
     * @param recipientId the receiver of this direct message
     * @param messageTxt the direct message to send
     * 
     * @return <code>true</code>, if sending the direct message has been successful and
     *         <code>false</code> in all other cases.
     */
    @ActionDoc(text = "Sends a direct message via Twitter", returns = "<code>true</code>, if sending the direct message has been successful and <code>false</code> in all other cases.")
    public static boolean sendDirectMessage(
            @ParamDoc(name = "recipientId", text = "the receiver of this direct message") String recipientId,
            @ParamDoc(name = "messageTxt", text = "the direct message to send") String messageTxt) {
        if (!isEnabled) {
            logger.debug("Twitter client is disabled > execution aborted!");
            return false;
        }

        try {
            // abbreviate the Tweet to meet the 140 character limit ...
            messageTxt = StringUtils.abbreviate(messageTxt, CHARACTER_LIMIT);
            // send the direct message
            DirectMessage message = client.sendDirectMessage(recipientId, messageTxt);
            logger.debug("Successfully sent direct message '{}' to @", message.getText(),
                    message.getRecipientScreenName());
            return true;
        } catch (TwitterException e) {
            logger.error("Failed to send Tweet '" + messageTxt + "' because of: " + e.getLocalizedMessage());
            return false;
        }
    }

}