<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page trimDirectiveWhitespaces="true" %> <%@ page import="org.crosswire.utils.Sessions" %> <%@ page import="org.crosswire.webtools.RightsAndRoles" %> <%@ page import="org.crosswire.utils.Utils" %> <%@ page import="org.crosswire.xml.XMLBlock" %> <%@ page import="org.crosswire.utils.HTTPUtils" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Document" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Feature" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Document.SearchFilter" %> <%@ page import="org.crosswire.community.projects.ntmss.data.ShelfInstance" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Page" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Surrogate.SurrogateImage" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Transcription" %> <%@ page import="org.crosswire.community.projects.ntmss.data.Surrogate.SurrogateTranscription" %> <%@ page import="java.net.URL" %> <%@ page import="java.util.List" %> <%@ page import="java.util.Vector" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.HashSet" %> <%@ page import="java.util.Arrays" %> <%@ page import="org.apache.log4j.Logger" %> <%! private static Logger logger = Logger.getLogger("listetable.jsp"); %> <% String requestURI = request.getRequestURI(); int pe = requestURI.lastIndexOf('/', requestURI.length()-2); requestURI = (pe > 0) ? requestURI.substring(0, pe) : ""; URL baseURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), requestURI); URL portalBaseURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), "/"); URL appBaseURL = new URL(portalBaseURL, "/community"); int limit = 3200; try { limit = Integer.parseInt(request.getParameter("limit")); } catch (Exception e) {} response.setContentType("text/xml"); Document.SearchFilter searchFilter = new Document.SearchFilter(); Document.SearchFilter secondaryFilter = new Document.SearchFilter(); searchFilter.biblicalContent = request.getParameter("biblicalContent"); if (searchFilter.biblicalContent != null && searchFilter.biblicalContent.length() < 1) searchFilter.biblicalContent = null; int paramCount = searchFilter.biblicalContent != null ? 1 : 0; String featureCodeClipString = request.getParameter("featureCodeClipString"); //if (featureCodeClipString != null) featureCodeClipString = new String(featureCodeClipString.getBytes("iso8859-1"), "UTF-8"); SearchFilter.FeatureCriteria featureCodeClip = featureCodeClipString == null ? null : SearchFilter.FeatureCriteria.parseFeatureCodeString(featureCodeClipString); String featureAuthor = request.getParameter("featureAuthor"); String featureCodesStrings[] = request.getParameterValues("featureCode"); //for (int i = 0; featureCodesStrings != null && i < featureCodesStrings.length; ++i) if (featureCodesStrings[i] != null) featureCodesStrings[i] = new String(featureCodesStrings[i].getBytes("iso8859-1"), "UTF-8"); paramCount += ((featureCodesStrings != null) ? featureCodesStrings.length : 0); if ("true".equals(request.getParameter("listeOnly"))) { secondaryFilter.docID = 10000; secondaryFilter.maxDocID = 49999; } String limitGroupID = request.getParameter("groupName"); if (limitGroupID != null) { secondaryFilter.groupID = limitGroupID; ++paramCount; } //logger.info("secondaryFilter: " + secondaryFilter); // this is all to handle to common case where docID=min-maxDocID is part of an addQuery string but also a docID is sent as a query. // String docIDStrings[] = request.getParameterValues("docID"); String docIDString = docIDStrings != null && docIDStrings.length > 0 ? docIDStrings[0] : null; try { searchFilter.docID = Integer.parseInt(docIDString); ++paramCount; } catch (Exception e) { if (docIDString != null) ++paramCount; } if (docIDStrings != null && docIDStrings.length > 1) { try { secondaryFilter.docID = Integer.parseInt(docIDStrings[1]); } catch (Exception e) { } } try { searchFilter.lineCountMin = Integer.parseInt(request.getParameter("lineCountMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.documentGroupID = Integer.parseInt(request.getParameter("documentGroupID")); ++paramCount; } catch (Exception e) {} try { searchFilter.lineCountMax = Integer.parseInt(request.getParameter("lineCountMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.columnsMin = Integer.parseInt(request.getParameter("columnsMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.columnsMax = Integer.parseInt(request.getParameter("columnsMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.pageWidthMin = Integer.parseInt(request.getParameter("pageWidthMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.pageWidthMax = Integer.parseInt(request.getParameter("pageWidthMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.pageHeightMin = Integer.parseInt(request.getParameter("pageHeightMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.pageHeightMax = Integer.parseInt(request.getParameter("pageHeightMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.pageCountMin = Integer.parseInt(request.getParameter("pageCountMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.pageCountMax = Integer.parseInt(request.getParameter("pageCountMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.folioCountMin = Integer.parseInt(request.getParameter("folioCountMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.folioCountMax = Integer.parseInt(request.getParameter("folioCountMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.dateMin = Integer.parseInt(request.getParameter("dateMin")); ++paramCount; } catch (Exception e) {} try { searchFilter.dateMax = Integer.parseInt(request.getParameter("dateMax")); ++paramCount; } catch (Exception e) {} try { searchFilter.instID = Integer.parseInt(request.getParameter("instID")); ++paramCount; } catch (Exception e) {} try { searchFilter.shelfID = Integer.parseInt(request.getParameter("shelfID")); ++paramCount; } catch (Exception e) {} try { if ("true".equals(request.getParameter("hasImages"))) searchFilter.hasImages = true; } catch (Exception e) {} try { if ("false".equals(request.getParameter("hasImages"))) searchFilter.hasImages = false; } catch (Exception e) {} if (searchFilter.hasImages != null) ++paramCount; try { if ("true".equals(request.getParameter("hasTranscriptions"))) searchFilter.hasTranscriptions = true; } catch (Exception e) {} try { if ("false".equals(request.getParameter("hasTranscriptions"))) searchFilter.hasTranscriptions = false; } catch (Exception e) {} if (searchFilter.hasTranscriptions != null) ++paramCount; searchFilter.lang = request.getParameter("lang"); if (searchFilter.lang != null) ++paramCount; if (request.getParameter("multilingual") != null) { searchFilter.multilingual = "true".equals(request.getParameter("multilingual")); ++paramCount; } searchFilter.contentDesc = request.getParameter("contentDesc"); if (searchFilter.contentDesc != null) ++paramCount; searchFilter.country = request.getParameter("country"); if (searchFilter.country != null) { searchFilter.country = new String(searchFilter.country.getBytes("iso8859-1"), "UTF-8"); ++paramCount; } searchFilter.place = request.getParameter("place"); if (searchFilter.place != null) { searchFilter.place = new String(searchFilter.place.getBytes("iso8859-1"), "UTF-8"); ++paramCount; } searchFilter.gaNum = request.getParameter("gaNum"); if (searchFilter.gaNum != null) { searchFilter.gaNum = Transcription.assureUnicode(searchFilter.gaNum); if (searchFilter.gaNum.length() > 0) ++paramCount; } boolean pageDetail = false; try { pageDetail = "page".equals(request.getParameter("detail")); } catch (Exception e) {} if (paramCount > 0) { // let's check to see if we're a privileged user int contentAccessLevel = 0; contentAccessLevel = RightsAndRoles.hasRole(request, response, "Internal User") ? Math.max(2, contentAccessLevel) : contentAccessLevel; contentAccessLevel = RightsAndRoles.hasRole(request, response, "Expert User") ? Math.max(1, contentAccessLevel) : contentAccessLevel; boolean isAdmin = RightsAndRoles.hasRole(request, response, "VMR Administrator"); // --------------------------------------------- RightsAndRoles.User currentUser = RightsAndRoles.getInstance().getCurrentUser(request, response); if (currentUser != null) { //logger.info("currentUser" + currentUser); searchFilter.currentUserID = currentUser.getUserName(); currentUser.includeUserGroups(); XMLBlock ug = currentUser.getBlock("userGroups"); if (ug != null) searchFilter.currentGroupIDs = ug.toString(); } secondaryFilter.currentUserID = searchFilter.currentUserID; secondaryFilter.currentGroupIDs = searchFilter.currentGroupIDs; Document docs[] = null; if (docIDStrings != null) { for (int i = 0; i < docIDStrings.length; ++i) { Document.SearchFilter sf = i == 0 ? searchFilter : secondaryFilter; String docIDStr = docIDStrings[i]; if (docIDStr != null && docIDStr.indexOf("-") > -1) { String range[] = docIDStr.split("-"); sf.docID = Integer.parseInt(range[0]); sf.maxDocID = Integer.parseInt(range[1]); } } } if (docIDString != null && docIDString.indexOf("-") > -1) { String range[] = docIDString.split("-"); searchFilter.docID = Integer.parseInt(range[0]); searchFilter.maxDocID = Integer.parseInt(range[1]); } // let's let admin see all user's docs if (searchFilter.userID == null && isAdmin) searchFilter.userID = "*"; if (secondaryFilter.userID == null && isAdmin) secondaryFilter.userID = "*"; if (featureCodesStrings != null && featureCodesStrings.length > 0) { for (String fc : featureCodesStrings) { SearchFilter.FeatureCriteria featureCriteria = SearchFilter.FeatureCriteria.parseFeatureCodeString(fc); searchFilter.addFeatureCriteria(featureCriteria); } } if (docIDString != null && (docIDString.startsWith("crosswire:") || docIDString.indexOf("|") > -1)) { Vector docSet = new Vector(); for (String did : docIDString.split("\\|")) { try { //System.out.println("******* did: " + did); if (did.startsWith("crosswire:")) { did = did.substring("crosswire:".length()); docSet.add(new Document.CrossWireDocument(did)); } else { searchFilter.docID = Integer.parseInt(did); Document docss[] = Document.searchDocuments(pageDetail, searchFilter, secondaryFilter); if (docss.length > 0) docSet.add(docss[0]); } } catch (Exception e) {} } docs = docSet.toArray(new Document[0]); } else { if (docIDString != null && searchFilter.docID == -1 && paramCount == 1) { docs = new Document[0]; } else docs = Document.searchDocuments(pageDetail, searchFilter, secondaryFilter); } //logger.info("searchFilter: " + searchFilter); if (!pageDetail) { %> Results:  ; Filters:                         <% } int docCount = 0; int pageCount = 0; for (Document doc : docs) { if (!pageDetail) { // this takes longer. Worth it? doc = Document.getDocument(doc.getDocumentID()); String rtolClassAdd = rtolLangs.contains(doc.getLanguage())?" rtol":""; Feature f = doc.getFeature("Removed"); boolean removed = f != null; boolean skip = f != null && !"Display".equals(f.getStringVal1()); String gaNumHint = ""; String afterText = ""; if (skip) continue; if (removed) { gaNumHint = "Removed"; String reason = f.getStringVal2(); if ("Other".equals(reason)) reason = ""; String prose = f.getProse(); if (prose != null && prose.trim().length() > 0) { if (reason.length() > 0) reason += "; "; reason += prose; } if (reason.length() > 0) gaNumHint += "; " + reason; Document.SearchFilter seeAlsoSearch = new Document.SearchFilter(); String primaryName = doc.getPrimaryName(); seeAlsoSearch.addFeatureCriteria(new SearchFilter.FeatureCriteria( "FormerGA", Feature.AuxDataField.STRINGVAL1, SearchFilter.FeatureCriteria.OPERATOR_EQUALS, primaryName)); List seeAlsoResults = new ArrayList(); seeAlsoResults.addAll(Arrays.asList(Document.searchDocuments(false, seeAlsoSearch, secondaryFilter))); if (primaryName.startsWith("L")) { seeAlsoSearch = new Document.SearchFilter(); seeAlsoSearch.addFeatureCriteria(new SearchFilter.FeatureCriteria( "FormerGA", Feature.AuxDataField.STRINGVAL1, SearchFilter.FeatureCriteria.OPERATOR_EQUALS, "l " + primaryName.substring(1))); seeAlsoResults.addAll(Arrays.asList(Document.searchDocuments(false, seeAlsoSearch, secondaryFilter))); } if (!seeAlsoResults.isEmpty()) { String sdocs = ""; for (Document seeDoc: seeAlsoResults) { if (sdocs.length() > 0) sdocs += "; "; sdocs += seeDoc.getGANumber(); } gaNumHint += "; See: " + sdocs; afterText = "data-afterText=\" "+gaNumHint+"\""; } } ++docCount; %> <%=doc.getDocumentID()%> 0 ? ("title=\""+gaNumHint+"\"") : ""%>> class="gaNum<%=removed?" removed":""%>"><%=doc.getGANumber()%><%=gaNumHint.length() > 0 ? "          ":""%> <%=doc.getOriginYearDescription()%> <%=doc.getLeavesDisplay()%> <% int i = 0; for (ShelfInstance si : doc.getShelfInstances()) { %> <% ++i; } %> <% } else { // this optimization messing up p.isLectionaryText() below // Page pgs[] = (paramCount > 1 || searchFilter.docID == -1) ? doc.getPages() : doc.getPages(true); // Page pgs[] = (featureCodeClip != null) ? doc.getPages() : doc.getPages(true); Page pgs[] = (paramCount > 1 || searchFilter.docID == -1) ? doc.getPages() : doc.getPages(true); doc.addCSNTMSurrogates(pgs); for (Page p : pgs) { String bcOverride = null; Feature showFeature = null; String speculation = null; String speculationNotes = null; for (Feature f : Feature.getFeatures(p.getDocumentID(), p.getPageID())) { if (featureCodeClip != null) { if (featureCodeClip.matches(f)) { //logger.info("showFeature is true! " + f); showFeature = f; break; } } if ("ContentOverview".equals(f.getFeatureCode())) { if (p.getPageID() == f.getPageID()) { bcOverride = f.getStringVal1(); if (bcOverride == null || bcOverride.trim().length() < 1) bcOverride = f.getStringVal2(); if (bcOverride != null && bcOverride.trim().length() < 1) bcOverride = null; } } if ("ManuscriptSpeculation".equals(f.getFeatureCode())) { if (p.getPageID() == f.getPageID()) { speculation = f.getStringVal1(); speculationNotes = f.getProse(); if (speculationNotes != null) { speculationNotes = speculationNotes.trim(); if (speculationNotes.length() < 1) speculationNotes = null; } } } } SurrogateImage[] images = p.getSurrogateImages(); p.setContentAccessLevel(contentAccessLevel); SurrogateTranscription trans = (p.getSurrogateTranscriptions() != null && p.getSurrogateTranscriptions().length > 0) ? p.getSurrogateTranscriptions()[0] : null; int pi = 0; for (SurrogateImage image : p.getSurrogateImages()) { String imageThumb = null; if (showFeature != null) { imageThumb = showFeature.getClipThumbURL(); } if (imageThumb == null || imageThumb.length() < 1) { imageThumb = image.getThumbURL(); } int rowCount = showFeature == null ? images.length : 1; %> <% if (pi==0) { ++pageCount; %> <%=doc.getDocumentID()%> <%=p.getPageID() + ((p.getFolioNumber() != null && p.getFolioNumber().length() > 0) ? (" ("+p.getFolioNumber()+")") : "")%>
<% if (speculation != null) { %> " href="<%= speculation %>" target="_speculation">  <% } %> <% if (p.getNoIdx()) { // if (p.isLectionaryText()) { %> <%=p.getLectionaryText()%> <% // } if (p.isCommentaryText()) { %> Commentary Text <% } else { %> No Index Content <% } } else { String bc = p.getBiblicalContent(); out.print(bcOverride != null ? "" + bcOverride + "": bc); if (p.isCommentaryText()) { %> <%= (bc.length() > 0) ? " + " : ""%>Commentary Text <% } // if (p.isLectionaryText()) { String lecText = p.getLectionaryText(); if (lecText != null) lecText = lecText.trim(); if (lecText.length() > 0) { %> <%= ((bc.length() > 0) ? "; ": "") %><%= p.getLectionaryText() %> <% } // } } %> <% } %>
... <% if (p.getContentAccessLevel() < image.getDistributionLicenseID()) { %> Locked
<% } String shelfIDs = ""; if (image.getShelfID() != 0) shelfIDs = Integer.toString(image.getShelfID()); else { shelfIDs = p.getShelfIDs(); } String shelfFolioNums = p.getShelfFolioNums(); //logger.info("about to show page with showFeature: " + showFeature); %> <% if (showFeature != null) break; } // if we have no images, let's still output something if (p.getSurrogateImages().length == 0) { %> <%=doc.getDocumentID()%> <%=p.getPageID() + ((p.getFolioNumber() != null && p.getFolioNumber().length() > 0) ? (" ("+p.getFolioNumber()+")") : "")%>
<% if (p.getNoIdx()) { // if (p.isLectionaryText()) { %> <%=p.getLectionaryText()%> <% // } if (p.isCommentaryText()) { %> Commentary Text <% } else { %> No Index Content <% } } else { out.print(bcOverride != null ? bcOverride : p.getBiblicalContent()); if (p.isCommentaryText()) { %> + Commentary Text <% } // if (p.isLectionaryText()) { %> <%= p.getLectionaryText() %> <% // } } %>   <% } if (--limit < 1) break; } } if (--limit < 1) break; } %>
<% } %> <%! public static Set rtolLangs = new HashSet(Arrays.asList("ar-ar", "he", "ar", "syc")); %>