aboutsummaryrefslogtreecommitdiff
path: root/src/uk/org/ury
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/org/ury')
-rw-r--r--src/uk/org/ury/config/Auth.java21
-rw-r--r--src/uk/org/ury/config/ConfigReader.java61
-rw-r--r--src/uk/org/ury/config/Database.java19
-rw-r--r--src/uk/org/ury/database/DatabaseDriver.java2
-rw-r--r--src/uk/org/ury/library/LibraryUtils.java22
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewer.java6
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewerPanel.java56
7 files changed, 142 insertions, 45 deletions
diff --git a/src/uk/org/ury/config/Auth.java b/src/uk/org/ury/config/Auth.java
new file mode 100644
index 0000000..ff22c12
--- /dev/null
+++ b/src/uk/org/ury/config/Auth.java
@@ -0,0 +1,21 @@
+package uk.org.ury.config;
+
+import uk.org.ury.database.UserClass;
+
+public class Auth {
+
+ private String user;
+ private String pass;
+ private UserClass type;
+
+ public String getUser() { return user; }
+ public String getPass() { return pass; }
+ public UserClass getType() { return type; }
+
+ public Auth(String user, String pass, UserClass type) {
+ this.user = user;
+ this.pass = pass;
+ this.type = type;
+ }
+
+} \ No newline at end of file
diff --git a/src/uk/org/ury/config/ConfigReader.java b/src/uk/org/ury/config/ConfigReader.java
new file mode 100644
index 0000000..6b66e24
--- /dev/null
+++ b/src/uk/org/ury/config/ConfigReader.java
@@ -0,0 +1,61 @@
+package uk.org.ury.config;
+
+import java.io.File;
+import org.w3c.dom.*;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import uk.org.ury.database.UserClass;
+
+public class ConfigReader {
+
+ private Database database;
+ private Auth auth;
+
+ public Database getDatabase() { return database; }
+ public Auth getAuth() { return auth; }
+
+ public ConfigReader() {
+
+ try {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse (new File("res/conf.xml"));
+ doc.getDocumentElement().normalize();
+
+ System.out.println(doc.getDocumentElement().getNodeName());
+
+ String user = doc.getElementsByTagName("user").item(0).getTextContent();
+ String pass = doc.getElementsByTagName("pass").item(0).getTextContent();
+ UserClass type;
+ if(doc.getElementsByTagName("type").item(0).getTextContent().toLowerCase().equals("read_only")) {
+ type = UserClass.READ_ONLY;
+ } else if(doc.getElementsByTagName("type").item(0).getTextContent().toLowerCase().equals("read_write")) {
+ type = UserClass.READ_WRITE;
+ } else {
+ throw new IllegalArgumentException("Unused user class.");
+ }
+ auth = new Auth(user, pass, type);
+
+ String host = doc.getElementsByTagName("host").item(0).getTextContent();
+ int port = Integer.parseInt(doc.getElementsByTagName("port").item(0).getTextContent().trim());
+ String db = doc.getElementsByTagName("db").item(0).getTextContent();
+ database = new Database(host, port, db);
+ }
+
+ catch (SAXParseException err) {
+ System.out.println ("** Parsing error" + ", line " + err.getLineNumber () + ", uri " + err.getSystemId ());
+ System.out.println(" " + err.getMessage ());
+ }
+ catch (SAXException e) {
+ Exception x = e.getException ();
+ ((x == null) ? e : x).printStackTrace ();
+ }
+ catch (Throwable t) {
+ t.printStackTrace ();
+ }
+ }
+}
diff --git a/src/uk/org/ury/config/Database.java b/src/uk/org/ury/config/Database.java
new file mode 100644
index 0000000..c1074df
--- /dev/null
+++ b/src/uk/org/ury/config/Database.java
@@ -0,0 +1,19 @@
+package uk.org.ury.config;
+
+public class Database {
+
+ private String host;
+ private int port;
+ private String db;
+
+ public String getHost() { return host; }
+ public int getPort() { return port; }
+ public String getDb() { return db; }
+
+ public Database(String host, int port, String db) {
+ this.host = host;
+ this.port = port;
+ this.db = db;
+ }
+
+} \ No newline at end of file
diff --git a/src/uk/org/ury/database/DatabaseDriver.java b/src/uk/org/ury/database/DatabaseDriver.java
index 1982215..732714c 100644
--- a/src/uk/org/ury/database/DatabaseDriver.java
+++ b/src/uk/org/ury/database/DatabaseDriver.java
@@ -23,7 +23,7 @@ import uk.org.ury.database.exceptions.MissingCredentialsException;
public class DatabaseDriver
{
/* The JDBC path used to connect to the URY database. */
- private String DATABASE_PATH = "jdbc:postgresql://localhost/membership";
+ private String DATABASE_PATH = "jdbc:postgresql://4574.co.uk/membership";
/* The database connection. */
private Connection conn;
diff --git a/src/uk/org/ury/library/LibraryUtils.java b/src/uk/org/ury/library/LibraryUtils.java
index 87d3339..0809d13 100644
--- a/src/uk/org/ury/library/LibraryUtils.java
+++ b/src/uk/org/ury/library/LibraryUtils.java
@@ -32,10 +32,7 @@ public class LibraryUtils
*
* @param db The database to query.
*
- * @param title The title fragment to include in the search.
- * Can be empty or null.
- *
- * @param artist The artist fragment to include in the search.
+ * @param title The search fragment to include in the search.
* Can be empty or null.
*
* @throws IllegalArgumentException if db, title or artist
@@ -49,22 +46,23 @@ public class LibraryUtils
*/
public static List<LibraryItem>
- search (DatabaseDriver db, String title, String artist)
+ search (DatabaseDriver db, String search)
throws QueryFailureException
{
if (db == null)
throw new IllegalArgumentException ("Database handle is null.");
- if (title == null)
- throw new IllegalArgumentException ("Title string is null.");
-
- if (artist == null)
- throw new IllegalArgumentException ("Artist string is null.");
+ if (search == null)
+ throw new IllegalArgumentException ("Search string is null.");
+
+ if (search.equals(""))
+ //TODO: Be nicer about this
+ System.exit(1);
ResultSet rs = null;
List<LibraryItem> results = new ArrayList<LibraryItem> ();
- Object[] params = {"%" + title + "%", "%" + artist + "%"};
+ Object[] params = {"%" + search + "%", "%" + search + "%"};
try
{
@@ -78,7 +76,7 @@ public class LibraryUtils
+ " INNER JOIN member AS a ON (a.memberid = r.memberid_add)"
+ " LEFT JOIN member AS b ON (b.memberid = r.memberid_lastedit)"
+ " WHERE title ILIKE ?"
- + " AND artist ILIKE ?;", params, 50);
+ + " OR artist ILIKE ?;", params, 50);
}
catch (SQLException e)
{
diff --git a/src/uk/org/ury/library/viewer/LibraryViewer.java b/src/uk/org/ury/library/viewer/LibraryViewer.java
index 57ef117..970235a 100644
--- a/src/uk/org/ury/library/viewer/LibraryViewer.java
+++ b/src/uk/org/ury/library/viewer/LibraryViewer.java
@@ -7,6 +7,7 @@ import java.util.List;
import javax.swing.SwingUtilities;
+import uk.org.ury.config.ConfigReader;
import uk.org.ury.database.DatabaseDriver;
import uk.org.ury.database.UserClass;
import uk.org.ury.database.exceptions.MissingCredentialsException;
@@ -42,6 +43,7 @@ public class LibraryViewer extends AbstractFrontendModule
public static void
main (String[] args)
{
+ new ConfigReader();
LibraryViewer lv = new LibraryViewer ();
lv.runFrontendInFrame ();
}
@@ -167,11 +169,11 @@ public class LibraryViewer extends AbstractFrontendModule
*/
public void
- doSearch (String title, String artist)
+ doSearch (String search)
{
try
{
- libraryList = LibraryUtils.search (dd, title, artist);
+ libraryList = LibraryUtils.search (dd, search);
}
catch (QueryFailureException e)
{
diff --git a/src/uk/org/ury/library/viewer/LibraryViewerPanel.java b/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
index 37f36eb..cf2edfe 100644
--- a/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
+++ b/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
@@ -5,6 +5,7 @@ package uk.org.ury.library.viewer;
import java.awt.BorderLayout;
import java.awt.Dimension;
+import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -43,11 +44,9 @@ public class LibraryViewerPanel extends FrontendPanel
private JTable resultsTable;
private JScrollPane resultsPane;
- private JLabel titleLabel;
- private JLabel artistLabel;
+ private JLabel searchLabel;
- private JTextField titleField;
- private JTextField artistField;
+ private JTextField searchField;
private JButton searchButton;
@@ -76,28 +75,32 @@ public class LibraryViewerPanel extends FrontendPanel
layout.setAutoCreateGaps (true);
layout.setAutoCreateContainerGaps (true);
- titleLabel = new JLabel ("By title: ");
- artistLabel = new JLabel ("By artist: ");
+ searchLabel = new JLabel ("Search");
+ searchLabel.setFont(new Font("Verdana", Font.BOLD, 14));
- titleField = new JTextField ();
+ searchField = new JTextField ();
- titleField.setPreferredSize (new Dimension (250, 15));
-
- titleLabel.setDisplayedMnemonic ('T');
- titleLabel.setLabelFor (titleField);
-
- artistField = new JTextField ();
- artistLabel.setDisplayedMnemonic ('A');
- artistLabel.setLabelFor (artistField);
+ searchField.setPreferredSize (new Dimension (250, 25));
+ searchField.setFont(new Font("Verdana", Font.BOLD, 14));
+ searchLabel.setDisplayedMnemonic ('T');
+ searchLabel.setLabelFor (searchField);
+
searchButton = new JButton ("Search");
+
+ searchField.addActionListener(new ActionListener() {
+ public void actionPerformed (ActionEvent event) {
+ master.doSearch (searchField.getText ());
+ resultsTable.setModel (new LibraryTableModel (master.getLibraryList ()));
+ }
+ });
searchButton.addActionListener (new ActionListener ()
{
public void
actionPerformed (ActionEvent event)
{
- master.doSearch (titleField.getText (), artistField.getText ());
+ master.doSearch (searchField.getText ());
resultsTable.setModel (new LibraryTableModel (master.getLibraryList ()));
}
});
@@ -110,11 +113,9 @@ public class LibraryViewerPanel extends FrontendPanel
(
layout.createSequentialGroup ()
.addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
- .addComponent (titleLabel)
- .addComponent (artistLabel))
+ .addComponent (searchLabel))
.addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
- .addComponent (titleField)
- .addComponent (artistField))
+ .addComponent (searchField))
.addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
.addComponent (searchButton))
);
@@ -123,16 +124,13 @@ public class LibraryViewerPanel extends FrontendPanel
(
layout.createSequentialGroup ()
.addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
- .addComponent (titleLabel)
- .addComponent (titleField)
+ .addComponent (searchLabel)
+ .addComponent (searchField)
.addComponent (searchButton))
- .addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
- .addComponent (artistLabel)
- .addComponent (artistField))
);
- layout.linkSize (SwingConstants.HORIZONTAL, titleField, artistField);
- layout.linkSize (SwingConstants.VERTICAL, titleField, artistField);
+ layout.linkSize (SwingConstants.HORIZONTAL, searchField);
+ layout.linkSize (SwingConstants.VERTICAL, searchField);
add (groupPanel, BorderLayout.NORTH);
@@ -149,9 +147,7 @@ public class LibraryViewerPanel extends FrontendPanel
// Explanation (TODO: Subclass?)
- JTextArea explanation = new JTextArea ("To narrow your search, type part or all of the record title or artist"
- + " into the respective box above. If you leave a box blank, it will"
- + " not be used in the search.");
+ JTextArea explanation = new JTextArea ("To narrow your search, type part or all of the record title or artist into the box above.");
explanation.setLineWrap (true);
explanation.setWrapStyleWord (true);