org.webcat.notifications.protocols.TwitterProtocol.java Source code

Java tutorial

Introduction

Here is the source code for org.webcat.notifications.protocols.TwitterProtocol.java

Source

/*==========================================================================*\
 |  $Id: TwitterProtocol.java,v 1.1 2010/05/11 14:51:35 aallowat Exp $
 |*-------------------------------------------------------------------------*|
 |  Copyright (C) 2009 Virginia Tech
 |
 |  This file is part of Web-CAT.
 |
 |  Web-CAT is free software; you can redistribute it and/or modify
 |  it under the terms of the GNU Affero General Public License as published
 |  by the Free Software Foundation; either version 3 of the License, or
 |  (at your option) any later version.
 |
 |  Web-CAT is distributed in the hope that it will be useful,
 |  but WITHOUT ANY WARRANTY; without even the implied warranty of
 |  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 |  GNU General Public License for more details.
 |
 |  You should have received a copy of the GNU Affero General Public License
 |  along with Web-CAT; if not, see <http://www.gnu.org/licenses/>.
\*==========================================================================*/

package org.webcat.notifications.protocols;

import org.apache.log4j.Logger;
import org.webcat.core.User;
import org.webcat.core.messaging.IMessageSettings;
import org.webcat.notifications.SendMessageJob;
import twitter4j.AsyncTwitter;
import twitter4j.AsyncTwitterFactory;
import twitter4j.TwitterAdapter;
import twitter4j.TwitterException;
import twitter4j.TwitterMethod;

//-------------------------------------------------------------------------
/**
 * A notification protocol that delivers messages as Twitter feed updates.
 *
 * @author Tony Allevato
 * @version $Id: TwitterProtocol.java,v 1.1 2010/05/11 14:51:35 aallowat Exp $
 */
public class TwitterProtocol extends Protocol {
    //~ Constructors ..........................................................

    // ----------------------------------------------------------
    public TwitterProtocol() {
        twitterFactory = new AsyncTwitterFactory(new Adapter());
    }

    //~ Methods ...............................................................

    // ----------------------------------------------------------
    @Override
    public void sendMessage(SendMessageJob message, User user, IMessageSettings settings) throws Exception {
        final String username = settings.stringSettingForKey(USERNAME_SETTING, null);
        String password = settings.stringSettingForKey(PASSWORD_SETTING, null);

        if (username == null || password == null) {
            return;
        }

        String content = message.shortBody();

        if (content.length() > 140) {
            content = content.substring(0, 137) + "...";
        }

        AsyncTwitter twitter = twitterFactory.getInstance(username, password);
        twitter.updateStatus(content);
    }

    // ----------------------------------------------------------
    @Override
    public boolean isBroadcast() {
        return true;
    }

    // ----------------------------------------------------------
    @Override
    public String name() {
        return "Twitter";
    }

    //~ Private classes .......................................................

    // ----------------------------------------------------------
    private class Adapter extends TwitterAdapter {
        // ----------------------------------------------------------
        @Override
        public void onException(TwitterException e, TwitterMethod method) {
            if (method == TwitterMethod.UPDATE_STATUS) {
                log.warn("An error occurred when updating the Twitter " + "feed", e);
            }
        }
    }

    //~ Static/instance variables .............................................

    private AsyncTwitterFactory twitterFactory;

    private static final String USERNAME_SETTING = "org.webcat.notifications.protocols.TwitterProtocol.username";
    private static final String PASSWORD_SETTING = "org.webcat.notifications.protocols.TwitterProtocol.password";

    private static final Logger log = Logger.getLogger(TwitterProtocol.class);
}