aboutsummaryrefslogtreecommitdiff
path: root/src/uk/org/ury/library/viewer
diff options
context:
space:
mode:
authorMatt Windsor <mbw500@student.cs.york.ac.uk>2011-02-17 23:28:47 +0000
committerMatt Windsor <mbw500@student.cs.york.ac.uk>2011-02-17 23:28:47 +0000
commit8f3c9af4bb9edb599bdc6c8da24e74beee4e1bf1 (patch)
tree48c2dd82034844aa44c513369d494656efdc6fcb /src/uk/org/ury/library/viewer
Initial commit; initial work on the library viewer which can be run either as an applet or an application; database connection is set up to connect to localhost as testing has necessitated using a gSTM SSH tunnel.
Diffstat (limited to 'src/uk/org/ury/library/viewer')
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewer.java197
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewerPanel.java130
2 files changed, 327 insertions, 0 deletions
diff --git a/src/uk/org/ury/library/viewer/LibraryViewer.java b/src/uk/org/ury/library/viewer/LibraryViewer.java
new file mode 100644
index 0000000..234e1eb
--- /dev/null
+++ b/src/uk/org/ury/library/viewer/LibraryViewer.java
@@ -0,0 +1,197 @@
+package uk.org.ury.library.viewer;
+
+import java.lang.reflect.InvocationTargetException;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.SwingUtilities;
+
+import uk.org.ury.database.DatabaseDriver;
+import uk.org.ury.database.UserClass;
+import uk.org.ury.database.exceptions.MissingCredentialsException;
+import uk.org.ury.frontend.AbstractFrontendModule;
+import uk.org.ury.frontend.FrontendError;
+import uk.org.ury.frontend.FrontendFrame;
+import uk.org.ury.frontend.FrontendModule;
+import uk.org.ury.library.LibraryItem;
+
+public class LibraryViewer extends AbstractFrontendModule
+{
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2782366476480563739L;
+ private List<LibraryItem> libraryList;
+ private LibraryViewerPanel panel;
+ private FrontendFrame frame;
+
+
+ /**
+ * Main function, for running this module as a standalone
+ * application.
+ *
+ * @param args The command-line argument array.
+ */
+
+ public static void
+ main (String[] args)
+ {
+ LibraryViewer lv = new LibraryViewer ();
+ lv.runFrontendInFrame ();
+ }
+
+
+ /**
+ * Construct a new LibraryViewer.
+ */
+
+ public
+ LibraryViewer ()
+ {
+ frame = null;
+ panel = new LibraryViewerPanel (this);
+ }
+
+
+ /**
+ * Initialise the library viewer frontend as an applet.
+ */
+
+ public void
+ init ()
+ {
+ frame = null;
+ panel = new LibraryViewerPanel (this);
+
+
+ try
+ {
+ SwingUtilities.invokeAndWait (new Runnable ()
+ {
+ public void
+ run ()
+ {
+ panel.setOpaque (true);
+ setContentPane (panel);
+
+ runFrontend ();
+ }
+
+ });
+ }
+ catch (InterruptedException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace ();
+ }
+ catch (InvocationTargetException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace ();
+ }
+ }
+
+
+ /**
+ * Run the library viewer frontend as an applet.
+ */
+
+ public void
+ start ()
+ {
+ frame = null;
+ panel = new LibraryViewerPanel (this);
+
+ add (panel);
+ }
+
+ /**
+ * Run the library viewer frontend in a FrontendFrame.
+ */
+
+ public void
+ runFrontendInFrame ()
+ {
+ FrontendFrame frame = new FrontendFrame (panel);
+ this.frame = frame;
+
+ runFrontend ();
+ }
+
+
+ /**
+ * Run the library viewer frontend.
+ */
+
+ private void
+ runFrontend ()
+ {
+ DatabaseDriver dd = null;
+
+ try
+ {
+ dd = new DatabaseDriver (UserClass.READ_ONLY);
+ }
+ catch (MissingCredentialsException e)
+ {
+ // TODO: Privilege de-escalation
+ FrontendError.reportFatal (e.getMessage (), frame);
+ }
+ catch (Exception f)
+ {
+ FrontendError.reportFatal (f.getMessage (), frame);
+ }
+
+
+ System.out.println ("connection success");
+
+ ResultSet rs = dd.executeQuery ("SELECT title, artist, recordlabel AS label, status, media AS medium, format,"
+ + " datereleased, EXTRACT(EPOCH FROM dateadded) as dateadded,"
+ + " EXTRACT(EPOCH FROM datetime_lastedit) AS dateedited,"
+ + " shelfletter, shelfnumber, cdid, memberid_add, memberid_lastedit,"
+ + " a.fname AS fnameadd, a.sname AS snameadd, b.fname AS fnameedit, b.sname AS snameedit"
+ + " FROM rec_record AS r"
+ + " INNER JOIN member AS a ON (a.memberid = r.memberid_add)"
+ + " LEFT JOIN member AS b ON (b.memberid = r.memberid_lastedit)");
+
+
+ libraryList = new ArrayList<LibraryItem> ();
+
+ try
+ {
+ while (rs.next ())
+ {
+ LibraryItem li = new LibraryItem ();
+
+ li.setTitle (rs.getString ("title"));
+ li.setArtist (rs.getString ("artist"));
+ li.setLabel (rs.getString ("label"));
+ li.setStatus (rs.getString ("status"));
+ li.setMedium (rs.getString ("medium"));
+ li.setFormat (rs.getString ("format"));
+ li.setDateReleased (rs.getString ("datereleased"));
+ li.setDateEdited (rs.getString ("dateedited"));
+ li.setShelfLetter (rs.getString ("shelfletter"));
+ li.setShelfNumber (rs.getString ("shelfnumber"));
+ li.setCdID (rs.getString ("cdid"));
+ li.setAddMemberID (rs.getInt ("memberid_add"));
+ li.setEditMemberID (rs.getInt ("memberid_lastedit"));
+ li.setAddForename (rs.getString ("fnameadd"));
+ li.setAddSurname (rs.getString ("snameadd"));
+ li.setEditForename (rs.getString ("fnameedit"));
+ li.setEditSurname (rs.getString ("snameedit"));
+
+ System.out.println (li);
+
+ libraryList.add (li);
+ }
+ }
+ catch (SQLException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/uk/org/ury/library/viewer/LibraryViewerPanel.java b/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
new file mode 100644
index 0000000..6a100a6
--- /dev/null
+++ b/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
@@ -0,0 +1,130 @@
+/**
+ *
+ */
+package uk.org.ury.library.viewer;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.GroupLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+
+import uk.org.ury.frontend.FrontendPanel;
+
+/**
+ * @author Matt Windsor
+ */
+
+public class LibraryViewerPanel extends FrontendPanel
+{
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2441616418398056712L;
+
+
+ /* Controller of this panel. */
+ private LibraryViewer master;
+
+ /* Panel widgets. */
+ private JLabel titleLabel;
+ private JLabel artistLabel;
+
+ private JTextField titleField;
+ private JTextField artistField;
+
+ private JButton searchButton;
+
+
+ /**
+ * Construct a new LibraryViewerPanel.
+ *
+ * @param master The LibraryViewer controlling this LibraryViewerPanel.
+ */
+
+ public
+ LibraryViewerPanel (LibraryViewer master)
+ {
+ super ();
+
+ this.master = master;
+
+ GroupLayout layout = new GroupLayout (this);
+
+ setLayout (layout);
+
+ layout.setAutoCreateGaps (true);
+ layout.setAutoCreateContainerGaps (true);
+
+ titleLabel = new JLabel ("By title: ");
+ artistLabel = new JLabel ("By artist: ");
+
+ titleField = new JTextField ("Type part of the title here.");
+ titleLabel.setDisplayedMnemonic ('T');
+ titleLabel.setLabelFor (titleField);
+
+ artistField = new JTextField ("Type part of the artist name here.");
+ artistLabel.setDisplayedMnemonic ('A');
+ artistLabel.setLabelFor (artistField);
+
+ searchButton = new JButton ("Search");
+
+ searchButton.addActionListener (new ActionListener ()
+ {
+ public void
+ actionPerformed (ActionEvent event)
+ {
+ }
+ });
+
+
+ // Layout
+
+
+ layout.setHorizontalGroup
+ (
+ layout.createSequentialGroup ()
+ .addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+ .addComponent (titleLabel)
+ .addComponent (artistLabel))
+ .addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+ .addComponent (titleField)
+ .addComponent (artistField))
+ .addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+ .addComponent (searchButton))
+ );
+
+ layout.setVerticalGroup
+ (
+ layout.createSequentialGroup ()
+ .addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+ .addComponent (titleLabel)
+ .addComponent (titleField)
+ .addComponent (searchButton))
+ .addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
+ .addComponent (artistLabel)
+ .addComponent (artistField))
+ );
+
+ layout.linkSize(SwingConstants.HORIZONTAL, titleField, artistField);
+ layout.linkSize(SwingConstants.VERTICAL, titleField, artistField);
+ }
+
+
+ /**
+ * @return the name of the panel.
+ *
+ * @see uk.org.ury.frontend.FrontendPanel#getName()
+ */
+
+ @Override
+ public String
+ getName ()
+ {
+ return "Library Viewer Demo";
+ }
+
+}