package multimonster.systemadministration; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; import org.apache.log4j.Logger; import multimonster.common.SearchCriteria; import multimonster.common.SearchResult; import multimonster.common.media.Duration; import multimonster.common.media.MOIdentifier; import multimonster.common.media.MediaObject; import multimonster.common.media.MetaData; import multimonster.exceptions.DBNotAvailableException; public class MOSearch { static { MOSearch.log = Logger.getLogger(MOSearch.class); } private static Logger log; private static SettingProxy proxy; public MOSearch() { } public SearchResult[] search(SearchCriteria criteria) throws DBNotAvailableException { SearchResult searchResult = null; Vector vec = null; try { String titleSearch = criteria.getTitle(); QueryManager qmngr = new QueryManager(); // demand connection int connNr = qmngr.reserveConnection(); if (connNr == -1) { throw new DBNotAvailableException("DB not available!"); } // got connection ResultSet result = qmngr.dbOpExec( "select mo.id, mo.title, mo.outline, mo.duration " + "from mediaobject mo, mediainstance mi " + "where mo.id = mi.moid and " + "mo.title like '%" + titleSearch + "%' " + "group by mo.id, mo.title, mo.outline, mo.duration", connNr); if (result != null) { vec = new Vector(); while (result.next()) { searchResult = extractData_search(result); vec.addElement(searchResult); } result.close(); // release Connection qmngr.bringBackConn(connNr); // Ausgabe bauen SearchResult[] ret = new SearchResult[vec.size()]; ret = (SearchResult[]) vec.toArray(ret); return ret; } else { // release Connection qmngr.bringBackConn(connNr); return null; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } /** * delivers a SearchCriteria-Object filled with possible Value-Domains for * the attributes * * @return SearchCriteria */ public SearchCriteria prepareSearch() { return new SearchCriteria(); } /** * delivers a SearchCriteria-Object filled with possible Value-Domains for * the attributes * * @return SearchCriteria */ private SearchResult extractData_search(ResultSet result) { try { SearchResult searchResult = null; MediaObject mo = null; MetaData meta = null; MOIdentifier moid = null; int monr = result.getInt(1); String title = result.getString(2); String outline = result.getString(3); String duration = result.getString(4); //log.debug("Titel des Films: " + title + " Dauer: " + duration); meta = new MetaData(); meta.setTitle(title); meta.setOutline(outline); meta.setDuration(new Duration(duration)); moid = new MOIdentifier(monr); mo = new MediaObject(moid, meta); searchResult = new SearchResult(mo); return searchResult; } catch (SQLException e) { e.printStackTrace(); return null; } } }