diff options
Diffstat (limited to 'src/net/cbaines/suca/CalendarApplet.java')
-rw-r--r-- | src/net/cbaines/suca/CalendarApplet.java | 212 |
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"); + } + + } + } + } |