%--
doReportSearch.jsp
------------------
Performs a search for Complete Reports and Report Excerpts in the OERL
relational database given the parameters of the HTTP request object.
Javascript Includes:
focusWindow.js
Dynamic Includes:
inc_resultsFooter.html
Static Includes:
sinc_appendComponents.jsp
sinc_appendContentAreas.jsp
sinc_appendCurrentParams.jsp
sinc_appendEmptyProjectParams.jsp
sinc_checkForReset.jsp
sinc_componentQueryConstants.jsp
sinc_determineReferringPage.jsp
sinc_initMyRequestParams.jsp
sinc_oerlWebViewCon.jsp
sinc_printComponentQuery.jsp
sinc_printNumHits.jsp
sinc_printExcerptRecord.jsp
sinc_printProjectFields.jsp
sinc_printProjectQuery.jsp
sinc_processComponentParams.jsp
sinc_processProjectParams.jsp
sinc_projectQueryConstants.jsp
sinc_restoreSavedSearch.jsp
sinc_resultsIntro.jsp
sinc_resultsTitle.jsp
Created by zaz@sri.com.
Last modified by zaz@sri.com, 4/28/03.
--%>
<%@ page errorPage="error.jsp" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.FileWriter" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.text.DateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="java.util.Enumeration" %>
<% final String longName = "Report"; %>
<% final String shortName = "report"; %>
<% final String logFilePath = "/var/www/html/oerl/search/search_logs/search_log_report.txt"; %>
<%-- Get constants --%>
<%@ include file="../jspcode/sinc_componentQueryConstants.jsp" %>
<%@ include file="../jspcode/sinc_projectQueryConstants.jsp" %>
<%-- Determine referring search page (get rid of query) --%>
<%@ include file="codefragments/sinc_determineReferringPage.jsp" %>
<%-- Initialize my request parameter hashtable --%>
<% String filename = "doReportSearch.jsp"; %>
<%@ include file="codefragments/sinc_initMyRequestParams.jsp" %>
<%-- Check for search page reset --%>
<%@ include file="codefragments/sinc_checkForReset.jsp" %>
<%-- Process parameters --%>
<%@ include file="codefragments/sinc_processProjectParams.jsp" %>
<%@ include file="codefragments/sinc_processComponentParams.jsp" %>
<%
// Determine fields not in use by referring search page
boolean hasReportTypeField = true;
if (myRequestParams.get("noReportTypeField") != null)
hasReportTypeField = false;
// Append restrictions on query based on search parameters
boolean doExcerpts = false, doCompleteReports = false;
boolean hasEmptyReportType = false;
values = (String []) myRequestParams.get("ReportType");
if (hasReportTypeField) {
if (myRequestParams.get("ReportTypesAll") != null) {
doExcerpts = true;
doCompleteReports = true;
} else if (values != null) {
for (int i = 0; i < values.length; i++) {
if (values[i] != null) {
if (values[i].equals("Excerpt")) doExcerpts = true;
else if (values[i].equals("Complete")) doCompleteReports = true;
}
}
} else hasEmptyReportType = true;
} else {
doExcerpts = true;
doCompleteReports = true;
}
// If there are unspecified parameters, go back to the search page
if (hasEmptyFundingSource || hasEmptyOrganization || hasEmptyProjectType ||
hasEmptyContentArea || hasEmptyComponent || hasEmptyReportType) {
// Reinstate last saved search, if it exists
%><%@ include file="codefragments/sinc_restoreSavedSearch.jsp" %><%
// Create search page URL to redirect to
String searchPage = referringPage + "?hasEmptyFields=true&";
if (hasEmptyReportType) searchPage += "hasEmptyReportType=true&";
if (hasEmptyComponent) searchPage += "hasEmptyComponent=true&";
%><%@ include file="codefragments/sinc_appendEmptyProjectParams.jsp" %><%
%><%@ include file="codefragments/sinc_appendCurrentParams.jsp" %><%
// Redirect search page
response.sendRedirect(searchPage);
}
// Make connection to database using oerl_webview login
%><%@ include file="../jspcode/sinc_oerlWebViewCon.jsp" %><%
// Create queries and result sets
Statement stmt, crStmt = null, eStmt = null;
ResultSet rs, crRS = null, eRS = null;
StringBuffer crQuery = new StringBuffer(), eQuery = new StringBuffer();
if (doCompleteReports) {
// Create Complete Report query
crQuery.append("SELECT " + projectSelect + ", cr.CompleteReportID, cr.CompleteReportName, cr.ArtifactURL\n");
crQuery.append(" FROM " + projectFrom + ", " + componentFrom + ", CompleteReports AS cr, CompleteReportsToSubComponents AS cr2sc\n");
crQuery.append(" WHERE " + projectWhere + " AND " + componentWhere + " AND cr.ProjectID=p.ProjectID AND cr.CompleteReportID=cr2sc.CompleteReportID AND cr2sc.SubComponentPKID=sc.SubComponentPKID\n");
// Append restrictions and ORDER to Complete Report query
crQuery.append(queryRestrictions);
crQuery.append(" \n ORDER BY ProjectTypeName, ProjectName, CompleteReportName, CompleteReportID");
// Create result set
crStmt = con.createStatement();
crRS = crStmt.executeQuery(crQuery.toString());
}
if (doExcerpts) {
// Create Report Excerpt query
eQuery.append("SELECT " + projectSelect + ", e.ExcerptID, e.ExcerptDescription, e.ArtifactURL, et.ExcerptTypeID, et.ExcerptTypeName\n");
eQuery.append(" FROM " + projectFrom + ", " + componentFrom + ", Excerpts AS e, ExcerptTypes AS et, ExcerptsToSubComponents AS e2sc\n");
eQuery.append(" WHERE " + projectWhere + " AND " + componentWhere + " AND e.ProjectID=p.ProjectID AND e.ExcerptTypeID=et.ExcerptTypeID AND et.ExcerptTypeName=\"Report Excerpt\" AND e.ExcerptID=e2sc.ExcerptID AND e2sc.SubComponentPKID=sc.SubComponentPKID\n");
// Append restrictions and ORDER to Complete Report query
eQuery.append(queryRestrictions);
eQuery.append(" \n ORDER BY ProjectTypeName, ProjectName, ExcerptDescription, ExcerptID");
// Create Complete Report result set
eStmt = con.createStatement();
eRS = eStmt.executeQuery(eQuery.toString());
}
%>
OERL: Reports: Search Results:
 |
 |
 |
