public void send()

in src/main/java/org/apache/sling/api/servlets/HtmlResponse.java [468:530]


    public void send(HttpServletResponse response, boolean setStatus) throws IOException {
        prepare();

        if (setStatus) {
            Object status = getProperty(PN_STATUS_CODE);
            if (status instanceof Number) {
                int statusCode = ((Number) status).intValue();
                response.setStatus(statusCode);

                // special treatment of 201/CREATED: Requires Location
                if (statusCode == HttpServletResponse.SC_CREATED) {
                    response.setHeader("Location", getLocation());
                }
            }
        }

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

        Writer out = response.getWriter();
        InputStream template = getClass().getResourceAsStream(TEMPLATE_NAME);
        Reader in = new BufferedReader(new InputStreamReader(template));
        StringBuffer varBuffer = new StringBuffer();
        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 = properties.get(varBuffer.toString());
                        if (prop != null) {
                            out.write(ResponseUtil.escapeXml(prop.toString()));
                        }
                        varBuffer.setLength(0);
                    } else {
                        varBuffer.append(c);
                    }
            }
        }
        in.close();
        out.flush();
    }