open.source.exchange.parser.HttpHeadersParser Maven / Gradle / Ivy
package open.source.exchange.parser;
import java.net.InetSocketAddress;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpRange;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import open.source.exchange.model.ExBase;
import open.source.exchange.model.ExCharset;
import open.source.exchange.model.ExContentDisposition;
import open.source.exchange.model.ExHttpHeaders;
import open.source.exchange.model.ExHttpMethod;
import open.source.exchange.model.ExInetSocketAddress;
import open.source.exchange.model.ExLocale;
import open.source.exchange.model.ExLocaleLanguageRange;
import open.source.exchange.model.ExMediaType;
import open.source.exchange.model.ExMultiValueMap;
import open.source.exchange.model.ExURI;
@Log4j2
@Service
@RequiredArgsConstructor
public class HttpHeadersParser {
@Autowired
private MultiValueMapParser multiValueMapParser;
@Autowired
private MediaTypeParser mediaTypeParser;
@Autowired
private CharsetParser charsetParser;
@Autowired
private LocaleLanguageRangeParser localeLanguageRangeParser;
@Autowired
private LocaleParser localeParser;
@Autowired
private HttpMethodParser httpMethodParser;
@Autowired
private ContentDispositionParser contentDispositionParser;
@Autowired
private InetSocketAddressParser inetSocketAddressParser;
@Autowired
private URIParser uriParser;
@Autowired
private ObjectParser objectParser;
public ExHttpHeaders parse(HttpHeaders httpHeaders) {
log.trace("parse -> (httpHeaders) {}", httpHeaders);
ExHttpHeaders exHttpHeaders = null;
if (null != httpHeaders) {
ExMultiValueMap exMultiValueMap = multiValueMapParser.parse(httpHeaders);
exHttpHeaders = new ExHttpHeaders(exMultiValueMap);
List accept = httpHeaders.getAccept();
if (null != accept && !accept.isEmpty()) {
List exList = new ArrayList();
for (MediaType mediaType : accept) {
ExMediaType exMediaType = mediaTypeParser.parse(mediaType);
exList.add(exMediaType);
}
exHttpHeaders.setAccept(exList);
}
List acceptCharset = httpHeaders.getAcceptCharset();
if (null != acceptCharset && !acceptCharset.isEmpty()) {
List exList = new ArrayList();
for (Charset charset : acceptCharset) {
ExCharset exCharset = charsetParser.parse(charset);
exList.add(exCharset);
}
exHttpHeaders.setAcceptCharset(exList);
}
List acceptLanguage = httpHeaders.getAcceptLanguage();
if (null != acceptLanguage) {
List exList = new ArrayList();
for (Locale.LanguageRange localeLanguageRange : acceptLanguage) {
ExLocaleLanguageRange exLocaleLanguageRange = localeLanguageRangeParser.parse(localeLanguageRange);
exList.add(exLocaleLanguageRange);
}
exHttpHeaders.setAcceptLanguage(exList);
}
List acceptLanguageAsLocales = httpHeaders.getAcceptLanguageAsLocales();
if (null != acceptLanguageAsLocales) {
List exLocaleList = new ArrayList();
for (Locale locale : acceptLanguageAsLocales) {
ExLocale exLocale = localeParser.parse(locale);
exLocaleList.add(exLocale);
}
exHttpHeaders.setAcceptLanguageAsLocales(exLocaleList);
}
boolean accessControlAllowCredentials = httpHeaders.getAccessControlAllowCredentials();
exHttpHeaders.setAccessControlAllowCredentials(accessControlAllowCredentials);
List accessControlAllowHeaders = httpHeaders.getAccessControlAllowHeaders();
exHttpHeaders.setAccessControlAllowHeaders(accessControlAllowHeaders);
List accessControlAllowMethods = httpHeaders.getAccessControlAllowMethods();
List exAccessControlAllowMethods = null;
if (null != accessControlAllowMethods && !accessControlAllowMethods.isEmpty()) {
exAccessControlAllowMethods = new ArrayList();
for (HttpMethod httpMethod : accessControlAllowMethods) {
ExHttpMethod exHttpMethod = httpMethodParser.parse(httpMethod);
exAccessControlAllowMethods.add(exHttpMethod);
}
}
exHttpHeaders.setAccessControlAllowMethods(exAccessControlAllowMethods);
String accessControlAllowOrigin = httpHeaders.getAccessControlAllowOrigin();
exHttpHeaders.setAccessControlAllowOrigin(accessControlAllowOrigin);
List accessControlExposeHeaders = httpHeaders.getAccessControlExposeHeaders();
exHttpHeaders.setAccessControlExposeHeaders(accessControlExposeHeaders);
long accessControlMaxAge = httpHeaders.getAccessControlMaxAge();
exHttpHeaders.setAccessControlMaxAge(accessControlMaxAge);
List accessControlRequestHeaders = httpHeaders.getAccessControlRequestHeaders();
exHttpHeaders.setAccessControlRequestHeaders(accessControlRequestHeaders);
HttpMethod accessControlRequestMethod = httpHeaders.getAccessControlRequestMethod();
ExHttpMethod exAccessControlRequestMethod = httpMethodParser.parse(accessControlRequestMethod);
exHttpHeaders.setAccessControlRequestMethod(exAccessControlRequestMethod);
Set allow = httpHeaders.getAllow();
Set exAllow = null;
if (null != allow && !allow.isEmpty()) {
exAllow = new HashSet();
for (HttpMethod httpMethod : allow) {
ExHttpMethod exHttpMethod = httpMethodParser.parse(httpMethod);
exAllow.add(exHttpMethod);
}
}
exHttpHeaders.setAllow(exAllow);
String cacheControl = httpHeaders.getCacheControl();
exHttpHeaders.setCacheControl(cacheControl);
List connection = httpHeaders.getConnection();
exHttpHeaders.setConnection(connection);
ContentDisposition contentDisposition = httpHeaders.getContentDisposition();
ExContentDisposition exContentDisposition = contentDispositionParser.parse(contentDisposition);
exHttpHeaders.setContentDisposition(exContentDisposition);
Locale contentLanguage = httpHeaders.getContentLanguage();
ExLocale exContentLanguage = localeParser.parse(contentLanguage);
exHttpHeaders.setContentLanguage(exContentLanguage);
long contentLength = httpHeaders.getContentLength();
exHttpHeaders.setContentLength(contentLength);
MediaType contentType = httpHeaders.getContentType();
ExMediaType exContentType = mediaTypeParser.parse(contentType);
exHttpHeaders.setContentType(exContentType);
long date = httpHeaders.getDate();
exHttpHeaders.setDate(date);
String eTag = httpHeaders.getETag();
exHttpHeaders.setETag(eTag);
long expires = httpHeaders.getExpires();
exHttpHeaders.setExpires(expires);
InetSocketAddress host = httpHeaders.getHost();
ExInetSocketAddress exHost = inetSocketAddressParser.parse(host);
exHttpHeaders.setHost(exHost);
List ifMatch = httpHeaders.getIfMatch();
exHttpHeaders.setIfMatch(ifMatch);
long ifModifiedSince = httpHeaders.getIfModifiedSince();
exHttpHeaders.setIfModifiedSince(ifModifiedSince);
List ifNoneMatch = httpHeaders.getIfNoneMatch();
exHttpHeaders.setIfNoneMatch(ifNoneMatch);
long ifUnmodifiedSince = httpHeaders.getIfUnmodifiedSince();
exHttpHeaders.setIfUnmodifiedSince(ifUnmodifiedSince);
long lastModified = httpHeaders.getLastModified();
exHttpHeaders.setLastModified(lastModified);
URI location = httpHeaders.getLocation();
ExURI exLocation = uriParser.parse(location);
exHttpHeaders.setLocation(exLocation);
String origin = httpHeaders.getOrigin();
exHttpHeaders.setOrigin(origin);
String pragma = httpHeaders.getPragma();
exHttpHeaders.setPragma(pragma);
List range = httpHeaders.getRange();
if (null != range && !range.isEmpty()) {
List exList = new ArrayList();
for (HttpRange httpRange : range) {
ExBase exBase = objectParser.parse(httpRange);
exList.add(exBase);
}
exHttpHeaders.setRange(exList);
}
String upgrade = httpHeaders.getUpgrade();
exHttpHeaders.setUpgrade(upgrade);
List vary = httpHeaders.getVary();
exHttpHeaders.setVary(vary);
}
return exHttpHeaders;
}
}