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

com.shapestone.event.EventController Maven / Gradle / Ivy

The newest version!
package com.shapestone.event;

import com.shapestone.end.point.lock.EndPointLock;
import org.slf4j.Logger;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;

import java.util.List;

import static org.slf4j.LoggerFactory.getLogger;
import static org.springframework.http.HttpStatus.LOCKED;
import static org.springframework.http.HttpStatus.OK;
import static org.springframework.web.bind.annotation.RequestMethod.POST;

/**
 * Name: Michael Williams
 * Date: 10/22/16.
 */
@RestController
public class EventController {

  private static final Logger log = getLogger(EventController.class.getName());
  private EventService eventService;
  private EndPointLock endPointLock;
  private String ADD_EVENTS = "post:events";

  public EventController(EventService eventService, EndPointLock endPointLock) {
    this.eventService = eventService;
    this.endPointLock = endPointLock;
    this.endPointLock.addEndPoint(ADD_EVENTS, false);
  }

  @RequestMapping(value = "/events", method = POST)
  public DeferredResult>> addEvents(@RequestBody List events,
                                                                @RequestHeader("correlationId") String correlationId) {
    final DeferredResult>> deferredResult = new DeferredResult<>();

    if (endPointLock.isLock(ADD_EVENTS)) {
      log.debug("addEvents is locked.");
      deferredResult.setResult(new ResponseEntity<>(LOCKED));
      return deferredResult;
    }

    //noinspection CodeBlock2Expr
    eventService
      .addEvents(events, correlationId)
      .subscribe(eventList -> {
        deferredResult.setResult(new ResponseEntity<>(eventList, OK));
      }, throwable -> {
        final String message;
        if (deferredResult.isSetOrExpired()) {
          message = "Processing of non-blocking request {} with request id #{} already expired";
        } else {
          message = "Processing of non-blocking request {} with request id #{} errored:";
          deferredResult.setErrorResult(new RuntimeException(throwable.getMessage()));
        }
        log.warn(message, "addEvents", correlationId);
      }, () -> {
        if (!deferredResult.isSetOrExpired()) {
          final String message = "The request completed without returning data or error.";
          deferredResult.setErrorResult(new RuntimeException(message));
        }
      });
    return deferredResult;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy