%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.w3c.dom.Node" %>
<%@ page import="javax.mail.internet.MimeBodyPart" %>
<%@ page import="javax.mail.MessagingException" %>
<%@ page import="javax.xml.transform.Templates" %>
<%@ page import="org.jafer.util.xml.DOMFactory" %>
<%@ page import="org.jafer.util.xml.XMLTransformer" %>
<%@ page import="org.jafer.util.xml.XMLSerializer" %>
<%@ page import="org.mdcog.server.UploadHandler" %>
<%@ page import="org.mdcog.server.FileFormItem" %>
<%@ 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 import="org.mdcog.util.*" %>
<%@ 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;
}
public Map getRequestAttributes(HttpServletRequest request) {
HashMap map = new HashMap();
Enumeration names = request.getAttributeNames();
while (names.hasMoreElements()) {
String name = (String)names.nextElement();
Object obj = request.getAttribute(name);
if (obj instanceof String) {
map.put(name, obj);
}
}
return map;
}
//For Debugging
List jaferOutputList = null;
%> <% // Instream code
boolean clearAll = false;
if(request.getParameter("clearAllBt") != null) clearAll = true;
if(clearAll) {
tabSet.clearSearchList();
//readingListBean.clearFieldsAndList();
}
// get or init MdcConfig
MdcConfig mdcConfig = (MdcConfig)session.getAttribute("mdcconfig");
if (mdcConfig == null || clearAll) {
mdcConfig = new MdcConfig();
session.setAttribute("mdcconfig",mdcConfig);
}
// get or init Persistor
Persistor persistor = (Persistor)session.getAttribute("persistor");
if (persistor == null || clearAll) {
persistor = new Persistor(mdcConfig);
session.setAttribute("persistor",persistor);
}
// get or init JaferClient
JaferClient jafer = (JaferClient)session.getAttribute("jafer");
if (jafer == null || clearAll) {
jafer = new JaferClient(mdcConfig,persistor);
session.setAttribute("jafer",jafer);
}
//To Store data from Manual addition form
String rlAction = request.getParameter("rlAction");
String fldstr;
String errorMessage = "";
String xslttype = request.getParameter("xslttype");
String debugCatches = ""; //For debugging
if (xslttype == null || clearAll) xslttype = "exporthtml.xq";
// Process resource input form fields from popup
if (rlAction != null && rlAction.equals("addanno")) {
String recno = request.getParameter("recno");
if (recno != null) {
int irecno = Integer.parseInt(recno);
fldstr = request.getParameter("inp_anno");
if (fldstr != null) {
ResultDisplayRow rdl = (ResultDisplayRow)readingListBean.getDisplayList().get(irecno);
rdl.setField("ANNOTATION",fldstr);
//readingListBean.getDisplayList().set(irecno,rdl);
}
}
} else if (rlAction != null && rlAction.equals("addinput")) {
Map formfields = new HashMap();
fldstr = request.getParameter("itemtype"); if (fldstr == null) fldstr = "";
formfields.put("itemtype",fldstr);
fldstr = request.getParameter("inp_author"); if (fldstr == null) fldstr = "";
formfields.put("AUTHOR",fldstr);
fldstr = request.getParameter("inp_title"); if (fldstr == null) fldstr = "";
formfields.put("TITLE",fldstr);
fldstr = request.getParameter("inp_abstract"); if (fldstr == null) fldstr = "";
formfields.put("ABSTRACT",fldstr);
fldstr = request.getParameter("inp_publisher"); if (fldstr == null) fldstr = "";
formfields.put("PUBLISHER",fldstr);
fldstr = request.getParameter("inp_dateIssued"); if (fldstr == null) fldstr = "";
formfields.put("DATE_ISSUED",fldstr);
fldstr = request.getParameter("inp_isbn"); if (fldstr == null) fldstr = "";
formfields.put("ISBN",fldstr);
fldstr = request.getParameter("inp_issn"); if (fldstr == null) fldstr = "";
formfields.put("ISSN",fldstr);
fldstr = request.getParameter("inp_weburl"); if (fldstr == null) fldstr = "";
formfields.put("WEB_URL",fldstr);
fldstr = request.getParameter("inp_journal"); if (fldstr == null) fldstr = "";
formfields.put("journal",fldstr);
fldstr = request.getParameter("inp_jdate"); if (fldstr == null) fldstr = "";
formfields.put("jdate",fldstr);
fldstr = request.getParameter("inp_volume"); if (fldstr == null) fldstr = "";
formfields.put("volume",fldstr);
fldstr = request.getParameter("inp_startpage"); if (fldstr == null) fldstr = "";
formfields.put("startpage",fldstr);
fldstr = request.getParameter("inp_endpage"); if (fldstr == null) fldstr = "";
formfields.put("endpage",fldstr);
ResultDisplayRow newrow = new ResultDisplayRow();
newrow.setDocSource("manual");
newrow.setFields(formfields);
readingListBean.addItem(newrow);
} else if (rlAction != null && rlAction.equals("loadrl")) { // Process resource input form fields from popup
String docid = request.getParameter("docid");
if (docid != null && docid.length() > 0) {
readingListBean.loadResourceList(docid);
readingListBean.setDocId(docid);
}
}
boolean hasRLFields = false;
if(
request.getParameter("rl-author") != null ||
request.getParameter("rl-owner") != null ||
request.getParameter("rl-title") != null ||
request.getParameter("rl-annotation") != null
) {
hasRLFields = true;
}
// Process save Resource List form
if (hasRLFields) {
fldstr = request.getParameter("rl-author"); if (fldstr == null) fldstr = "";
readingListBean.setField("rlauthor",fldstr);
fldstr = request.getParameter("rl-owner"); if (fldstr == null) fldstr = "";
readingListBean.setField("institution",fldstr);
fldstr = request.getParameter("rl-title"); if (fldstr == null) fldstr = "";
readingListBean.setField("rltitle",fldstr);
fldstr = request.getParameter("rl-annotation"); if (fldstr == null) fldstr = "";
readingListBean.setField("annotation",fldstr);
fldstr = request.getParameter("rl-dateCreated"); if (fldstr == null) fldstr = "";
readingListBean.setField("rlDate",fldstr);
if (rlAction.equals("save")) {
readingListBean.setDocId("");
readingListBean.saveResourceList(readingListBean.getFields());
} else if (rlAction.equals("update")) {
readingListBean.saveResourceList(readingListBean.getFields());
}
}
//For Importing Reading list
String upldmessage = "";
String ctype = (String)request.getContentType();
if (ctype != null && ctype.startsWith("multipart/form-data") && request.getParameter("btnUpload") != null) {
BufferedInputStream bis = null;
ByteArrayOutputStream baos = null;
org.xmldb.api.base.Collection colCache = null;
try {
// process the multipart and get the uploaded file as a string - xmlstr
String fileName = UploadHandler.processMultiPart(request);
FileFormItem fileFormItem= (FileFormItem)request.getAttribute("file");
MimeBodyPart part = fileFormItem.getBodyPart();
String useruploadname = fileFormItem.getFileName();
//String fileName = fileFormItem.truncateFilename();
bis = new BufferedInputStream(part.getInputStream());
baos = new ByteArrayOutputStream();
int ch = bis.read();
while (ch != -1) {
baos.write(ch);
ch = bis.read();
}
String xmlstr = baos.toString();
// check import format
Map reqMap = getRequestAttributes(request);
String impformat = (String)reqMap.get("impformat");
String docId = "";
// now process the import file into a set of one or more MODS records depending on the
// format chosen by the user
Node outNode = null;
if (impformat != null && impformat.equals("MODS")) {
System.out.println("Importing MODS");
Document doc = DOMFactory.parse(xmlstr);
outNode = doc.getDocumentElement();
} else if (impformat != null && impformat.equals("ENDNOTEV7")) {
System.out.println("Importing ENDNOTE");
Document doc = DOMFactory.parse(xmlstr);
File xslfile = new File(pageContext.getServletContext().getRealPath("/en7tomods.xsl"));
Templates template = XMLTransformer.createTemplate(xslfile);
Element rootNode = doc.getDocumentElement();
rootNode.normalize();
outNode = XMLTransformer.transform(rootNode, template);
} else if (impformat != null && impformat.equals("ENDNOTEV8")) {
System.out.println("Importing ENDNOTE");
Document doc = DOMFactory.parse(xmlstr);
File xslfile = new File(pageContext.getServletContext().getRealPath("/en8tomods.xsl"));
Templates template = XMLTransformer.createTemplate(xslfile);
Element rootNode = doc.getDocumentElement();
rootNode.normalize();
outNode = XMLTransformer.transform(rootNode, template);
} else {
throw new IOException("Import format not selected.");
}
int nimported = 0;
if (outNode != null) {
// StringWriter writer = new StringWriter();
// XMLSerializer.out(outNode, "xml", writer);
// writer.flush();
// String resp = writer.toString();
ArrayList ImpresultList = new ArrayList();
NodeList l = ((Element)outNode).getElementsByTagName("mods");
colCache = persistor.getCacheCollection();
for (int i = 0; i < l.getLength(); i++) {
Node nd = l.item(i);
Map fieldsMap = ModsUtils.getFields((Element)nd);
System.out.println("IMP, fieldsmap["+i+"]:"+fieldsMap);
ResultDisplayRow row = new ResultDisplayRow();
// Persist record to db
docId = persistor.storeSearchResultRecord(colCache,nd,fieldsMap);
row.setDocId(docId);
row.setDocSource("mdc-cache");
row.setFields(fieldsMap);
ImpresultList.add(row);
nimported++;
}
if (ImpresultList.size() > 0) {
int tab = tabSet.getNextTabNumber();
tabSet.addResultList(impformat+"_"+tab, ImpresultList, null);
//tabSet.addResultList(fileName+"("+impformat+")", resultList, null);
//tabSet.addResultList(fileName, resultList, null);
}
}
upldmessage = "File uploaded, records:"+nimported+" - Close this window to refresh Search window.";
} catch (Exception e) {
upldmessage = "Upload failed, error:"+e.toString();
} finally {
if (bis != null) try { bis.close(); } catch (Exception e) {}
if (baos != null) try { baos.close(); } catch (Exception e) {}
if (colCache != null) try { colCache.close(); } catch (Exception ex) {}
}
}
//String searchopt = null;
String filter = null;
String maintab = request.getParameter("maintab");
if (maintab != null && maintab.length() > 0 && !clearAll) {
session.setAttribute("maintab",maintab);
} else {
maintab = (String)session.getAttribute("maintab");
if (maintab == null || clearAll) {
maintab = "federated";
session.setAttribute("maintab",maintab);
}
}
Map rlfields = (Map)session.getAttribute("rlfields");
//if (rlfields == null || clearAll) {
if (rlfields == null) {
rlfields = new HashMap();
session.setAttribute("rlfields",rlfields);
}
Map repfields = (Map)session.getAttribute("repfields");
if (repfields == null || clearAll) {
repfields = new HashMap();
session.setAttribute("repfields",repfields);
}
filter = request.getParameter("filter");
if (filter == null) filter = (String)session.getAttribute("filter");
if (filter == null || clearAll) filter = "";
session.setAttribute("filter",filter);
// original search.jsp fields
int perPage = 50; // maximum results per page.
String readingListMessage = "";
String searchMessage = "";
String searchTabs = "";
int tab = -1;
boolean containsSearchInput = false;
String tabWord = "";
String remChecked =
(request.getParameter("remChecked") == null || clearAll)
? "false" : request.getParameter("remChecked");
String keyword =
(request.getParameter("keyword") == null || clearAll)
? "" : request.getParameter("keyword").trim();
String sTitle =
(request.getParameter("searchTitle") == null || clearAll)
? "" : request.getParameter("searchTitle").trim();
String sAuthor =
(request.getParameter("searchAuthor") == null || clearAll)
? "" : request.getParameter("searchAuthor").trim();
String resourceType =
(request.getParameter("resourceType") == null || clearAll)
? "Default" : request.getParameter("resourceType");
int maxResults =
(request.getParameter("maxResults") == null || clearAll)
? 25 : Integer.parseInt(request.getParameter("maxResults"));
if (sAuthor.length() > 0) tabWord = sAuthor;
if (keyword.length() > 0){
if(tabWord.length() >0) {
tabWord += "+" + keyword;
}else { tabWord = keyword; }
}
if (sTitle.length() > 0) {
if(tabWord.length() > 0) {
tabWord += "+" + sTitle;
}else{ tabWord = sTitle; }
}
if (tabWord.length() > 0)
containsSearchInput = true;
// Get the curent tab, either from the tab parameter or figure it out from the keyword
try{
if (request.getParameter("tab") != null && !clearAll) {
tab = Integer.parseInt(request.getParameter("tab"));// catch NumberFormatException
tabSet.setCurrentTab(tab);
} else if (containsSearchInput) {
tab = tabSet.getTabIndex(tabWord,resourceType);
if (tab >= 0) {
tabSet.setCurrentTab(tab);
}
}
}catch(Exception e){
//debugCatches = "catch1"+e.getMessage();
}
/*String[] resTypes = null;
if(search_types != null && search_types.size() > 0 && !clearAll) {
resTypes = new String[search_types.size()];
for(int i=0; i 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;
Vector removeDocIds;
if (remChecked.equals("true")){
if (formBean.getRlChk().length > 0) {
removeDocIds =
readingListBean.removeItems(formBean.getRlChk());
tabSet.removeGreenChecks(removeDocIds);
//readingListMessage += "removed "+formBean.getRlChk().length+" items
";
}
}
if (filter != null && filter.length() > 0) {
String filterchk = filter.toLowerCase();
reslist = new ArrayList();
reslist.addAll(tabSet.getCurrentTabResults(null));
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 {
if (formBean.getChkId().length > 0) {
reslist = tabSet.getCurrentTabResults(formBean.getChkId());
}else {
reslist = tabSet.getCurrentTabResults(null);
}
}
if(!clearAll){
request.setAttribute("results", reslist);
request.setAttribute("rlist",readingListBean.getItems());
}
// reading list
readingListBean.setPersistor(persistor);
if (!remChecked.equals("true")){
// 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) {
readingListMessage = "Sorry, your items were not added.
";
}else{
readingListMessage = "Your selected items have been successfully"+
" added to the Reading List. Please select the 'Reading List' tab"+
" at the top of the page to view the Reading list and the selected"+
" items. ";
}
}
}
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);
}
// get client locale
java.util.Locale locale = request.getLocale();
// get Dateformat for client's locale
java.text.DateFormat dateFormat =
java.text.DateFormat.getDateTimeInstance(
java.text.DateFormat.SHORT,
java.text.DateFormat.SHORT, locale);
%>
Reading List Search
Powered by JAFER