package com.alta189.deskbin.gui.account;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import com.alta189.deskbin.gui.JLinkLabel;
import com.alta189.deskbin.util.KeyStore;
import com.alta189.deskbin.util.KeyUtils;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
public class TwitterAccountPanel extends AccountPanel {
private static final long serialVersionUID = -8557808074636047365L;
private JTextField tokenentry;
private JLabel status;
private JLinkLabel authurl;
private JButton refresh;
private JButton logout;
private Twitter twitter;
private RequestToken reqtoken;
private AccessToken acctoken;
@Override
protected void buildControls() {
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(KeyUtils.getKey("twitter-consumerkey"), KeyUtils.getKey("twitter-consumersec"));
acctoken = KeyStore.get("twitter-oauth");
/* reqtoken is created whenever a token is needed */
reqtoken = null;
createFieldGroup("Twitter-Compatible Image Services");
status = new JLabel();
addField("Status", status);
authurl = new JLinkLabel();
addField(authurl);
createEmptySpace();
tokenentry = new JTextField();
addField("PIN", tokenentry);
refresh = new JButton();
addField(refresh);
logout = new JButton("Remove Authorization");
addField(logout);
refresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
refreshInterface();
}
});
logout.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
clearAccessToken();
}
});
refreshInterface();
}
private void clearAccessToken() {
acctoken = null;
refreshInterface();
}
private void refreshInterface() {
if (acctoken == null && !tokenentry.getText().isEmpty()) {
try {
acctoken = twitter.getOAuthAccessToken(reqtoken, tokenentry.getText());
tokenentry.setText("<verified : press OK to save>");
} catch (TwitterException e) {
acctoken = null;
}
}
if (acctoken != null) {
twitter.setOAuthAccessToken(acctoken);
User user = null;
try {
user = twitter.verifyCredentials();
} catch (TwitterException e) {
if (e.getStatusCode() == 401) {
acctoken = null;
}
}
if (user != null) {
status.setText("Authorized as @" + user.getScreenName());
authurl.setText("Your credentials are up to date.");
authurl.setURL(null);
tokenentry.setEnabled(false);
refresh.setText("Refresh Status");
logout.setEnabled(true);
}
}
if (acctoken == null) {
status.setText("Not Authorized");
authurl.setText("Authorize with Twitter");
// request token needs to be recreated
try {
twitter.setOAuthAccessToken(null);
reqtoken = twitter.getOAuthRequestToken();
} catch (TwitterException e) {
throw new RuntimeException(e);
}
authurl.setURL(reqtoken.getAuthorizationURL());
tokenentry.setText("");
tokenentry.setEnabled(true);
refresh.setText("Refresh and Authorize");
logout.setEnabled(false);
}
}
@Override
public boolean onLoseFocus() {
return true;
}
@Override
public void onGainFocus() {
}
@Override
public void save() {
KeyStore.store("twitter-oauth", acctoken);
}
}