public void setup() throws Exception {
executePath = "/execute/ran-network/getNbr";
final Map<String, String> inputParameters = new HashMap<>();
+ final Map<String, Object> payload = new HashMap<>();
inputParameters.put("coverageArea", "Zone 1");
- final ExecutionRequest executionRequest = new ExecutionRequest(inputParameters);
+ final ExecutionRequest executionRequest = new ExecutionRequest(inputParameters, payload);
final ObjectMapper objectMapper = new ObjectMapper();
executionRequestJson = objectMapper.writeValueAsString(executionRequest);
}
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
<!--Test dependencies-->
<dependency>
<groupId>com.openpojo</groupId>
<scope>test</scope>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
package org.onap.cps.tbdmt.client;
import java.util.Arrays;
+import java.util.Map;
import org.onap.cps.tbdmt.exception.CpsClientException;
import org.onap.cps.tbdmt.model.AppConfiguration;
import org.onap.cps.tbdmt.model.CpsConfiguration;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
private static final String QUERY_API_PATH = "/anchors/{anchor}/nodes/query";
+ private static final String POST_API_PATH = "/anchors/{anchor}/nodes";
+
@Autowired
private RestTemplate restTemplate;
}
}
+ /**
+ * Post data to CPS using xpath.
+ *
+ * @param anchor anchor
+ * @param xpath xpath query
+ * @param requestType http request type
+ * @param payload request body
+ * @return result Response string from CPS
+ */
+ public String addData(final String anchor, final String xpath, final String requestType,
+ final Map<String, Object> payload) throws CpsClientException {
+
+ final MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
+ queryParams.add("xpath", xpath);
+ final CpsConfiguration cpsConfiguration = "cpsCore".equals(appConfiguration.getCpsClient())
+ ? appConfiguration.getCpsCoreConfiguration() : appConfiguration.getNcmpConfiguration();
+
+ final HttpHeaders headers = new HttpHeaders();
+ headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.setBasicAuth(cpsConfiguration.getUsername(), cpsConfiguration.getPassword());
+ final HttpEntity<String> entity = new HttpEntity<>(new com.google.gson.Gson().toJson(payload), headers);
+
+ String uri = buildCpsUrl(cpsConfiguration.getUrl(), POST_API_PATH, anchor, queryParams);
+ try {
+ if (requestType.equalsIgnoreCase("post")) {
+ uri = buildCpsUrl(cpsConfiguration.getUrl(), POST_API_PATH, anchor, new LinkedMultiValueMap<>());
+ return restTemplate.postForEntity(uri, entity, String.class).getBody();
+ } else if (requestType.equalsIgnoreCase("patch")) {
+ final HttpComponentsClientHttpRequestFactory requestFactory
+ = new HttpComponentsClientHttpRequestFactory();
+ requestFactory.setConnectTimeout(10000);
+ requestFactory.setReadTimeout(10000);
+ restTemplate.setRequestFactory(requestFactory);
+ return restTemplate.patchForObject(uri, entity, String.class);
+ } else {
+ return restTemplate.exchange(uri, HttpMethod.PUT, entity, String.class).getBody();
+ }
+ } catch (final Exception e) {
+ throw new CpsClientException(e.getLocalizedMessage());
+ }
+ }
+
private String buildCpsUrl(final String baseUrl, final String path, final String anchor,
final MultiValueMap<String, String> queryParams) {
public class ExecutionRequest {
private Map<String, String> inputParameters;
+
+ private Map<String, Object> payload;
}
final Optional<Template> templateOptional = templateRepository.findById(new TemplateKey(templateId));
if (templateOptional.isPresent()) {
if (!StringUtils.isBlank(templateOptional.get().getMultipleQueryTemplateId())) {
- return executeMultipleQuery(templateOptional.get(), executionRequest.getInputParameters());
+ return executeMultipleQuery(templateOptional.get(), executionRequest.getInputParameters(),
+ executionRequest.getPayload());
} else {
- return execute(templateOptional.get(), executionRequest.getInputParameters());
+ return execute(templateOptional.get(), executionRequest.getInputParameters(),
+ executionRequest.getPayload());
}
}
throw new TemplateNotFoundException("Template does not exist");
}
- private String executeMultipleQuery(final Template template, final Map<String, String> inputParameters)
- throws OutputTransformationException {
-
+ private String executeMultipleQuery(final Template template, final Map<String, String> inputParameters,
+ final Map<String, Object> payload) throws OutputTransformationException {
final List<Object> processedQueryOutput = new ArrayList<Object>();
final String multipleQuerytemplateId = template.getMultipleQueryTemplateId();
final Optional<Template> multipleQueryTemplate =
final List<String> transformParamList = new ArrayList<String>(
Arrays.asList(multipleQueryTemplate.get().getTransformParam().split("\\s*,\\s*")));
final String inputKey = transformParamList.get(transformParamList.size() - 1);
- final String queryParamString = execute(multipleQueryTemplate.get(), inputParameters);
+ final String queryParamString = execute(multipleQueryTemplate.get(), inputParameters, payload);
final List<String> queryParamList = new ArrayList<String>();
final JsonParser jsonParser = new JsonParser();
final Gson gson = new Gson();
queryParamList.forEach(queryParam -> {
final Map<String, String> inputParameter = new HashMap<String, String>();
inputParameter.put(inputKey, queryParam);
- final Object result = execute(template, inputParameter);
+ final Object result = execute(template, inputParameter, payload);
processedQueryOutput.add(result);
});
} catch (final Exception e) {
}
}
- private String execute(final Template template, final Map<String, String> inputParameters) {
+ private String execute(final Template template, final Map<String, String> inputParameters,
+ final Map<String, Object> payload) {
+
final String anchor = appConfiguration.getSchemaToAnchor().get(template.getModel());
if (anchor == null) {
throw new ExecuteException("Anchor not found for the schema");
}
final String xpath = generateXpath(template.getXpathTemplate(), inputParameters);
-
try {
- final String result = cpsRestClient.fetchNode(anchor, xpath, template.getRequestType(),
- template.getIncludeDescendants());
- if (StringUtils.isBlank(template.getTransformParam())) {
- return result;
+ if (template.getRequestType().equalsIgnoreCase("put") || template.getRequestType().equalsIgnoreCase("patch")
+ || template.getRequestType().equalsIgnoreCase("post")) {
+ return cpsRestClient.addData(anchor, xpath, template.getRequestType(), payload);
} else {
- final List<JsonElement> json = transform(template, result);
- return new Gson().toJson(json);
+ final String result = cpsRestClient.fetchNode(anchor, xpath, template.getRequestType(),
+ template.getIncludeDescendants());
+ if (StringUtils.isBlank(template.getTransformParam())) {
+ return result;
+ } else {
+ final List<JsonElement> json = transform(template, result);
+ return new Gson().toJson(json);
+ }
}
} catch (final CpsClientException e) {
throw new ExecuteException(e.getLocalizedMessage());
import static org.junit.Assert.assertEquals;
+import java.util.HashMap;
+import java.util.Map;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
cpsRestClient.fetchNode("coverage-area-onap", "sample", "get", true);
}
+ @Test
+ public void testAddDataForPostRequest() throws Exception {
+ final String uri = "http://localhost:8000/anchors/coverage-area-onap/nodes";
+ Mockito.when(restTemplate.postForEntity(ArgumentMatchers.eq(uri), ArgumentMatchers.any(),
+ ArgumentMatchers.<Class<String>>any())).thenReturn(response);
+ final Map<String, Object> payload = new HashMap<String, Object>();
+ payload.put("idNearRTRIC", 11);
+ assertEquals("sample response", cpsRestClient.addData("coverage-area-onap", "NearRTRIC", "post", payload));
+
+ }
+
+ @Test
+ public void testAddDataForPutRequest() throws Exception {
+ final String uri = "http://localhost:8000/anchors/coverage-area-onap/nodes?xpath=NearRTRIC";
+ Mockito.when(restTemplate.exchange(ArgumentMatchers.eq(uri), ArgumentMatchers.any(HttpMethod.class),
+ ArgumentMatchers.any(), ArgumentMatchers.<Class<String>>any())).thenReturn(response);
+ final Map<String, Object> payload = new HashMap<String, Object>();
+ payload.put("idNearRTRIC", 11);
+ assertEquals("sample response", cpsRestClient.addData("coverage-area-onap", "NearRTRIC", "put", payload));
+
+ }
+
+ @Test
+ public void testAddDataForPatchRequest() throws Exception {
+ final String uri = "http://localhost:8000/anchors/coverage-area-onap/nodes?xpath=NearRTRIC";
+ Mockito.when(restTemplate.patchForObject(ArgumentMatchers.eq(uri), ArgumentMatchers.any(),
+ ArgumentMatchers.<Class<String>>any())).thenReturn("sample response");
+ final Map<String, Object> payload = new HashMap<String, Object>();
+ payload.put("idNearRTRIC", 11);
+ assertEquals("sample response", cpsRestClient.addData("coverage-area-onap", "NearRTRIC", "patch", payload));
+
+ }
}
@Before
public void setup() {
final Map<String, String> input = new HashMap<>();
+ final Map<String, Object> payload = new HashMap<>();
input.put("coverageArea", "Zone 1");
- request = new ExecutionRequest(input);
+ request = new ExecutionRequest(input, payload);
final String xpathTemplate = "/ran-coverage-area/pLMNIdList[@mcc='310' and @mnc='410']"
+ "/coverage-area[@coverageArea='{{coverageArea}}']";
template = new Template("getNbr", "ran-network", xpathTemplate, "get", true, "", "");