All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.lightlink.spring.StreamingResponseData Maven / Gradle / Ivy

There is a newer version: 1.2.4
Show newest version
package io.lightlink.spring;

/*
 * #%L
 * lightlink-core
 * %%
 * Copyright (C) 2015 Vitaliy Shevchuk
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */


import io.lightlink.core.Hints;
import io.lightlink.output.HttpResponseStream;
import io.lightlink.output.JSONHttpResponseStream;
import io.lightlink.output.async.AsyncHttpResponseStreamRunnable;
import io.lightlink.utils.LogUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class StreamingResponseData {

    private static ExecutorService executorService = Executors.newCachedThreadPool();

    private Hints hints;
    private HttpResponseStream responseStream;
    private int[] progressiveSlices;
    private HttpServletRequest servletRequest;
    private HttpServletResponse servletResponse;

    private AsyncHttpResponseStreamRunnable runnable;
    private Future taskFuture;

    public StreamingResponseData(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
        this.servletRequest = servletRequest;
        this.servletResponse = servletResponse;

        if (servletRequest != null)
            this.hints = Hints.fromRequest(servletRequest);

    }

    public Hints getHints() {
        return hints;
    }

    public boolean isResponseStreamInitiated() {
        return responseStream != null;
    }

    public HttpResponseStream getResponseStream() {
        if (responseStream == null)
            try {
                runnable = new AsyncHttpResponseStreamRunnable(
                        new JSONHttpResponseStream(servletResponse));

                taskFuture = executorService.submit(runnable);

                responseStream = runnable.getFacade();
            } catch (IOException e) {
                throw new RuntimeException(e.toString(), e);
            }
        return responseStream;
    }


    public int[] getProgressiveSlices() {
        return progressiveSlices;
    }

    public void setProgressiveSlices(int[] progressiveSlices) {
        this.progressiveSlices = progressiveSlices;
    }

    public HttpServletResponse getServletResponse() {
        return servletResponse;
    }

    public void end() {
        if (isResponseStreamInitiated()) {
            responseStream.end();
            try {
                taskFuture.get();
            } catch (InterruptedException e) {
                LogUtils.error(getClass(), e);
            } catch (ExecutionException e) {
                LogUtils.error(getClass(), e);
            }
        }
    }

    public HttpServletRequest getServletRequest() {
        return servletRequest;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy