protected void doGet()

in src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java [61:117]


    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
            throws ServletException, IOException {

        String secondsParameter = request.getParameter("sec");

        int seconds = secondsParameter != null && secondsParameter.length() > 0 ? Integer.parseInt(secondsParameter) :
                DEFAULT_NUMBER_OF_SECONDS;

        if (seconds > MAX_NUMBER_OF_SECONDS) {
            seconds = MAX_NUMBER_OF_SECONDS;
        } else if (seconds < 0) {
            seconds = DEFAULT_NUMBER_OF_SECONDS;
        }

        DistributionTrigger distributionTrigger = request.getResource().adaptTo(DistributionTrigger.class);

        // setup SSE headers
        response.setContentType("text/event-stream");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Connection", "keep-alive");

        // needed to allow e.g. the JavaScript EventSource API to make a call from author to this server and listen for the events
//        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); // allowed origins should be explicitly configured
//        response.setHeader("Access-Control-Allow-Credentials", "true");

        final PrintWriter writer = response.getWriter();

        DistributionRequestHandler distributionRequestHandler = new DistributionRequestHandler() {
            public String getName() {
                return DistributionTriggerServlet.this.getClass().getSimpleName();
            }

            public DistributionComponentKind getComponentKind() {
                return null; // unknown
            }

            public void handle(@Nullable ResourceResolver resourceResolver, @NotNull DistributionRequest request) {
                writeEvent(writer, request);
            }
        };
        try {
            distributionTrigger.register(distributionRequestHandler);

            try {
                Thread.sleep(seconds * 1000);
            } catch (InterruptedException e) {
                log.error("thread interrupted", e);
            }

            distributionTrigger.unregister(distributionRequestHandler);

        } catch (DistributionException e) {
            response.setStatus(400);
            response.getWriter().write("error while (un)registering trigger " + e.toString());
        }
    }