// TODO: replace with ReflectiveCache implementation. public static Object construct(Class clazz) { try { return clazz.newInstance(); } catch (Throwable t) { throw UniversalRuntimeException.accumulate( t, "Could not create instance of " + clazz + " using default constructor"); } }
private boolean handleHelperDone() { Logger.log.info("Done handling helper in view: " + viewParameters.viewID); // Removing hack tsh.clearTokenState(IN_HELPER_INDICATOR); ELReference elref = (ELReference) tsh.getTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + HelperViewParameters.POST_HELPER_BINDING); ParameterList paramlist = (ParameterList) tsh.getTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + POST_HELPER_BINDING_PARAMLIST); statePreservationManager.scopeRestore(); if (paramlist != null) { for (int i = 0; i < paramlist.size(); i++) { UIParameter param = (UIParameter) paramlist.get(i); if (param instanceof UIELBinding) { bma.setBeanValue( ((UIELBinding) param).valuebinding.value, beanLocator, ((UIELBinding) param).rvalue, null, false); } } } String methodBinding = elref == null ? null : elref.value; Object beanReturn = null; if (methodBinding != null) { ShellInfo shells = bma.fetchShells(methodBinding, beanLocator, true); beanReturn = bma.invokeBeanMethod(shells, null); } ViewParameters originParams = (ViewParameters) tsh.getTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + POST_HELPER_ARI2_VIEWPARAMS); ARIResult ariresult = ari.interpretActionResult(viewParameters, beanReturn); ariprocessor.interceptActionResult(ariresult, originParams, ariresult); String urlToRedirectTo = ViewParamUtil.getAnyFullURL(ariresult.resultingView, vsh); try { response.sendRedirect(urlToRedirectTo); } catch (IOException e) { throw UniversalRuntimeException.accumulate(e, "Error redirecting to url: " + urlToRedirectTo); } return true; }
private boolean handleHelperStart() { Logger.log.info("Handling helper start in view: " + viewParameters.viewID); View view = new View(); List producersList = viewResolver.getProducers(viewParameters.viewID); if (producersList.size() != 1) { throw new IllegalArgumentException( "There is not exactly one view producer for the view: " + viewParameters.viewID); } ViewComponentProducer vp = (ViewComponentProducer) producersList.get(0); statePreservationManager.scopeRestore(); vp.fillComponents(view.viewroot, viewParameters, null); statePreservationManager.scopePreserve(); UIOutput helperId = (UIOutput) view.viewroot.getComponent(HelperViewParameters.HELPER_ID); UICommand helperBinding = (UICommand) view.viewroot.getComponent(HelperViewParameters.POST_HELPER_BINDING); tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + HelperViewParameters.HELPER_ID, helperId.getValue()); if (helperBinding != null) { tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + HelperViewParameters.POST_HELPER_BINDING, helperBinding.methodbinding); // Support for a ParameterList on the UICommand if (helperBinding.parameters != null) { tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + POST_HELPER_BINDING_PARAMLIST, helperBinding.parameters); } } // We need to save these ViewParameters for ActionResultInterceptors tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + POST_HELPER_ARI2_VIEWPARAMS, viewParameters); // Hack to know if we're in the helper tsh.putTokenState(IN_HELPER_INDICATOR, IN_HELPER_INDICATOR); String helperToolPath = bup.getBaseURL() + viewParameters.viewID + IN_HELPER_PATH; tsh.putTokenState( helperId.getValue() + Tool.HELPER_DONE_URL, bup.getBaseURL() + viewParameters.viewID + HELPER_FINISHED_PATH); try { response.sendRedirect(helperToolPath); } catch (IOException e) { throw UniversalRuntimeException.accumulate( e, "IOException when trying to redirect to helper tool"); } return true; }
/** * Copies text from input to output, converting newlines into XHTML <br/> elements. The * supplied streams WILL be closed! */ public void copyReader(Reader r, PrintOutputStream pos) { BufferedReader br = new BufferedReader(r); XMLWriter xmlw = new XMLWriter(pos); try { while (true) { String line = br.readLine(); if (line == null) break; xmlw.write(line); // TODO: make some kind of "XMLFilterWriter" architecture if necessary // writeEncodeLinks(xmlw, line); xmlw.writeRaw("<br/>"); } } catch (Throwable t) { throw UniversalRuntimeException.accumulate(t, "Error rendering text as HTML"); } finally { StreamCloseUtil.closeReader(r); pos.close(); } }
public boolean handle() { ZipViewParams zvp; if (viewparams instanceof ZipViewParams) { zvp = (ZipViewParams) viewparams; } else { return false; } log.debug("Handling zip"); OutputStream resultsOutputStream = null; try { resultsOutputStream = response.getOutputStream(); } catch (IOException ioe) { throw UniversalRuntimeException.accumulate( ioe, "Unable to get response stream for Download All Zip"); } Assignment2 assignment = assignmentLogic.getAssignmentById(zvp.assignmentId); String siteTitle = externalLogic.getSiteTitle(assignment.getContextId()); String zipFolderName = assignment.getTitle() + "-" + siteTitle; zipFolderName = zipExporter.escapeZipEntry(zipFolderName, "_"); response.setHeader("Content-disposition", "inline; filename=" + zipFolderName + ".zip"); response.setContentType("application/zip"); zipExporter.getSubmissionsZip(resultsOutputStream, zvp.assignmentId); if (resultsOutputStream != null) { try { resultsOutputStream.close(); } catch (IOException e) { log.warn("IOException attempting to close resultsOutputStream while downloading zip file"); } } return true; }
public AnyViewParameters handleException(Exception e, ViewParameters viewparams) { if (viewParametersPredicate.accept(viewparams)) { try { if (e instanceof SecurityException || e instanceof PermissionException) { Logger.log.info("Sending HTTP status 401 for exception ", e); httpServletResponse.sendError(401, e.getLocalizedMessage()); } else { Logger.log.info("Sending HTTP status 500 for exception ", e); httpServletResponse.sendError(500, e.getLocalizedMessage()); } try { // Jetty will refuse to allow access to Writer after sendError e.printStackTrace(httpServletResponse.getWriter()); } catch (IllegalStateException e3) { e.printStackTrace(new PrintStream(httpServletResponse.getOutputStream())); } } catch (Exception e2) { throw UniversalRuntimeException.accumulate(e2, "Error setting HTTP response code"); } NoViewParameters togo = new NoViewParameters(); togo.errorredirect = "1"; return togo; } return null; }
private boolean handleHelperHelper(final String pathBeyondViewID) { Logger.log.info( "Handling helper in view: " + viewParameters.viewID + " pathBeyondViewID: " + pathBeyondViewID); String helperId = (String) tsh.getTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + HelperViewParameters.HELPER_ID); if (pathBeyondViewID.endsWith(".helper")) { int i = pathBeyondViewID.lastIndexOf('/'); if (i >= 0) { String helperName = pathBeyondViewID.substring(i + 1); String toolName = pathBeyondViewID.substring(0, i); i = helperName.lastIndexOf('.'); helperName = helperName.substring(0, i); Logger.log.debug("new helper name" + helperName); Logger.log.debug("tool name" + toolName); tsh.putTokenState(TOKEN_STATE_PREFIX + viewParameters.viewID + "orig-helper-id", helperId); tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + "helper-tool-name", toolName); helperId = helperName; tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + HelperViewParameters.HELPER_ID, helperId); } } String origToolName = (String) tsh.getTokenState(TOKEN_STATE_PREFIX + viewParameters.viewID + "helper-tool-name"); if (origToolName != null && pathBeyondViewID.endsWith(origToolName)) { helperId = (String) tsh.getTokenState(TOKEN_STATE_PREFIX + viewParameters.viewID + "orig-helper-id"); Logger.log.debug("returning to " + helperId); tsh.putTokenState( TOKEN_STATE_PREFIX + viewParameters.viewID + HelperViewParameters.HELPER_ID, helperId); tsh.clearTokenState(TOKEN_STATE_PREFIX + viewParameters.viewID + "helper-tool-name"); tsh.clearTokenState(TOKEN_STATE_PREFIX + viewParameters.viewID + "orig-helper-id"); } ActiveTool helperTool = activeToolManager.getActiveTool(helperId); String baseUrl = bup.getBaseURL(); int hostStart = baseUrl.indexOf("://") + 3; int hostEnd = baseUrl.indexOf('/', hostStart); String contextPath = baseUrl.substring(hostEnd); contextPath += viewParameters.viewID; contextPath += IN_HELPER_PATH; String helperPathInfo = pathInfo[0] + "/" + pathInfo[1]; request.removeAttribute(Tool.NATIVE_URL); // this is the forward call try { helperTool.help(request, response, contextPath, helperPathInfo); } catch (ToolException e) { throw UniversalRuntimeException.accumulate( e, "ToolException when trying to call help. HelperId: " + helperId + " contextPath: " + contextPath + " pathInfo: " + pathInfo); } return true; }
// This method is almost entirely dialect-invariant - awaiting final // factorisation of RenderSystem public int renderComponent( RenderSystemContext rsc, UIContainer context, UIComponent torendero, XMLLump lump) { int lumpindex = lump.lumpindex; XMLLump[] lumps = lump.parent.lumps; int nextpos = -1; XMLLump outerendopen = lump.open_end; XMLLump outerclose = lump.close_tag; nextpos = outerclose.lumpindex + 1; XMLLumpList payloadlist = lump.downmap == null ? null : lump.downmap.headsForID(XMLLump.PAYLOAD_COMPONENT); XMLLump payload = payloadlist == null ? null : payloadlist.lumpAt(0); boolean iselide = lump.rsfID.startsWith(XMLLump.ELISION_PREFIX); XMLLump endopen = outerendopen; XMLLump close = outerclose; XMLLump uselump = lump; HashMap attrcopy = new HashMap(); attrcopy.putAll((payload == null ? uselump : payload).attributemap); attrcopy.remove(XMLLump.ID_ATTRIBUTE); TagRenderContext rendercontext = new TagRenderContext( attrcopy, uselump, endopen, close, rsc.pos, rsc.xmlw, nextpos, iselide); idRelationRewriter.rewrite(rsc.idrewritemap, rendercontext, context); // if there is no peer component, it might still be a static resource holder // that needs URLs rewriting. // we assume there is no payload component here, since there is no producer // ID that might govern selection. So we use "outer" indices. if (torendero == null) { if (lump.rsfID.indexOf(XMLLump.SCR_PREFIX) == (iselide ? 1 : 0)) { String scrname = lump.rsfID.substring(XMLLump.SCR_PREFIX.length() + (iselide ? 1 : 0)); StaticComponentRenderer scr = scrc.getSCR(scrname); if (scr == null) { Logger.log.info( "Warning: unrecognised static component renderer reference with key " + scrname + " at lump " + lump.toString()); scr = NullRewriteSCR.instance; } int tagtype = RenderUtil.renderSCR(scr, rsc.collecteds, rendercontext); nextpos = tagtype == ComponentRenderer.LEAF_TAG ? outerclose.lumpindex + 1 : outerendopen.lumpindex + 1; } else { if (rsc.debugrender) { renderDebugMessage( rsc, "Leaf component missing which was expected with template id " + lump.rsfID + " at " + lump.toString()); } } } else { // else there IS a component and we are going to render it. First make // sure we render any preamble. if (payload != null) { rendercontext.endopen = payload.open_end; rendercontext.close = payload.close_tag; rendercontext.uselump = payload; RenderUtil.dumpTillLump(lumps, lumpindex, payload.lumpindex, rsc.pos); lumpindex = payload.lumpindex; } rsc.IDassigner.adjustForID(attrcopy, torendero); decoratormanager.decorate(torendero.decorators, uselump.getTag(), attrcopy); // ALWAYS dump the tag name, this can never be rewritten. (probably?!) rendercontext.openTag(); if (torendero instanceof UIBasicListMember) { torendero = RenderUtil.resolveListMember(rsc.view, (UIBasicListMember) torendero); } try { componentRenderer.renderComponent(torendero, rsc.view, rendercontext); } catch (Exception e) { throw UniversalRuntimeException.accumulate( e, "Error rendering component " + torendero.getClass() + " with full ID " + torendero.getFullID() + " at template location " + rendercontext.uselump); } // if there is a payload, dump the postamble. if (payload != null) { // the default case is initialised to tag close if (rendercontext.nextpos == nextpos) { RenderUtil.dumpTillLump( lumps, rendercontext.close.lumpindex + 1, outerclose.lumpindex + 1, rsc.pos); } } nextpos = rendercontext.nextpos; } return nextpos; }