package org.onap.policy.clamp.models.acm.persistence.provider;
+import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public AutomationCompositionDefinition createAutomationCompositionDefinition(
final ToscaServiceTemplate serviceTemplate) {
var acmDefinition = new AutomationCompositionDefinition();
- acmDefinition.setCompositionId(UUID.randomUUID());
+ var compositionId = UUID.randomUUID();
+ acmDefinition.setCompositionId(compositionId);
+ if (serviceTemplate.getMetadata() == null) {
+ serviceTemplate.setMetadata(new HashMap<>());
+ }
+ serviceTemplate.getMetadata().put("compositionId", compositionId);
acmDefinition.setServiceTemplate(serviceTemplate);
var jpaAcmDefinition = ProviderUtils.getJpaAndValidate(acmDefinition, JpaAutomationCompositionDefinition::new,
"AutomationCompositionDefinition");
import java.util.stream.Collectors;
import javax.ws.rs.core.Response.Status;
import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.models.acm.utils.AcmUtils;
-import org.onap.policy.common.parameters.BeanValidationResult;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
* @param supervisionHandler the Supervision Handler
* @param participantProvider the Participant Provider
*/
- public CommissioningProvider(AcDefinitionProvider acDefinitionProvider,
- AutomationCompositionProvider acProvider, SupervisionHandler supervisionHandler,
- ParticipantProvider participantProvider) {
+ public CommissioningProvider(AcDefinitionProvider acDefinitionProvider, AutomationCompositionProvider acProvider,
+ SupervisionHandler supervisionHandler, ParticipantProvider participantProvider) {
this.acDefinitionProvider = acDefinitionProvider;
this.acProvider = acProvider;
this.supervisionHandler = supervisionHandler;
public CommissioningResponse updateCompositionDefinition(UUID compositionId, ToscaServiceTemplate serviceTemplate) {
var automationCompositions = acProvider.getAcInstancesByCompositionId(compositionId);
- var result = new BeanValidationResult("AutomationCompositions", automationCompositions);
- for (var automationComposition : automationCompositions) {
- if (!AutomationCompositionState.UNINITIALISED.equals(automationComposition.getState())) {
- throw new PfModelRuntimeException(Status.BAD_REQUEST,
- "There is an Automation Composition instantioation with state in "
- + automationComposition.getState());
- }
- result.addResult(AcmUtils.validateAutomationComposition(automationComposition, serviceTemplate));
- }
- if (!result.isValid()) {
- throw new PfModelRuntimeException(Status.BAD_REQUEST, "Service template non valid: " + result.getMessage());
+ if (!automationCompositions.isEmpty()) {
+ throw new PfModelRuntimeException(Status.BAD_REQUEST,
+ "There are ACM instances, Update of ACM Definition not allowed");
}
-
acDefinitionProvider.updateServiceTemplate(compositionId, serviceTemplate);
return createCommissioningResponse(compositionId, serviceTemplate);
import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController;
import org.onap.policy.clamp.models.acm.messages.rest.commissioning.AcTypeStateUpdate;
import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
-import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates;
import org.springframework.context.annotation.Profile;
*/
@Override
public ResponseEntity<CommissioningResponse> createCompositionDefinitions(ToscaServiceTemplate body,
- UUID requestId) {
-
- var response = provider.createAutomationCompositionDefinitions(body);
- return ResponseEntity.created(createUri("/compositions/" + response.getCompositionId())).body(response);
+ UUID requestId) {
+ var compositionId = body.getMetadata() != null ? body.getMetadata().get("compositionId") : null;
+ if (compositionId == null) {
+ var response = provider.createAutomationCompositionDefinitions(body);
+ return ResponseEntity.created(createUri("/compositions/" + response.getCompositionId())).body(response);
+ } else {
+ return ResponseEntity.ok()
+ .body(provider.updateCompositionDefinition(UUID.fromString(compositionId.toString()), body));
+ }
}
/**
* @param version the version of the automation composition definition to get, null for all definitions
* @param requestId request ID used in ONAP logging
* @return the automation composition definitions
- * @throws PfModelException on errors getting details of all or specific automation composition definitions
*/
@Override
public ResponseEntity<ToscaServiceTemplates> queryCompositionDefinitions(String name, String version,
return ResponseEntity.ok().body(provider.getAutomationCompositionDefinitions(compositionId));
}
- public ResponseEntity<CommissioningResponse> updateCompositionDefinition(UUID compositionId,
- ToscaServiceTemplate body, UUID requestId) {
- return ResponseEntity.ok().body(provider.updateCompositionDefinition(compositionId, body));
- }
-
@Override
public ResponseEntity<Void> compositionDefinitionPriming(UUID compositionId, UUID requestId,
@Valid AcTypeStateUpdate body) {
import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
}
}
- @Disabled
@Test
void testUpdate() {
var toscaDataType = new ToscaDataType();
var compositionId = createEntryInDB("forUpdate");
var serviceTemplateUpdate = new ToscaServiceTemplate(serviceTemplate);
serviceTemplateUpdate.getDataTypes().put(toscaDataType.getName(), toscaDataType);
- var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId);
- var resp = invocationBuilder.put(Entity.json(serviceTemplateUpdate));
+ serviceTemplateUpdate.setMetadata(Map.of("compositionId", compositionId));
+ var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT);
+ var resp = invocationBuilder.post(Entity.json(serviceTemplateUpdate));
assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
var commissioningResponse = resp.readEntity(CommissioningResponse.class);
assertNotNull(commissioningResponse);