@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof File) { File file = (java.io.File) object; ctx.type(MediaType.byFile(file).orElse(MediaType.octetstream)); ctx.send(new FileInputStream(file)); } } },
@Override public void render(final View view, final Renderer.Context ctx) throws Exception { String vname = view.name(); try { Map<String, Object> locals = ctx.locals(); if (vname.charAt(0) == '/') { vname = vname.substring(1); } PebbleTemplate template = pebble.getTemplate(vname); Writer writer = new StringWriter(); Map<String, Object> model = new HashMap<>(); // push locals model.putAll(locals); model.putIfAbsent("_vname", vname); // Locale: Locale locale = (Locale) locals.getOrDefault("locale", ctx.locale()); model.putIfAbsent("locale", locale); // put model model.putAll(view.model()); // render and send template.evaluate(writer, model, locale); ctx.type(MediaType.html) .send(writer.toString()); } catch (LoaderException x) { FileNotFoundException fnf = new FileNotFoundException(x.getMessage().replace("Could not find template", "").trim()); fnf.initCause(x); throw fnf; } }
@Override public void render(final View view, final Context ctx) throws Exception { String name = view.name() + suffix; JadeTemplate template = jadeConfiguration.getTemplate(name); Map<String, Object> locals = ctx.locals(); Map<String, Object> hash = new HashMap<>(); hash.put("_vname", view.name()); hash.put("_vpath", name); // Locale: Locale locale = (Locale) locals.getOrDefault("locale", ctx.locale()); hash.put("locale", locale); // locals & model hash.putAll(locals); hash.putAll(view.model()); String output = jadeConfiguration.renderTemplate(template, hash); ctx.type(MediaType.html).send(output); }
@Override public void render(final View view, final Renderer.Context ctx) throws Exception { String name = view.name() + suffix; Template template = template(name, ctx.charset()); Map<String, Object> hash = new HashMap<>(); hash.put("_vname", view.name()); hash.put("_vpath", template.getName()); hash.put("xss", xss); // Locale: Locale locale = (Locale) hash.getOrDefault("locale", ctx.locale()); hash.putIfAbsent("locale", locale); // locals Map<String, Object> locals = ctx.locals(); hash.putAll(locals); // model hash.putAll(view.model()); TemplateModel model = new SimpleHash(hash, new FtlWrapper(freemarker.getObjectWrapper())); // TODO: remove string writer StringWriter writer = new StringWriter(); // Locale: template.setLocale(locale); // output template.process(model, writer); ctx.type(MediaType.html) .send(writer.toString()); }
@SuppressWarnings({"rawtypes", "unchecked" }) @Override public void render(final Object value, final Context ctx) throws Exception { Object model = value; /** View? */ if (value instanceof View) { View view = (View) value; String path = path(Route.normalize(prefix + "/" + view.name() + suffix)); Map data = view.model(); model = Rocker.template(path).bind(data); } /** RockerModel: */ if (model instanceof RockerModel) { ArrayOfByteArraysOutput output = ((RockerModel) model).render(ArrayOfByteArraysOutput.FACTORY, template -> { if (template instanceof RequestRockerTemplate) { RequestRockerTemplate rrt = (RequestRockerTemplate) template; rrt.locals = ctx.locals(); } }); ctx.type(MediaType.html) .length(output.getByteLength()) // FIXME: make more efficient. Context should provide a way to send partial results .send(Channels.newInputStream(output.asReadableByteChannel())); } }
@Override public void render(final View view, final Renderer.Context ctx) throws Exception { String vname = view.name(); TemplateSource source = handlebars.getLoader().sourceAt(vname); Template template = handlebars.compile(source); Map<String, Object> locals = ctx.locals(); locals.putIfAbsent("_vname", vname); locals.putIfAbsent("_vpath", source.filename()); // Locale: Locale locale = (Locale) locals.getOrDefault("locale", ctx.locale()); locals.put("locale", locale); com.github.jknack.handlebars.Context context = com.github.jknack.handlebars.Context .newBuilder(view.model()) // merge request locals (req+sessions locals) .combine(locals) .resolver(resolvers) .build(); // rendering it ctx.type(MediaType.html) .send(template.apply(context)); }
@SuppressWarnings({"rawtypes", "unchecked" }) @Override public void render(final View view, final Context ctx) throws FileNotFoundException, Exception { String vname = view.name(); Map<String, Object> vars = ctx.locals(); vars.putIfAbsent("_vname", vname); // Locale: Locale locale = (Locale) vars.getOrDefault("locale", ctx.locale()); Map model = view.model(); vars.forEach(model::putIfAbsent); model.putIfAbsent("xss", new Thlxss(env)); IContext thlctx = new org.thymeleaf.context.Context(locale, model); String output = this.engine.process(vname, thlctx); ctx.type(MediaType.html) .send(output); }
protected void renderValue(final Object value, final Renderer.Context ctx) throws Exception { // use UTF-8 and get byte version final byte[] bytes; if (value instanceof JacksonView) { final JacksonView viewResponse = (JacksonView) value; bytes = mapper .writerWithView(viewResponse.view) .writeValueAsBytes(viewResponse.data); } else { bytes = mapper.writeValueAsBytes(value); } ctx.length(bytes.length) .send(bytes); }
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (!(object instanceof View)) { ctx.type(MediaType.html); ctx.send(object.toString()); } } };
@Override protected void renderValue(final Object value, final Renderer.Context ctx) throws Exception { if (value instanceof CharSequence) { ctx.type(type).send(value.toString()); } else { super.renderValue(value, ctx); } }
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof byte[]) { ctx.type(MediaType.octetstream) .send((byte[]) object); } } },
@Override public void render(Object value, Context ctx) throws Exception { if (value instanceof CharSequence) { ctx.type(type).send(value.toString()); } else { super.render(value, ctx); } } }
@Override public void render(final Object object, final Context ctx) throws Exception { if (ctx.accepts(this.type)) { ctx.type(this.type) .send(gson.toJson(object)); } }
@Override public void render(final Object object, final Context ctx) throws Exception { if (ctx.accepts(this.type)) { ctx.type(this.type) .send(jsonb.toJson(object)); } }
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof FileChannel) { ctx.type(MediaType.octetstream); ctx.send((FileChannel) object); } } },
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof Reader) { ctx.type(MediaType.html) .send((Reader) object); } } },
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof InputStream) { InputStream in = (InputStream) object; ctx.type(MediaType.octetstream) .send(in); } } },
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof CharBuffer) { CharBuffer buffer = (CharBuffer) object; ctx.type(MediaType.html) .send(buffer); } } },
@Override public void render(final Object value, final Context ctx) throws Exception { if (value instanceof Asset) { Asset resource = ((Asset) value); ctx.type(resource.type()) .length(resource.length()) .send(resource.stream()); } } },
@Override public void render(final Object object, final Renderer.Context ctx) throws Exception { if (object instanceof ByteBuffer) { ByteBuffer buffer = (ByteBuffer) object; ctx.type(MediaType.octetstream) .send(buffer); } } },