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