...
Java code backward compatibility
Example of refactoring of the interface "AutomationCompositionElementListener " in New Delhi release.
...
Code Block | ||||
---|---|---|---|---|
| ||||
/** * Wrapper of AutomationCompositionElementListener. * Valid since 7.1.1 release. */ public abstract class AcElementListenerV1 implements AutomationCompositionElementListener { protected final ParticipantIntermediaryApi intermediaryApi; protected AcElementListenerV1(ParticipantIntermediaryApi intermediaryApi) { this.intermediaryApi = intermediaryApi; } @Override public void deploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElement.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setToscaServiceTemplateFragment(instanceElement.toscaServiceTemplateFragment()); element.setProperties(instanceElement.inProperties()); Map<String, Object> properties = new HashMap<>(instanceElement.inProperties()); properties.putAll(compositionElement.inProperties()); deploy(instanceElement.instanceId(), element, properties); } public abstract void deploy(UUID instanceId, AcElementDeploy element, Map<String, Object> properties) throws PfModelException; @Override public void undeploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { undeploy(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void undeploy(UUID instanceId, UUID elementId) throws PfModelException; @Override public void lock(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { lock(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void lock(UUID instanceId, UUID elementId) throws PfModelException; @Override public void unlock(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { unlock(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void unlock(UUID instanceId, UUID elementId) throws PfModelException; @Override public void delete(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { delete(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void delete(UUID instanceId, UUID elementId) throws PfModelException; @Override public void update(CompositionElementDto compositionElement, InstanceElementDto instanceElement, InstanceElementDto instanceElementUpdated) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElementUpdated.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setProperties(instanceElementUpdated.inProperties()); update(instanceElementUpdated.instanceId(), element, element.getProperties()); } public abstract void update(UUID instanceId, AcElementDeploy element, Map<String, Object> properties) throws PfModelException; private List<AutomationCompositionElementDefinition> createAcElementDefinitionList(CompositionDto composition) { List<AutomationCompositionElementDefinition> elementDefinitionList = new ArrayList<>(); for (var entry : composition.inPropertiesMap().entrySet()) { elementDefinitionList.add(createAcElementDefinition(entry.getKey(), entry.getValue(), composition.outPropertiesMap().get(entry.getKey()))); } return elementDefinitionList; } private AutomationCompositionElementDefinition createAcElementDefinition( ToscaConceptIdentifier toscaConceptIdentifier, Map<String, Object> property, Map<String, Object> outProperties) { var acElementDefinition = new AutomationCompositionElementDefinition(); acElementDefinition.setAcElementDefinitionId(toscaConceptIdentifier); var toscaNodeTemplate = new ToscaNodeTemplate(); toscaNodeTemplate.setProperties(property); acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate); acElementDefinition.setOutProperties(outProperties); return acElementDefinition; } @Override public void prime(CompositionDto composition) throws PfModelException { prime(composition.compositionId(), createAcElementDefinitionList(composition)); } public abstract void prime(UUID compositionId, List<AutomationCompositionElementDefinition> elementDefinitionList) throws PfModelException; @Override public void deprime(CompositionDto composition) throws PfModelException { deprime(composition.compositionId()); } public abstract void deprime(UUID compositionId) throws PfModelException; @Override public void handleRestartComposition(CompositionDto composition, AcTypeState state) throws PfModelException { handleRestartComposition(composition.compositionId(), createAcElementDefinitionList(composition), state); } public abstract void handleRestartComposition(UUID compositionId, List<AutomationCompositionElementDefinition> elementDefinitionList, AcTypeState state) throws PfModelException; @Override public void handleRestartInstance(CompositionElementDto compositionElement, InstanceElementDto instanceElement, DeployState deployState, LockState lockState) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElement.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setProperties(instanceElement.inProperties()); Map<String, Object> properties = new HashMap<>(instanceElement.inProperties()); properties.putAll(compositionElement.inProperties()); handleRestartInstance(instanceElement.instanceId(), element, properties, deployState, lockState); } public abstract void handleRestartInstance(UUID instanceId, AcElementDeploy element, Map<String, Object> properties, DeployState deployState, LockState lockState) throws PfModelException; @Override public void migrate(CompositionElementDto compositionElement, CompositionElementDto compositionElementTarget, InstanceElementDto instanceElement, InstanceElementDto instanceElementMigrate) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElement.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setProperties(instanceElement.inProperties()); migrate(instanceElementMigrate.instanceId(), element, compositionElementTarget.compositionId(), element.getProperties()); } public abstract void migrate(UUID instanceId, AcElementDeploy element, UUID compositionTargetId, Map<String, Object> properties) throws PfModelException; @Override public void migratePrecheck(CompositionElementDto compositionElement, CompositionElementDto compositionElementTarget, InstanceElementDto instanceElement, InstanceElementDto instanceElementMigrate) throws PfModelException { intermediaryApi.updateAutomationCompositionElementState(instanceElementMigrate.instanceId(), instanceElementMigrate.elementId(), DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Migrate precheck not supported"); } } |
Note: "migratePrecheck" is just an example and it will be not delivered in Q1.
Into participant-library will be an abstract class for each version that we would be code compatible; after a specific number of versions we can decide to deprecate the oldest abstract class and remove it in new version.
...