package com.kodcu.controller;
import com.kodcu.other.IOHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Optional;
/**
* Created by usta on 04.09.2016.
*/
public class Payload {
private Logger logger = LoggerFactory.getLogger(Payload.class);
private String pattern;
private String finalURI;
private HttpServletRequest request;
private HttpServletResponse response;
public Payload() {
}
public Payload(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
}
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
public String getRequestURI() {
return request.getRequestURI();
}
public String getFinalURI() {
if (Objects.isNull(finalURI)) {
String requestURI = getRequestURI();
if (requestURI.contains(pattern)) {
setFinalURI(requestURI.replace(pattern, ""));
}
else {
setFinalURI(requestURI);
}
}
return IOHelper.decode(finalURI, "UTF-8");
}
private void setFinalURI(String finalURI) {
this.finalURI = finalURI;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
public void sendRedirect(String url) {
try {
response.sendRedirect(url);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
public Payload write(String content) {
try (PrintWriter writer = response.getWriter();) {
writer.write(content);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return this;
}
public void setStatus(HttpStatus status) {
response.setStatus(status.value());
}
public String param(String param) {
return getRequest().getParameter(param);
}
public boolean hasParam(String param) {
return Objects.nonNull(param(param));
}
public Optional<String> getReferer() {
return Optional.ofNullable(request.getHeader("referer"));
}
public Optional<String> getCleanReferer() {
return getReferer()
.map(e -> e.replaceFirst(String.format("^.*%s", pattern), ""))
.map(e -> e.replaceAll("\\?.*", ""));
}
public Optional<Path> resolveUri(String requestURI) {
return getCleanReferer()
.map(Paths::get)
.map(e -> e.relativize(Paths.get(requestURI)));
}
}