1 17 18 package org.pentaho.ui.servlet; 19 20 import java.io.ByteArrayOutputStream ; 21 import java.io.IOException ; 22 import java.io.InputStream ; 23 import java.io.OutputStream ; 24 import java.util.ArrayList ; 25 import java.util.HashMap ; 26 import java.util.List ; 27 28 import org.dom4j.*; 29 import javax.servlet.ServletException ; 30 import javax.servlet.http.HttpServletRequest ; 31 import javax.servlet.http.HttpServletResponse ; 32 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.pentaho.messages.Messages; 36 import org.pentaho.core.runtime.IRuntimeContext; 37 import org.pentaho.core.services.HttpWebServiceRequestHandler; 38 import org.pentaho.core.session.IPentahoSession; 39 import org.pentaho.core.solution.HttpRequestParameterProvider; 40 import org.pentaho.core.solution.IParameterProvider; 41 import org.pentaho.core.solution.SimpleOutputHandler; 42 import org.pentaho.core.solution.SimpleParameterProvider; 43 import org.pentaho.core.system.PentahoSystem; 44 import org.pentaho.plugin.jfreechart.ChartDefinition; 45 import org.pentaho.core.ui.SimpleUrlFactory; 46 import org.pentaho.core.util.SoapUtil; 47 import org.pentaho.core.util.UIUtil; 48 import org.pentaho.ui.ChartHelper; 49 import org.pentaho.ui.component.INavigationComponent; 50 import org.pentaho.ui.component.NavigationComponentFactory; 51 import org.pentaho.messages.util.LocaleHelper; 52 53 61 public class HttpWebService extends ServletBase { 62 63 66 private static final long serialVersionUID = -2011812808062152707L; 67 68 private static final Log logger = LogFactory.getLog(HttpWebService.class); 69 70 public Log getLogger() { 71 return logger; 72 } 73 74 77 public HttpWebService() { 78 super(); 79 } 80 81 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 82 83 PentahoSystem.systemEntryPoint(); 84 try { 85 86 String solutionName = request.getParameter("solution"); String actionPath = request.getParameter("path"); String actionName = request.getParameter("action"); String component = request.getParameter("component"); InputStream is = request.getInputStream(); 91 ByteArrayOutputStream os = new ByteArrayOutputStream (); 92 String content = null; 93 try { 94 byte buffer[] = new byte[2048]; 95 int b = is.read(buffer); 96 while (b > 0) { 97 os.write(buffer, 0, b); 98 b = is.read(buffer); 99 } 100 content = os.toString(LocaleHelper.getSystemEncoding()); 101 } catch (Exception e) { 102 e.printStackTrace(); 104 } 105 IParameterProvider parameterProvider = null; 106 HashMap parameters = new HashMap (); 107 if (content != null && content.length() > 0) { 108 Document doc = org.pentaho.core.util.XmlHelper.getDocFromString(content); 109 List parameterNodes = doc.selectNodes("//SOAP-ENV:Body/*/*"); for (int i = 0; i < parameterNodes.size(); i++) { 111 Node parameterNode = (Node) parameterNodes.get(i); 112 String parameterName = parameterNode.getName(); 113 String parameterValue = parameterNode.getText(); 114 if ("action".equals(parameterName)) { String info[] = PentahoSystem.parseActionString(parameterValue); 118 solutionName = info[0]; 119 actionPath = info[1]; 120 actionName = info[2]; 121 } else if ("component".equals(parameterName)) { component = parameterValue; 123 } else { 124 parameters.put(parameterName, parameterValue); 125 } 126 127 } 128 parameterProvider = new SimpleParameterProvider(parameters); 129 } else { 130 parameterProvider = new HttpRequestParameterProvider(request); 131 } 132 133 response.setContentType("text/xml"); response.setCharacterEncoding(LocaleHelper.getSystemEncoding()); 135 IPentahoSession userSession = getPentahoSession(request); 139 140 String instanceId = request.getParameter("instance-id"); String processId = this.getClass().getName(); 142 143 OutputStream contentStream = new ByteArrayOutputStream (); 144 145 SimpleOutputHandler outputHandler = new SimpleOutputHandler(contentStream, false); 146 147 OutputStream outputStream = response.getOutputStream(); 150 if (component == null) { 151 HttpWebServiceRequestHandler requestHandler = new HttpWebServiceRequestHandler(userSession, null, outputHandler, parameterProvider, null); 153 154 requestHandler.setInstanceId(instanceId); 155 requestHandler.setProcessId(processId); 156 requestHandler.setAction(actionPath, actionName); 157 requestHandler.setSolutionName(solutionName); 158 159 if (debug) 160 debug(Messages.getString("HttpWebService.DEBUG_WEB_SERVICE_START")); IRuntimeContext runtime = null; 162 outputStream.write(SoapUtil.getSoapHeader().getBytes(LocaleHelper.getSystemEncoding())); 163 try { 164 runtime = requestHandler.handleActionRequest(0, 0); 165 SoapUtil.generateSoapResponse(runtime, outputStream, outputHandler, contentStream, requestHandler.getMessages()); 166 outputStream.write(SoapUtil.getSoapFooter().getBytes(LocaleHelper.getSystemEncoding())); 167 } finally { 168 if (runtime != null) { 169 runtime.dispose(); 170 } 171 } 172 } else if ("dial".equals(component)) { doDial(solutionName, actionPath, actionName, parameterProvider, outputStream, userSession); 174 } else if ("chart".equals(component)) { doChart(solutionName, actionPath, actionName, parameterProvider, outputStream, userSession); 176 } else if ("navigate".equals( component )) { doNavigate( solutionName, actionPath, actionName, parameterProvider, outputStream, userSession ); 178 } 179 180 } catch (Throwable t) { 181 error(Messages.getErrorString("HttpWebService.ERROR_0001_ERROR_DURING_WEB_SERVICE"), t); } finally { 183 PentahoSystem.systemExitPoint(); 184 } 185 if (debug) 186 debug(Messages.getString("HttpWebService.DEBUG_WEB_SERVICE_END")); 188 } 189 190 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 191 192 doGet(request, response); 193 194 } 195 196 private void doNavigate(String solutionName, String actionPath, String actionName, IParameterProvider parameterProvider, OutputStream outputStream, IPentahoSession userSession) { 197 198 String baseUrl = PentahoSystem.getApplicationContext().getBaseUrl(); 199 String hrefUrl = baseUrl; 200 String onClick = ""; String thisUrl = baseUrl + "./Navigate?"; 203 SimpleUrlFactory urlFactory = new SimpleUrlFactory( thisUrl ); 204 ArrayList messages = new ArrayList (); 205 206 if( "".equals( solutionName ) ) { solutionName = null; 208 } 209 210 INavigationComponent navigate = NavigationComponentFactory.getNavigationComponent(); 211 navigate.setHrefUrl(hrefUrl); 212 navigate.setOnClick(onClick); 213 navigate.setSolutionParamName("solution"); navigate.setPathParamName("path"); navigate.setAllowNavigation(new Boolean (false) ); 216 navigate.setOptions(""); navigate.setUrlFactory(urlFactory); 218 navigate.setMessages(messages); 219 navigate.validate( userSession, null ); 223 navigate.setParameterProvider( "request", parameterProvider ); 225 Document doc = navigate.getXmlContent(); 226 try { 227 outputStream.write(SoapUtil.getSoapHeader().getBytes(LocaleHelper.getSystemEncoding())); 228 outputStream.write(SoapUtil.openSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 229 outputStream.write("<content><".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(doc.asXML().getBytes(LocaleHelper.getSystemEncoding() )); 231 outputStream.write("</content>".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(SoapUtil.closeSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 233 outputStream.write(SoapUtil.getSoapFooter().getBytes(LocaleHelper.getSystemEncoding())); 234 } catch (IOException e) { 235 } 237 238 } 239 240 private void doDial(String solutionName, String actionPath, String actionName, IParameterProvider parameterProvider, OutputStream outputStream, IPentahoSession userSession) { 241 242 ArrayList messages = new ArrayList (); 243 StringBuffer buffer = new StringBuffer (); 244 boolean ok = ChartHelper.doDial( solutionName, actionPath, actionName, parameterProvider, buffer, userSession, messages, this ); 245 if( !ok ) { 246 UIUtil.formatErrorMessage("text/html", Messages.getString("Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET"), messages, buffer); } 248 249 try { 250 outputStream.write(SoapUtil.getSoapHeader().getBytes(LocaleHelper.getSystemEncoding())); 251 outputStream.write(SoapUtil.openSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 252 outputStream.write("<content><![CDATA[".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(buffer.toString().getBytes(LocaleHelper.getSystemEncoding() )); 254 outputStream.write("]]></content>".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(SoapUtil.closeSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 256 outputStream.write(SoapUtil.getSoapFooter().getBytes(LocaleHelper.getSystemEncoding())); 257 } catch (IOException e) { 258 } 260 261 312 } 313 314 private void doChart(String solutionName, String actionPath, String actionName, IParameterProvider parameterProvider, OutputStream outputStream, IPentahoSession userSession) { 315 316 String chartTypeStr = parameterProvider.getStringParameter("chart-type", ""); if (ChartDefinition.PIE_CHART_STR.equals(chartTypeStr)) { 318 doPieChart(solutionName, actionPath, actionName, parameterProvider, outputStream, userSession); 319 } else { 320 doOtherChart(solutionName, actionPath, actionName, parameterProvider, outputStream, userSession); 321 } 322 } 323 324 private void doPieChart(String solutionName, String actionPath, String actionName, IParameterProvider parameterProvider, OutputStream outputStream, IPentahoSession userSession) { 325 326 ArrayList messages = new ArrayList (); 327 StringBuffer buffer = new StringBuffer (); 328 boolean ok = ChartHelper.doPieChart( solutionName, actionPath, actionName, parameterProvider, buffer, userSession, messages, this ); 329 if( !ok ) { 330 UIUtil.formatErrorMessage("text/html", Messages.getString("Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET"), messages, buffer); } 332 333 try { 334 outputStream.write(SoapUtil.getSoapHeader().getBytes(LocaleHelper.getSystemEncoding())); 335 outputStream.write(SoapUtil.openSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 336 outputStream.write("<content><![CDATA[".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(buffer.toString().getBytes(LocaleHelper.getSystemEncoding() )); 338 outputStream.write("]]></content>".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(SoapUtil.closeSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 340 outputStream.write(SoapUtil.getSoapFooter().getBytes(LocaleHelper.getSystemEncoding())); 341 } catch (IOException e) { 342 } 344 345 407 } 408 409 private void doOtherChart(String solutionName, String actionPath, String actionName, IParameterProvider parameterProvider, OutputStream outputStream, IPentahoSession userSession) { 410 411 ArrayList messages = new ArrayList (); 412 StringBuffer buffer = new StringBuffer (); 413 boolean ok = ChartHelper.doChart( solutionName, actionPath, actionName, parameterProvider, buffer, userSession, messages, this ); 414 if( !ok ) { 415 UIUtil.formatErrorMessage("text/html", Messages.getString("Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET"), messages, buffer); } 417 418 try { 419 outputStream.write(SoapUtil.getSoapHeader().getBytes(LocaleHelper.getSystemEncoding())); 420 outputStream.write(SoapUtil.openSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 421 outputStream.write("<content><![CDATA[".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(buffer.toString().getBytes(LocaleHelper.getSystemEncoding() )); 423 outputStream.write("]]></content>".getBytes(LocaleHelper.getSystemEncoding())); outputStream.write(SoapUtil.closeSoapResponse().getBytes(LocaleHelper.getSystemEncoding())); 425 outputStream.write(SoapUtil.getSoapFooter().getBytes(LocaleHelper.getSystemEncoding())); 426 } catch (IOException e) { 427 } 429 430 530 } 531 532 } | Popular Tags |