| : Reports : Search Results |
 |
 |
|
 |
|
 |
 |
 |
 |
 |
<%@ include file="codefragments/sinc_resultsTitle.jsp" %>
<%
String tempQuery, cmpQuery;
Statement tempStmt;
ResultSet tempRS;
int reportID, compID, subCompID, excerptID;
int projTypeID, fundingSourceID, contentAreaID, subContentAreaID, orgID;
if (!projectTypeSpecified && !fundingSourceSpecified &&
!organizationSpecified && !contentAreaSpecified && !componentSpecified) {
isListingAll = true;
}
String searchFor = "You";
if (isListing || isListingAll) {
searchFor += " requested a listing of";
if (isListingAll) searchFor += " all";
} else searchFor += " searched for";
if (doCompleteReports) searchFor += " Complete Reports";
if (doExcerpts) {
if (doCompleteReports) searchFor += " and";
searchFor += " Report Excerpts";
}
if (isListingAll) searchFor += ".";
else searchFor += "...";
StringBuffer printToFileBuf = new StringBuffer();
%>
<%= searchFor %>
<% printToFileBuf.append(searchFor + "\n"); %>
<% if (!isListingAll) { %>
<%@ include file="codefragments/sinc_printComponentQuery.jsp" %>
<%
if (projectTypeSpecified || fundingSourceSpecified ||
organizationSpecified || contentAreaSpecified) {
%>
<% printToFileBuf.append(" from Projects:\n"); %>
-
from Projects:
<%@ include file="codefragments/sinc_printProjectQuery.jsp" %>
<% } %>
<% } %>
<%@ include file="codefragments/sinc_resultsIntro.jsp" %>
<%
// Print size of result
// The number of hits per project type is stored into the session object
int numHits = 0, projTypeHits = 0;
if (doCompleteReports) {
reportID = -1;
projTypeID = -1;
while (crRS.next()) {
if (reportID != crRS.getInt("CompleteReportID")) {
numHits++;
if (projTypeID != crRS.getInt("ProjectTypeID") && projTypeID != -1) {
session.putValue("ProjTypeComplete" + projTypeID,
Integer.toString(projTypeHits));
projTypeHits = 1;
} else {
projTypeHits++;
}
}
reportID = crRS.getInt("CompleteReportID");
projTypeID = crRS.getInt("ProjectTypeID");
if (crRS.isLast())
session.putValue("ProjTypeComplete" + projTypeID,
Integer.toString(projTypeHits));
}
}
projTypeHits = 0;
if (doExcerpts) {
excerptID = -1;
projTypeID = -1;
while (eRS.next()) {
if (excerptID != eRS.getInt("ExcerptID")) {
numHits++;
if (projTypeID != eRS.getInt("ProjectTypeID") && projTypeID != -1) {
session.putValue("ProjTypeExcerpt" + projTypeID,
Integer.toString(projTypeHits));
projTypeHits = 1;
} else {
projTypeHits++;
}
}
excerptID = eRS.getInt("ExcerptID");
projTypeID = eRS.getInt("ProjectTypeID");
if (eRS.isLast())
session.putValue("ProjTypeExcerpt" + projTypeID,
Integer.toString(projTypeHits));
}
}
boolean hasExcerpts = true;
%><%@ include file="codefragments/sinc_printNumHits.jsp" %><%
// Look for log file, create if necessary
File logFile = new File(logFilePath);
boolean fileExists = logFile.exists();
if (!fileExists) logFile.createNewFile();
FileWriter logFileWriter = new FileWriter(logFilePath, true);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
String dateStr = dateFormat.format(new Date());
if (!fileExists) logFileWriter.write("File created: " + dateStr + "\n-----\n");
logFileWriter.write("Time = " + dateStr + "\n");
logFileWriter.write("IP = " + request.getRemoteAddr() + "\n");
logFileWriter.write("Number of Results = " + numHits + "\n");
logFileWriter.write(printToFileBuf.toString());
logFileWriter.write("-----\n");
logFileWriter.close();
// Reset variables for main loop
if (doCompleteReports) crRS.beforeFirst();
if (doExcerpts) eRS.beforeFirst();
boolean nextIsComplete = false, projTypeHdrPrinted = false,
excerptHdrPrinted = false, reportHdrPrinted = false,
firstProjTypeHdr = true;
reportID = -1;
excerptID = -1;
String crProjType = null;
String eProjType = null;
String curProjType = "";
String caQuery;
// Start pointers to result sets
if (doCompleteReports && crRS.isBeforeFirst())
if (crRS.next()) crProjType = crRS.getString("ProjectTypeName");
if (doExcerpts && eRS.isBeforeFirst())
if (eRS.next()) eProjType = eRS.getString("ProjectTypeName");
// Main loop for going through result sets
while (!(eProjType == null && crProjType == null)) {
// Set next record to display; Complete Reports are first by default
nextIsComplete =
crProjType != null &&
(eProjType == null || crProjType.compareTo(eProjType) <= 0);
// Set current Project Type header if necessary
if (nextIsComplete) {
if (!curProjType.equals(crProjType)) {
curProjType = String.valueOf(crProjType);
projTypeHdrPrinted = false;
}
} else if (!curProjType.equals(eProjType)) {
curProjType = String.valueOf(eProjType);
projTypeHdrPrinted = false;
}
// Print Project Type Header if necessary
if (!projTypeHdrPrinted) {
excerptHdrPrinted = false;
reportHdrPrinted = false;
projTypeHdrPrinted = true;
if (firstProjTypeHdr) firstProjTypeHdr = false;
else { %>
<% } %>
<%
}
if (nextIsComplete) {
// Print Complete Report fields
if (reportID!= crRS.getInt("CompleteReportID")) {
// Print Complete Report Header
if (!reportHdrPrinted) {
reportHdrPrinted = true; %>
Complete Reports
<%
}
// Get Content Areas
caQuery = "SELECT sca.SubContentAreaID, sca.SubContentAreaName, ca.ContentAreaName";
caQuery += " FROM " + contentAreaFrom + ", CompleteReports AS cr, ProjectsToSubContentAreas AS p2sca";
caQuery += " WHERE " + contentAreaWhere + " AND cr.CompleteReportID =" + crRS.getInt("CompleteReportID") + " AND cr.ProjectID=p2sca.ProjectID AND p2sca.SubContentAreaID=sca.SubContentAreaID";
%>
<%@ include file="codefragments/sinc_appendContentAreas.jsp" %>
<%
// Get Components
cmpQuery = "SELECT sc.SubComponentID, sc.SubComponentName, c.ComponentID, c.ComponentName";
cmpQuery += " FROM " + componentFrom + ", CompleteReportsToSubComponents AS cr2sc";
cmpQuery += " WHERE " + componentWhere + " AND cr2sc.CompleteReportID =" + crRS.getInt("CompleteReportID") + " AND cr2sc.SubComponentPKID=sc.SubComponentPKID";
boolean linkResources = true;
%>
<%@ include file="../jspcode/sinc_appendComponents.jsp" %>
<%
// Print info for this report
rs = crRS;
%>
-
Report:
"><%= crRS.getString("CompleteReportName") %>
<% if (componentSpecified || isListing) { %>
Components: <%= componentResult %>
<% } %>
from
<%@ include file="codefragments/sinc_printProjectFields.jsp" %>
<%
// Update reportID
reportID = crRS.getInt("CompleteReportID");
}
if (crRS.next()) crProjType = crRS.getString("ProjectTypeName");
else crProjType = null;
} else {
// Print Excerpt fields
if (excerptID != eRS.getInt("ExcerptID")) {
// Print Report Excerpt Header
if (!excerptHdrPrinted) {
excerptHdrPrinted = true; %>
Report Excerpts
<%
}
// Print Excerpt Record
%>
<%@ include file="codefragments/sinc_printExcerptRecord.jsp" %>
<%
// Update excerptID
excerptID = eRS.getInt("ExcerptID");
}
if (eRS.next()) eProjType = eRS.getString("ProjectTypeName");
else eProjType = null;
} // ends if (nextIsComplete) clause
} // ends while loop
if (numHits != 0) {
%>
<%
}
if (crRS != null) crRS.close();
if (crStmt != null) crStmt.close();
if (eRS != null) eRS.close();
if (eStmt != null) eStmt.close();
con.close();
%>
|
|
 |
|
|