package io.github.azagniotov.stubby4j.handlers.strategy.admin;
import io.github.azagniotov.stubby4j.handlers.AdminPortalHandler;
import io.github.azagniotov.stubby4j.stubs.StubRepository;
import io.github.azagniotov.stubby4j.utils.HandlerUtils;
import io.github.azagniotov.stubby4j.utils.StringUtils;
import io.github.azagniotov.stubby4j.yaml.YAMLParser;
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.http.HttpStatus;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PostHandlingStrategy implements AdminResponseHandlingStrategy {
@Override
public void handle(final HttpServletRequest request, final HttpServletResponse response, final StubRepository stubRepository) throws Exception {
if (!request.getRequestURI().equals(AdminPortalHandler.ADMIN_ROOT)) {
response.setStatus(HttpStatus.METHOD_NOT_ALLOWED_405);
response.getWriter().println("Method POST is not allowed on URI " + request.getRequestURI());
return;
}
final String post = HandlerUtils.extractPostRequestBody(request, AdminPortalHandler.NAME);
if (!StringUtils.isSet(post)) {
final String errorMessage = String.format("%s request on URI %s was empty", request.getMethod(), request.getRequestURI());
HandlerUtils.configureErrorResponse(response, HttpStatus.NO_CONTENT_204, errorMessage);
return;
}
stubRepository.refreshStubsByPost(new YAMLParser(), post);
if (stubRepository.getStubs().size() == 1) {
response.addHeader(HttpHeader.LOCATION.asString(), stubRepository.getOnlyStubRequestUrl());
}
response.setStatus(HttpStatus.CREATED_201);
response.getWriter().println("Configuration created successfully");
}
}