package com.restfiddle.dao.util; import java.util.ArrayList; import java.util.List; import com.restfiddle.dto.AssertionDTO; import com.restfiddle.dto.BodyAssertDTO; import com.restfiddle.dto.ConversationDTO; import com.restfiddle.dto.FormDataDTO; import com.restfiddle.dto.RfHeaderDTO; import com.restfiddle.dto.RfRequestDTO; import com.restfiddle.dto.RfResponseDTO; import com.restfiddle.dto.UrlParamDTO; import com.restfiddle.entity.Assertion; import com.restfiddle.entity.BasicAuth; import com.restfiddle.entity.BodyAssert; import com.restfiddle.entity.Conversation; import com.restfiddle.entity.DigestAuth; import com.restfiddle.entity.FormParam; import com.restfiddle.entity.RfHeader; import com.restfiddle.entity.RfRequest; import com.restfiddle.entity.RfResponse; import com.restfiddle.entity.UrlParam; //TODO : Need to use Spring Object Mapping : http://docs.spring.io/spring/previews/mapping.html public class ConversationConverter { private ConversationConverter() {} public static Conversation convertToEntity(RfRequestDTO rfRequestDTO, RfResponseDTO responseDTO) { Conversation conversation = new Conversation(); RfRequest rfRequest = new RfRequest(); if (rfRequestDTO != null) { conversation.setWorkspaceId(rfRequestDTO.getWorkspaceId()); rfRequest.setApiUrl(rfRequestDTO.getApiUrl()); //Futuristic approach: evaluatedApiUrl not being used on UI currently. rfRequest.setEvaluatedApiUrl(rfRequestDTO.getEvaluatedApiUrl()); rfRequest.setMethodType(rfRequestDTO.getMethodType()); List<FormDataDTO> formDataDTOs = rfRequestDTO.getFormParams(); List<FormParam> formParams = new ArrayList<FormParam>(); if(rfRequestDTO.getBasicAuthDTO() != null){ BasicAuth basicAuth = new BasicAuth(); basicAuth.setUsername(rfRequestDTO.getBasicAuthDTO().getUsername()); basicAuth.setPassword(rfRequestDTO.getBasicAuthDTO().getPassword()); rfRequest.setBasicAuth(basicAuth); } if(rfRequestDTO.getDigestAuthDTO() != null){ DigestAuth digestAuth = new DigestAuth(); digestAuth.setUsername(rfRequestDTO.getDigestAuthDTO().getUsername()); digestAuth.setPassword(rfRequestDTO.getDigestAuthDTO().getPassword()); rfRequest.setDigestAuth(digestAuth); } if (rfRequestDTO.getApiBody() != null) { rfRequest.setApiBody(rfRequestDTO.getApiBody()); } else if (formDataDTOs != null && !formDataDTOs.isEmpty()) { FormParam formParam; for (FormDataDTO formDataDTO : formDataDTOs) { formParam = new FormParam(); formParam.setParamKey(formDataDTO.getKey()); formParam.setParamValue(formDataDTO.getValue()); formParams.add(formParam); } rfRequest.setFormParams(formParams); } List<UrlParamDTO> urlParamDTOs = rfRequestDTO.getUrlParams(); List<UrlParam> urlParams = new ArrayList<UrlParam>(); if (urlParamDTOs != null && !urlParamDTOs.isEmpty()) { UrlParam urlParam; for (UrlParamDTO urlParamDTO : urlParamDTOs) { urlParam = new UrlParam(); urlParam.setParamKey(urlParamDTO.getKey()); urlParam.setParamValue(urlParamDTO.getValue()); urlParams.add(urlParam); } rfRequest.setUrlParams(urlParams); } List<RfHeaderDTO> headerDTOs = rfRequestDTO.getHeaders(); List<RfHeader> headers = new ArrayList<RfHeader>(); RfHeader header; if (headerDTOs != null && !headerDTOs.isEmpty()) { for (RfHeaderDTO rfHeaderDTO : headerDTOs) { header = new RfHeader(); header.setHeaderName(rfHeaderDTO.getHeaderName()); header.setHeaderValue(rfHeaderDTO.getHeaderValue()); headers.add(header); } rfRequest.setRfHeaders(headers); } } conversation.setRfRequest(rfRequest); // TODO : We should have the option to configure whether to save response or not. RfResponse response = new RfResponse(); conversation.setRfResponse(response); if(responseDTO == null && !rfRequestDTO.getApiUrl().isEmpty()){ response.setBody("Could not connect to "+rfRequestDTO.getApiUrl()); } else { if (responseDTO != null && responseDTO.getBody() != null && !responseDTO.getBody().isEmpty()) { response.setBody(responseDTO.getBody()); } AssertionDTO assertionDTO = rfRequestDTO != null ? rfRequestDTO.getAssertionDTO() : null; if (assertionDTO != null && assertionDTO.getBodyAssertDTOs() != null) { List<BodyAssertDTO> bodyAssertDTOs = assertionDTO.getBodyAssertDTOs(); List<BodyAssert> bodyAsserts = new ArrayList<BodyAssert>(); for (BodyAssertDTO bodyAssertDTO : bodyAssertDTOs) { BodyAssert bodyAssert = new BodyAssert(); bodyAssert.setComparator(bodyAssertDTO.getComparator()); bodyAssert.setExpectedValue(bodyAssertDTO.getExpectedValue()); bodyAssert.setPropertyName(bodyAssertDTO.getPropertyName()); bodyAssert.setActualValue(bodyAssertDTO.getActualValue()); bodyAssert.setSuccess(bodyAssertDTO.isSuccess()); bodyAsserts.add(bodyAssert); } Assertion assertion = new Assertion(); response.setAssertion(assertion); } List<RfHeaderDTO> headerDTOs = responseDTO != null ? responseDTO.getHeaders() : null; List<RfHeader> headers = new ArrayList<RfHeader>(); RfHeader header; if (headerDTOs != null && !headerDTOs.isEmpty()) { for (RfHeaderDTO rfHeaderDTO : headerDTOs) { header = new RfHeader(); header.setHeaderName(rfHeaderDTO.getHeaderName()); header.setHeaderValue(rfHeaderDTO.getHeaderValue()); headers.add(header); } response.setRfHeaders(headers); } } return conversation; } public static ConversationDTO convertToDTO(Conversation item) { ConversationDTO itemDTO = new ConversationDTO(); RfRequestDTO rfRequestDTO = new RfRequestDTO(); RfRequest rfRequest = item.getRfRequest(); rfRequestDTO.setApiBody(rfRequest.getApiBody()); rfRequestDTO.setApiUrl(rfRequest.getApiUrl()); rfRequestDTO.setEvaluatedApiUrl(rfRequest.getEvaluatedApiUrl()); rfRequestDTO.setMethodType(rfRequest.getMethodType()); return itemDTO; } }