1 17 18 package org.pentaho.ui.servlet; 19 20 import java.io.IOException ; 21 import java.io.InputStream ; 22 import java.io.OutputStream ; 23 24 import javax.servlet.ServletException ; 25 import javax.servlet.http.HttpServletRequest ; 26 import javax.servlet.http.HttpServletResponse ; 27 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 import org.pentaho.core.repository.ISolutionRepository; 31 import org.pentaho.core.system.PentahoSystem; 32 import org.pentaho.core.util.UIUtil; 33 import org.pentaho.messages.Messages; 34 import org.pentaho.messages.util.LocaleHelper; 35 36 public class GetMondrianModel extends ServletBase { 37 38 private static final long serialVersionUID = 1L; 39 40 protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException , IOException { 41 doPost(arg0, arg1); 42 } 43 44 private static final Log logger = LogFactory.getLog(GetMondrianModel.class); 45 46 public Log getLogger() { 47 return logger; 48 } 49 50 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 51 52 getPentahoSession(request); 54 55 String model = null; 56 if (request.getParameter("model") != null) { model = request.getParameter("model"); } 59 60 if (model == null) { 61 error(Messages.getErrorString("MondrianModel.ERROR_0001_MODEL_PARAMETER_MISSING")); return; 63 } 64 65 if (!model.endsWith(".mondrian.xml")) { error(Messages.getErrorString("MondrianModel.ERROR_0002_INVALID_FILE", model)); return; 68 } 69 70 ISolutionRepository repository = PentahoSystem.getSolutionRepository(UIUtil.getPentahoSession(request)); 72 if (repository != null) { 73 String mimeType = "text/xml"; response.setContentType(mimeType); 75 response.setCharacterEncoding(LocaleHelper.getSystemEncoding()); 76 77 78 InputStream in = repository.getResourceInputStream(model); 79 OutputStream out = response.getOutputStream(); 80 81 try { 82 byte[] buf = new byte[2048]; 84 int count = 0; 85 int length = 0; 86 while ((count = in.read(buf)) >= 0) { 87 out.write(buf, 0, count); 88 length += count; 89 } 90 response.setContentLength(length); 91 } finally { 92 in.close(); 93 out.close(); 94 } 95 } else { 96 error(Messages.getErrorString("MondrianModel.ERROR_0004_INVALID_REPOSITORY")); } 98 } 99 100 } 101 | Popular Tags |