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

com.github.damianwajser.model.Endpoint Maven / Gradle / Ivy

The newest version!
package com.github.damianwajser.model;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.github.damianwajser.model.body.Body;
import com.github.damianwajser.model.body.BodyRequest;
import com.github.damianwajser.model.body.BodyResponse;
import com.github.damianwajser.model.header.Header;
import com.github.damianwajser.utils.ReflectionUtils;

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonPropertyOrder({ "endpoint", "httpMethod", "baseUrl", "relativeUrl" })
public class Endpoint implements Comparable {
	private static final Logger LOGGER = LoggerFactory.getLogger(Endpoint.class);
	private QueryString queryString;

	private PathVariable pathVariable;
	@JsonIgnore
	private RequestHttpMethod methods;
	@JsonIgnore
	private String baseUrl;
	private String relativeUrl;
	private BodyRequest bodyRequest;
	private BodyResponse bodyResponse;
	private List
headers; public Endpoint() { } public Endpoint(String relativeUrl, Method m, Object controller) { this.baseUrl = fillBaseUrl(controller); this.setRelativeUrl(relativeUrl); this.setPathVariable(new PathVariable(m, this.getRelativeUrl())); this.methods = new RequestHttpMethod(m); this.queryString = new QueryString(m); this.setBodyRequest(new BodyRequest(m, controller.getClass())); this.setBodyResponse(new BodyResponse(m, controller.getClass())); headers = new ArrayList<>(); ReflectionUtils.getHeaders(m).forEach(h -> { LOGGER.debug("obteniendo el header: {}", h); RequestHeader rh = h.getDeclaredAnnotationsByType(RequestHeader.class)[0]; headers.add(new Header(rh.value(), h.getType().getSimpleName())); }); } private String fillBaseUrl(Object controller) { String[] urls = getUrls(controller).orElse(new String[] { "/" }); String url; if (urls.length > 0) { url = urls[0]; } else { url = "/"; } return url; } private Optional getUrls(Object controller) { return Optional.ofNullable( (String[]) AnnotationUtils.getValue(controller.getClass().getAnnotation(RequestMapping.class))); } public String getHttpMethod() { return this.methods == null || this.methods.getHttpMethod().length == 0 ? "" : this.methods.getHttpMethod()[0].name(); } public QueryString getQueryString() { return queryString; } public String getBaseUrl() { return baseUrl; } public String getRelativeUrl() { return relativeUrl; } public void setRelativeUrl(String relativeUrl) { this.relativeUrl = relativeUrl; } @JsonGetter("endpoint") public String getEndpoint() { return this.getHttpMethod() + " - " + this.getUrl() + (queryString.toString().isEmpty() ? "" : "?" + queryString); } public BodyRequest getBodyRequest() { return bodyRequest; } public void setBodyRequest(BodyRequest bodyRequest) { this.bodyRequest = bodyRequest; } public Body getBodyResponse() { return bodyResponse; } public void setBodyResponse(BodyResponse bodyResponse) { this.bodyResponse = bodyResponse; } public PathVariable getPathVariable() { return pathVariable; } public void setPathVariable(PathVariable pathVariable) { this.pathVariable = pathVariable; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj, true); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this, true); } @Override public int compareTo(Endpoint o) { return this.getEndpoint().compareTo(o.getEndpoint()); } public List
getHeaders() { return headers; } public void setHeaders(List
headers) { this.headers = headers; } public String getUrl() { return this.getBaseUrl() + this.getRelativeUrl(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy