%@ page import="java.util.*" %>
<%@ page import="org.w3c.dom.Node" %>
<%@ page import="org.jafer.query.QueryBuilder" %>
<%@ page import="org.jafer.record.Field" %>
<%@ page import="org.mdcog.config.MdcConfig" %>
<%@ page import="org.mdcog.jafer.JaferClient" %>
<%@ page import="org.mdcog.db.Persistor" %>
<%@ page import="org.mdcog.databeans.ResultDisplayRow" %>
<%@ page errorPage="error.jsp" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/displaytag-12.tld" prefix="display" %>
<%!
// Declarations
public String getField(Map map, String fieldName) {
String field = (String)map.get(fieldName);
if (field == null) field = "";
return field;
}
%><% // Instream code
// get or init MdcConfig
MdcConfig mdcConfig = (MdcConfig)session.getAttribute("mdcconfig");
if (mdcConfig == null) {
mdcConfig = new MdcConfig();
session.setAttribute("mdcconfig",mdcConfig);
}
// get or init Persistor
Persistor persistor = (Persistor)session.getAttribute("persistor");
if (persistor == null) {
persistor = new Persistor(mdcConfig);
session.setAttribute("persistor",persistor);
}
// get or init JaferClient
JaferClient jafer = (JaferClient)session.getAttribute("jafer");
if (jafer == null) {
jafer = new JaferClient(mdcConfig,persistor);
session.setAttribute("jafer",jafer);
}
String searchopt = null;
String searchtype = null;
String filter = null;
String maintab = request.getParameter("maintab");
if (maintab != null && maintab.length() > 0) {
session.setAttribute("maintab",maintab);
} else {
maintab = (String)session.getAttribute("maintab");
if (maintab == null) {
maintab = "federated";
session.setAttribute("maintab",maintab);
}
}
Map rlfields = (Map)session.getAttribute("rlfields");
if (rlfields == null) {
rlfields = new HashMap();
session.setAttribute("rlfields",rlfields);
}
Map repfields = (Map)session.getAttribute("repfields");
if (repfields == null) {
repfields = new HashMap();
session.setAttribute("repfields",repfields);
}
searchopt = request.getParameter("searchopt");
if (searchopt == null) searchopt = (String)session.getAttribute("searchopt");
if (searchopt == null) {
searchopt = "keyword";
session.setAttribute("searchopt",searchopt);
}
//System.out.println("searchopt------------2>:"+searchopt);
searchtype = request.getParameter("searchtype");
if (searchtype == null) searchtype = (String)session.getAttribute("searchtype");
if (searchtype == null) {
searchtype = "any";
session.setAttribute("searchtype",searchtype);
}
filter = request.getParameter("filter");
if (filter == null) filter = (String)session.getAttribute("filter");
if (filter == null) filter = "";
session.setAttribute("filter",filter);
// original search.jsp fields
int perPage = 50; // maximum results per page.
String readlingListMessage = "";
String searchMessage = "";
String searchTabs = "";
int tab = -1;
String remChecked = (request.getParameter("remChecked") == null) ? "false" : request.getParameter("remChecked");
String keyword = (request.getParameter("keyword") == null) ? "" : request.getParameter("keyword").trim();
// Get the curent tab, either from the tab parameter or figure it out from the keyword
if (request.getParameter("tab") != null) {
tab = Integer.parseInt(request.getParameter("tab"));// catch NumberFormatException
tabSet.setCurrentTab(tab);
} else if (!keyword.equals("")) {
tab = tabSet.getTabIndex(keyword);
if (tab >= 0) {
tabSet.setCurrentTab(tab);
}
}
// If a keyword has been entered and it does not match one of the tabs do the search
if (!keyword.equals("") && tab == -1) {
List resultList = null;
if (maintab == null || maintab.equals("federated")) {
QueryBuilder builder = new QueryBuilder();
Node author = builder.getNode("author", keyword);
if (searchopt.equals("keyword")) {
Node title = builder.getNode("title", keyword);
Node query = builder.or(author, title);
resultList = jafer.submitQuery(query);
} else {
resultList = jafer.submitQuery(author);
}
} else if (maintab != null && maintab.equals("repository")) {
resultList = persistor.searchRepos(keyword, searchopt, "mdc-public");
}
if (resultList != null) {
tab = tabSet.getNextTabNumber();
tabSet.addResultList(keyword, resultList);
}
}
// Generate the tabs
if (tabSet.getSize() > 0) {
searchTabs = "
";
for (int i=0; i< tabSet.getSize(); i++) {
String cssClass = "tab";
if (i == tabSet.getCurrentTab()) {
cssClass = "selectedTab";
}
String text = tabSet.getKeyword(i);
int textLength = Math.round(65/tabSet.getSize());
if (text.length() > textLength) {
text = text.substring(0, textLength) + "..";
}
searchTabs += ""+text+" ";
}
searchTabs += " ";
}
// Set lists for display tag
// First apply filter
List reslist;
if (filter != null && filter.length() > 0) {
String filterchk = filter.toLowerCase();
reslist = new ArrayList();
reslist.addAll(tabSet.getCurrentTabResults());
Iterator itr = reslist.iterator();
while (itr.hasNext()) {
ResultDisplayRow row = (ResultDisplayRow)itr.next();
Map chkfields = row.getFields();
Iterator itr2 = chkfields.values().iterator();
boolean found = false;
while (itr2.hasNext()) {
String str = ((String)itr2.next()).toLowerCase();
//if (str.matches(filter)) {
if (str.indexOf(filterchk) > -1) {
found = true;
break;
}
}
if (!found) itr.remove();
}
} else {
reslist = tabSet.getCurrentTabResults();
}
request.setAttribute("results", reslist);
request.setAttribute("rlist",readingListBean.getItems());
// reading list
readingListBean.setPersistor(persistor);
//System.out.println("formBean.getChkId().length:"+formBean.getChkId().length);
if (remChecked.equals("true")){
if (formBean.getRlChk().length > 0) {
readingListBean.removeItems(formBean.getRlChk());
//readlingListMessage += "removed "+formBean.getRlChk().length+" items
";
}
} else {
// formBean.getChkId returns a String[] of document id's for searchlist records that
// have been checked for adding to the resource list
if (formBean.getChkId().length > 0) {
boolean res = readingListBean.addItems(formBean.getChkId(), reslist);
if (!res) readlingListMessage = "Sorry, your items were not added.
";
}
}
String up = (request.getParameter("up") == null) ? "" : request.getParameter("up").trim();
String down = (request.getParameter("down") == null) ? "" : request.getParameter("down").trim();
if (up != "") {
readingListBean.moveItemUp(up);
}
if (down != "") {
readingListBean.moveItemDown(down);
}
%>
MDCOG Search Client