aboutsummaryrefslogtreecommitdiff
path: root/src/uk/org/ury/show/ShowUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/org/ury/show/ShowUtils.java')
-rw-r--r--src/uk/org/ury/show/ShowUtils.java361
1 files changed, 169 insertions, 192 deletions
diff --git a/src/uk/org/ury/show/ShowUtils.java b/src/uk/org/ury/show/ShowUtils.java
index aa041d9..32125ec 100644
--- a/src/uk/org/ury/show/ShowUtils.java
+++ b/src/uk/org/ury/show/ShowUtils.java
@@ -1,6 +1,14 @@
-/**
+/*
+ * ShowUtils.java
+ * ------------------
+ *
+ * Part of the URY Backend Platform
+ *
+ * V0.00 2011/03/21
*
+ * (C) 2011 URY Computing
*/
+
package uk.org.ury.show;
import java.sql.ResultSet;
@@ -8,6 +16,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.ResourceBundle;
import uk.org.ury.database.DatabaseDriver;
import uk.org.ury.database.exceptions.QueryFailureException;
@@ -15,199 +24,167 @@ import uk.org.ury.database.exceptions.QueryFailureException;
import uk.org.ury.show.item.ShowItem;
import uk.org.ury.show.item.ShowItemProperty;
-
/**
- * A set of common utility routines to facilitate the extraction of
- * show items from the show storage areas of the URY database.
+ * A set of common utility routines to facilitate the extraction of show items
+ * from the show storage areas of the URY database.
*
- * @author Matt Windsor
- *
+ * @author Matt Windsor
*/
+public class ShowUtils {
+ /**
+ * The number of channels reserved for show items.
+ *
+ * TODO: move this somewhere more appropriate.
+ */
+ public static final int NUM_CHANNELS = 3;
+
+ // Maximum number of results to pull from database
+ private static final int MAX_RESULTS = 50;
+
+ // Resource bundle (for exception reasons)
+ private static ResourceBundle rb = ResourceBundle.getBundle(ShowUtils.class
+ .getPackage().getName() + ".ShowUtils");
+
+ /**
+ * Return the names of the public track folders, or "bins".
+ *
+ * @param db
+ * The database to query.
+ *
+ * @return a list of the public folder names. The list may be empty.
+ *
+ * @throws IllegalArgumentException
+ * if the database is null, the show ID is negative or the
+ * channel index falls out of bounds.
+ *
+ * @throws QueryFailureException
+ * if the database backend yielded an error while executing the
+ * search query.
+ */
+ public static List<String> getPublicFolders(DatabaseDriver db)
+ throws QueryFailureException {
+ if (db == null)
+ throw new IllegalArgumentException(
+ rb.getString("ERR_DB_HANDLE_IS_NULL"));
+
+ List<String> results = new ArrayList<String>();
+
+ ResultSet rs = null;
+
+ try {
+ rs = db.executeQuery("SELECT share AS name, description"
+ + " FROM baps_filefolder" + " WHERE baps_filefolder.public"
+ + " = TRUE" + " ORDER BY filefolderid ASC", MAX_RESULTS);
+ } catch (SQLException e1) {
+ throw new QueryFailureException(e1.getMessage());
+ }
+
+ try {
+ while (rs.next()) {
+ results.add(rs.getString(2));
+ }
+ } catch (SQLException e) {
+ throw new QueryFailureException(e.getMessage());
+ }
+
+ return results;
+ }
+
+ /**
+ * Given a show and a channel, retrieve a list of all show items bound to
+ * that channel for the show.
+ *
+ * @param db
+ * The database to query.
+ *
+ * @param showID
+ * The unique number that identifies the show.
+ *
+ * @param channel
+ * The index of the channel to query.
+ *
+ * @return a list of ShowItems extracted from the show and channel. The list
+ * may be empty.
+ *
+ * @throws IllegalArgumentException
+ * if the database is null, the show ID is negative or the
+ * channel index falls out of bounds.
+ *
+ * @throws QueryFailureException
+ * if the database backend yielded an error while executing the
+ * search query.
+ */
+ public static List<ShowItem> getChannelList(DatabaseDriver db, int showID,
+ int channel) throws QueryFailureException {
+ if (db == null)
+ throw new IllegalArgumentException(
+ rb.getString("ERR_DB_HANDLE_IS_NULL"));
+
+ if (showID < 0)
+ throw new IllegalArgumentException(
+ rb.getString("ERR_NEGATIVE_SHOW_ID"));
+
+ if (channel < 0 || channel >= NUM_CHANNELS)
+ throw new IllegalArgumentException(
+ rb.getString("ERR_CH_OUT_OF_BOUNDS"));
+
+ List<ShowItem> results = new ArrayList<ShowItem>();
+
+ ResultSet rs = null;
+
+ Object[] params = { showID, channel };
+
+ try {
+ rs = db.executeQuery("SELECT name1, name2, position"
+ + " FROM baps_show" + " INNER JOIN baps_listing"
+ + " ON baps_show.showid"
+ + " = baps_listing.showid"
+ + " INNER JOIN baps_item"
+ + " ON baps_listing.listingid"
+ + " = baps_item.listingid"
+ + " WHERE baps_show.showid"
+ + " = ?"
+ + " AND baps_listing.channel"
+ + " = ?"
+ + " ORDER BY position ASC", params, MAX_RESULTS);
+ } catch (SQLException e) {
+ throw new QueryFailureException(e.getMessage());
+ }
+
+ try {
+ while (rs.next()) {
+ results.add(translateRow(rs));
+ }
+ } catch (SQLException e) {
+ throw new QueryFailureException(e.getMessage());
+ }
+ return results;
+ }
+
+ /**
+ * Translate a row retrieved from the database into a ShowItem.
+ *
+ * @param rs
+ * The result-set, or database cursor, pointing to the row to
+ * translate.
+ *
+ * @return A new ShowItem containing the properties extracted from the
+ * translated row.
+ */
+ private static ShowItem translateRow(ResultSet rs) {
+ // Translate SQL columns into a list of properties.
+
+ HashMap<ShowItemProperty, String> properties = new HashMap<ShowItemProperty, String>();
+
+ for (ShowItemProperty p : ShowItemProperty.values()) {
+ try {
+ properties.put(p, rs.getString(p.sql));
+ } catch (SQLException e) {
+ // Ignore this, as it is almost certainly just a non-existent
+ // property.
+ }
+ }
-public class ShowUtils
-{
- /**
- * The number of channels reserved for show items.
- *
- * TODO: move this somewhere more appropriate.
- */
-
- public static final int NUM_CHANNELS = 3;
-
-
- // Maximum number of results to pull from database
- private static final int MAX_RESULTS = 50;
-
-
- /**
- * Return the names of the public track folders, or "bins".
- *
- * @param db The database to query.
- *
- * @return a list of the public folder names.
- * The list may be empty.
- *
- * @throws IllegalArgumentException if the database is
- * null, the show ID is negative or the
- * channel index falls out of bounds.
- *
- * @throws QueryFailureException if the database backend
- * yielded an error while executing the search
- * query.
- */
-
- public static List<String>
- getPublicFolders (DatabaseDriver db)
- throws QueryFailureException
- {
- if (db == null)
- throw new IllegalArgumentException ("Database handle is null.");
-
-
- List<String> results = new ArrayList<String> ();
-
-
- ResultSet rs = null;
-
- try
- {
- rs = db.executeQuery ("SELECT share AS name, description"
- + " FROM baps_filefolder"
- + " WHERE baps_filefolder.public"
- + " = TRUE"
- + " ORDER BY filefolderid ASC", MAX_RESULTS);
- }
- catch (SQLException e1)
- {
- throw new QueryFailureException (e1.getMessage ());
- }
-
- try
- {
- while (rs.next ())
- {
- results.add (rs.getString (2));
- }
- }
- catch (SQLException e)
- {
- throw new QueryFailureException (e.getMessage ());
- }
-
- return results;
- }
-
-
- /**
- * Given a show and a channel, retrieve a list of all show items
- * bound to that channel for the show.
- *
- * @param db The database to query.
- *
- * @param showID The unique number that identifies the show.
- *
- * @param channel The index of the channel to query.
- *
- * @return a list of ShowItems extracted from the show and
- * channel. The list may be empty.
- *
- * @throws IllegalArgumentException if the database is
- * null, the show ID is negative or the
- * channel index falls out of bounds.
- *
- * @throws QueryFailureException if the database backend
- * yielded an error while executing the search
- * query.
- */
-
- public static List<ShowItem>
- getChannelList (DatabaseDriver db, int showID, int channel)
- throws QueryFailureException
- {
- if (db == null)
- throw new IllegalArgumentException ("Database handle is null.");
-
- if (showID < 0)
- throw new IllegalArgumentException ("Show ID is negative.");
-
- if (channel < 0 || channel >= NUM_CHANNELS)
- throw new IllegalArgumentException ("Channel index is out of bounds.");
-
- List<ShowItem> results = new ArrayList<ShowItem> ();
-
-
- ResultSet rs = null;
-
- Object[] params = {showID, channel};
-
- try
- {
- rs = db.executeQuery ("SELECT name1, name2, position"
- + " FROM baps_show"
- + " INNER JOIN baps_listing"
- + " ON baps_show.showid"
- + " = baps_listing.showid"
- + " INNER JOIN baps_item"
- + " ON baps_listing.listingid"
- + " = baps_item.listingid"
- + " WHERE baps_show.showid"
- + " = ?"
- + " AND baps_listing.channel"
- + " = ?"
- + " ORDER BY position ASC", params, MAX_RESULTS);
- }
- catch (SQLException e)
- {
- throw new QueryFailureException (e.getMessage ());
- }
-
- try
- {
- while (rs.next ())
- {
- results.add (translateRow (rs));
- }
- }
- catch (SQLException e)
- {
- throw new QueryFailureException (e.getMessage ());
- }
-
- return results;
- }
-
-
- /**
- * Translate a row retrieved from the database into a ShowItem.
- *
- * @param rs The result-set, or database cursor, pointing to the
- * row to translate.
- *
- * @return A new ShowItem containing the properties extracted
- * from the translated row.
- */
-
- private static ShowItem
- translateRow (ResultSet rs)
- {
- // Translate SQL columns into a list of properties.
-
- HashMap<ShowItemProperty, String> properties = new HashMap<ShowItemProperty, String> ();
-
- for (ShowItemProperty p : ShowItemProperty.values ())
- {
- try
- {
- properties.put (p, rs.getString (p.sql));
- }
- catch (SQLException e)
- {
- // Ignore this, as it is almost certainly just a non-existent
- // property.
- }
- }
-
-
- return new ShowItem (properties);
- }
+ return new ShowItem(properties);
+ }
} \ No newline at end of file