366 lines
11 KiB
Java
366 lines
11 KiB
Java
/* 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.spreadsheet.FeedURLFactory;
|
|
import com.google.gdata.client.spreadsheet.SpreadsheetService;
|
|
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
|
|
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
|
|
import com.google.gdata.data.spreadsheet.WorksheetEntry;
|
|
import com.google.gdata.data.spreadsheet.WorksheetFeed;
|
|
import com.google.gdata.util.ServiceException;
|
|
|
|
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.util.List;
|
|
|
|
import javax.swing.JButton;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JList;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.event.ListSelectionEvent;
|
|
import javax.swing.event.ListSelectionListener;
|
|
|
|
/**
|
|
* Window for selecting a spreadsheet.
|
|
*
|
|
* This is a little bit of a complicated class, but the main GData
|
|
* parts to know are:
|
|
*
|
|
* - populateSpreadsheetList just makes a few calls in order to
|
|
* get a list of spreadsheets
|
|
* - populateWorksheetList will get a list of worksheets within
|
|
* that spreadsheet
|
|
*
|
|
*
|
|
*/
|
|
public class ChooseSpreadsheetFrame extends JFrame {
|
|
|
|
/** The Google Spreadsheets GData service. */
|
|
private SpreadsheetService service;
|
|
|
|
private FeedURLFactory factory;
|
|
|
|
private List<SpreadsheetEntry> spreadsheetEntries;
|
|
|
|
private JList spreadsheetListBox;
|
|
|
|
private List<WorksheetEntry> worksheetEntries;
|
|
|
|
private JList worksheetListBox;
|
|
|
|
private JTextField ajaxLinkField;
|
|
|
|
private JTextField worksheetsFeedUrlField;
|
|
|
|
private JTextField cellsFeedUrlField;
|
|
|
|
private JTextField listFeedUrlField;
|
|
|
|
private JButton viewWorksheetsButton;
|
|
|
|
private JButton submitCellsButton;
|
|
|
|
private JButton submitListButton;
|
|
|
|
|
|
/** Starts the selection off with a spreadsheet feed helper. */
|
|
public ChooseSpreadsheetFrame(SpreadsheetService spreadsheetService) {
|
|
service = spreadsheetService;
|
|
factory = FeedURLFactory.getDefault();
|
|
initializeGui();
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the list of spreadsheets, and fills the list box.
|
|
*/
|
|
private void populateSpreadsheetList() {
|
|
if (retrieveSpreadsheetList()) {
|
|
fillSpreadsheetListBox();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Asks Google Spreadsheets for a list of all the spreadsheets
|
|
* the user has access to.
|
|
* @return true if successful
|
|
*/
|
|
private boolean retrieveSpreadsheetList() {
|
|
SpreadsheetFeed feed;
|
|
|
|
try {
|
|
feed = service.getFeed(
|
|
factory.getSpreadsheetsFeedUrl(), SpreadsheetFeed.class);
|
|
} catch (IOException e) {
|
|
SpreadsheetApiDemo.showErrorBox(e);
|
|
return false;
|
|
} catch (ServiceException e) {
|
|
SpreadsheetApiDemo.showErrorBox(e);
|
|
return false;
|
|
}
|
|
|
|
this.spreadsheetEntries = feed.getEntries();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Fills up the list-box of spreadsheets with the already-computed entries.
|
|
*/
|
|
private void fillSpreadsheetListBox() {
|
|
String[] stringsForListbox = new String[spreadsheetEntries.size()];
|
|
|
|
for (int i = 0; i < spreadsheetEntries.size(); i++) {
|
|
SpreadsheetEntry entry = spreadsheetEntries.get(i);
|
|
|
|
// Title of Spreadsheet (author, updated 2006-6-20 7:30PM)
|
|
stringsForListbox[i] =
|
|
entry.getTitle().getPlainText()
|
|
+ " (" + entry.getAuthors().get(0).getEmail()
|
|
+ ", updated " + entry.getUpdated().toUiString()
|
|
+ ")";
|
|
}
|
|
|
|
spreadsheetListBox.setListData(stringsForListbox);
|
|
}
|
|
|
|
/**
|
|
* Gets the list of worksheets in the specified spreadsheet,
|
|
* and fills the list box.
|
|
* @param spreadsheet the selected spreadsheet
|
|
*/
|
|
private void populateWorksheetList(SpreadsheetEntry spreadsheet) {
|
|
if (retrieveWorksheetList(spreadsheet)) {
|
|
fillWorksheetListBox(spreadsheet.getTitle().getPlainText());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the list of worksheets from Google Spreadsheets.
|
|
* @param spreadsheet the spreadsheet to get a list of worksheets for
|
|
* @return true if successful
|
|
*/
|
|
private boolean retrieveWorksheetList(SpreadsheetEntry spreadsheet) {
|
|
WorksheetFeed feed;
|
|
|
|
try {
|
|
feed = service.getFeed(
|
|
spreadsheet.getWorksheetFeedUrl(), WorksheetFeed.class);
|
|
} catch (IOException e) {
|
|
SpreadsheetApiDemo.showErrorBox(e);
|
|
return false;
|
|
} catch (ServiceException e) {
|
|
SpreadsheetApiDemo.showErrorBox(e);
|
|
return false;
|
|
}
|
|
|
|
this.worksheetEntries = feed.getEntries();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Fills up the list-box of worksheets with the already computed entries.
|
|
*/
|
|
private void fillWorksheetListBox(String spreadsheetTitle) {
|
|
String[] stringsForListbox = new String[worksheetEntries.size()];
|
|
|
|
for (int i = 0; i < worksheetEntries.size(); i++) {
|
|
WorksheetEntry entry = worksheetEntries.get(i);
|
|
|
|
// Title Of Worksheet (T)
|
|
stringsForListbox[i] = entry.getTitle().getPlainText()
|
|
+ " (in " + spreadsheetTitle + ")";
|
|
}
|
|
|
|
worksheetListBox.setListData(stringsForListbox);
|
|
}
|
|
|
|
/**
|
|
* Handles when a user presses the "View Worksheets" button.
|
|
*
|
|
*/
|
|
private void handleViewWorksheetsButton() {
|
|
int selected = spreadsheetListBox.getSelectedIndex();
|
|
|
|
if (spreadsheetEntries != null && selected >= 0) {
|
|
populateWorksheetList(spreadsheetEntries.get(selected));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles when a user presses a "View Cells Demo" button.
|
|
*/
|
|
private void handleSubmitCellsButton() {
|
|
int selected = worksheetListBox.getSelectedIndex();
|
|
|
|
if (worksheetEntries != null && selected >= 0) {
|
|
CellBasedSpreadsheetPanel.createWindow(
|
|
service, worksheetEntries.get(selected).getCellFeedUrl());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles when a user presses a "View List Demo" button.
|
|
*/
|
|
private void handleSubmitListButton() {
|
|
int selected = worksheetListBox.getSelectedIndex();
|
|
|
|
if (worksheetEntries != null && selected >= 0) {
|
|
ListBasedSpreadsheetPanel.createWindow(service,
|
|
worksheetEntries.get(selected).getListFeedUrl());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Shows the feed URL's as you select spreadsheets.
|
|
*/
|
|
private void handleSpreadsheetSelection() {
|
|
int selected = spreadsheetListBox.getSelectedIndex();
|
|
|
|
if (spreadsheetEntries != null && selected >= 0) {
|
|
SpreadsheetEntry entry = spreadsheetEntries.get(selected);
|
|
|
|
ajaxLinkField.setText(
|
|
entry.getHtmlLink().getHref());
|
|
worksheetsFeedUrlField.setText(
|
|
entry.getWorksheetFeedUrl().toExternalForm());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Shows the feed URL's as you select worksheets within a spreadsheets.
|
|
*/
|
|
private void handleWorksheetSelection() {
|
|
int selected = worksheetListBox.getSelectedIndex();
|
|
|
|
if (worksheetEntries != null && selected >= 0) {
|
|
WorksheetEntry entry = worksheetEntries.get(selected);
|
|
|
|
cellsFeedUrlField.setText(entry.getCellFeedUrl().toExternalForm());
|
|
listFeedUrlField.setText(entry.getListFeedUrl().toExternalForm());
|
|
}
|
|
}
|
|
|
|
|
|
// ---- GUI code from here on down ----------------------------------------
|
|
|
|
private void initializeGui() {
|
|
setTitle("Choose your Spreadsheet");
|
|
|
|
Container panel = getContentPane();
|
|
panel.setLayout(new GridLayout(2, 1));
|
|
|
|
// Top part - choose a spreadsheet
|
|
|
|
JPanel spreadsheetPanel = new JPanel();
|
|
spreadsheetPanel.setLayout(new BorderLayout());
|
|
|
|
spreadsheetListBox = new JList();
|
|
spreadsheetPanel.add(new JScrollPane(spreadsheetListBox),
|
|
BorderLayout.CENTER);
|
|
spreadsheetListBox.addListSelectionListener(new ActionHandler());
|
|
|
|
Container topButtonsPanel = new JPanel();
|
|
topButtonsPanel.setLayout(new GridLayout(3, 1));
|
|
|
|
viewWorksheetsButton = new JButton("View Worksheets");
|
|
viewWorksheetsButton.addActionListener(new ActionHandler());
|
|
topButtonsPanel.add(viewWorksheetsButton);
|
|
panel.add(spreadsheetPanel);
|
|
|
|
ajaxLinkField = new JTextField();
|
|
ajaxLinkField.setEditable(false);
|
|
topButtonsPanel.add(ajaxLinkField);
|
|
worksheetsFeedUrlField = new JTextField();
|
|
worksheetsFeedUrlField.setEditable(false);
|
|
topButtonsPanel.add(worksheetsFeedUrlField);
|
|
|
|
spreadsheetPanel.add(topButtonsPanel, BorderLayout.SOUTH);
|
|
panel.add(spreadsheetPanel);
|
|
|
|
// Bottom part - choose a worksheet
|
|
|
|
JPanel worksheetPanel = new JPanel();
|
|
worksheetPanel.setLayout(new BorderLayout());
|
|
|
|
worksheetListBox = new JList(
|
|
new String[] { "[Please click 'View Worksheets' for a list.]" });
|
|
worksheetPanel.add(new JScrollPane(worksheetListBox), BorderLayout.CENTER);
|
|
worksheetListBox.addListSelectionListener(new ActionHandler());
|
|
|
|
Container bottomButtonsPanel = new JPanel();
|
|
bottomButtonsPanel.setLayout(new GridLayout(4, 1));
|
|
|
|
submitCellsButton = new JButton("Cells Demo");
|
|
submitCellsButton.addActionListener(new ActionHandler());
|
|
bottomButtonsPanel.add(submitCellsButton);
|
|
|
|
cellsFeedUrlField = new JTextField();
|
|
cellsFeedUrlField.setEditable(false);
|
|
bottomButtonsPanel.add(cellsFeedUrlField);
|
|
|
|
submitListButton = new JButton("List Demo");
|
|
submitListButton.addActionListener(new ActionHandler());
|
|
bottomButtonsPanel.add(submitListButton);
|
|
|
|
listFeedUrlField = new JTextField();
|
|
listFeedUrlField.setEditable(false);
|
|
bottomButtonsPanel.add(listFeedUrlField);
|
|
|
|
worksheetPanel.add(bottomButtonsPanel, BorderLayout.SOUTH);
|
|
panel.add(worksheetPanel);
|
|
|
|
populateSpreadsheetList();
|
|
|
|
pack();
|
|
setSize(700, 600);
|
|
setVisible(true);
|
|
|
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
|
}
|
|
|
|
private class ActionHandler
|
|
implements ActionListener, ListSelectionListener {
|
|
public void actionPerformed(ActionEvent ae) {
|
|
if (ae.getSource() == viewWorksheetsButton) {
|
|
handleViewWorksheetsButton();
|
|
} else if (ae.getSource() == submitCellsButton) {
|
|
handleSubmitCellsButton();
|
|
} else if (ae.getSource() == submitListButton) {
|
|
handleSubmitListButton();
|
|
}
|
|
}
|
|
|
|
public void valueChanged(ListSelectionEvent e) {
|
|
if (e.getSource() == spreadsheetListBox) {
|
|
handleSpreadsheetSelection();
|
|
} else if (e.getSource() == worksheetListBox) {
|
|
handleWorksheetSelection();
|
|
}
|
|
}
|
|
}
|
|
}
|