1 20 package org.openi.web.controller.admin; 21 22 import com.tonbeller.jpivot.olap.model.*; 23 import com.tonbeller.jpivot.xmla.*; 24 import com.tonbeller.wcf.component.Renderable; 25 import com.tonbeller.wcf.controller.RequestContext; 26 import org.apache.log4j.Logger; 27 import org.openi.analysis.Analysis; 28 import org.openi.analysis.Datasource; 29 import org.openi.application.Application; 30 import org.openi.project.ProjectContext; 31 import org.openi.xmla.XmlaConnector; 32 import org.springframework.validation.BindException; 33 import org.springframework.web.servlet.ModelAndView; 34 import org.springframework.web.servlet.mvc.*; 35 import java.net.URLEncoder ; 36 import java.util.*; 37 import javax.servlet.http.HttpServletRequest ; 38 import javax.servlet.http.HttpServletResponse ; 39 40 41 48 class NewAnalysisFormControler extends SimpleFormController { 49 private static Logger logger = Logger.getLogger(NewAnalysisFormControler.class); 50 51 57 protected Object formBackingObject(HttpServletRequest request) 58 throws Exception { 59 String dsparam = null; 60 String cubeparam = null; 61 String mdxQuery = null; 62 dsparam = request.getParameter("dataSource"); 63 cubeparam = request.getParameter("cube"); 64 65 Map map = new HashMap(); 66 67 if ("1".equalsIgnoreCase(request.getParameter("changeds"))) { 69 Analysis analysis = getAnalysisFromSession(request, "analysis01"); 70 71 if (analysis != null) { 72 dsparam = analysis.getDataSourceName(); 73 mdxQuery = getMdxQueryFromSession(request, "query01"); 74 cubeparam = getCubeNameFromMdx(mdxQuery); 75 map.put("changeDatasource", "true"); 76 } 77 } 78 79 if ("true".equalsIgnoreCase(request.getParameter("changeDatasource"))) { 80 map.put("changeDatasource", "true"); 81 } 82 83 map.put("dataSource", dsparam); 84 85 String lastds = request.getParameter("lastDatasource"); 86 87 if ((lastds != null) && (!lastds.equalsIgnoreCase(dsparam))) { 88 cubeparam = null; 89 } 90 91 map.put("cube", cubeparam); 92 93 ProjectContext context = (ProjectContext) request.getSession() 94 .getAttribute("projectContext"); 95 96 List datasource = new ArrayList(); 97 98 Iterator iterator = context.getProject().getDataSourceMap().keySet() 99 .iterator(); 100 101 while (iterator.hasNext()) { 102 String key = (String ) iterator.next(); 103 104 if (context.getProject().getDataSourceMap().get(key) instanceof Datasource) { 105 datasource.add(key); 106 } 107 } 108 109 map.put("datasourceList", datasource); 110 111 if (dsparam != null) { 112 Datasource ds = context.getDatasource(dsparam); 113 114 if (ds != null) { 115 map.put("catalog", ds.getCatalog()); 116 map.put("cubeList", 117 new XmlaConnector().getCubeList(ds.getServer(), ds.getCatalog(), 118 getUser(request), getPassword(request))); 119 } 120 121 if ((cubeparam != null) && (cubeparam != "")) { 122 String cube = cubeparam; 123 124 if (!cube.equalsIgnoreCase(request.getParameter("lastCube"))) { 125 org.openi.xmla.XMLAQueryTag qtag = new org.openi.xmla.XMLAQueryTag(); 126 127 qtag.setCatalog(ds.getCatalog()); 128 129 qtag.setUri(ds.getServer()); 130 qtag.setId("query_new"); 131 132 XMLA_SOAP xmla; 133 134 if (Application.getInstance().isBasicAuthentication()) { 135 qtag.setUser(getUser(request)); 136 qtag.setPassword(getPassword(request)); 137 xmla = new XMLA_SOAP(ds.getServer(), getUser(request), 138 getPassword(request)); 139 } else { 140 qtag.setUser(""); 141 qtag.setPassword(""); 142 xmla = new XMLA_SOAP(ds.getServer(), "", ""); 143 } 144 145 if (mdxQuery == null) { 146 List dims = xmla.discoverDim(ds.getCatalog(), cube); 148 Iterator dimensions = dims.iterator(); 149 150 while (dimensions.hasNext()) { 151 OlapItem item = (OlapItem) dimensions.next(); 152 153 if (!"Measures".equalsIgnoreCase(item.getName())) { 154 155 List hiers= xmla.discoverHier(ds.getCatalog(), cube, "[" + item.getName() + "]"); 156 157 String hierName = ""; 158 159 if (hiers != null && hiers.size() >1 ) { 160 hierName = ((OlapItem)hiers.get(0)).getName(); 161 162 if( hierName.startsWith("[") && hierName.endsWith("]")) { 163 hierName = "." + hierName; 164 }else{ 165 hierName = ".[" + hierName + "]"; 166 } 167 168 169 } 170 171 mdxQuery = "SELECT {[Measures].DefaultMember} on columns, {[" 172 + item.getName() + "]" + hierName + ".DefaultMember} on rows FROM [" 173 + cube + "]"; 174 logger.debug("Default query generated as :" 175 + mdxQuery); 176 177 break; 178 } 179 } 180 } 181 182 qtag.setMdxQuery(mdxQuery); 183 qtag.init(com.tonbeller.wcf.controller.RequestContext 184 .instance()); 185 186 request.getSession() 188 .setAttribute("newanalysismodel", map); 189 } 190 191 map.put("selectedCube", cube); 192 } 193 194 map.put("selectedDatasource", dsparam); 195 } 196 197 if (request.getMethod().equalsIgnoreCase("get") 199 && (request.getParameter("null") != null)) { 200 map = (Map) request.getSession().getAttribute("newanalysismodel"); 201 202 map.put("navClicked", "true"); 203 } 204 205 return map; 206 } 207 208 209 210 219 protected ModelAndView onSubmit(HttpServletRequest request, 220 HttpServletResponse response, Object command, BindException error) 221 throws Exception { 222 ModelAndView mv = null; 223 224 String action = request.getParameter("action"); 225 226 if (action == null) { 227 action = request.getParameter("navi_new.hiernav.ok"); 228 } 229 230 if (action == null) { 231 action = request.getParameter("navi_new.hiernav.cancel"); 232 } 233 234 if (action == null) { 235 } else if (action.equalsIgnoreCase("OK")) { 236 Renderable comp = (Renderable) request.getSession() 242 .getAttribute("navi_new"); 243 244 try { 245 comp.render(RequestContext.instance()); 249 } catch (Exception e) { 250 } 251 252 createAnalysis(request, response, command); 254 } else if (action.equalsIgnoreCase("Cancel")) { 255 String message; 256 257 if ("true".equalsIgnoreCase(request.getParameter( 258 "changeDatasource"))) { 259 message = "Change datasource cancelled"; 260 response.sendRedirect("analysis.htm?message=" + message); 261 } else { 262 message = "New analysis cancelled"; 263 response.sendRedirect("splash.htm?message=" + message); 264 } 265 } 266 267 return super.onSubmit(request, response, command, error); 268 } 269 270 private void createAnalysis(HttpServletRequest request, 271 HttpServletResponse response, Object command) 272 throws Exception { 273 Analysis analysis = null; 274 request.getSession().removeAttribute("lastParams"); 275 276 if (request.getParameter("changeDatasource") == null) { 277 analysis = new Analysis(); 278 analysis.setAnalysisTitle(request.getParameter("cube")); 279 } else { 280 analysis = getAnalysisFromSession(request, "analysis01"); 281 } 282 283 analysis.setDataSourceName(request.getParameter("dataSource")); 284 285 String mdxQuery = getMdxQueryFromSession(request, "query_new"); 286 287 analysis.setMdxQuery(mdxQuery); 288 289 request.getSession().setAttribute("analysis01", analysis); 290 291 String message; 292 293 if ("true".equalsIgnoreCase(request.getParameter("changeDatasource"))) { 294 message = "Datasource changed"; 295 } else { 296 message = "New analysis created"; 297 } 298 299 response.sendRedirect("analysis.htm?config=newanalysis&message=" 300 + message); 301 } 302 303 private String getUser(HttpServletRequest request) 304 throws Exception { 305 return URLEncoder.encode(request.getUserPrincipal().getName(), 306 "UTF-8"); 307 } 308 309 private String getPassword(HttpServletRequest request) 310 throws Exception { 311 String pwd = (String ) request.getSession() 312 .getAttribute("user.credentials"); 313 314 if (pwd != null) { 315 pwd = URLEncoder.encode(pwd, "UTF-8"); 316 } else { 317 pwd = ""; 318 } 319 320 return pwd; 321 } 322 323 private String getCubeNameFromMdx(String mdxQuery) { 324 326 String cube = ""; 327 328 int index1 = mdxQuery.toUpperCase().indexOf(" FROM "); 329 int index2 = mdxQuery.toUpperCase().indexOf(" WHERE "); 330 index1 = index1 + 7; 331 332 if (index2 == -1) { 333 index2 = mdxQuery.length(); 334 } 335 336 cube = mdxQuery.substring(index1, index2 - 1); 337 cube = cube.trim(); 338 cube.replaceAll("\\[", ""); 339 cube.replaceAll("\\]", ""); 340 341 return cube; 342 } 343 344 private String getMdxQueryFromSession(HttpServletRequest request, 345 String queryID) { 346 String mdxQuery = ""; 347 OlapModel olapModel = (OlapModel) request.getSession() 348 .getAttribute(queryID); 349 350 if (olapModel.getBookmarkState(0) instanceof XMLA_Memento) { 352 XMLA_Memento olapMem = (XMLA_Memento) olapModel.getBookmarkState(0); 353 mdxQuery = olapMem.getMdxQuery(); 354 } 355 356 return mdxQuery; 357 } 358 359 private Analysis getAnalysisFromSession(HttpServletRequest request, 360 String sessionID) { 361 Analysis analysis = null; 362 363 if (request.getSession().getAttribute(sessionID) != null) { 364 analysis = (Analysis) request.getSession() 365 .getAttribute(sessionID); 366 } 367 368 return analysis; 369 } 370 } 371 | Popular Tags |