blob: 453828c46d28b312ac70fae9dd17597ba70d62ee [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.internal.webapp.service;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.help.internal.base.util.ProxyUtil;
import org.eclipse.help.internal.webapp.utils.Utils;
/**
* Returns an HTML page for the selected topic passed as request path info.
*
* <p>Passes the request to {@link org.eclipse.help.internal.webapp.servlet.ContentServlet}
* servlet.
*
* @param lang - (optional) specifies the locale
*
* @return An html page for the selected topic
*
* @version $Version$
*
**/
public class ContentService extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
String baseURL = req.getRequestURL().toString();
String contentURL = baseURL.replaceFirst(Utils.SERVICE_CONTEXT, ""); //$NON-NLS-1$
String query = req.getQueryString();
if (query != null)
contentURL += '?' + query;
URL url = new URL(contentURL);
URLConnection con = ProxyUtil.getConnection(url);
con.setAllowUserInteraction(false);
con.setDoInput(true);
con.connect();
String contentType;
ServletContext context = getServletContext();
String pathInfo = req.getPathInfo();
String mimeType = context.getMimeType(pathInfo);
if (mimeType != null && !mimeType.equals("application/xhtml+xml")) { //$NON-NLS-1$
contentType = mimeType;
} else {
contentType = con.getContentType();
}
resp.setContentType(contentType);
InputStream is = con.getInputStream();
OutputStream out = resp.getOutputStream();
if (!contentType.equals("application/xhtml+xml") //$NON-NLS-1$
&& !contentType.equals("text/html") //$NON-NLS-1$
&& !con.getContentType().equals("text/html")) { //$NON-NLS-1$
Utils.transferContent(is, out);
out.flush();
} else {
String response = Utils.convertStreamToString(ProxyUtil.getStream(url));
response = Utils.updateResponse(response);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); //$NON-NLS-1$
writer.write(response);
writer.close();
}
}
}