<%@ page language="java" contentType="text/html;charset=utf-8" %> <%@ page trimDirectiveWhitespaces="true" %> <%@ page import="org.crosswire.util.Base64" %> <%@ page import="java.util.Vector" %> <%@ page import="java.util.Arrays" %> <%@ page import="java.util.Comparator" %> <%@ page import="java.util.Properties" %> <%@ page import="java.io.File" %> <%@ page import="java.io.FileInputStream" %> <%@ page import="org.crosswire.sword.orb.*" %> <%@ page import="java.net.URLEncoder" %> <%@ taglib uri="/WEB-INF/crosswire-i18n.tld" prefix="t" %> <%! static Vector styleNames = null; static Vector styleFiles = null; static Vector styleDescriptions = null; static Vector tabNames = null; static Vector tabLinks = null; static Vector tabTitles = null; static Vector tabDefaults = null; static Vector rtolLangs = null; static Vector offeredLanguages = null; static String defaultBible = null; static String defaultLang = null; static String defaultStyle = null; static Properties swordWebConfig = null; static String languages = null; static Vector linkName = null; static Vector linkAddress = null; static String metaContent = null; static String defaultDevo = null; static final int TEN_YEARS = 60 * 60 * 24 * 365 * 10; %> <% synchronized(this) { if (styleNames == null) { try { swordWebConfig = new Properties(); File propName = new File(request.getSession().getServletContext().getRealPath("/WEB-INF/swordweb.properties")); if (propName.exists()) { FileInputStream propFile = new FileInputStream(propName); swordWebConfig.load(propFile); propFile.close(); } } catch (Exception e) { e.printStackTrace(); } defaultBible = swordWebConfig.getProperty("defaultBible", "NASB"); defaultDevo = swordWebConfig.getProperty("defaultDevo","DBD"); defaultStyle = swordWebConfig.getProperty("defaultStyle", "Washed Out"); defaultLang = swordWebConfig.getProperty("defaultLang", "en_US"); offeredLanguages = new Vector(); String languages = swordWebConfig.getProperty("offeredLanguages", "en_US"); String[] language = languages.split(" "); for (int i = 0; i < language.length; i++) { offeredLanguages.add(language[i]); } /* read from swordweb.properties as many style sheets as on offer */ styleNames = new Vector(); styleFiles = new Vector(); styleDescriptions = new Vector(); int i = 0; while (swordWebConfig.getProperty("offeredCSS.Name." + i,"") != "") { styleNames.add(swordWebConfig.getProperty("offeredCSS.Name." + i,"")); styleFiles.add(swordWebConfig.getProperty("offeredCSS.Link." + i,"")); i++; } /* if reading from swordweb.properties fails, at least one style sheet should be available */ if (i<0) { styleNames.add("Washed Out"); styleFiles.add("wash.css"); } /* read from swordweb.properties as many tabs as on offer */ tabNames = new Vector(); tabTitles = new Vector(); tabLinks = new Vector(); tabDefaults = new Vector(); i = 0; while (swordWebConfig.getProperty("offeredTabName." + i,"") != "") { tabNames.add(swordWebConfig.getProperty("offeredTabName." + i,"")); tabTitles.add(swordWebConfig.getProperty("offeredTabTitle." + i,"")); tabLinks.add(swordWebConfig.getProperty("offeredTabLink." + i,"index.jsp")); tabDefaults.add(swordWebConfig.getProperty("offeredTabDefault."+ i,"true")); i++; } /* if reading from swordweb.properties fails some sane defaults */ if (i<1) { tabNames.add("Home"); tabTitles.add("Home"); tabLinks.add("index.jsp"); tabDefaults.add("true"); tabNames.add("Passage Study"); tabTitles.add("Passage Study"); tabLinks.add("passagestudy.jsp"); tabDefaults.add("true"); tabNames.add("Parallel"); tabTitles.add("Parallel Display"); tabLinks.add("parallelstudy.jsp"); tabDefaults.add("true"); tabNames.add("Power Search"); tabTitles.add("Power Search"); tabLinks.add("powersearch.jsp"); tabDefaults.add("true"); tabNames.add("Devotionals"); tabTitles.add("Daily Devotionals"); tabLinks.add("dailydevotion.jsp"); tabDefaults.add("false"); tabNames.add("Gospel Harmony"); tabTitles.add("Gospel Harmony"); tabLinks.add("eusebian.jsp"); tabDefaults.add("true"); tabNames.add("Library"); tabTitles.add("Full Library"); tabLinks.add("fulllibrary.jsp"); tabDefaults.add("false"); tabNames.add("Preferences"); tabTitles.add("Preferences"); tabLinks.add("preferences.jsp"); tabDefaults.add("true"); tabNames.add("FAQ"); tabTitles.add("Frequently Asked Questions"); tabLinks.add("about.jsp"); tabDefaults.add("true"); } /* create a list of languages which require rtol display. This list is currently hard coded and may well remain for a while longer like this */ rtolLangs = new Vector(); rtolLangs.add("fa"); rtolLangs.add("az_IR"); rtolLangs.add("div"); rtolLangs.add("ar"); linkName = new Vector(); linkAddress = new Vector(); i = 0; while (swordWebConfig.getProperty("offeredLinkName." + i,"") != "") { linkName.add(swordWebConfig.getProperty("offeredLinkName." + i,"")); linkAddress.add(swordWebConfig.getProperty("offeredLinkAddress." + i,"")); i++; } if (i<1) { linkName.add("CrossWire Bible Society"); linkAddress.add("http://www.crosswire.org"); linkName.add("American Bible Society"); linkAddress.add("http://www.americanbible.org"); linkName.add("Society of Biblical Literature"); linkAddress.add("http://sbl-site.org"); } /* load property to create meta keywords to improve search ranking of the site */ metaContent = swordWebConfig.getProperty("metaKeywords","bible, jesus, christ"); } } SWMgr mgr = SwordOrb.getSWMgrInstance(request); if (mgr == null) { out.print("Couldn't connect to SWORD backend"); return; } // let's cache the modInfo in the session cuz this is alot to grab each time we need it from the orb ModInfo[] modInfo = (ModInfo[])session.getAttribute("ModInfo"); if (modInfo == null) { // we don't have it cached yet, so get it from the orb and save it in the session modInfo = mgr.getModInfoList(); Arrays.sort(modInfo, new Comparator() { public int compare(Object o1, Object o2) { ModInfo m1 = (ModInfo) o1; ModInfo m2 = (ModInfo) o2; StringBuffer comp1 = new StringBuffer(); StringBuffer comp2 = new StringBuffer(); for (int i = 0; i < 2; i++) { ModInfo mi = (i == 0)?m1:m2; StringBuffer sb = (i==0)?comp1:comp2; if (mi.category.equals(SwordOrb.BIBLES)) { sb.append("1"); } else if (mi.category.equals(SwordOrb.COMMENTARIES)) { sb.append("2"); } else if (mi.category.equals(SwordOrb.DAILYDEVOS)) { sb.append("3"); } else if (mi.category.equals(SwordOrb.LEXDICTS)) { sb.append("4"); } else if (mi.category.equals(SwordOrb.GENBOOKS)) { sb.append("5"); } } comp1.append(m1.description); comp2.append(m2.description); return (comp1.toString().compareTo(comp2.toString())); } }); session.setAttribute("ModInfo", modInfo); } Vector prefBibles = (Vector)session.getAttribute("PrefBibles"); Vector prefCommentaries = (Vector)session.getAttribute("PrefCommentaries"); Vector parDispModules = (Vector)session.getAttribute("ParDispModules"); String prefStyle = (String)request.getParameter("setStyle"); if (prefStyle == null) { prefStyle = (String)session.getAttribute("PrefStyle"); } else { // set style cookie Cookie c = new Cookie("PrefStyle", URLEncoder.encode(prefStyle)); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } String footnotes = (String)request.getParameter("Footnotes"); if (footnotes == null) { footnotes = (String)session.getAttribute("Footnotes"); } else { // set style cookie Cookie c = new Cookie("Footnotes", footnotes); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } String xrefs = (String)request.getParameter("Cross-references"); if (xrefs == null) { xrefs = (String)session.getAttribute("Cross-references"); } else { // set style cookie Cookie c = new Cookie("Cross-references", xrefs); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } String headings = (String)request.getParameter("Headings"); if (headings == null) { headings = (String)session.getAttribute("Headings"); } else { // set style cookie Cookie c = new Cookie("Headings", headings); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } String javascript = (String)request.getParameter("Javascript"); if (javascript == null) { javascript = (String)session.getAttribute("Javascript"); } else { // set style cookie Cookie c = new Cookie("Javascript", javascript); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } Vector showTabs = (Vector)session.getAttribute("showTabs"); if (showTabs == null) { showTabs = new Vector(); for (int i = 0; i < tabNames.size(); i++) { showTabs.add((String)tabDefaults.get(i)); } } String[] showTab = request.getParameterValues("showTab"); if (showTab != null) { for (int i = 0; i < showTab.length; i++) { try { int tabNum = Integer.parseInt(showTab[i]); showTabs.set(tabNum, "true"); Cookie c = new Cookie("showTab"+Integer.toString(tabNum), "t"); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } catch(Exception e) {} } } showTab = request.getParameterValues("hideTab"); if (showTab != null) { for (int i = 0; i < showTab.length; i++) { try { int tabNum = Integer.parseInt(showTab[i]); showTabs.set(tabNum, "false"); Cookie c = new Cookie("showTab"+Integer.toString(tabNum), "f"); c.setMaxAge(TEN_YEARS); c.setPath("/"); response.addCookie(c); } catch(Exception e) {} } } Cookie[] cookies = request.getCookies(); if ((prefBibles == null) && (cookies != null)) { for (int i = 0; i < cookies.length; i++) { int start, end; String field; String line; if (cookies[i].getName().startsWith("showTab")) { try { int tabNum = Integer.parseInt(cookies[i].getName().substring(8)); showTabs.set(tabNum, ("t".equals(cookies[i].getValue()))?"true":"false"); } catch (Exception e) {} } else if (cookies[i].getName().equals("PrefStyle")) { prefStyle = cookies[i].getValue(); } else if (cookies[i].getName().equals("Headings")) { headings = cookies[i].getValue(); } else if (cookies[i].getName().equals("Footnotes")) { footnotes = cookies[i].getValue(); } else if (cookies[i].getName().equals("Cross-references")) { xrefs = cookies[i].getValue(); } else if (cookies[i].getName().equals("Javascript")) { javascript = cookies[i].getValue(); } else if (cookies[i].getName().equals("PrefBibles")) { prefBibles = new Vector(); start = 0; end = 1; line = cookies[i].getValue(); while (end > 0) { end = line.indexOf("+",start); field = (end > 0) ? line.substring(start, end) : line.substring(start); if (start > 3) { // skip the first one cuz it's not a real module prefBibles.add(field); } start = end + 1; } } else if (cookies[i].getName().equals("PrefCommentaries")) { prefCommentaries = new Vector(); start = 0; end = 1; line = cookies[i].getValue(); while (end > 0) { end = line.indexOf("+",start); field = (end > 0) ? line.substring(start, end) : line.substring(start); if (start > 3) { // skip the first one cuz it's not a real module prefCommentaries.add(field); } start = end + 1; } } else if (cookies[i].getName().equals("ParDispModules")) { parDispModules = new Vector(); start = 0; end = 1; line = cookies[i].getValue(); while (end > 0) { end = line.indexOf("+",start); field = (end > 0) ? line.substring(start, end) : line.substring(start); if (start > 3) { // skip the first one cuz it's not a real module parDispModules.add(field); } start = end + 1; } } } } if (prefBibles == null) { prefBibles = new Vector(); } if (prefCommentaries == null) { prefCommentaries = new Vector(); } if (parDispModules == null) { parDispModules = new Vector(); } if ((prefStyle == null) || (styleNames.indexOf(prefStyle) < 0)) { prefStyle = defaultStyle; } String appLang = request.getParameter("lang"); if (appLang == null) { appLang = (String)session.getAttribute("lang"); if (appLang == null) { appLang = defaultLang; } } session.setAttribute("PrefBibles", prefBibles); session.setAttribute("PrefCommentaries", prefCommentaries); session.setAttribute("ParDispModules", parDispModules); session.setAttribute("PrefStyle", prefStyle); session.setAttribute("Headings", headings); session.setAttribute("Footnotes", footnotes); session.setAttribute("Cross-references", xrefs); session.setAttribute("Javascript", javascript); session.setAttribute("showTabs", showTabs); session.setAttribute("lang", appLang); session.setAttribute("meta", metaContent); session.setAttribute("ActiveDevo",defaultDevo); mgr.setDefaultLocale(appLang); mgr.setJavascript(!"Off".equalsIgnoreCase(javascript)); mgr.setGlobalOption("Headings", ("Off".equalsIgnoreCase(headings)) ? "Off":"On"); mgr.setGlobalOption("Footnotes", ("On".equalsIgnoreCase(footnotes)) ? "On":"Off"); mgr.setGlobalOption("Cross-references", ("On".equalsIgnoreCase(xrefs)) ? "On":"Off"); /* // kept around in case we ever need it again // de-serialize from cookie Base64.InputStream bis = new Base64.InputStream(new StringBufferInputStream(cookies[i].getValue())); ObjectInputStream ois = new ObjectInputStream(bis); prefBibles = (Vector)ois.readObject(); prefCommentaries = (Vector)ois.readObject(); */ { Vector [] tabs = new Vector[4]; tabs[0] = tabNames; tabs[1] = tabTitles; tabs[2] = tabLinks; tabs[3] = tabDefaults; session.setAttribute("tabs", tabs); session.setAttribute("styleNames", styleNames); session.setAttribute("styleFiles", styleFiles); session.setAttribute("rtolLangs", rtolLangs); session.setAttribute("offeredLang", offeredLanguages); } %> <%@ include file="defines/tiles.jsp" %>