aboutsummaryrefslogtreecommitdiff
path: root/src/net/cbaines/suca/CalendarApplet.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/cbaines/suca/CalendarApplet.java')
-rw-r--r--src/net/cbaines/suca/CalendarApplet.java212
1 files changed, 180 insertions, 32 deletions
diff --git a/src/net/cbaines/suca/CalendarApplet.java b/src/net/cbaines/suca/CalendarApplet.java
index 2b425fd..f9de766 100644
--- a/src/net/cbaines/suca/CalendarApplet.java
+++ b/src/net/cbaines/suca/CalendarApplet.java
@@ -1,30 +1,64 @@
package net.cbaines.suca;
import java.awt.BorderLayout;
+import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
+import java.io.StringReader;
+import javax.security.auth.login.LoginException;
import javax.swing.JApplet;
import javax.swing.JButton;
+import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
+import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
-import org.apache.commons.io.IOUtils;
+import net.fortuna.ical4j.data.CalendarBuilder;
+import net.fortuna.ical4j.data.ParserException;
+import net.fortuna.ical4j.model.Calendar;
@SuppressWarnings("serial")
public class CalendarApplet extends JApplet {
- JTextField usernameTextField;
- JPasswordField passwordTextField;
+ private String calendarCSVString = null;
+ private String calendarICALString = null;
- JTextArea csvTextArea;
+ private JTabbedPane stageTabbedPane;
+
+ // The panel used for the file fetch stuff
+ private JPanel csvFileFetchPanel;
+
+ private JLabel csvFileFetchInstructions;
+
+ private JTextField usernameTextField;
+ private JPasswordField passwordTextField;
+ private JButton go;
+
+ private JProgressBar fetchProgress;
+
+ private JButton csvFileSelectorButton;
+
+ private JTextArea csvTextArea;
+
+ private CalendarApplet instance;
+
+ // Panel for the stage controls
+
+ private JPanel controlsPanel;
+
+ // Panel for the calendar creation
+
+ private JPanel calendarCreationPanel;
public void init() {
// Execute a job on the event-dispatching thread:
@@ -41,42 +75,156 @@ public class CalendarApplet extends JApplet {
}
void createGUI() {
- JPanel loginPanel = new JPanel();
- JLabel usernameLabel = new JLabel("Username");
- loginPanel.add(usernameLabel);
- usernameTextField = new JTextField(10);
- loginPanel.add(usernameTextField);
+ try {
- JLabel passwordLabel = new JLabel("Password");
- loginPanel.add(passwordLabel);
- passwordTextField = new JPasswordField(10);
- loginPanel.add(passwordTextField);
+ stageTabbedPane = new JTabbedPane();
- JButton go = new JButton("Go");
- loginPanel.add(go);
+ // Create the first screen
- JPanel csvPanel = new JPanel();
- JButton downloadCsv = new JButton("Donwload csv");
- csvPanel.add(downloadCsv);
+ csvFileFetchPanel = new JPanel(new GridLayout(1, 2));
- csvTextArea = new JTextArea(100, 100);
- csvPanel.add(new JScrollPane(csvTextArea));
+ JTabbedPane csvFileFetchMethodsTabbedPane = new JTabbedPane();
- loginPanel.add(csvPanel);
+ JPanel loginPanel = new JPanel();
+ JLabel usernameLabel = new JLabel("Username");
+ loginPanel.add(usernameLabel);
+ usernameTextField = new JTextField(10);
+ loginPanel.add(usernameTextField);
- go.addActionListener(new ActionListener() {
+ JLabel passwordLabel = new JLabel("Password");
+ loginPanel.add(passwordLabel);
+ passwordTextField = new JPasswordField(10);
+ loginPanel.add(passwordTextField);
- @Override
- public void actionPerformed(ActionEvent arg0) {
- String csvString = new SotonCalendarFetcher(usernameTextField.getText(), String
- .valueOf(passwordTextField.getPassword())).fetchAndParseTimetable();
+ go = new JButton("Go");
+ loginPanel.add(go);
- csvTextArea.setText(csvString);
+ fetchProgress = new JProgressBar();
+ fetchProgress.setIndeterminate(true);
+ fetchProgress.setVisible(false);
+ loginPanel.add(fetchProgress);
- }
- });
+ csvFileFetchMethodsTabbedPane.addTab("Download", loginPanel);
+
+ JPanel csvFileLoadPanel = new JPanel();
+
+ csvFileSelectorButton = new JButton("Load csv file");
+ csvFileLoadPanel.add(csvFileSelectorButton);
+
+ csvFileFetchMethodsTabbedPane.addTab("Load", csvFileLoadPanel);
+ csvFileFetchMethodsTabbedPane.setEnabledAt(1, false);
+
+ csvFileFetchPanel.add(csvFileFetchMethodsTabbedPane);
+
+ csvTextArea = new JTextArea(100, 100);
+ csvFileFetchPanel.add(new JScrollPane(csvTextArea));
+
+ go.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ go.setEnabled(false);
+ new FetchThread().start();
+ }
+ });
+
+ stageTabbedPane.addTab("Calendar Fetch", csvFileFetchPanel);
+
+ // Calendar creation panel
+ calendarCreationPanel = new JPanel();
+
+ JButton createCalendarButton = new JButton("Create Calendar");
+ createCalendarButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ SotonCalendarParser calParser = new SotonCalendarParser();
+
+ CalendarBuilder builder = new CalendarBuilder(calParser);
+ try {
+ Calendar calendar = builder.build(new StringReader(calendarCSVString));
+ calendarICALString = calendar.toString();
+ System.out.println(calendarICALString);
+ } catch (ParserException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ calendarCreationPanel.add(createCalendarButton);
+
+ JButton saveCalendarButton = new JButton("Save Calendar");
+ saveCalendarButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ JFileChooser fc = new JFileChooser();
+ int returnVal = fc.showSaveDialog(instance); // this = Applet
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File aFile = fc.getSelectedFile();
+
+ try {
+ BufferedWriter out = new BufferedWriter(new FileWriter(aFile));
+ out.write(calendarICALString);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ }
+ });
+ calendarCreationPanel.add(saveCalendarButton);
+
+ stageTabbedPane.addTab("Calendar Creation", calendarCreationPanel);
- getContentPane().add(loginPanel, BorderLayout.CENTER);
+ controlsPanel = new JPanel();
+ controlsPanel.add(new JButton("Previous"));
+ controlsPanel.add(new JButton("Next"));
+ getContentPane().add(stageTabbedPane, BorderLayout.CENTER);
+ getContentPane().add(controlsPanel, BorderLayout.SOUTH);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
+
+ private class FetchThread extends Thread {
+
+ public FetchThread() {
+ super();
+ }
+
+ @Override
+ public void run() {
+ System.out.println("Starting fetch thread");
+
+ String csvString;
+ try {
+ fetchProgress.setVisible(true);
+
+ csvString = new SotonCalendarFetcher(usernameTextField.getText(), String.valueOf(passwordTextField
+ .getPassword())).fetchAndParseTimetable();
+
+ System.out.println("Finished fetch");
+
+ fetchProgress.setIndeterminate(false);
+ fetchProgress.setValue(100);
+ fetchProgress.setString("Finished");
+
+ calendarCSVString = csvString;
+ csvTextArea.setText(calendarCSVString);
+ go.setEnabled(true);
+
+ System.out.println("Finished fetch thread");
+
+ } catch (LoginException e) {
+ fetchProgress.setIndeterminate(false);
+ fetchProgress.setValue(0);
+ fetchProgress.setString("Login Error");
+ }
+
+ }
+ }
+
}