protected void doSend()

in src/main/java/org/apache/sling/servlets/post/HtmlResponse.java [111:176]


    protected void doSend(HttpServletResponse response) throws IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");

        // get changelog
        changes.insert(0, "<pre>");
        changes.append("</pre>");
        if (getError() == null) {
            setProperty(PN_CHANGE_LOG, changes.toString());
        } else {
            setProperty(PN_CHANGE_LOG, "");
        }

        Writer out = response.getWriter();

        String templateName;
        if (isSafeReferer()) {
            templateName = TEMPLATE_NAME;
        } else {
            templateName = NO_GO_BACK_TEMPLATE_NAME;
        }

        InputStream template = getClass().getResourceAsStream(templateName);
        Reader in = new BufferedReader(new InputStreamReader(template));
        StringBuilder varBuffer = new StringBuilder();
        int state = 0;
        int read;
        while ((read = in.read()) >= 0) {
            char c = (char) read;
            switch (state) {
                    // initial
                case 0:
                    if (c == '$') {
                        state = 1;
                    } else {
                        out.write(c);
                    }
                    break;
                    // $ read
                case 1:
                    if (c == '{') {
                        state = 2;
                    } else {
                        state = 0;
                        out.write('$');
                        out.write(c);
                    }
                    break;
                    // { read
                case 2:
                    if (c == '}') {
                        state = 0;
                        Object prop = getProperty(varBuffer.toString());
                        if (prop != null) {
                            out.write(ResponseUtil.escapeXml(prop.toString()));
                        }
                        varBuffer.setLength(0);
                    } else {
                        varBuffer.append(c);
                    }
            }
        }
        in.close();
        out.flush();
    }