1 21 22 package com.jaspersoft.jasperserver.war.control; 23 24 import java.util.HashMap ; 25 import java.util.Map ; 26 27 import javax.servlet.ServletException ; 28 import javax.servlet.http.HttpServletRequest ; 29 import javax.servlet.http.HttpServletResponse ; 30 import javax.servlet.http.HttpSession ; 31 32 import org.apache.log4j.Logger; 33 import org.springframework.validation.BindException; 34 import org.springframework.web.servlet.ModelAndView; 35 36 import com.jaspersoft.jasperserver.api.JSException; 37 import com.jaspersoft.jasperserver.api.common.domain.impl.ExecutionContextImpl; 38 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup; 39 import com.jaspersoft.jasperserver.api.metadata.common.domain.client.ResourceLookupImpl; 40 import com.jaspersoft.jasperserver.api.metadata.olap.domain.OlapUnit; 41 import com.jaspersoft.jasperserver.api.metadata.olap.service.OlapConnectionService; 42 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria; 43 import com.tonbeller.jpivot.olap.model.OlapModel; 44 import com.tonbeller.jpivot.tags.OlapModelProxy; 45 import com.tonbeller.wcf.controller.RequestContext; 46 47 53 public class OlapModelController extends JRBaseMultiActionController { 54 55 protected final Logger logger = Logger.getLogger(getClass()); 56 57 private OlapConnectionService olapConnectionService; 58 59 62 public OlapConnectionService getOlapConnectionService() { 63 return olapConnectionService; 64 } 65 66 69 public void setOlapConnectionService(OlapConnectionService olapConnectionService) { 70 this.olapConnectionService = olapConnectionService; 71 } 72 73 public ModelAndView viewOlap(HttpServletRequest req, HttpServletResponse res) 74 throws ServletException { 75 76 String viewUri = req.getParameter("name"); 77 78 if (viewUri == null || viewUri.length() == 0) { 79 throw new JSException("No OLAP Model name"); 80 } 81 logger.debug("Viewing OLAP Model: " + viewUri); 82 83 req.setAttribute("name", viewUri); 84 85 HttpSession sess = req.getSession(); 86 Map olapModels = (Map ) sess.getAttribute("olapModels"); 87 if (olapModels == null) { 88 olapModels = new HashMap (); 89 sess.setAttribute("olapModels", olapModels); 90 } 91 92 OlapSessionState sessionState = (OlapSessionState) olapModels.get(viewUri); 93 if (sessionState == null) { 94 sessionState = getOlapSession(viewUri, sess); 95 olapModels.put(viewUri, sessionState); 96 } 97 req.setAttribute("olapModel", sessionState.getOlapModel()); 98 req.setAttribute("olapSession", sessionState); 99 100 103 sess.setAttribute("olapModel", sessionState.getOlapModel()); 104 105 return new ModelAndView("/olap/viewOlap"); 106 } 107 108 protected OlapSessionState getOlapSession(String viewUri, HttpSession sess) { 109 110 logger.debug("Setting OlapModel for " + viewUri); 111 112 RequestContext context = RequestContext.instance(); 113 ExecutionContextImpl executionContext = new ExecutionContextImpl(); 114 115 OlapUnit olapUnit = (OlapUnit) getRepository().getResource(executionContext, 116 viewUri); 117 118 if (olapUnit == null) { 119 throw new JSException("No OLAP Model retrieved"); 120 } 121 122 OlapModel model = getOlapConnectionService().createOlapModel(executionContext, olapUnit); 123 124 if (model == null) { 125 throw new JSException("No OLAP Model created for: " + viewUri); 126 } 127 128 model = (OlapModel) model.getTopDecorator(); 129 model.setLocale(context.getLocale()); 130 model.setServletContext(context.getSession().getServletContext()); 131 model.setID(viewUri); 132 133 model.setServletContext(sess.getServletContext()); 134 142 144 OlapModelProxy omp = OlapModelProxy.instance(viewUri, sess, false); 145 149 try { 150 omp.initializeAndShow(viewUri, model); 151 } catch (Exception e) { 152 throw new JSException(e); 153 } 154 155 return new OlapSessionState(omp, olapUnit); 156 } 157 166 protected ModelAndView handle(HttpServletRequest request, 167 HttpServletResponse response, Object command, BindException errors) 168 throws Exception { 169 170 ModelAndView modelAndView = null; 171 172 ResourceLookupImpl olapUnitCommand = (ResourceLookupImpl) command; 173 174 String olapUnitName = olapUnitCommand.getName(); 175 176 if (olapUnitName != null) 177 { 178 modelAndView = new ModelAndView("olap/viewOlap", "olapUnitName", olapUnitName); 179 } 180 else { 181 ExecutionContextImpl executionContext = new ExecutionContextImpl(); 183 ResourceLookup[] olapUnits = repository.findResource(executionContext, FilterCriteria.createFilter(OlapUnit.class)); 184 modelAndView = new ModelAndView("listOlapViews", "olapUnits", olapUnits); 185 } 186 187 return modelAndView; 188 } 189 190 public class OlapSessionState { 191 private OlapModel olapModel; 192 private OlapUnit olapUnit; 193 194 public OlapSessionState(OlapModel olapModel, OlapUnit olapUnit) { 195 this.olapModel = olapModel; 196 this.olapUnit = olapUnit; 197 } 198 199 202 public OlapModel getOlapModel() { 203 return olapModel; 204 } 205 208 public void setOlapModel(OlapModel olapModel) { 209 this.olapModel = olapModel; 210 } 211 214 public OlapUnit getOlapUnit() { 215 return olapUnit; 216 } 217 220 public void setOlapUnit(OlapUnit olapUnit) { 221 this.olapUnit = olapUnit; 222 } 223 224 225 } 226 } 227 | Popular Tags |