Package com.indeed.proctor.consumer

Source Code of com.indeed.proctor.consumer.ViewProctorSpecificationServlet

package com.indeed.proctor.consumer;

import com.google.common.base.CharMatcher;
import com.google.common.base.Strings;
import com.indeed.proctor.common.ProctorSpecification;
import com.indeed.proctor.common.Serializers;
import com.indeed.proctor.common.SpecificationResult;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;

public class ViewProctorSpecificationServlet extends HttpServlet {
    private static final Logger LOGGER = Logger.getLogger(ViewProctorSpecificationServlet.class);

    private static final String DEFAULT_PROCTOR_SPEC_PATH = "/WEB-INF/proctor/proctor-specification.json";
    // Definitely don't want to blow up while viewing the spec
    private static final ObjectMapper OBJECT_MAPPER = Serializers.lenient();

    private String proctorSpecPath = DEFAULT_PROCTOR_SPEC_PATH;

    @Override
    public void init(final ServletConfig config) throws ServletException {
        super.init(config);
        final String proctorSpecPathParameter = config.getInitParameter("proctorSpecPath");
        if (! CharMatcher.WHITESPACE.matchesAllOf(Strings.nullToEmpty(proctorSpecPathParameter))) {
            proctorSpecPath = proctorSpecPathParameter;
        }
    }

    @Override
    protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/plain;charset=UTF-8");

        final InputStream resourceAsStream;
        if (proctorSpecPath.startsWith("classpath:")) {
            final String proctorSpecClassPath = proctorSpecPath.substring("classpath:".length());
            resourceAsStream = getClass().getClassLoader().getResourceAsStream(proctorSpecClassPath);
        } else {
            resourceAsStream = getServletContext().getResourceAsStream(proctorSpecPath);
        }

        final SpecificationResult results = new SpecificationResult();
        try {
            if (resourceAsStream == null) {
                throw new ServletException("No resource stream for proctorSpecPath " + proctorSpecPath);
            }

            final ProctorSpecification specification = OBJECT_MAPPER.readValue(resourceAsStream, ProctorSpecification.class);
            results.setSpecification(specification);
        } catch (final Throwable t) {
            final String message = "Unable to parse specification in " + proctorSpecPath;

            LOGGER.error(message, t);

            final StringWriter sw = new StringWriter();
            final PrintWriter writer = new PrintWriter(sw);
            t.printStackTrace(writer);

            results.setError(message);
            results.setException(sw.toString());
        }

        final PrintWriter writer = resp.getWriter();

        OBJECT_MAPPER.defaultPrettyPrintingWriter().writeValue(writer, results);
    }
}
TOP

Related Classes of com.indeed.proctor.consumer.ViewProctorSpecificationServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.