summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorromaingimbert <romain.gimbert@orange.com>2018-08-10 14:29:31 +0200
committerromaingimbert <romain.gimbert@orange.com>2018-08-10 14:29:31 +0200
commit8bbefa2ea43f8d2beedeb347bb831b82009417a3 (patch)
treec613f7de2e74343cdf9a5ff12ab4f751b4f70230
parent9fb6d48ba882de74067184208f0ace896f852577 (diff)
Help NBI user to get information
-add orderMessage to order and orderItem -add tests Change-Id: Ibb9e54ec03f8b8f736390501fc16c9b96c0f987a Issue-ID: EXTAPI-116 Signed-off-by: romaingimbert <romain.gimbert@orange.com>
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java90
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/SoClient.java60
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/serviceorder/model/OrderMessage.java227
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrder.java50
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrderItem.java53
-rwxr-xr-xsrc/main/java/org/onap/nbi/apis/serviceorder/model/SeverityMessage.java78
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/service/ServiceOrderService.java73
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/workflow/CheckOrderConsistenceManager.java69
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAICustomerManager.java5
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAIServiceTypeManager.java7
-rw-r--r--src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskProcessor.java18
-rw-r--r--src/test/java/org/onap/nbi/apis/ApiTest.java147
-rw-r--r--src/test/java/org/onap/nbi/apis/ApiTestWithoutOnap.java74
13 files changed, 850 insertions, 101 deletions
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java b/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java
index 4884485..2bc654b 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java
@@ -22,7 +22,10 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.onap.nbi.OnapComponentsUrlPaths;
+import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
+import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
+import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.onap.nbi.exceptions.BackendFunctionalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,6 +75,9 @@ public class MultiClient {
@Autowired
private ServiceInventoryUrl serviceInventoryUrl;
+ @Autowired
+ private ServiceOrderService serviceOrderService;
+
private static final String HEADER_AUTHORIZATION = "Authorization";
private static final String X_FROM_APP_ID = "X-FromAppId";
@@ -79,19 +85,34 @@ public class MultiClient {
private static final Logger LOGGER = LoggerFactory.getLogger(MultiClient.class);
- public ResponseEntity<Object> getServiceCatalog(String id) {
+ public Map getServiceCatalog(String id,ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem){
StringBuilder callURL = new StringBuilder().append(serviceCatalogUrl.getServiceCatalogUrl()).append(id);
- return callApiGet(callURL.toString(), new HttpHeaders(), null);
+ ResponseEntity<Object> response = callApiGet(callURL.toString(), new HttpHeaders(), null);
+
+ if(response.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR)) {
+ serviceOrderService.addOrderMessage(serviceOrder, "500");
+ LOGGER.warn("unable to retrieve catalog information for service {}",
+ serviceOrderItem.getService().getServiceSpecification().getId());
+ }
+ if (response.getStatusCode().is2xxSuccessful()) {
+ return (LinkedHashMap) response.getBody();
+ }
+ return null;
+
}
- public boolean doesServiceExistInServiceInventory(String id, String serviceName, String globalSubscriberId) {
+ public boolean doesServiceExistInServiceInventory(String id, String serviceName, String globalSubscriberId, ServiceOrder serviceOrder) {
StringBuilder callURL = new StringBuilder().append(serviceInventoryUrl.getServiceInventoryUrl()).append(id);
Map<String, String> param = new HashMap<>();
param.put("serviceSpecification.name", serviceName);
param.put("relatedParty.id", globalSubscriberId);
ResponseEntity<Object> response = callApiGet(callURL.toString(), new HttpHeaders(), param);
- return response != null && response.getStatusCode().equals(HttpStatus.OK);
+ if(response.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR)) {
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
+ return false;
+ }
+ return response.getStatusCode().equals(HttpStatus.OK);
}
@@ -107,13 +128,13 @@ public class MultiClient {
}
- public boolean isTenantIdPresentInAAI() {
+ public boolean isTenantIdPresentInAAI(ServiceOrder serviceOrder) {
StringBuilder callURL = new StringBuilder().append(aaiHost).append(OnapComponentsUrlPaths.AAI_GET_TENANTS_PATH);
String callUrlFormated = callURL.toString().replace("$onap.lcpCloudRegionId", lcpCloudRegionId);
callUrlFormated = callUrlFormated.replace("$onap.cloudOwner", cloudOwner);
ResponseEntity<Object> response = callApiGet(callUrlFormated, buildRequestHeaderForAAI(), null);
- if (response != null) {
+ if (response.getStatusCode().is2xxSuccessful()) {
LinkedHashMap body = (LinkedHashMap) response.getBody();
List<LinkedHashMap> tenants = (List<LinkedHashMap>) body.get("tenant");
for (LinkedHashMap tenant : tenants) {
@@ -121,19 +142,27 @@ public class MultiClient {
return true;
}
}
+ } else {
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
}
return false;
}
- public boolean isCustomerPresentInAAI(String customerId) {
+ public boolean isCustomerPresentInAAI(String customerId,
+ ServiceOrder serviceOrder) {
StringBuilder callURL = new StringBuilder().append(aaiHost).append(OnapComponentsUrlPaths.AAI_GET_CUSTOMER_PATH)
.append(customerId);
ResponseEntity<Object> response = callApiGet(callURL.toString(), buildRequestHeaderForAAI(), null);
- return(response != null && response.getStatusCode().equals(HttpStatus.OK));
+ if(response.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR)) {
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
+ return false;
+ }
+ return response.getStatusCode().equals(HttpStatus.OK);
}
- public boolean putCustomer(SubscriberInfo subscriberInfo) {
+ public boolean putCustomer(SubscriberInfo subscriberInfo,
+ ServiceOrder serviceOrder) {
Map<String, String> param = new HashMap<>();
param.put("global-customer-id", subscriberInfo.getGlobalSubscriberId());
param.put("subscriber-name", subscriberInfo.getSubscriberName());
@@ -142,29 +171,42 @@ public class MultiClient {
aaiHost + OnapComponentsUrlPaths.AAI_GET_CUSTOMER_PATH + subscriberInfo.getGlobalSubscriberId();
ResponseEntity<Object> response = putRequest(param, callURL, buildRequestHeaderForAAI());
- return response != null && response.getStatusCode().equals(HttpStatus.CREATED);
+ if(response.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR)) {
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
+ return false;
+ }
+ return response.getStatusCode().equals(HttpStatus.CREATED);
}
- public Map getServicesInAaiForCustomer(String customerId) {
+ public Map getServicesInAaiForCustomer(String customerId,
+ ServiceOrder serviceOrder) {
StringBuilder callURL =
new StringBuilder().append(aaiHost).append(OnapComponentsUrlPaths.AAI_GET_SERVICES_FOR_CUSTOMER_PATH);
String callUrlFormated = callURL.toString().replace("$customerId", customerId);
ResponseEntity<Object> response = callApiGet(callUrlFormated, buildRequestHeaderForAAI(), null);
- if (response != null && response.getStatusCode().equals(HttpStatus.OK)) {
+ if(response.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR)) {
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
+ return null;
+ }
+ else if (response.getStatusCode().is2xxSuccessful()) {
return (LinkedHashMap) response.getBody();
}
return null;
}
- public boolean putServiceType(String globalSubscriberId, String serviceName) {
+ public boolean putServiceType(String globalSubscriberId, String serviceName,
+ ServiceOrder serviceOrder) {
Map<String, String> param = new HashMap<>();
param.put("service-type", serviceName);
String callURL = aaiHost + OnapComponentsUrlPaths.AAI_PUT_SERVICE_FOR_CUSTOMER_PATH + serviceName;
String callUrlFormated = callURL.replace("$customerId", globalSubscriberId);
ResponseEntity<Object> response = putRequest(param, callUrlFormated, buildRequestHeaderForAAI());
- return response != null && response.getStatusCode().equals(HttpStatus.CREATED);
+ if(response.getStatusCode().equals(HttpStatus.INTERNAL_SERVER_ERROR)) {
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
+ }
+ return response.getStatusCode().is2xxSuccessful();
}
@@ -177,17 +219,17 @@ public class MultiClient {
LOGGER.warn("HTTP call on {} returns {} , {}", callUrl , response.getStatusCodeValue(), response.getBody().toString());
}
return response;
- } catch (BackendFunctionalException|ResourceAccessException e) {
+ } catch (BackendFunctionalException e) {
LOGGER.error("error on calling " + callUrl + " ," + e);
- return null;
+ return new ResponseEntity<>("problem calling onap services", e.getHttpStatus());
+ }catch (ResourceAccessException e) {
+ LOGGER.error("error on calling " + callUrl + " ," + e);
+ return new ResponseEntity<>("unable to reach onap services", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
private ResponseEntity<Object> callApiGet(String callURL, HttpHeaders httpHeaders, Map<String, String> param) {
-
-
try {
-
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(callURL);
if (param != null) {
for (Entry<String, String> stringEntry : param.entrySet()) {
@@ -196,8 +238,6 @@ public class MultiClient {
}
}
URI uri = builder.build().encode().toUri();
-
-
ResponseEntity<Object> response =
restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(httpHeaders), Object.class);
if(LOGGER.isDebugEnabled()){
@@ -210,10 +250,14 @@ public class MultiClient {
}
return response;
- } catch (BackendFunctionalException|ResourceAccessException e) {
+ } catch (BackendFunctionalException e) {
LOGGER.error("error on calling " + callURL + " ," + e);
- return null;
+ return new ResponseEntity<>("problem calling onap services", e.getHttpStatus());
+ }catch (ResourceAccessException e) {
+ LOGGER.error("error on calling " + callURL + " ," + e);
+ return new ResponseEntity<>("unable to reach onap services", HttpStatus.INTERNAL_SERVER_ERROR);
}
+
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/SoClient.java b/src/main/java/org/onap/nbi/apis/serviceorder/SoClient.java
index e2b10ab..5dda00a 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/SoClient.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/SoClient.java
@@ -1,17 +1,14 @@
/**
- * Copyright (c) 2018 Orange
+ * Copyright (c) 2018 Orange
*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
*/
package org.onap.nbi.apis.serviceorder;
@@ -67,19 +64,21 @@ public class SoClient {
try {
ResponseEntity<CreateServiceInstanceResponse> response = restTemplate.exchange(url, HttpMethod.POST,
- new HttpEntity<>(msoPayload, buildRequestHeader()), CreateServiceInstanceResponse.class);
+ new HttpEntity<>(msoPayload, buildRequestHeader()), CreateServiceInstanceResponse.class);
logResponsePost(url, response);
return response;
- } catch (BackendFunctionalException|ResourceAccessException e) {
- LOGGER.error(ERROR_ON_CALLING + url + " ," + e);
- return null;
+ } catch (BackendFunctionalException e) {
+ LOGGER.error("error on calling " + url + " ," + e);
+ return new ResponseEntity<>(e.getHttpStatus());
+ } catch (ResourceAccessException e) {
+ LOGGER.error("error on calling " + url + " ," + e);
+ return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
- public ResponseEntity<CreateServiceInstanceResponse> callDeleteServiceInstance(MSOPayload msoPayload,
- String serviceId) {
+ public ResponseEntity<CreateServiceInstanceResponse> callDeleteServiceInstance(MSOPayload msoPayload, String serviceId) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Calling SO DeleteServiceInstance with msoPayload : " + msoPayload.toString());
@@ -89,26 +88,30 @@ public class SoClient {
try {
ResponseEntity<CreateServiceInstanceResponse> response = restTemplate.exchange(url, HttpMethod.DELETE,
- new HttpEntity<>(msoPayload, buildRequestHeader()), CreateServiceInstanceResponse.class);
+ new HttpEntity<>(msoPayload, buildRequestHeader()), CreateServiceInstanceResponse.class);
logResponsePost(url, response);
return response;
- } catch (BackendFunctionalException|ResourceAccessException e) {
- LOGGER.error(ERROR_ON_CALLING + url + " ," + e);
- return null;
+ } catch (BackendFunctionalException e) {
+ LOGGER.error("error on calling " + url + " ," + e);
+ return new ResponseEntity<>(e.getHttpStatus());
+ } catch (ResourceAccessException e) {
+ LOGGER.error("error on calling " + url + " ," + e);
+ return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
private void logResponsePost(String url, ResponseEntity<CreateServiceInstanceResponse> response) {
LOGGER.info(RESPONSE_STATUS + response.getStatusCodeValue());
- if(LOGGER.isDebugEnabled()){
+ if (LOGGER.isDebugEnabled()) {
LOGGER.debug("response body : {}", response.getBody().toString());
}
if (LOGGER.isWarnEnabled() && !response.getStatusCode().equals(HttpStatus.CREATED)) {
- LOGGER.warn("HTTP call SO on {} returns {} , {}",url ,response.getStatusCodeValue(), response.getBody().toString());
+ LOGGER.warn("HTTP call SO on {} returns {} , {}", url, response.getStatusCodeValue(),
+ response.getBody().toString());
}
}
@@ -119,27 +122,28 @@ public class SoClient {
try {
ResponseEntity<GetRequestStatusResponse> response = restTemplate.exchange(url, HttpMethod.GET,
- new HttpEntity<>(buildRequestHeader()), GetRequestStatusResponse.class);
+ new HttpEntity<>(buildRequestHeader()), GetRequestStatusResponse.class);
logResponseGet(url, response);
return response.getBody();
- } catch (BackendFunctionalException|ResourceAccessException e) {
+ } catch (BackendFunctionalException | ResourceAccessException e) {
LOGGER.error(ERROR_ON_CALLING + url + " ," + e);
return null;
}
}
private void logResponseGet(String url, ResponseEntity<GetRequestStatusResponse> response) {
- if(response!=null){
- if(LOGGER.isDebugEnabled()){
+ if (response != null) {
+ if (LOGGER.isDebugEnabled()) {
LOGGER.debug("response body : {}", response.getBody().toString());
}
LOGGER.info("response status : {}", response.getStatusCodeValue());
if (LOGGER.isWarnEnabled() && !response.getStatusCode().equals(HttpStatus.OK)) {
- LOGGER.warn("HTTP call SO on {} returns {} , {}",url ,response.getStatusCodeValue(), response.getBody().toString());
+ LOGGER.warn("HTTP call SO on {} returns {} , {}", url, response.getStatusCodeValue(),
+ response.getBody().toString());
}
} else {
- LOGGER.info("no response calling url {}",url);
+ LOGGER.info("no response calling url {}", url);
}
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/model/OrderMessage.java b/src/main/java/org/onap/nbi/apis/serviceorder/model/OrderMessage.java
new file mode 100755
index 0000000..0e9204b
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/model/OrderMessage.java
@@ -0,0 +1,227 @@
+/**
+ * Copyright (c) 2018 Orange
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * API ServiceOrder serviceOrder API designed for ONAP Beijing Release. This API is build from TMF
+ * open API16.5 + applied TMF guideline 3.0
+ *
+ * OpenAPI spec version: 0.1.1_inProgress
+ *
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git Do not edit the class manually.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+package org.onap.nbi.apis.serviceorder.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Objects;
+import javax.validation.constraints.NotNull;
+
+/**
+ * An optional array of messages associated with the Order
+ */
+@ApiModel(description = "An optional array of messages associated with the Order")
+@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaJerseyServerCodegen",
+ date = "2018-07-12T11:46:30.345Z")
+public class OrderMessage {
+
+
+ @JsonProperty("code")
+ private String code = null;
+
+ @JsonProperty("field")
+ private String field = null;
+
+ @JsonProperty("messageInformation")
+ private String messageInformation = null;
+
+ @JsonProperty("severity")
+ private SeverityMessage severity = null;
+
+ @JsonProperty("correctionRequired")
+ private boolean correctionRequired;
+
+
+
+
+ /**
+ * A code associated to this message
+ *
+ * @return code
+ **/
+ @JsonProperty("code")
+ @ApiModelProperty(value = "A code associated to this message")
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public OrderMessage code(String code) {
+ this.code = code;
+ return this;
+ }
+
+
+ /**
+ * Service Order attribute related to this error message
+ *
+ * @return field
+ **/
+ @JsonProperty("field")
+ @ApiModelProperty(value = "Service Order attribute related to this error message")
+ public String getField() {
+ return field;
+ }
+
+ public void setField(String field) {
+ this.field = field;
+ }
+
+ public OrderMessage field(String field) {
+ this.field = field;
+ return this;
+ }
+
+
+ /**
+ * Message related to this order
+ *
+ * @return messageInformation
+ **/
+ @JsonProperty("messageInformation")
+ @ApiModelProperty(value = "Message related to this order")
+ public String getMessageInformation() {
+ return messageInformation;
+ }
+
+ public void setMessageInformation(String messageInformation) {
+ this.messageInformation = messageInformation;
+ }
+
+ public OrderMessage messageInformation(String messageInformation) {
+ this.messageInformation = messageInformation;
+ return this;
+ }
+
+
+ /**
+ * Gravity of this message
+ *
+ * @return severity
+ **/
+ @JsonProperty("severity")
+ @ApiModelProperty(required = true,value = "Gravity of this message")
+ @NotNull
+ public SeverityMessage getSeverity() {
+ return severity;
+ }
+
+ public void setSeverity(SeverityMessage severity) {
+ this.severity = severity;
+ }
+
+ public OrderMessage severity(SeverityMessage severity) {
+ this.severity = severity;
+ return this;
+ }
+
+
+ /**
+ * Indicator that an action is required to allow service order fullfilment to follow up
+ *
+ * @return correctionRequired
+ **/
+ @JsonProperty("correctionRequired")
+ @ApiModelProperty(required = true,value = "Indicator that an action is required to allow service order fullfilment to follow up")
+ @NotNull
+ public boolean getCorrectionRequired() {
+ return correctionRequired;
+ }
+
+ public void setCorrectionRequired(boolean correctionRequired) {
+ this.correctionRequired = correctionRequired;
+ }
+
+ public OrderMessage severity(boolean correctionRequired) {
+ this.correctionRequired = correctionRequired;
+ return this;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ OrderMessage orderMessage = (OrderMessage) o;
+ return Objects.equals(this.code, orderMessage.code)
+ && Objects.equals(this.field, orderMessage.field)
+ && Objects.equals(this.messageInformation, orderMessage.messageInformation)
+ && Objects.equals(this.severity, orderMessage.severity)
+ && Objects.equals(this.correctionRequired, orderMessage.correctionRequired);
+ }
+
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(code, field, messageInformation,severity);
+ }
+
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class OrderMessage {\n");
+ sb.append(" code: ").append(toIndentedString(code)).append("\n");
+ sb.append(" field: ").append(toIndentedString(field)).append("\n");
+ sb.append(" messageInformation: ").append(toIndentedString(messageInformation)).append("\n");
+ sb.append(" severity: ").append(toIndentedString(severity)).append("\n");
+ sb.append(" correctionRequired: ").append(toIndentedString(correctionRequired)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces (except the first
+ * line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrder.java b/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrder.java
index e8d1e97..bd86f35 100755
--- a/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrder.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrder.java
@@ -121,6 +121,9 @@ public class ServiceOrder implements Resource {
@JsonProperty("orderItem")
private List<ServiceOrderItem> orderItem = null;
+ @JsonProperty("orderMessage")
+ private List<OrderMessage> orderMessage = null;
+
public ServiceOrder id(String id) {
this.id = id;
return this;
@@ -526,6 +529,46 @@ public class ServiceOrder implements Resource {
}
+ public ServiceOrder orderMessage(List<OrderMessage> orderMessage) {
+ this.orderMessage = orderMessage;
+ return this;
+ }
+
+ public ServiceOrder addOrderMessageItem(OrderMessage orderMessageItem) {
+ if (this.orderMessage == null) {
+ this.orderMessage = new ArrayList<OrderMessage>();
+ }
+ boolean mesageAlreadyExist=false;
+ for (OrderMessage message : this.orderMessage) {
+ if(message.getCode().equals(orderMessageItem.getCode())){
+ mesageAlreadyExist=true;
+
+ }
+ }
+ if(!mesageAlreadyExist) {
+ this.orderMessage.add(orderMessageItem);
+ }
+ return this;
+ }
+
+ /**
+ *
+ * @return orderMessage
+ **/
+ @JsonProperty("orderMessage")
+ @ApiModelProperty(value = "")
+ public List<OrderMessage> getOrderMessage() {
+ return orderMessage;
+ }
+
+ public void setOrderMessage(List<OrderMessage> orderMessage) {
+ this.orderMessage = orderMessage;
+ }
+
+
+
+
+
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
@@ -551,14 +594,16 @@ public class ServiceOrder implements Resource {
&& Objects.equals(this.schemaLocation, serviceOrder.schemaLocation)
&& Objects.equals(this.relatedParty, serviceOrder.relatedParty)
&& Objects.equals(this.orderRelationship, serviceOrder.orderRelationship)
- && Objects.equals(this.orderItem, serviceOrder.orderItem);
+ && Objects.equals(this.orderItem, serviceOrder.orderItem)
+ && Objects.equals(this.orderMessage, serviceOrder.orderMessage);
}
+
@Override
public int hashCode() {
return Objects.hash(id, href, externalId, priority, description, category, state, orderDate, completionDateTime,
expectedCompletionDate, requestedStartDate, requestedCompletionDate, startDate, baseType, type,
- schemaLocation, relatedParty, orderRelationship, orderItem);
+ schemaLocation, relatedParty, orderRelationship, orderItem, orderMessage);
}
@@ -586,6 +631,7 @@ public class ServiceOrder implements Resource {
sb.append(" relatedParty: ").append(toIndentedString(relatedParty)).append("\n");
sb.append(" orderRelationship: ").append(toIndentedString(orderRelationship)).append("\n");
sb.append(" orderItem: ").append(toIndentedString(orderItem)).append("\n");
+ sb.append(" orderMessage: ").append(toIndentedString(orderMessage)).append("\n");
sb.append("}");
return sb.toString();
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrderItem.java b/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrderItem.java
index e03713e..812e42b 100755
--- a/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrderItem.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/model/ServiceOrderItem.java
@@ -80,6 +80,11 @@ public class ServiceOrderItem {
@JsonProperty("service")
private Service service = null;
+
+ @JsonProperty("orderMessage")
+ private List<OrderMessage> orderItemMessage = new ArrayList<>();
+
+
public ServiceOrderItem id(String id) {
this.id = id;
return this;
@@ -257,6 +262,46 @@ public class ServiceOrderItem {
this.requestId = requestId;
}
+
+ public ServiceOrderItem orderItemMessage(List<OrderMessage> orderItemMessage) {
+ this.orderItemMessage = orderItemMessage;
+ return this;
+ }
+
+ public ServiceOrderItem addOrderItemMessageItem(OrderMessage orderItemMessageItem) {
+ if (this.orderItemMessage == null) {
+ this.orderItemMessage = new ArrayList<OrderMessage>();
+ }
+ boolean mesageAlreadyExist=false;
+ for (OrderMessage message : this.orderItemMessage) {
+ if(message.getCode().equals(orderItemMessageItem.getCode())){
+ mesageAlreadyExist=true;
+
+ }
+ }
+ if(!mesageAlreadyExist) {
+ this.orderItemMessage.add(orderItemMessageItem);
+ }
+ return this;
+ }
+
+ /**
+ *
+ * @return orderItemMessage
+ **/
+ @JsonProperty("orderItemMessage")
+ @ApiModelProperty(value = "")
+ public List<OrderMessage> getOrderItemMessage() {
+ return orderItemMessage;
+ }
+
+ public void setOrderMessage(List<OrderMessage> orderItemMessage) {
+ this.orderItemMessage = orderItemMessage;
+ }
+
+
+
+
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
@@ -273,13 +318,15 @@ public class ServiceOrderItem {
&& Objects.equals(this.baseType, serviceOrderItem.baseType)
&& Objects.equals(this.orderItemRelationship, serviceOrderItem.orderItemRelationship)
&& Objects.equals(this.service, serviceOrderItem.service)
- && Objects.equals(this.requestId, serviceOrderItem.requestId);
+ && Objects.equals(this.requestId, serviceOrderItem.requestId)
+ && Objects.equals(this.orderItemMessage, serviceOrderItem.orderItemMessage);
+
}
@Override
public int hashCode() {
return Objects.hash(id, action, state, type, schemaLocation, baseType, orderItemRelationship, service,
- requestId);
+ requestId,orderItemMessage);
}
@@ -287,7 +334,6 @@ public class ServiceOrderItem {
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class ServiceOrderItem {\n");
-
sb.append(" id: ").append(toIndentedString(id)).append("\n");
sb.append(" action: ").append(toIndentedString(action)).append("\n");
sb.append(" state: ").append(toIndentedString(state)).append("\n");
@@ -297,6 +343,7 @@ public class ServiceOrderItem {
sb.append(" orderItemRelationship: ").append(toIndentedString(orderItemRelationship)).append("\n");
sb.append(" requestId: ").append(toIndentedString(requestId)).append("\n");
sb.append(" service: ").append(toIndentedString(service)).append("\n");
+ sb.append(" service: ").append(toIndentedString(orderItemMessage)).append("\n");
sb.append("}");
return sb.toString();
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/model/SeverityMessage.java b/src/main/java/org/onap/nbi/apis/serviceorder/model/SeverityMessage.java
new file mode 100755
index 0000000..be6836f
--- /dev/null
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/model/SeverityMessage.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) 2018 Orange
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * API ServiceOrder serviceOrder API designed for ONAP Beijing Release. This API is build from TMF
+ * open API16.5 + applied TMF guideline 3.0
+ *
+ * OpenAPI spec version: 0.1.1_inProgress
+ *
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git Do not edit the class manually.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.onap.nbi.apis.serviceorder.model;
+
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ *
+ */
+public enum SeverityMessage {
+
+ INFORMATION("information"),
+
+ ERROR("error");
+
+ private String value;
+
+ SeverityMessage(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(value);
+ }
+
+ @JsonCreator
+ public static SeverityMessage fromValue(String text) {
+ for (SeverityMessage b : SeverityMessage.values()) {
+ if (String.valueOf(b.value).equals(text)) {
+ return b;
+ }
+ }
+ return null;
+ }
+
+ @JsonValue
+ public String value() {
+ return this.value;
+ }
+
+}
+
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/service/ServiceOrderService.java b/src/main/java/org/onap/nbi/apis/serviceorder/service/ServiceOrderService.java
index bc8b854..f20c89d 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/service/ServiceOrderService.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/service/ServiceOrderService.java
@@ -15,8 +15,10 @@
*/
package org.onap.nbi.apis.serviceorder.service;
+import org.onap.nbi.apis.serviceorder.model.OrderMessage;
import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
+import org.onap.nbi.apis.serviceorder.model.SeverityMessage;
import org.onap.nbi.apis.serviceorder.model.StateType;
import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
@@ -72,4 +74,75 @@ public class ServiceOrderService {
}
+
+ public void addOrderMessage(ServiceOrder serviceOrder, String code) {
+ OrderMessage orderMessage = new OrderMessage();
+ orderMessage.setCode(code);
+ orderMessage.setSeverity(SeverityMessage.ERROR);
+ orderMessage.setCorrectionRequired(true);
+
+ if ("104".equalsIgnoreCase(code)) {
+ orderMessage.setField("relatedParty.id");
+ orderMessage.setMessageInformation("Referred customer did not exist in ONAP");
+ serviceOrder.addOrderMessageItem(orderMessage);
+ }
+ if ("500".equalsIgnoreCase(code)) {
+ orderMessage.setMessageInformation("Problem with SDC API");
+ serviceOrder.addOrderMessageItem(orderMessage);
+ }
+ if ("501".equalsIgnoreCase(code)) {
+ orderMessage.setMessageInformation("Problem with AAI API");
+ serviceOrder.addOrderMessageItem(orderMessage);
+ }
+ if ("502".equalsIgnoreCase(code)) {
+ orderMessage.setMessageInformation("Problem with SO API");
+ serviceOrder.addOrderMessageItem(orderMessage);
+ }
+ if ("503".equalsIgnoreCase(code)) {
+ orderMessage.setMessageInformation("tenantId not found in AAI");
+ serviceOrder.addOrderMessageItem(orderMessage);
+ }
+ serviceOrderRepository.save(serviceOrder);
+ }
+
+ public void addOrderItemMessage(ServiceOrder serviceOrder,ServiceOrderItem serviceOrderItem, String code) {
+ OrderMessage orderMessage = new OrderMessage();
+ orderMessage.setCode(code);
+ orderMessage.setSeverity(SeverityMessage.ERROR);
+ orderMessage.setCorrectionRequired(true);
+
+ if ("101".equalsIgnoreCase(code)) {
+ orderMessage.setField("service.id");
+ orderMessage.setMessageInformation("Missing Information - orderItem.service.id must be provided");
+ serviceOrderItem.addOrderItemMessageItem(orderMessage);
+ }
+ if ("102".equalsIgnoreCase(code)) {
+ orderMessage.setField("serviceSpecification.id");
+ orderMessage
+ .setMessageInformation("Incorrect serviceSpecification.id provided – not found in Catalog (SDC");
+ serviceOrderItem.addOrderItemMessageItem(orderMessage);
+ }
+ if ("103".equalsIgnoreCase(code)) {
+ orderMessage.setField("service.id");
+ orderMessage.setMessageInformation(
+ "Inconsistence information provided. service.id must not be provided for add action");
+ serviceOrderItem.addOrderItemMessageItem(orderMessage);
+ }
+ if ("105".equalsIgnoreCase(code)) {
+ orderMessage.setField("service.name");
+ orderMessage.setMessageInformation("ServiceName already exist in AAI");
+ serviceOrderItem.addOrderItemMessageItem(orderMessage);
+ }
+ if ("106".equalsIgnoreCase(code)) {
+ orderMessage.setField("service.id");
+ orderMessage.setMessageInformation("Incorrect service.id provided – not found in Inventory (AAI)");
+ serviceOrderItem.addOrderItemMessageItem(orderMessage);
+ }
+ if ("107".equalsIgnoreCase(code)) {
+ orderMessage.setMessageInformation("tenantId not found in AAI");
+ serviceOrderItem.addOrderItemMessageItem(orderMessage);
+ }
+ serviceOrderRepository.save(serviceOrder);
+ }
+
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CheckOrderConsistenceManager.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CheckOrderConsistenceManager.java
index 7ee3a0e..e868bc6 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CheckOrderConsistenceManager.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CheckOrderConsistenceManager.java
@@ -8,7 +8,7 @@
*/
package org.onap.nbi.apis.serviceorder.workflow;
-import java.util.LinkedHashMap;
+import java.util.Map;
import org.onap.nbi.apis.serviceorder.MultiClient;
import org.onap.nbi.apis.serviceorder.model.RelatedParty;
import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
@@ -21,8 +21,6 @@ import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -36,6 +34,7 @@ public class CheckOrderConsistenceManager {
@Autowired
private ServiceOrderService serviceOrderService;
+
private static final Logger LOGGER = LoggerFactory.getLogger(CheckOrderConsistenceManager.class);
public ServiceOrderInfo checkServiceOrder(ServiceOrder serviceOrder) {
@@ -46,26 +45,29 @@ public class CheckOrderConsistenceManager {
for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
- handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
+ handleServiceFromCatalog(serviceOrderItem,serviceOrder, serviceOrderItemInfo);
if (!existServiceInCatalog(serviceOrderItemInfo)) {
serviceOrderInfo.setIsServiceOrderRejected(true);
- serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.REJECTED);
+ serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.REJECTED);
LOGGER.warn(
"service order item {} of service order {} rejected cause no service catalog found for id {}",
serviceOrderItem.getId(), serviceOrder.getId(),
serviceOrderItem.getService().getServiceSpecification().getId());
+ serviceOrderService.addOrderItemMessage(serviceOrder,serviceOrderItem, "102");
} else {
switch (serviceOrderItem.getAction()) {
case ADD:
- handleServiceOrderItemInAdd(serviceOrderInfo,serviceOrder, serviceOrderItem, serviceOrderItemInfo);
+ handleServiceOrderItemInAdd(serviceOrderInfo, serviceOrder, serviceOrderItem,
+ serviceOrderItemInfo);
break;
case MODIFY:
case DELETE:
- handleServiceOrderItemInChange(serviceOrderInfo,serviceOrder, serviceOrderItem, serviceOrderItemInfo);
+ handleServiceOrderItemInChange(serviceOrderInfo, serviceOrder, serviceOrderItem,
+ serviceOrderItemInfo);
break;
case NOCHANGE:
serviceOrderInfo.setAllItemsInAdd(false);
- serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.COMPLETED);
+ serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.COMPLETED);
nbItemsCompleted++;
break;
}
@@ -87,61 +89,67 @@ public class CheckOrderConsistenceManager {
ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem,
ServiceOrderItemInfo serviceOrderItemInfo) {
serviceOrderInfo.setAllItemsInAdd(false);
- if (shouldAcceptServiceOrderItemToChange(serviceOrderInfo, serviceOrderItem,
+ if (shouldAcceptServiceOrderItemToChange(serviceOrderInfo, serviceOrder, serviceOrderItem,
serviceOrderItemInfo)) {
serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
} else {
serviceOrderInfo.setIsServiceOrderRejected(true);
- serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.REJECTED);
+ serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.REJECTED);
}
}
private void handleServiceOrderItemInAdd(ServiceOrderInfo serviceOrderInfo,
ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem,
ServiceOrderItemInfo serviceOrderItemInfo) {
- if (shouldAcceptServiceOrderItemToAdd(serviceOrderItem, serviceOrderInfo.getServiceOrderId())) {
+ if (shouldAcceptServiceOrderItemToAdd(serviceOrderItem, serviceOrder, serviceOrderInfo.getServiceOrderId())) {
serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
} else {
serviceOrderInfo.setIsServiceOrderRejected(true);
- serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.REJECTED);
+ serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.REJECTED);
}
}
private boolean shouldAcceptServiceOrderItemToAdd(ServiceOrderItem serviceOrderItem,
- String serviceOrderId) {
+ ServiceOrder serviceOrder, String serviceOrderId) {
if (!StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
LOGGER
.warn("serviceOrderItem {} for serviceorder {} rejected cause service.id must be empty in add action",
serviceOrderItem.getId(), serviceOrderId);
+ serviceOrderService.addOrderItemMessage(serviceOrder,serviceOrderItem, "103");
return false;
- } else if (!serviceOrderConsumerService.isTenantIdPresentInAAI()) {
+ } else if (!serviceOrderConsumerService.isTenantIdPresentInAAI(serviceOrder)) {
LOGGER.warn("serviceOrderItem {} for serviceOrder {} rejected cause tenantId not found in AAI",
serviceOrderItem.getId(), serviceOrderId);
+ serviceOrderService.addOrderItemMessage(serviceOrder,serviceOrderItem, "107");
+
return false;
}
return true;
}
private boolean shouldAcceptServiceOrderItemToChange(ServiceOrderInfo serviceOrderInfo,
- ServiceOrderItem serviceOrderItem,
+ ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem,
ServiceOrderItemInfo serviceOrderItemInfo) {
if (StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
LOGGER.warn(
"serviceOrderItem {} for serviceOrder {} rejected cause service.id is mandatory in delete/change action",
serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId());
+ serviceOrderService.addOrderItemMessage(serviceOrder,serviceOrderItem, "101");
return false;
- } else if (!isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo)) {
+ } else if (!isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo,serviceOrder)) {
LOGGER
.warn("serviceOrderItem {} for serviceOrder {} rejected cause customer not found in inventory",
serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId());
+ serviceOrderService.addOrderMessage(serviceOrder, "104");
return false;
- } else if (!existServiceInInventory(serviceOrderItem, serviceOrderItemInfo,
+ } else if (!existServiceInInventory(serviceOrderItem, serviceOrder, serviceOrderItemInfo,
serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
LOGGER
.warn("serviceOrderItem {} for serviceOrder {} rejected cause service id {} not found in inventory",
serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId(),
serviceOrderItem.getService().getId());
+ serviceOrderService.addOrderItemMessage(serviceOrder,serviceOrderItem, "106");
return false;
}
return true;
@@ -175,20 +183,22 @@ public class CheckOrderConsistenceManager {
return null;
}
- private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo) {
+ private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo,
+ ServiceOrder serviceOrder) {
if (serviceOrderInfo.isUseServiceOrderCustomer()) {
return serviceOrderConsumerService
- .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
+ .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(),serviceOrder);
}
return true;
}
private boolean existServiceInInventory(ServiceOrderItem serviceOrderItem,
- ServiceOrderItemInfo serviceOrderItemInfo, String globalSubscriberId) {
+ ServiceOrder serviceOrder, ServiceOrderItemInfo serviceOrderItemInfo,
+ String globalSubscriberId) {
String serviceName = (String) serviceOrderItemInfo.getCatalogResponse().get("name");
return serviceOrderConsumerService.doesServiceExistInServiceInventory(
- serviceOrderItem.getService().getId(), serviceName, globalSubscriberId);
+ serviceOrderItem.getService().getId(), serviceName, globalSubscriberId,serviceOrder);
}
private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
@@ -196,18 +206,11 @@ public class CheckOrderConsistenceManager {
}
private void handleServiceFromCatalog(ServiceOrderItem serviceOrderItem,
- ServiceOrderItemInfo serviceOrderItemInfo) {
- ResponseEntity<Object> response = serviceOrderConsumerService
- .getServiceCatalog(serviceOrderItem.getService().getServiceSpecification().getId());
- if (response != null && (response.getStatusCode().equals(HttpStatus.OK)
- || response.getStatusCode().equals(HttpStatus.PARTIAL_CONTENT))) {
- LinkedHashMap body = (LinkedHashMap) response.getBody();
- serviceOrderItemInfo.setCatalogResponse(body);
- } else {
- LOGGER.warn("unable to retrieve catalog information for service {}",
- serviceOrderItem.getService().getServiceSpecification().getId());
- }
- }
+ ServiceOrder serviceOrder, ServiceOrderItemInfo serviceOrderItemInfo) {
+ Map body = serviceOrderConsumerService
+ .getServiceCatalog(serviceOrderItem.getService().getServiceSpecification().getId(),serviceOrder,serviceOrderItem);
+ serviceOrderItemInfo.setCatalogResponse(body);
+ }
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAICustomerManager.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAICustomerManager.java
index aacf48c..d3710a9 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAICustomerManager.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAICustomerManager.java
@@ -41,12 +41,13 @@ public class CreateAAICustomerManager {
if (serviceOrderInfo.isUseServiceOrderCustomer() && serviceOrderInfo.isAllItemsInAdd()
&& !serviceOrderConsumerService
- .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
+ .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(), serviceOrder)) {
- boolean customerCreated = serviceOrderConsumerService.putCustomer(serviceOrderInfo.getSubscriberInfo());
+ boolean customerCreated = serviceOrderConsumerService.putCustomer(serviceOrderInfo.getSubscriberInfo(), serviceOrder);
if (!customerCreated) {
serviceOrderService.updateOrderState(serviceOrder,StateType.REJECTED);
LOGGER.warn("serviceOrder {} rejected : cannot create customer", serviceOrder.getId());
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
}
}
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAIServiceTypeManager.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAIServiceTypeManager.java
index 0da0355..baf7e7f 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAIServiceTypeManager.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/CreateAAIServiceTypeManager.java
@@ -38,12 +38,13 @@ public class CreateAAIServiceTypeManager {
@Autowired
ServiceOrderService serviceOrderService;
+
private static final Logger LOGGER = LoggerFactory.getLogger(CreateAAIServiceTypeManager.class);
public void createAAIServiceType(ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
Map servicesInAaiForCustomer = serviceOrderConsumerService
- .getServicesInAaiForCustomer(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
+ .getServicesInAaiForCustomer(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(), serviceOrder);
for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
if (ActionType.ADD == serviceOrderItem.getAction()) {
@@ -52,12 +53,14 @@ public class CreateAAIServiceTypeManager {
String sdcServiceName = (String) serviceOrderItemInfo.getCatalogResponse().get("name");
if (!serviceNameExistsInAAI(servicesInAaiForCustomer, sdcServiceName)) {
boolean serviceCreated = serviceOrderConsumerService.putServiceType(
- serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(), sdcServiceName);
+ serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(), sdcServiceName, serviceOrder);
if (!serviceCreated) {
serviceOrderService.updateOrderState(serviceOrder,StateType.REJECTED);
LOGGER.warn("serviceOrder {} rejected : cannot create service type {} for customer {}",
serviceOrder.getId(), sdcServiceName,
serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
+ serviceOrderService.addOrderMessage(serviceOrder, "501");
+
}
}
}
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskProcessor.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskProcessor.java
index 1957e5b..a11863c 100644
--- a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskProcessor.java
+++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskProcessor.java
@@ -28,6 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -83,7 +84,7 @@ public class SOTaskProcessor {
if (StateType.ACKNOWLEDGED == serviceOrderItem.getState()) {
- ResponseEntity<CreateServiceInstanceResponse> response = postServiceOrderItem(serviceOrderInfo,
+ ResponseEntity<CreateServiceInstanceResponse> response = postServiceOrderItem(serviceOrderInfo,serviceOrder,
serviceOrderItem);
updateServiceOrderItem(response, serviceOrderItem,serviceOrder);
}
@@ -108,10 +109,10 @@ public class SOTaskProcessor {
}
private ResponseEntity<CreateServiceInstanceResponse> postServiceOrderItem(ServiceOrderInfo serviceOrderInfo,
- ServiceOrderItem serviceOrderItem) {
+ ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem) {
ResponseEntity<CreateServiceInstanceResponse> response = null;
try {
- response = postSORequest(serviceOrderItem, serviceOrderInfo);
+ response = postSORequest(serviceOrderItem,serviceOrder, serviceOrderInfo);
} catch (NullPointerException e) {
LOGGER.error("Unable to create service instance for serviceOrderItem.id=" + serviceOrderItem.getId(), e);
response = null;
@@ -145,7 +146,7 @@ public class SOTaskProcessor {
}
private ResponseEntity<CreateServiceInstanceResponse> postSORequest(ServiceOrderItem serviceOrderItem,
- ServiceOrderInfo serviceOrderInfo) {
+ ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
RequestDetails requestDetails = buildSoRequest(serviceOrderItem,
serviceOrderInfo.getServiceOrderItemInfos().get(serviceOrderItem.getId()).getCatalogResponse(),
serviceOrderInfo.getSubscriberInfo());
@@ -157,11 +158,14 @@ public class SOTaskProcessor {
response = soClient.callCreateServiceInstance(msoPayload);
break;
case DELETE:
- response = soClient.callDeleteServiceInstance(msoPayload, serviceOrderItem.getService().getId());
+ response = soClient.callDeleteServiceInstance(msoPayload,serviceOrderItem.getService().getId());
break;
default:
break;
}
+ if(response!=null && response.getStatusCode()== HttpStatus.INTERNAL_SERVER_ERROR) {
+ serviceOrderService.addOrderMessage(serviceOrder, "502");
+ }
return response;
}
@@ -326,8 +330,8 @@ public class SOTaskProcessor {
private void updateServiceOrderItem(ResponseEntity<CreateServiceInstanceResponse> response,
ServiceOrderItem orderItem, ServiceOrder serviceOrder) {
- if (response == null) {
- LOGGER.warn("response=null for serviceOrderItem.id=" + orderItem.getId());
+ if (response==null || !response.getStatusCode().is2xxSuccessful()) {
+ LOGGER.warn("response ko for serviceOrderItem.id=" + orderItem.getId());
serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.FAILED);
}
else {
diff --git a/src/test/java/org/onap/nbi/apis/ApiTest.java b/src/test/java/org/onap/nbi/apis/ApiTest.java
index 5e07486..033f3be 100644
--- a/src/test/java/org/onap/nbi/apis/ApiTest.java
+++ b/src/test/java/org/onap/nbi/apis/ApiTest.java
@@ -281,6 +281,30 @@ public class ApiTest {
}
+
+ @Test
+ public void testCheckServiceOrderWithUnknownSverviceSpecId() throws Exception {
+
+ ServiceOrder testServiceOrder = ServiceOrderAssertions.createTestServiceOrder(ActionType.ADD);
+ testServiceOrder.setState(StateType.ACKNOWLEDGED);
+ testServiceOrder.setId("test");
+ for (ServiceOrderItem serviceOrderItem : testServiceOrder.getOrderItem()) {
+ serviceOrderItem.getService().getServiceSpecification().setId("toto");
+ }
+
+ serviceOrderRepository.save(testServiceOrder);
+
+ serviceOrderResource.scheduleCheckServiceOrders();
+
+ ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
+ assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+ for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+ assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("102");
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("serviceSpecification.id");
+ }
+ }
+
@Test
public void testCheckServiceOrderWithGenericCustomer() throws Exception {
@@ -337,6 +361,80 @@ public class ApiTest {
}
+ @Test
+ public void testCheckServiceOrderInDeleteWithNoServiceId() throws Exception {
+
+ ServiceOrder testServiceOrder = ServiceOrderAssertions.createTestServiceOrder(ActionType.DELETE);
+ for (ServiceOrderItem serviceOrderItem : testServiceOrder.getOrderItem()) {
+ serviceOrderItem.getService().setId(null);
+ }
+
+ testServiceOrder.setState(StateType.ACKNOWLEDGED);
+ testServiceOrder.setId("test");
+ serviceOrderRepository.save(testServiceOrder);
+
+ serviceOrderResource.scheduleCheckServiceOrders();
+
+ ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
+ assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+
+ for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+ assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("101");
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("service.id");
+ }
+ }
+
+ @Test
+ public void testCheckServiceOrderInAddWithServiceId() throws Exception {
+
+ ServiceOrder testServiceOrder = ServiceOrderAssertions.createTestServiceOrder(ActionType.ADD);
+ for (ServiceOrderItem serviceOrderItem : testServiceOrder.getOrderItem()) {
+ serviceOrderItem.getService().setId("toto");
+ }
+
+ testServiceOrder.setState(StateType.ACKNOWLEDGED);
+ testServiceOrder.setId("test");
+ serviceOrderRepository.save(testServiceOrder);
+
+ serviceOrderResource.scheduleCheckServiceOrders();
+
+ ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
+ assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+
+ for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+ assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("103");
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("service.id");
+ }
+ }
+
+ @Test
+ public void testCheckServiceOrderWithUnKnownCustomerInChange() throws Exception {
+
+ ServiceOrder testServiceOrder = ServiceOrderAssertions.createTestServiceOrder(ActionType.DELETE);
+ List<RelatedParty> customers = new ArrayList<>();
+ RelatedParty customer = new RelatedParty();
+ customer.setId("new");
+ customer.setRole("ONAPcustomer");
+ customer.setName("romain");
+ customers.add(customer);
+ testServiceOrder.setRelatedParty(customers);
+ testServiceOrder.setState(StateType.ACKNOWLEDGED);
+ testServiceOrder.setId("test");
+ serviceOrderRepository.save(testServiceOrder);
+
+ serviceOrderResource.scheduleCheckServiceOrders();
+
+ ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
+ assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+
+ assertThat(serviceOrderChecked.getOrderMessage().size()).isGreaterThan(0);
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getCode()).isEqualTo("104");
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getField()).isEqualTo("relatedParty.id");
+ }
+
+
@Test
public void testCheckServiceOrderWithCustomerAAINotResponding() throws Exception {
@@ -360,9 +458,46 @@ public class ApiTest {
ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+
+ assertThat(serviceOrderChecked.getOrderMessage().size()).isGreaterThan(0);
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getCode()).isEqualTo("501");
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getMessageInformation()).isEqualTo("Problem with AAI API");
+ }
+
+
+ @Test
+ public void testCheckServiceOrderWithSDCNotResponding() throws Exception {
+
+ removeWireMockMapping("/sdc/v1/catalog/services/1e3feeb0-8e36-46c6-862c-236d9c626439/metadata");
+
+ ServiceOrder testServiceOrder = ServiceOrderAssertions.createTestServiceOrder(ActionType.ADD);
+ List<RelatedParty> customers = new ArrayList<>();
+ RelatedParty customer = new RelatedParty();
+ customer.setId("new");
+ customer.setRole("ONAPcustomer");
+ customer.setName("romain");
+ customers.add(customer);
+ testServiceOrder.setRelatedParty(customers);
+ testServiceOrder.setState(StateType.ACKNOWLEDGED);
+ testServiceOrder.setId("test");
+ serviceOrderRepository.save(testServiceOrder);
+
+ serviceOrderResource.scheduleCheckServiceOrders();
+
+ ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
+ assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+
+
+ for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+ assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("102");
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("serviceSpecification.id");
+ }
}
+
+
@Test
public void testCheckServiceOrderWithPutServiceAAINotResponding() throws Exception {
@@ -423,6 +558,11 @@ public class ApiTest {
ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+ for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+ assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("106");
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("service.id");
+ }
}
@Test
@@ -514,6 +654,13 @@ public class ApiTest {
ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+ for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
+ if(serviceOrderItem.getId().equals("A")) {
+ assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("102");
+ assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("serviceSpecification.id");
+ }
+ }
}
@Test
diff --git a/src/test/java/org/onap/nbi/apis/ApiTestWithoutOnap.java b/src/test/java/org/onap/nbi/apis/ApiTestWithoutOnap.java
index c37c441..782c39a 100644
--- a/src/test/java/org/onap/nbi/apis/ApiTestWithoutOnap.java
+++ b/src/test/java/org/onap/nbi/apis/ApiTestWithoutOnap.java
@@ -17,11 +17,17 @@ package org.onap.nbi.apis;
import static org.assertj.core.api.Assertions.assertThat;
+import java.util.ArrayList;
+import java.util.List;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.onap.nbi.apis.assertions.ServiceOrderAssertions;
+import org.onap.nbi.apis.servicecatalog.ServiceSpecificationResource;
+import org.onap.nbi.apis.serviceinventory.ServiceInventoryResource;
+import org.onap.nbi.apis.serviceorder.ServiceOrderResource;
import org.onap.nbi.apis.serviceorder.model.ActionType;
+import org.onap.nbi.apis.serviceorder.model.RelatedParty;
import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
import org.onap.nbi.apis.serviceorder.model.StateType;
@@ -30,9 +36,12 @@ import org.onap.nbi.apis.serviceorder.repositories.ExecutionTaskRepository;
import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
import org.onap.nbi.apis.serviceorder.workflow.SOTaskProcessor;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@@ -48,6 +57,15 @@ public class ApiTestWithoutOnap {
@Autowired
SOTaskProcessor SoTaskProcessor;
+ @Autowired
+ ServiceSpecificationResource serviceSpecificationResource;
+
+ @Autowired
+ ServiceInventoryResource serviceInventoryResource;
+
+ @Autowired
+ ServiceOrderResource serviceOrderResource;
+
@After
public void tearsDownUpPort() throws Exception {
executionTaskRepository.deleteAll();
@@ -79,11 +97,65 @@ public class ApiTestWithoutOnap {
for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
}
+ assertThat(serviceOrderChecked.getOrderMessage().size()).isGreaterThan(0);
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getCode()).isEqualTo("502");
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getMessageInformation()).isEqualTo("Problem with SO API");
assertThat(executionTaskRepository.count()).isEqualTo(0);
}
+ @Test
+ public void testCheckServiceOrderWithSDCNotResponding() throws Exception {
+
+ ServiceOrder testServiceOrder = ServiceOrderAssertions.createTestServiceOrder(ActionType.ADD);
+ List<RelatedParty> customers = new ArrayList<>();
+ RelatedParty customer = new RelatedParty();
+ customer.setId("new");
+ customer.setRole("ONAPcustomer");
+ customer.setName("romain");
+ customers.add(customer);
+ testServiceOrder.setRelatedParty(customers);
+ testServiceOrder.setState(StateType.ACKNOWLEDGED);
+ testServiceOrder.setId("test");
+ serviceOrderRepository.save(testServiceOrder);
+
+ serviceOrderResource.scheduleCheckServiceOrders();
+
+ ServiceOrder serviceOrderChecked = serviceOrderRepository.findOne("test");
+ assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.REJECTED);
+
+ assertThat(serviceOrderChecked.getOrderMessage().size()).isGreaterThan(0);
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getCode()).isEqualTo("500");
+ assertThat(serviceOrderChecked.getOrderMessage().get(0).getMessageInformation()).isEqualTo("Problem with SDC API");
+ }
+
+
+
+ @Test
+ public void testServiceCatalogGetResource() throws Exception {
+
+ ResponseEntity<Object> resource = serviceSpecificationResource
+ .getServiceSpecification("1e3feeb0-8e36-46c6-862c-236d9c626439", null);
+ assertThat(resource.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
+
+
+ }
+
+
+
+ @Test
+ public void testServiceResourceGetInventory() throws Exception {
+
+ String serviceName = "vFW";
+ String serviceId = "e4688e5f-61a0-4f8b-ae02-a2fbde623bcb";
+ MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+ params.add("serviceSpecification.name", serviceName);
+ params.add("relatedParty.id", "6490");
+ ResponseEntity<Object> resource = serviceInventoryResource.getServiceInventory(serviceId, params);
+ assertThat(resource.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
+
+ }