<%@ page language="java" %> <%@ page import="java.sql.ResultSet" %> <%@ page import="java.util.*" %> <%@ page import="java.io.PrintWriter" %> <%@ page import="com.aha.search.*" %> <%@ page import="com.aha.util.*" %> <%@ page import="com.aha.data.db.OracleBean" %> <% // use ts=4 for vi // rewritten by R. A. Kosman, 5/1/03-ish %> <%! // declaratives, including methods String searchResults = "Nsearch_results.jsp"; javax.servlet.jsp.JspWriter Out = null; // will be set to "out" OracleBean dbBean = null; // used to talk to the Db Hashtable topicContext = null; Hashtable contentContext = null; Hashtable domainContext = null; String searchTextParam = ""; String beforeMonth = ""; String beforeDay = ""; String beforeYear = ""; String afterMonth = ""; String afterDay = ""; String afterYear = ""; String warning = ""; boolean debug=false; boolean ssi = false; // split a string, s, around position n. // try find the next blank close to position n. // if one is not close, just split with hyphen. // use
to split pieces. private String split(String s,int n) { if (s == null) return s; if (s.length() == 0) return s; if (s.length() <= n) return s; int i = s.indexOf(' ',n); if (i == -1) i = n; if (i > n+3) return s.substring(0,10) + "-" + "
" + s.substring(10); return s.substring(0,i) + "-" + "
" + s.substring(i+1); } // end of split() private void genList( String name, String header, int start, int end,int def) throws java.io.IOException { Out.println(""); } private void genDateSelect( String monName, String dayName, String yearName, String selectedMonth, String selectedDay, String selectedYear) throws java.io.IOException { int selMonVal = 0, selDayVal = 0, selYearVal = 0; try { selMonVal = Integer.parseInt(selectedMonth); } catch (Exception e) { /* ignore */ } try { selDayVal = Integer.parseInt(selectedDay); } catch (Exception e) { /* ignore */ } try { selYearVal = Integer.parseInt(selectedYear); } catch (Exception e) { /* ignore */ } genList(monName,"MM",1,12,selMonVal); genList(dayName,"DD",1,31,selDayVal); int cyr = java.util.Calendar.getInstance().get(Calendar.YEAR); genList(yearName,"YYYY",1996,cyr,selYearVal); } private void selectAfterDate() throws java.io.IOException { genDateSelect("after_month","after_day","after_year", afterMonth, afterDay, afterYear); } private void selectBeforeDate() throws java.io.IOException { genDateSelect("before_month","before_day","before_year", beforeMonth, beforeDay, beforeYear); } private void selectTopic() throws java.io.IOException, java.sql.SQLException { // Get the topics from the database and create select drop down String currTopic = ""; Iterator it = null; dbBean.setSQL(OracleBean.SELECT_TOPICS_ALL); ResultSet rs = dbBean.execute(); ArrayList topics = DataConverter.createStringArrayList(rs, "name"); if(topics != null) { it = topics.iterator(); Out.println(""); } else Out.println(""); } // end of selectTopic() private void selectContentType() throws java.io.IOException { // get content type id's and names from the database try { dbBean.setSQL("SELECT contenttypeid,name FROM contenttype WHERE hidden='N' ORDER BY name"); ResultSet rs = dbBean.execute(); Out.println(""); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); String checked = ""; if (contentContext.get(id.toLowerCase()) != null) checked = " checked "; Out.println(""); } Out.println("
" + name + "
"); } catch (Exception e) { Out.println("

Internal Error in processing content type: " + e.getMessage() + "

\n");
        e.printStackTrace(new PrintWriter(Out));
        Out.println("\n
"); } }// end of selectContentType() private void selectDomain() throws java.io.IOException { // group and display the domains logically try { ArrayList catg = new ArrayList(); dbBean.setSQL("SELECT " + " dc.name category_name, dom.name domain_name, dom.domain domain_abbrev " + " FROM domain dom, domaincategory dc " + " WHERE dom.categoryid = dc.categoryid " + " ORDER BY dc.name, dom.domain"); // eg: dc.name: "Advocacy"; dom.name: "American Hospital Association"; dom.domain: "AHA" ResultSet rs = dbBean.execute(); String lastCatg = ""; String content = ""; Out.println("\n"); // one category group per table column while (rs.next()) { String category_name = rs.getString(1); String domain_name = rs.getString(2); String domain_abbrev = rs.getString(3); if (lastCatg.length() == 0 || !lastCatg.equals(category_name)){ // starting a new category grouping if (lastCatg.length() > 0) content += "
\n"; content += "" + category_name + "\n" + "
\n"; } lastCatg = category_name; String checked = ""; if (domainContext.get(domain_abbrev.toLowerCase()) != null) checked = " checked "; content += "\n"; } content += "\n"; Out.println(content); Out.println("
" + split(domain_abbrev,12) + "
" + domain_name + "
"); } catch (Exception e) { Out.println("

Internal Error in processing domains: " + e.getMessage() + "

\n");
        e.printStackTrace(new PrintWriter(Out));
        Out.println("\n
"); } } // end of selectDomain() %> <% // make globally known to static methods Out = out; try { // the end of the try is at the very bottom of this dbBean = new OracleBean(); %> <% if (request.getParameter("debug") != null) debug = true; if (request.getParameter("ssi") != null) ssi = true; // possible contextual form fields String [] contentParam = request.getParameterValues("content"); String [] domainParam = request.getParameterValues("domain"); String [] topicParam = request.getParameterValues("topic"); searchTextParam = request.getParameter("search"); // free text "keywords" if (searchTextParam == null) searchTextParam = ""; beforeMonth = request.getParameter("before_month"); beforeDay = request.getParameter("before_day"); beforeYear = request.getParameter("before_year"); afterMonth = request.getParameter("after_month"); afterDay = request.getParameter("after_day"); afterYear = request.getParameter("after_year"); contentContext = new Hashtable(); if (contentParam != null) { for (int i=0;i list for (int i=0;iNote: You got to this Advanced Search page from " + "a previous Search Results page. Your options that were " + "used in that previous search are set as defaults in this " + "search form. Please clear them if you wish to change the " + "context (scope) of your next search" + "

"; } %> Advanced Search

Advanced Search Powered by Verity

<%= warning %> <% if (debug) { %>
Debugging Options
debug? no static coll? assume member's only?
<% } %> <% if (ssi) { %> <% } %>
Keywords

Search Results Options
Number of docs
per page
  Display a document 

Optionally narrow your search by selecting topic, date, type of content, and/or domain.

Topic
<% selectTopic(); %>
Click to make your selection(s) to the left. To select multiple consecutive items, hold down the Shift key and click on the first in the list, then on the last in the list. To select multiple nonconsecutive items, hold down Ctrl (PC) or Apple/Command (Mac).
 
Date
Search content posted after
<% selectAfterDate(); %>
Search content posted before
<% selectBeforeDate(); %>
 
Type of Content
<% selectContentType(); %>
 
Domain
<% selectDomain(); %>
<% // closure of the overall try } catch(Exception e) { out.println("\n


Internal error (fault) in advanced_search.jsp" + "\n

Exception: " + e.getMessage() + "

");
		e.printStackTrace(new PrintWriter(out));
	}
	finally {
		if (dbBean != null) dbBean.close();
	}

%>