Commits (7)
......@@ -143,6 +143,9 @@ public class ServiceOrderApiController implements ServiceOrderApi {
return new ResponseEntity<ServiceOrder>(c, HttpStatus.OK);
} catch (NotFoundException e) {
log.error("Couldn't create Service Order. ", e);
return new ResponseEntity<ServiceOrder>(HttpStatus.BAD_REQUEST);
} catch (Exception e) {
log.error("Couldn't serialize response for content type application/json", e);
return new ResponseEntity<ServiceOrder>(HttpStatus.INTERNAL_SERVER_ERROR);
......
......@@ -25,14 +25,7 @@ import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.JsonProcessingException;
......@@ -45,30 +38,16 @@ import org.apache.commons.logging.LogFactory;
import org.etsi.osl.tmf.common.model.Any;
import org.etsi.osl.tmf.common.model.EValueType;
import org.etsi.osl.tmf.common.model.UserPartRoleType;
import org.etsi.osl.tmf.common.model.service.Characteristic;
import org.etsi.osl.tmf.common.model.service.Note;
import org.etsi.osl.tmf.common.model.service.ResourceRef;
import org.etsi.osl.tmf.common.model.service.ServiceRef;
import org.etsi.osl.tmf.common.model.service.*;
import org.etsi.osl.tmf.prm669.model.RelatedParty;
import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic;
import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue;
import org.etsi.osl.tmf.scm633.model.ServiceSpecification;
import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService;
import org.etsi.osl.tmf.sim638.service.ServiceRepoService;
import org.etsi.osl.tmf.so641.api.NotFoundException;
import org.etsi.osl.tmf.so641.api.ServiceOrderApiRouteBuilderEvents;
import org.etsi.osl.tmf.so641.model.ServiceOrder;
import org.etsi.osl.tmf.so641.model.ServiceOrderActionType;
import org.etsi.osl.tmf.so641.model.ServiceOrderAttributeValueChangeEvent;
import org.etsi.osl.tmf.so641.model.ServiceOrderAttributeValueChangeNotification;
import org.etsi.osl.tmf.so641.model.ServiceOrderCreate;
import org.etsi.osl.tmf.so641.model.ServiceOrderCreateEvent;
import org.etsi.osl.tmf.so641.model.ServiceOrderCreateNotification;
import org.etsi.osl.tmf.so641.model.ServiceOrderItem;
import org.etsi.osl.tmf.so641.model.ServiceOrderRelationship;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateChangeEvent;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateChangeNotification;
import org.etsi.osl.tmf.so641.model.ServiceOrderStateType;
import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate;
import org.etsi.osl.tmf.so641.model.*;
import org.etsi.osl.tmf.so641.repo.ServiceOrderRepository;
import org.etsi.osl.tmf.util.KrokiClient;
import org.hibernate.Hibernate;
......@@ -319,7 +298,20 @@ public class ServiceOrderRepoService {
}
@Transactional
public ServiceOrder addServiceOrder(@Valid ServiceOrderCreate serviceOrderCreate) {
public ServiceOrder addServiceOrder(@Valid ServiceOrderCreate serviceOrderCreate) throws NotFoundException {
// Ensure that all Services Specifications exist
List <ServiceOrderItem> serviceOrderItemList = serviceOrderCreate.getOrderItem();
for (ServiceOrderItem serviceOrderItem: serviceOrderItemList) {
ServiceRestriction serviceRestriction = serviceOrderItem.getService();
ServiceSpecificationRef serviceSpecificationRef = serviceRestriction.getServiceSpecification();
String serviceSpecificationId = serviceSpecificationRef.getId();
ServiceSpecification serviceSpecification = serviceSpecRepoService.findByUuid(serviceSpecificationId);
if (serviceSpecification == null)
throw new NotFoundException(400, "There is no Service Specification with Id: " + serviceSpecificationId);
}
ServiceOrder so = new ServiceOrder();
so.setOrderDate(OffsetDateTime.now(ZoneOffset.UTC));
so.setCategory(serviceOrderCreate.getCategory());
......@@ -539,6 +531,7 @@ public class ServiceOrderRepoService {
ServiceOrder so = this.findByUuid(id);
boolean stateChanged = false;
boolean expectedCompletionDateChanged = false;
//logger.info("so:" + so.toString());
for (ServiceOrderItem oi : so.getOrderItem() ) {
......@@ -590,7 +583,7 @@ public class ServiceOrderRepoService {
if ( serviceOrderUpd.getExpectedCompletionDate()!= null ) {
so.setExpectedCompletionDate(serviceOrderUpd.getExpectedCompletionDate());
expectedCompletionDateChanged = true;
}
if ( serviceOrderUpd.getStartDate()!= null ) {
......@@ -655,8 +648,17 @@ public class ServiceOrderRepoService {
so.addNoteItem(noteItem);
}
// Update each Service's end date to the updated Service Order's expected completion date
if (expectedCompletionDateChanged) {
List<String> services = serviceRepoService.getServicesFromOrderID(id);
for (String serviceId : services) {
logger.debug("Will delegate updated SO expected completion date " + so.getExpectedCompletionDate() + " to service with id = " + serviceId);
org.etsi.osl.tmf.sim638.model.Service service = serviceRepoService.findByUuid(serviceId);
service.setEndDate(so.getExpectedCompletionDate());
}
}
......@@ -827,12 +829,15 @@ public class ServiceOrderRepoService {
}
public String addServiceOrderReturnEager(@Valid ServiceOrderCreate serviceOrderCreate) {
ServiceOrder so = this.addServiceOrder(serviceOrderCreate);
try {
ServiceOrder so = this.addServiceOrder(serviceOrderCreate);
return this.getServiceOrderEagerAsString( so.getUuid());
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
......
......@@ -33,6 +33,7 @@ import java.net.URI;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import org.apache.camel.CamelContext;
import org.apache.camel.RoutesBuilder;
......@@ -355,9 +356,19 @@ public class ServiceOrderIntegrationTest {
ServiceOrder sspeccr1SO = JsonUtils.toJsonObj(sspectextSO, ServiceOrder.class);
assertThat(sspeccr1SO).isNotNull();
// Ensure that all Services' end dates were updated correctly
boolean allSupportingServicesEndDatesUpdatedToServiceOrderExpectedCompletionDate = true;
List<String> services = serviceRepoService.getServicesFromOrderID(responseSO.getId());
for (String serviceId : services) {
Service service = serviceRepoService.findByUuid(serviceId);
if (!service.getEndDate().equals(responseSOUpd.getExpectedCompletionDate())) {
allSupportingServicesEndDatesUpdatedToServiceOrderExpectedCompletionDate = false;
break;
}
}
assertThat(allSupportingServicesEndDatesUpdatedToServiceOrderExpectedCompletionDate).isTrue();
}
@WithMockUser(username="osadmin", roles = {"USER"})
......
......@@ -89,6 +89,15 @@ public class ServiceOrderApiControllerTest {
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testCreateServiceOrderWithNonExistingServiceSpecification() throws Exception {
createServiceOrderWithNonExistingServiceSpecification();
assertThat( serviceOrderRepoService.findAll().size() ).isEqualTo( FIXED_BOOTSTRAPS_SPECS );
}
@WithMockUser(username="osadmin", roles = {"ADMIN","USER"})
@Test
public void testDeleteServiceOrder() throws Exception {
......@@ -278,4 +287,35 @@ public class ServiceOrderApiControllerTest {
return responsesSpec;
}
}
private void createServiceOrderWithNonExistingServiceSpecification() throws Exception {
assertThat( serviceOrderRepoService.findAll().size() ).isEqualTo( FIXED_BOOTSTRAPS_SPECS);
ServiceOrderCreate serviceOrder = new ServiceOrderCreate();
serviceOrder.setCategory("Test Category");
serviceOrder.setDescription("A Test Service Order");
serviceOrder.setRequestedStartDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
serviceOrder.setRequestedCompletionDate(OffsetDateTime.now(ZoneOffset.UTC).toString());
ServiceOrderItem soi = new ServiceOrderItem();
serviceOrder.getOrderItem().add(soi);
soi.setState(ServiceOrderStateType.ACKNOWLEDGED);
ServiceRestriction serviceRestriction = new ServiceRestriction();
ServiceSpecificationRef aServiceSpecificationRef = new ServiceSpecificationRef();
aServiceSpecificationRef.setId("A random non-existing Id");
aServiceSpecificationRef.setName("A random non-existing name");
serviceRestriction.setServiceSpecification(aServiceSpecificationRef);
serviceRestriction.setName("aServiceRestriction");
soi.setService(serviceRestriction);
mvc
.perform(MockMvcRequestBuilders.post("/serviceOrdering/v4/serviceOrder")
.with( SecurityMockMvcRequestPostProcessors.csrf())
.contentType(MediaType.APPLICATION_JSON).content(JsonUtils.toJson(serviceOrder)))
.andExpect(status().isBadRequest()).andReturn().getResponse().getContentAsString();
}
}
\ No newline at end of file