diff options
author | Matt Windsor <mbw500@student.cs.york.ac.uk> | 2011-03-07 13:50:24 +0000 |
---|---|---|
committer | Matt Windsor <mbw500@student.cs.york.ac.uk> | 2011-03-07 13:50:24 +0000 |
commit | 9b4647f1ae8c3f41163d0d4053504dab861d0c94 (patch) | |
tree | b621e8c0b75a5cadd69f938116b1637f7ad0c94d /src/uk/org/ury/show/ShowUtils.java | |
parent | c33f098de8a43a2df778d4d694e0c07bbde59828 (diff) |
Emergency impending hard drive failure dump - lots of changes on the frontend, but they're all potentially controversial so I'm not pushing to master yet. Beginnings of show viewer. Application now run through demo menu, which allows for the links between modules to be tested.
Diffstat (limited to 'src/uk/org/ury/show/ShowUtils.java')
-rw-r--r-- | src/uk/org/ury/show/ShowUtils.java | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/uk/org/ury/show/ShowUtils.java b/src/uk/org/ury/show/ShowUtils.java new file mode 100644 index 0000000..11a5dad --- /dev/null +++ b/src/uk/org/ury/show/ShowUtils.java @@ -0,0 +1,153 @@ +/** + * + */ +package uk.org.ury.show; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import uk.org.ury.database.DatabaseDriver; +import uk.org.ury.database.exceptions.QueryFailureException; + +import uk.org.ury.show.ShowItem; +import uk.org.ury.show.ShowItemProperty; + + +/** + * 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 + * + */ + +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; + + + /** + * 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. + * + * @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. + * + * @return a list of ShowItems extracted from the show and + * channel. The list may be empty. + */ + + 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, positionid" + + " FROM baps_show" + + " INNER JOIN baps_listing" + + " ON baps_show.showid" + + " = baps_listing.showid" + + " INNER JOIN baps_item" + + " ON baps_listing.listingid" + + " = baps_show.showid" + + " WHERE baps_show.showid" + + " = ?" + + " AND baps_listing.channel" + + " = ?", 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 LibraryItem. + * + * @param rs The result-set, or database cursor, pointing to the + * row to translate. + * + * @return A new LibraryItem 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); + } +}
\ No newline at end of file |