/** * Attempts to render the requested gadget. * * @return The results of the rendering attempt. * * TODO: Localize error messages. */ public RenderingResults Render(GadgetContext context) { if (!ValidateParent(context)) { return(RenderingResults.error("Unsupported parent parameter. Check your container code.")); } try { Gadget gadget = processor.Process(context); if (gadget.getCurrentView() == null) { return(RenderingResults.error("Unable to locate an appropriate view in this gadget. " + "Requested: '" + gadget.getContext().getView() + "' Available: " + String.Join(",", gadget.getSpec().getViews().Keys.ToArray()))); } if (gadget.getCurrentView().getType() == View.ContentType.URL) { return(RenderingResults.mustRedirect(getRedirect(gadget))); } GadgetSpec spec = gadget.getSpec(); if (!lockedDomainService.gadgetCanRender(context.getHost(), spec, context.getContainer())) { return(RenderingResults.mustRedirect(getRedirect(gadget))); } return(RenderingResults.ok(renderer.render(gadget))); } catch (RenderingException e) { return(LogError(context.getUrl(), e)); } catch (ProcessingException e) { return(LogError(context.getUrl(), e)); } catch (Exception e) { if (e.GetBaseException() is GadgetException) { return(LogError(context.getUrl(), e.GetBaseException())); } throw; } }
private static RenderingResults LogError(URI gadgetUrl, Exception t) { return(RenderingResults.error(t.Message)); }