/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/help/branches/sakai-2.8.1/help-tool/src/java/org/sakaiproject/tool/help/ContentServlet.java $ * $Id: ContentServlet.java 81373 2010-08-17 14:41:50Z stephen.marquard@uct.ac.za $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.osedu.org/licenses/ECL-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 org.sakaiproject.tool.help; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.api.app.help.HelpManager; import org.sakaiproject.api.app.help.Resource; import org.sakaiproject.component.cover.ComponentManager; /** * Content Servlet serves help documents to document frame. * @version $Id: ContentServlet.java 81373 2010-08-17 14:41:50Z stephen.marquard@uct.ac.za $ */ public class ContentServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** Our log (commons). */ private static Log M_log = LogFactory.getLog(ContentServlet.class); private static final String DOC_ID = "docId"; private static final String TEXT_HTML = "text/html; charset=UTF-8"; private HelpManager helpManager; /** * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { getHelpManager().initialize(); String docId = req.getParameter(DOC_ID); OutputStreamWriter writer = new OutputStreamWriter(res.getOutputStream(), "UTF-8"); try { res.setContentType(TEXT_HTML); Resource resource = getHelpManager().getResourceByDocId(docId); URL url; if (resource != null) { if (!getHelpManager().getRestConfiguration().getOrganization() .equalsIgnoreCase("sakai")) { writer.write(RestContentProvider.getTransformedDocument( getServletContext(), getHelpManager(), resource)); } else { if (resource.getLocation().startsWith("/")) { if (!"".equals(getHelpManager().getExternalLocation())) { url = new URL(getHelpManager().getExternalLocation() + resource.getLocation()); } else { url = HelpManager.class.getResource(resource.getLocation()); } if (url == null) { M_log.warn("Help document " + docId + " not found at: " + resource.getLocation()); } else { BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream(),"UTF-8")); try { String sbuf; while ((sbuf = br.readLine()) != null) { writer.write( sbuf ); writer.write( System.getProperty("line.separator") ); } } finally { br.close(); } } } else { res.sendRedirect(resource.getLocation()); } } } } finally { try { writer.flush(); } catch (IOException e) { // ignore } writer.close(); } } /** * get the component manager through cover * @return help manager */ public HelpManager getHelpManager() { if (helpManager == null) { helpManager = (HelpManager) ComponentManager.get(HelpManager.class.getName()); return helpManager; } return helpManager; } }