com.yoncabt.ebr.ws.ReportWS.java Source code

Java tutorial

Introduction

Here is the source code for com.yoncabt.ebr.ws.ReportWS.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.yoncabt.ebr.ws;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.yoncabt.abys.core.util.log.FLogManager;
import com.yoncabt.ebr.ReportOutputFormat;
import com.yoncabt.ebr.ReportRequest;
import com.yoncabt.ebr.ReportResponse;
import com.yoncabt.ebr.ReportService;
import com.yoncabt.ebr.executor.ReportTask;
import com.yoncabt.ebr.executor.Status;
import com.yoncabt.ebr.executor.definition.ReportDefinition;
import net.sf.jasperreports.engine.JRException;

/**
 *
 * @author myururdurmaz
 */
@RestController
public class ReportWS {

    @Autowired
    private ReportService reportService;

    private static FLogManager logManager = FLogManager.getLogger(ReportTask.class);

    @RequestMapping(value = {
            "/ws/1.0/dataSourceNames" }, method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<List<String>> dataSourceNames() {
        return ResponseEntity.ok(new ArrayList<String>(reportService.dataSourceNames()));
    }

    @RequestMapping(value = { "/ws/1.0/reportList" }, method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<List<ReportDefinition>> reportList() throws IOException, JRException {
        return ResponseEntity.ok(reportService.reportList());
    }

    @RequestMapping(value = {
            "/ws/1.0/status/{requestId}" }, method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<ReportResponse> status(@PathVariable("requestId") String requestId) {
        Status status = reportService.status(requestId);
        if (status == null) {//balamam
            logManager.info("status query :YOK !!! " + requestId);
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        }
        logManager.info("status query :" + requestId);
        switch (status) {
        case WAIT:
            logManager.info("status query :" + requestId + " :balam");
            return ResponseEntity.status(HttpStatus.CREATED).body(null);

        case RUN:
            logManager.info("status query :" + requestId + " :devam ediyor");
            return ResponseEntity.status(HttpStatus.PROCESSING).body(null);

        case EXCEPTION:
            logManager.info("status query :" + requestId + " :hata");
            return ResponseEntity.status(420).body(null);// 420 Method Failure

        case FINISH:
            logManager.info("status query :" + requestId + " :bitmi");
            return ResponseEntity.status(HttpStatus.OK).body(null);

        case CANCEL:
            logManager.info("status query :" + requestId + " :iptal");
            return ResponseEntity.status(HttpStatus.OK).body(null);

        case SCHEDULED:
            logManager.info("status query :" + requestId + " :balam");
            return ResponseEntity.status(HttpStatus.CREATED).body(null);
        default:
            throw new IllegalArgumentException(status.name());
        }
    }

    @RequestMapping(value = { "/ws/1.0/reports" }, method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<List<String>> reports() {
        return ResponseEntity.ok(reportService.reports());
    }

    @RequestMapping(value = {
            "/ws/1.0/detail/{requestId}" }, method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<ReportTask> detail(@PathVariable("requestId") String requestId) {
        ReportTask task = reportService.detail(requestId);
        if (task == null) {//balamam
            logManager.info("output :YOK !!! " + requestId);
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        }
        return ResponseEntity.status(HttpStatus.OK).body(task);
    }

    @RequestMapping(value = {
            "/ws/1.0/cancel/{requestId}" }, method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<ReportTask> cancel(@PathVariable("requestId") String requestId) {
        try {
            reportService.cancel(requestId);
            return ResponseEntity.status(HttpStatus.OK).body(null);
        } catch (NoSuchElementException e) {
            logManager.info("rapor :YOK !!! " + requestId);
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        }
    }

    @RequestMapping(value = { "/ws/1.0/output/{requestId}" }, method = RequestMethod.GET)
    public ResponseEntity<byte[]> output(@PathVariable("requestId") String requestId) throws IOException {
        try {
            byte[] output = reportService.output(requestId);
            ReportTask task = reportService.detail(requestId);
            logManager.info("output :" + requestId);
            return ResponseEntity.status(HttpStatus.OK)
                    .contentType(ReportOutputFormat.valueOf(task.getRequest().getExtension()).getMediaType())
                    .lastModified(task.getEnded()).header("Content-Disposition",
                            "inline; filename=" + requestId + "." + task.getRequest().getExtension())
                    .body(output);
        } catch (NoSuchElementException e) {
            logManager.info("output :YOK !!! " + requestId);
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        }
    }

    @RequestMapping(value = { "/ws/1.0/error/{requestId}" }, method = RequestMethod.GET, produces = "text/plain")
    public ResponseEntity<String> error(@PathVariable("requestId") String requestId) throws IOException {
        return ResponseEntity.status(HttpStatus.OK).body(reportService.error(requestId));
    }

    @RequestMapping(value = {
            "/ws/1.0/request" }, method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
    @SuppressWarnings("ThrowableResultIgnored")
    public ResponseEntity<ReportResponse> request(@RequestBody(required = true) ReportRequest req) {
        ReportTask res = reportService.request(req);
        return ResponseEntity.status(res.getStatus().getHttpStatus()).body(res.getResponse());
    }
}