1 17 18 package org.pentaho.ui.servlet; 19 20 import java.io.IOException ; 21 import java.io.OutputStream ; 22 import javax.servlet.ServletException ; 23 import javax.servlet.http.HttpServletRequest ; 24 import javax.servlet.http.HttpServletResponse ; 25 import javax.servlet.http.HttpSession ; 26 import org.apache.commons.logging.Log; 27 import org.apache.commons.logging.LogFactory; 28 import org.pentaho.messages.Messages; 29 import org.pentaho.ui.BaseUIComponent; 30 import org.pentaho.ui.servlet.HttpServletRequestHandler; 31 import org.pentaho.core.session.IPentahoSession; 32 import org.pentaho.core.solution.HttpOutputHandler; 33 import org.pentaho.core.system.PentahoSystem; 34 import org.pentaho.core.ui.SimpleUrlFactory; 35 import org.pentaho.core.util.UIUtil; 36 import org.pentaho.messages.util.LocaleHelper; 37 38 44 public class UIServlet extends ServletBase { 45 46 49 private static final long serialVersionUID = 7018489258697145705L; 50 51 private static final Log logger = LogFactory.getLog(UIServlet.class); 52 53 public Log getLogger() { 54 return logger; 55 } 56 57 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 58 59 OutputStream outputStream = response.getOutputStream(); 60 61 String path = request.getContextPath(); 62 63 IPentahoSession userSession = getPentahoSession(request); 64 HttpSession session = request.getSession(); 65 66 String user = request.getRemoteUser(); 67 68 if (user != null && !userSession.isAuthenticated()) { 69 userSession.setAuthenticated(user); 71 } 72 73 String type = request.getParameter("type"); if (type == null) { 75 type = "text/html"; } 77 78 String componentName = request.getParameter("component"); if (componentName == null) { 81 response.setContentType("text/html"); StringBuffer buffer = new StringBuffer (); 83 UIUtil.formatErrorMessage("text/html", Messages.getString("UIServlet.ACTION_FAILED"), Messages.getErrorString("UIServlet.ERROR_0001_COMPONENT_NOT_SPECIFIED"), buffer); outputStream.write(buffer.toString().getBytes(LocaleHelper.getSystemEncoding())); 85 return; 86 87 } 88 response.setCharacterEncoding(LocaleHelper.getSystemEncoding()); 89 BaseUIComponent component = (BaseUIComponent) session.getAttribute(componentName); 91 if (component == null) { 92 component = getComponent(componentName); 93 if (component == null) { 94 response.setContentType("text/html"); StringBuffer buffer = new StringBuffer (); 96 UIUtil.formatErrorMessage("text/html", Messages.getString("UIServlet.ACTION_FAILED"), Messages.getErrorString("UIServlet.ERROR_0002_COMPONENT_INVALID"), buffer); outputStream.write(buffer.toString().getBytes(LocaleHelper.getSystemEncoding())); 98 return; 99 } 100 session.setAttribute(componentName, component); 101 } 102 103 if (!component.validate()) { 104 return; 106 } 107 String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/content?type=" + type + "&component=" + componentName + "&"; 109 response.setContentType(type); 110 HttpOutputHandler outputHandler = new HttpOutputHandler(response, outputStream, true); 111 112 SimpleUrlFactory urlFactory = new SimpleUrlFactory(baseUrl); 113 114 HttpServletRequestHandler requestHandler = new HttpServletRequestHandler(userSession, null, request, outputHandler, urlFactory); 115 116 requestHandler.handleUIRequest(component, type); 117 } 118 119 private BaseUIComponent getComponent(String componentName) { 120 return (BaseUIComponent) PentahoSystem.createObject(componentName, this); 121 } 122 123 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 124 125 doGet(request, response); 126 127 } 128 129 } 130 | Popular Tags |