@Override
public void fromAuthorative(@NonNull final AutomationComposition automationComposition) {
+ this.fromAuthorativeBase(automationComposition);
+ this.elements = new ArrayList<>(automationComposition.getElements().size());
+ for (var elementEntry : automationComposition.getElements().entrySet()) {
+ var jpaAutomationCompositionElement =
+ new JpaAutomationCompositionElement(elementEntry.getKey().toString(), this.instanceId);
+ jpaAutomationCompositionElement.fromAuthorative(elementEntry.getValue());
+ this.elements.add(jpaAutomationCompositionElement);
+ }
+ }
+
+ /**
+ * Set an instance of the persist concept to the equivalent values as the other concept without copy the elements.
+ *
+ * @param automationComposition the authorative concept
+ */
+ public void fromAuthorativeBase(@NonNull final AutomationComposition automationComposition) {
this.instanceId = automationComposition.getInstanceId().toString();
this.name = automationComposition.getName();
this.version = automationComposition.getVersion();
this.phase = automationComposition.getPhase();
this.description = automationComposition.getDescription();
this.stateChangeResult = automationComposition.getStateChangeResult();
- this.elements = new ArrayList<>(automationComposition.getElements().size());
- for (var elementEntry : automationComposition.getElements().entrySet()) {
- var jpaAutomationCompositionElement =
- new JpaAutomationCompositionElement(elementEntry.getKey().toString(), this.instanceId);
- jpaAutomationCompositionElement.fromAuthorative(elementEntry.getValue());
- this.elements.add(jpaAutomationCompositionElement);
- }
}
@Override
return result.toAuthorative();
}
+
+ /**
+ * Update automation composition state.
+ *
+ * @param acSource the automation composition to update
+ * @return the updated automation composition
+ */
+ public AutomationComposition updateAcState(final AutomationComposition acSource) {
+ var automationComposition = automationCompositionRepository
+ .getReferenceById(acSource.getInstanceId().toString());
+ automationComposition.fromAuthorativeBase(acSource);
+ var result = automationCompositionRepository.save(automationComposition);
+ automationCompositionRepository.flush();
+ // Return the saved automation composition
+ return result.toAuthorative();
+ }
+
/**
* Update automation composition.
*
* Update AutomationCompositionElement.
*
* @param element the AutomationCompositionElement
- * @param instanceId the instance Id
*/
- public void updateAutomationCompositionElement(@NonNull final AutomationCompositionElement element,
- @NonNull final UUID instanceId) {
- var jpaAcElement = new JpaAutomationCompositionElement(element.getId().toString(), instanceId.toString());
- jpaAcElement.fromAuthorative(element);
+ public void updateAutomationCompositionElement(@NonNull final AutomationCompositionElement element) {
+ var jpaAcElement = acElementRepository.getReferenceById(element.getId().toString());
+ jpaAcElement.setMessage(element.getMessage());
+ jpaAcElement.setOutProperties(element.getOutProperties());
+ jpaAcElement.setOperationalState(element.getOperationalState());
+ jpaAcElement.setUseState(element.getUseState());
+ jpaAcElement.setDeployState(element.getDeployState());
+ jpaAcElement.setLockState(element.getLockState());
+ jpaAcElement.setRestarting(element.getRestarting());
+
ProviderUtils.validate(element, jpaAcElement, "AutomationCompositionElement");
acElementRepository.save(jpaAcElement);
}
var automationCompositionProvider = new AutomationCompositionProvider(
mock(AutomationCompositionRepository.class), acElementRepository);
- assertThatThrownBy(() -> automationCompositionProvider.updateAutomationCompositionElement(null, null))
+ assertThatThrownBy(() -> automationCompositionProvider.updateAutomationCompositionElement(null))
.hasMessageMatching(ACELEMENT_IS_NULL);
var acElement = inputAutomationCompositions.getAutomationCompositionList().get(0).getElements().values()
.iterator().next();
- automationCompositionProvider.updateAutomationCompositionElement(acElement, UUID.randomUUID());
+ var jpa = new JpaAutomationCompositionElement();
+ jpa.setElementId(acElement.getId().toString());
+ jpa.setInstanceId(UUID.randomUUID().toString());
+ jpa.fromAuthorative(acElement);
+ when(acElementRepository.getReferenceById(acElement.getId().toString())).thenReturn(jpa);
+
+ automationCompositionProvider.updateAutomationCompositionElement(acElement);
verify(acElementRepository).save(any());
}
for (var element : automationComposition.getElements().values()) {
if (element.getParticipantId().equals(automationCompositionAckMessage.getParticipantId())) {
element.setDeployState(DeployState.DELETED);
- automationCompositionProvider.updateAutomationCompositionElement(element,
- automationComposition.getInstanceId());
+ automationCompositionProvider.updateAutomationCompositionElement(element);
}
}
} else {
automationCompositionAckMessage.getAutomationCompositionResultMap().entrySet(),
automationCompositionAckMessage.getStateChangeResult());
if (updated) {
- automationCompositionProvider.updateAutomationComposition(automationComposition);
+ automationComposition = automationCompositionProvider.updateAcState(automationComposition);
var acDefinition = acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId());
participantSyncPublisher.sendSync(acDefinition.getServiceTemplate(), automationComposition);
}
element.setDeployState(acElementAck.getValue().getDeployState());
element.setLockState(acElementAck.getValue().getLockState());
element.setRestarting(null);
- automationCompositionProvider.updateAutomationCompositionElement(element,
- automationComposition.getInstanceId());
+ automationCompositionProvider.updateAutomationCompositionElement(element);
}
}
if (StateChangeResult.TIMEOUT.equals(automationComposition.getStateChangeResult())) {
automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR);
}
+ var acToUpdate = automationComposition;
if (DeployState.DELETED.equals(automationComposition.getDeployState())) {
automationCompositionProvider.deleteAutomationComposition(automationComposition.getInstanceId());
} else {
- automationCompositionProvider.updateAutomationComposition(automationComposition);
+ acToUpdate = automationCompositionProvider.updateAcState(acToUpdate);
}
- participantSyncPublisher.sendSync(serviceTemplate, automationComposition);
+ participantSyncPublisher.sendSync(serviceTemplate, acToUpdate);
}
private void handleTimeout(AutomationCompositionDefinition acDefinition) {
propertiesUpdate.setParticipantUpdatesList(
AcmUtils.createParticipantDeployList(automationComposition, DeployOrder.UPDATE));
- LOGGER.debug("AC Element properties update sent {}", propertiesUpdate);
+ LOGGER.debug("AC Element properties update sent {}", propertiesUpdate.getMessageId());
super.send(propertiesUpdate);
}
}
acDeployMsg.setTimestamp(Instant.now());
acDeployMsg.setParticipantUpdatesList(participantDeploys);
- LOGGER.debug("AutomationCompositionDeploy message sent {}", acDeployMsg);
+ LOGGER.debug("AutomationCompositionDeploy message sent {}", acDeployMsg.getMessageId());
super.send(acDeployMsg);
}
}
message.setParticipantId(participantId);
message.setTimestamp(Instant.now());
message.setParticipantDefinitionUpdates(participantDefinitions);
- LOGGER.debug("Participant Update sent {}", message);
+ LOGGER.debug("Participant Update sent {}", message.getMessageId());
super.send(message);
}
// DeCommission the automation composition but deleting participantdefinitions on participants
message.setParticipantDefinitionUpdates(null);
- LOGGER.debug("Participant Update sent {}", message);
+ LOGGER.debug("Participant Update sent {}", message.getMessageId());
super.send(message);
}
}
message.getAutomationcompositionList().add(restartAc);
}
- LOGGER.debug("Participant Restart sent {}", message);
+ LOGGER.debug("Participant Restart sent {}", message.getMessageId());
super.send(message);
}
}
message.setParticipantId(participantId);
message.setTimestamp(Instant.now());
- LOGGER.debug("Participant StatusReq sent {}", message);
+ LOGGER.debug("Participant StatusReq sent {}", message.getMessageId());
super.send(message);
}
}
message.getAutomationcompositionList().add(syncAc);
- LOGGER.debug("Participant AutomationComposition Sync sent {}", message);
+ LOGGER.debug("Participant AutomationComposition Sync sent {}", message.getMessageId());
super.send(message);
}
}
var automationCompositionProvider = mock(AutomationCompositionProvider.class);
when(automationCompositionProvider.findAutomationComposition(IDENTIFIER))
.thenReturn(Optional.of(automationComposition));
+ when(automationCompositionProvider.updateAcState(any(AutomationComposition.class)))
+ .thenReturn(automationComposition);
var acDefinitionProvider = mock(AcDefinitionProvider.class);
when(acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()))
handler.handleAutomationCompositionStateChangeAckMessage(automationCompositionAckMessage);
verify(automationCompositionProvider, times(3))
- .updateAutomationCompositionElement(any(AutomationCompositionElement.class), any());
+ .updateAutomationCompositionElement(any(AutomationCompositionElement.class));
}
private AutomationCompositionDeployAck getAutomationCompositionDeployAck(ParticipantMessageType messageType,
var automationCompositionProvider = mock(AutomationCompositionProvider.class);
when(automationCompositionProvider.findAutomationComposition(IDENTIFIER))
.thenReturn(Optional.of(automationComposition));
+ when(automationCompositionProvider.updateAcState(any(AutomationComposition.class)))
+ .thenReturn(automationComposition);
var acDefinitionProvider = mock(AcDefinitionProvider.class);
when(acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()))
handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage);
- verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
+ verify(automationCompositionProvider).updateAcState(any(AutomationComposition.class));
}
@Test
handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage);
verify(automationCompositionProvider)
- .updateAutomationCompositionElement(any(AutomationCompositionElement.class), any());
+ .updateAutomationCompositionElement(any(AutomationCompositionElement.class));
}
@Test
handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage);
verify(automationCompositionProvider)
- .updateAutomationCompositionElement(any(AutomationCompositionElement.class), any());
+ .updateAutomationCompositionElement(any(AutomationCompositionElement.class));
}
@Test
automationComposition.setCompositionId(compositionId);
var automationCompositionProvider = mock(AutomationCompositionProvider.class);
when(automationCompositionProvider.getAcInstancesInTransition()).thenReturn(List.of(automationComposition));
+ when(automationCompositionProvider.updateAcState(any())).thenReturn(automationComposition);
var automationCompositionDeployPublisher = mock(AutomationCompositionDeployPublisher.class);
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
mock(ParticipantSyncPublisher.class), acRuntimeParameterGroup);
supervisionScanner.run();
- verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
+ verify(automationCompositionProvider).updateAcState(any(AutomationComposition.class));
}
@Test
var automationCompositionProvider = mock(AutomationCompositionProvider.class);
when(automationCompositionProvider.getAcInstancesInTransition()).thenReturn(List.of(automationComposition));
-
+ when(automationCompositionProvider.updateAcState(any())).thenReturn(automationComposition);
var automationCompositionDeployPublisher = mock(AutomationCompositionDeployPublisher.class);
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
entry.getValue().setDeployState(DeployState.DEPLOYED);
}
scannerObj2.run();
- verify(automationCompositionProvider, times(1)).updateAutomationComposition(any(AutomationComposition.class));
+ verify(automationCompositionProvider, times(1)).updateAcState(any(AutomationComposition.class));
assertEquals(StateChangeResult.NO_ERROR, automationComposition.getStateChangeResult());
}
var automationCompositionProvider = mock(AutomationCompositionProvider.class);
when(automationCompositionProvider.getAcInstancesInTransition()).thenReturn(List.of(automationComposition));
+ when(automationCompositionProvider.updateAcState(any())).thenReturn(automationComposition);
var automationCompositionDeployPublisher = mock(AutomationCompositionDeployPublisher.class);
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
automationComposition.getElements().entrySet().iterator().next().getValue()
.setDeployState(DeployState.DEPLOYED);
supervisionScanner.run();
- verify(automationCompositionProvider, times(1)).updateAutomationComposition(any(AutomationComposition.class));
+ verify(automationCompositionProvider, times(1)).updateAcState(any(AutomationComposition.class));
assertEquals(DeployState.DEPLOYED, automationComposition.getDeployState());
assertEquals(compositionTargetId, automationComposition.getCompositionId());