/******************************************************************************* * Copyright 2014 Virginia Polytechnic Institute and State University * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package edu.vt.vbi.patric.portlets; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; import javax.portlet.GenericPortlet; import javax.portlet.PortletException; import javax.portlet.PortletRequestDispatcher; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.UnavailableException; import org.hibernate.jmx.StatisticsService; import org.json.simple.JSONArray; import edu.vt.vbi.patric.cache.ENewsGenerator; import edu.vt.vbi.patric.common.OrganismTreeBuilder; import edu.vt.vbi.patric.dao.DBDisease; import edu.vt.vbi.patric.dao.DBPIG; import edu.vt.vbi.patric.dao.DBPRC; import edu.vt.vbi.patric.dao.DBPathways; import edu.vt.vbi.patric.dao.DBSearch; import edu.vt.vbi.patric.dao.DBShared; import edu.vt.vbi.patric.dao.DBSummary; import edu.vt.vbi.patric.dao.DBTranscriptomics; import edu.vt.vbi.patric.dao.HibernateHelper; public class BreadCrumb extends GenericPortlet { private final boolean initCache = true; /** * Initialize Database connections, build genome selector caches, and generate static data feed for eNews and Watchlist * */ @Override public void init() throws PortletException { super.init(); // now it should refer to [jboss-instance]/conf/PATRIC_DB.cfg.xml // String k = "PATRIC_DB.cfg.xml"; HibernateHelper.buildSessionFactory(k, k); DBShared.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBSummary.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBSearch.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBPathways.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBDisease.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBPIG.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBPRC.setSessionFactory(HibernateHelper.getSessionFactory(k)); DBTranscriptomics.setSessionFactory(HibernateHelper.getSessionFactory(k)); try { ArrayList<?> list = MBeanServerFactory.findMBeanServer(null); MBeanServer server = (MBeanServer) list.get(0); ObjectName on = new ObjectName("Hibernate:type=statistics,application=PATRIC2"); StatisticsService mBean = new StatisticsService(); mBean.setSessionFactory(DBShared.getSessionFactory()); server.registerMBean(mBean, on); } catch (Exception e) { e.printStackTrace(); } // create cache for Genome Selector (all bacteria level) try { if (initCache) { HashMap<String, String> key = new HashMap<String, String>(); key.put("ncbi_taxon_id", "2"); JSONArray list = OrganismTreeBuilder.buildGenomeTree(key); PrintWriter out = new PrintWriter(new FileWriter(getPortletContext().getRealPath("txtree-bacteria.js"))); list.writeJSONString(out); //out.println(list.toString()); out.close(); list = OrganismTreeBuilder.buildGenomeList(key); out = new PrintWriter(new FileWriter(getPortletContext().getRealPath("azlist-bacteria.js"))); list.writeJSONString(out); //out.println(list.toString()); out.close(); list = OrganismTreeBuilder.buildTaxonGenomeMapping(key); out = new PrintWriter(new FileWriter(getPortletContext().getRealPath("tgm-bacteria.js"))); list.writeJSONString(out); //out.println(list.toString()); out.close(); } } catch (Exception e) { e.printStackTrace(); } // create cache for enews try { if (initCache) { ENewsGenerator cacheGen = new ENewsGenerator(); if (cacheGen.createCacheFile(getPortletContext().getRealPath("/js/enews_data.js"))) { System.out.println("eNews cache is generated"); } else { System.out.println("problem in generating eNews cache"); } } } catch (Exception ex) { ex.printStackTrace(); } } public void destroy() { try { ArrayList<?> list = MBeanServerFactory.findMBeanServer(null); MBeanServer server = (MBeanServer) list.get(0); ObjectName on = new ObjectName("Hibernate:type=statistics,application=PATRIC2"); server.unregisterMBean(on); } catch (Exception e) { e.printStackTrace(); } } protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException, UnavailableException { response.setContentType("text/html"); String cType = request.getParameter("context_type"); // String cId = request.getParameter("context_id"); String bm = request.getParameter("breadcrumb_mode"); if (bm == null) { bm = ""; } String windowID = request.getWindowID(); // System.out.println("WindowID="+windowID+", bm="+bm); if (windowID.indexOf("ECSearch") >= 1 || windowID.indexOf("GOSearch") >= 1 || windowID.indexOf("GenomicFeature") >= 1 || windowID.indexOf("GenomeFinder") >= 1 || windowID.indexOf("PathwayFinder") >= 1 || windowID.indexOf("Downloads") >= 1 || windowID.indexOf("IDMapping") >= 1 || windowID.indexOf("HPITool") >= 1 || (windowID.indexOf("FIGfamSorter") >= 1 && windowID.indexOf("FIGfamSorterB") < 1) || (windowID.indexOf("FIGfamViewer") >= 1 && windowID.indexOf("FIGfamViewerB") < 1) || (windowID.indexOf("FIGfam") >= 1 && bm.equals("tool")) || (windowID.indexOf("SingleFIGfam") >= 1 && bm.equals("tool")) || windowID.indexOf("ExperimentData") >= 1 || windowID.indexOf("GEO") >= 1 || windowID.indexOf("ArrayExpress") >= 1 || windowID.indexOf("PRC") >= 1 || windowID.indexOf("PRIDE") >= 1 || windowID.indexOf("Structure") >= 1 || windowID.indexOf("IntAct") >= 1 || windowID.indexOf("RAST") >= 1 || windowID.indexOf("MGRAST") >= 1 || windowID.indexOf("TranscriptomicsEnrichment") >= 1) { request.setAttribute("WindowID", windowID); PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/breadcrumb/other_tabs.jsp"); prd.include(request, response); } else { if (cType == null || cType.equals("")) { // show nothing PrintWriter writer = response.getWriter(); writer.write(" "); writer.close(); } else if (cType.equals("feature")) { PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/breadcrumb/feature_tabs.jsp"); prd.include(request, response); } else if (cType.equals("genome")) { PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/breadcrumb/genome_tabs.jsp"); prd.include(request, response); } else if (cType.equals("taxon")) { PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/breadcrumb/taxon_tabs.jsp"); prd.include(request, response); } } } }