Inital commit
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
/* Copyright (c) 2008 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package sample.spreadsheet.gui;
|
||||
|
||||
import com.google.gdata.client.GoogleService.CaptchaRequiredException;
|
||||
import com.google.gdata.client.spreadsheet.SpreadsheetService;
|
||||
import com.google.gdata.util.AuthenticationException;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Container;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPasswordField;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingConstants;
|
||||
|
||||
/**
|
||||
* A Swing window for logging in to Google Spreadsheets.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class LoginFrame extends JFrame {
|
||||
|
||||
/** The spreadsheet service. */
|
||||
private SpreadsheetService service;
|
||||
|
||||
/** Field for entering username. */
|
||||
private JTextField usernameField;
|
||||
|
||||
/** Field for entering password. */
|
||||
private JPasswordField passwordField;
|
||||
|
||||
/** Image to display as a CAPTCHA (distorted letters to verify human). */
|
||||
private JLabel captchaImage;
|
||||
|
||||
/** Place where user types the captcha answer. */
|
||||
private JTextField captchaAnswerField;
|
||||
|
||||
/** Button to log in. */
|
||||
private JButton submitButton;
|
||||
|
||||
/**
|
||||
* The captcha token that is issued,
|
||||
* null if there was no CAPTCHA challenge.
|
||||
*/
|
||||
private String captchaToken = null;
|
||||
|
||||
|
||||
/**
|
||||
* Starts out the login window, for a particular service and
|
||||
* feed root, with initial username and password (these can
|
||||
* be blank strings).
|
||||
*/
|
||||
public LoginFrame(SpreadsheetService service,
|
||||
String username, String password) {
|
||||
this.service = service;
|
||||
|
||||
initializeGui();
|
||||
|
||||
usernameField.setText(username);
|
||||
passwordField.setText(password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Try authenticating the user with the provided username and
|
||||
* password.
|
||||
*/
|
||||
private boolean authenticate(
|
||||
String username, String password) {
|
||||
try {
|
||||
if (captchaToken == null) {
|
||||
|
||||
// No CAPTCHA challenge was presented.
|
||||
// Proceed to the next step.
|
||||
service.setUserCredentials(username, password);
|
||||
} else {
|
||||
|
||||
// Use the CAPTCHA token and answer to help the
|
||||
// authentication.
|
||||
service.setUserCredentials(username, password, captchaToken,
|
||||
captchaAnswerField.getText());
|
||||
}
|
||||
return true;
|
||||
} catch (CaptchaRequiredException e) {
|
||||
|
||||
// Get the CAPTCHA token and display the image.
|
||||
captchaToken = e.getCaptchaToken();
|
||||
try {
|
||||
captchaImage.setIcon(new ImageIcon(new URL(e.getCaptchaUrl())));
|
||||
captchaAnswerField.setText("(Please write the above letters here)");
|
||||
} catch (IOException ioe) {
|
||||
captchaImage.setText("(Error parsing captcha image URL)");
|
||||
}
|
||||
return false;
|
||||
} catch (AuthenticationException e) {
|
||||
SpreadsheetApiDemo.showErrorBox(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the submit button being pressed.
|
||||
*/
|
||||
private void handleSubmitButton() {
|
||||
String username = usernameField.getText();
|
||||
String password = new String(passwordField.getPassword());
|
||||
|
||||
if (authenticate(username, password)) {
|
||||
new ChooseSpreadsheetFrame(service);
|
||||
dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---- GUI code from here on down ----------------------------------------
|
||||
|
||||
/**
|
||||
* Handles all clicks.
|
||||
*/
|
||||
private class ActionHandler implements ActionListener {
|
||||
public void actionPerformed(ActionEvent ae) {
|
||||
if (ae.getSource() == submitButton) {
|
||||
handleSubmitButton();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes all the GUI widgets.
|
||||
*/
|
||||
private void initializeGui() {
|
||||
setTitle("Log in to Google Spreadsheets");
|
||||
|
||||
Container panel = getContentPane();
|
||||
|
||||
panel.setLayout(new BorderLayout());
|
||||
|
||||
JPanel topPanel = new JPanel();
|
||||
topPanel.setLayout(new GridLayout(4, 1));
|
||||
|
||||
topPanel.add(new JLabel("Log in to Google Spreadsheets!"));
|
||||
|
||||
usernameField = new JTextField();
|
||||
topPanel.add(usernameField);
|
||||
|
||||
passwordField = new JPasswordField();
|
||||
topPanel.add(passwordField);
|
||||
|
||||
submitButton = new JButton("Log in!");
|
||||
submitButton.addActionListener(new ActionHandler());
|
||||
topPanel.add(submitButton);
|
||||
|
||||
panel.add(topPanel, BorderLayout.NORTH);
|
||||
|
||||
captchaImage = new JLabel("(A CAPTCHA may appear here)",
|
||||
SwingConstants.CENTER);
|
||||
panel.add(captchaImage, BorderLayout.CENTER);
|
||||
|
||||
captchaAnswerField = new JTextField();
|
||||
captchaAnswerField.setText("(type captcha answer here)");
|
||||
panel.add(captchaAnswerField, BorderLayout.SOUTH);
|
||||
|
||||
setSize(300, 240);
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user