package com.ibm.xsp.extlib.sbt.files.proxy.provider;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpEntity;
import org.apache.http.conn.BasicManagedEntity;
import org.apache.http.message.BasicHttpResponse;
import com.ibm.commons.util.StringUtil;
import com.ibm.sbt.service.basic.ProxyEndpointService;
import com.ibm.sbt.services.client.ClientServicesException;
import com.ibm.sbt.services.client.ClientService.HandlerInputStream;
import com.ibm.sbt.services.client.connections.ConnectionsService;
import com.ibm.sbt.services.endpoints.Endpoint;
import com.ibm.xsp.FacesExceptionEx;
import com.ibm.xsp.extlib.sbt.files.type.AbstractType;
import com.ibm.xsp.util.ManagedBeanUtil;
public class ConnectionsFilesProxyEndPointService extends ProxyEndpointService{
public static final String TYPE = "connections";
@Override
public void service(HttpServletRequest request, HttpServletResponse servletResponse)
throws ServletException, IOException {
String endpointName = request.getParameter(AbstractType.PARAM_ENDPOINT_NAME);
if (StringUtil.isEmpty(endpointName)) {
endpointName = TYPE;
}
Endpoint bean = (Endpoint) ManagedBeanUtil.getBean(FacesContext.getCurrentInstance(), endpointName);
if (bean == null) {
throw new ServletException("AuthorizationBean not found in application scope");
}
String fileId = request.getParameter(AbstractType.PARAM_ID);
String title = request.getPathInfo();
if (StringUtil.isNotEmpty(title)) {
String[] split = title.split("/");
if (split != null && split.length > 0) {
title = split[split.length - 1];
}
}
String repositoryId = request.getParameter(AbstractType.PARAM_REPOSITORY_ID);
// https://server/connections/files/basic/anonymous/api/library/repID/document/fileID/media/file.ext
title = URLEncoder.encode(title, "UTF-8");
String serviceUrl = "files/basic/anonymous/api/library/" + repositoryId + "/document/" + fileId + "/media/" + title;
ConnectionsService svc = new ConnectionsService(bean);
HandlerInputStream inputStream= new HandlerInputStream();
Object httpResp = null;
try {
httpResp = svc.get(serviceUrl,inputStream).getData();
} catch (ClientServicesException e) {
throw new FacesExceptionEx(e, "Failed to perform proxy request");
}
// servletResponse.setContentType(((BasicHttpResponse)httpResp).getEntity().getContentType().getValue());
// // TODO - what is this?
// String status = ((BasicHttpResponse)httpResp).getStatusLine().toString();
// status = status.substring(status.indexOf(" ") + 1, status.lastIndexOf(" "));
// try {
// Integer statusInt = Integer.parseInt(status);
// servletResponse.setStatus(statusInt);
// } catch (NumberFormatException nfe) {
// }
//
ServletOutputStream servletOut = servletResponse.getOutputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader((InputStream)httpResp));
if((InputStream)httpResp!=null){
try
{
servletResponse.setContentType("text/plain");
servletOut=servletResponse.getOutputStream();
int c;
while((c=((InputStream)httpResp).read())!=-1)
{
servletOut.write((char)Character.toUpperCase(c));
}
}
catch(IOException err)
{
//ignore
}
finally
{
if(servletOut!=null) servletOut.flush();
if(servletOut!=null) servletOut.close();
}
}
//entity.writeTo(new InputStreamReader((InputStream)httpResp));
//servletOut.close();
}
}