From ebfee560786ea52709696b763d5add619c9b33e8 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Tue, 27 Mar 2012 19:58:50 +0100 Subject: New interface, beginings of trying to make it work as an applet... :( --- src/net/cbaines/suca/CalendarApplet.java | 221 +++++++++++++------------------ 1 file changed, 90 insertions(+), 131 deletions(-) (limited to 'src/net/cbaines/suca/CalendarApplet.java') diff --git a/src/net/cbaines/suca/CalendarApplet.java b/src/net/cbaines/suca/CalendarApplet.java index 5569285..816084f 100644 --- a/src/net/cbaines/suca/CalendarApplet.java +++ b/src/net/cbaines/suca/CalendarApplet.java @@ -1,7 +1,7 @@ package net.cbaines.suca; -import java.awt.BorderLayout; -import java.awt.GridLayout; +import java.awt.Container; +import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedWriter; @@ -11,17 +11,17 @@ import java.io.IOException; import java.io.StringReader; import javax.security.auth.login.LoginException; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.JLabel; +import javax.swing.JOptionPane; 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 net.fortuna.ical4j.data.CalendarBuilder; @@ -31,38 +31,22 @@ import net.fortuna.ical4j.model.Calendar; @SuppressWarnings("serial") public class CalendarApplet extends JApplet { - private String calendarCSVString = null; - private String calendarICALString = null; + private CalendarApplet instance; - private JTabbedPane stageTabbedPane; + // The panel holding the stages + private Container stages; - // The panel used for the file fetch stuff - private JPanel csvFileFetchPanel; + // Load University Calendar + private JPanel calendarLoadingPanel; 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; + private JButton fetchCalendarButton; + private JProgressBar fetchCalendarProgress; + // iCal Calendar Creation Options private JPanel calendarCreationOptions; - private JProgressBar creationProgress; - private JButton createCalendarButton; private JCheckBox mergeDuplicateEventsWithSeperateLocations = new JCheckBox( "Merge Duplicate Events with Seperate Locations", true); private JCheckBox showTerms = new JCheckBox("Show Terms", true); @@ -70,8 +54,13 @@ public class CalendarApplet extends JApplet { private JCheckBox showSemesterWeeks = new JCheckBox("Show Semester Weeks", true); private JCheckBox mergeHeaders = new JCheckBox("Merge Headers", false); - // This is more of a development feature....? - private JTextArea calendarPreviewTextArea; + // Download Calendar + private JPanel downloadCalendarPanel; + private JButton donwloadCalendarButton; + + // Data + private volatile String calendarCSVString = null; + private volatile String calendarICALString = null; public void init() { // Execute a job on the event-dispatching thread: @@ -90,82 +79,76 @@ public class CalendarApplet extends JApplet { void createGUI() { try { - stageTabbedPane = new JTabbedPane(); + stages = getContentPane(); + stages.setLayout(new BoxLayout(stages, BoxLayout.PAGE_AXIS)); - // Create the first screen + // Load University Calendar Stage - csvFileFetchPanel = new JPanel(new GridLayout(1, 2)); + calendarLoadingPanel = new JPanel(); + calendarLoadingPanel.setBorder(BorderFactory.createTitledBorder("Load University Calendar")); - JTabbedPane csvFileFetchMethodsTabbedPane = new JTabbedPane(); - - JPanel loginPanel = new JPanel(); - JLabel usernameLabel = new JLabel("Username"); - loginPanel.add(usernameLabel); + JPanel usernamePanel = new JPanel(); + usernamePanel.add(new JLabel("Username")); usernameTextField = new JTextField(10); - loginPanel.add(usernameTextField); + usernamePanel.add(usernameTextField); + calendarLoadingPanel.add(usernamePanel); - JLabel passwordLabel = new JLabel("Password"); - loginPanel.add(passwordLabel); + JPanel passwordPanel = new JPanel(); + passwordPanel.add(new JLabel("Password")); passwordTextField = new JPasswordField(10); - loginPanel.add(passwordTextField); - - go = new JButton("Go"); - loginPanel.add(go); - - fetchProgress = new JProgressBar(); - fetchProgress.setIndeterminate(true); - fetchProgress.setVisible(false); - loginPanel.add(fetchProgress); + passwordPanel.add(passwordTextField); + calendarLoadingPanel.add(passwordPanel); - 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() { + fetchCalendarButton = new JButton("Fetch Calendar"); + fetchCalendarButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - go.setEnabled(false); new FetchThread().start(); } }); + calendarLoadingPanel.add(fetchCalendarButton); + + fetchCalendarProgress = new JProgressBar(); + fetchCalendarProgress.setIndeterminate(false); + fetchCalendarProgress.setValue(0); + calendarLoadingPanel.add(fetchCalendarProgress); - stageTabbedPane.addTab("Calendar Fetch", csvFileFetchPanel); + stages.add(calendarLoadingPanel); - // Calendar creation panel - calendarCreationPanel = new JPanel(new GridLayout(1, 2)); + // iCal Calendar Creation Options calendarCreationOptions = new JPanel(); + calendarCreationOptions.setBorder(BorderFactory.createTitledBorder("Calendar Options")); - createCalendarButton = new JButton("Create Calendar"); - createCalendarButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - createCalendarButton.setEnabled(false); - new CreationThread().start(); - } - }); - calendarCreationOptions.add(createCalendarButton); + calendarCreationOptions.add(mergeDuplicateEventsWithSeperateLocations); + calendarCreationOptions.add(showTerms); + calendarCreationOptions.add(showSemesters); + calendarCreationOptions.add(showSemesterWeeks); + calendarCreationOptions.add(mergeHeaders); + + stages.add(calendarCreationOptions); - JButton saveCalendarButton = new JButton("Save Calendar"); - saveCalendarButton.addActionListener(new ActionListener() { + // Calendar Download + + downloadCalendarPanel = new JPanel(); + downloadCalendarPanel.setBorder(BorderFactory.createTitledBorder("Download Calendar (iCal)")); + + donwloadCalendarButton = new JButton("Download Calendar"); + donwloadCalendarButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { + CreationThread creationThread = new CreationThread(); + creationThread.start(); JFileChooser fc = new JFileChooser(); int returnVal = fc.showSaveDialog(instance); // this = Applet if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); + try { + creationThread.join(); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } try { BufferedWriter out = new BufferedWriter(new FileWriter(file)); @@ -180,32 +163,10 @@ public class CalendarApplet extends JApplet { } }); - calendarCreationOptions.add(saveCalendarButton); - - calendarCreationOptions.add(mergeDuplicateEventsWithSeperateLocations); - calendarCreationOptions.add(showTerms); - calendarCreationOptions.add(showSemesters); - calendarCreationOptions.add(showSemesterWeeks); - calendarCreationOptions.add(mergeHeaders); - creationProgress = new JProgressBar(); - creationProgress.setIndeterminate(true); - creationProgress.setVisible(false); - calendarCreationOptions.add(creationProgress); + downloadCalendarPanel.add(donwloadCalendarButton); - calendarCreationPanel.add(calendarCreationOptions); + stages.add(downloadCalendarPanel); - calendarPreviewTextArea = new JTextArea(); - - calendarCreationPanel.add(new JScrollPane(calendarPreviewTextArea)); - - stageTabbedPane.addTab("Calendar Creation", calendarCreationPanel); - - 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(); } @@ -219,35 +180,43 @@ public class CalendarApplet extends JApplet { @Override public void run() { - System.out.println("Starting fetch thread"); + System.out.println("Start of fetch thread"); + fetchCalendarButton.setEnabled(false); + fetchCalendarProgress.setIndeterminate(true); + fetchCalendarProgress.setValue(0); String csvString; try { - fetchProgress.setValue(0); - fetchProgress.setIndeterminate(true); - 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"); + fetchCalendarButton.setEnabled(true); + fetchCalendarProgress.setIndeterminate(false); + fetchCalendarProgress.setValue(100); + } catch (LoginException e) { - fetchProgress.setIndeterminate(false); - fetchProgress.setValue(0); - fetchProgress.setString("Login Error"); - } + fetchCalendarButton.setEnabled(true); + fetchCalendarProgress.setIndeterminate(false); + fetchCalendarProgress.setValue(0); + + JOptionPane.showMessageDialog(instance, + "LoginException: Error logging in, try again, and perhaps also try logging in to SUSSED", + "Inane error", JOptionPane.ERROR_MESSAGE); + } catch (IOException e) { + fetchCalendarButton.setEnabled(true); + fetchCalendarProgress.setIndeterminate(false); + fetchCalendarProgress.setValue(0); + JOptionPane.showMessageDialog(instance, + "IOException: Error logging in, try again, and perhaps also try logging in to SUSSED", + "Inane error", JOptionPane.ERROR_MESSAGE); + } } } @@ -261,10 +230,6 @@ public class CalendarApplet extends JApplet { public void run() { System.out.println("Starting creation thread"); - creationProgress.setVisible(true); - creationProgress.setValue(0); - creationProgress.setIndeterminate(true); - SotonCalendarParser calParser = new SotonCalendarParser(); calParser.setMergeDuplicateEventsWithSeperateLocations(mergeDuplicateEventsWithSeperateLocations .isSelected()); @@ -277,12 +242,6 @@ public class CalendarApplet extends JApplet { try { Calendar calendar = builder.build(new StringReader(calendarCSVString)); calendarICALString = calendar.toString(); - calendarPreviewTextArea.setText(calendarICALString); - createCalendarButton.setEnabled(true); - - creationProgress.setIndeterminate(false); - creationProgress.setValue(100); - creationProgress.setString("Finished"); } catch (ParserException e) { e.printStackTrace(); } catch (IOException e) { -- cgit v1.2.3