- final FlowRegistryKey origFlowRegistryKey = FlowRegistryKeyFactory.create(deviceContext.getDeviceInfo().getVersion(), original);
- final FlowRegistryKey updatedFlowRegistryKey = FlowRegistryKeyFactory.create(deviceContext.getDeviceInfo().getVersion(), updated);
- final FlowDescriptor origFlowDescriptor = deviceFlowRegistry.retrieveIdForFlow(origFlowRegistryKey);
-
- final boolean isUpdate = Objects.nonNull(origFlowDescriptor);
- final FlowId fLowId = Objects.nonNull(input.getFlowRef())
- ? input.getFlowRef().getValue().firstKeyOf(Flow.class).getId()
- : isUpdate ? origFlowDescriptor.getFlowId() : deviceFlowRegistry.storeIfNecessary(updatedFlowRegistryKey);
- final FlowDescriptor updatedFlowDescriptor = FlowDescriptorFactory.create(updated.getTableId(), fLowId);
- if (isUpdate) {
- deviceFlowRegistry.removeDescriptor(origFlowRegistryKey);
- deviceFlowRegistry.store(updatedFlowRegistryKey, updatedFlowDescriptor);
+ final FlowRegistryKey origFlowRegistryKey =
+ FlowRegistryKeyFactory.create(deviceContext.getDeviceInfo().getVersion(), original);
+ final FlowRegistryKey updatedFlowRegistryKey =
+ FlowRegistryKeyFactory.create(deviceContext.getDeviceInfo().getVersion(), updated);
+ final FlowDescriptor origFlowDescriptor = deviceFlowRegistry.retrieveDescriptor(origFlowRegistryKey);
+
+ final boolean isUpdate = origFlowDescriptor != null;
+ final FlowDescriptor updatedFlowDescriptor;
+ final FlowRef flowRef = input.getFlowRef();
+ if (flowRef != null) {
+ final Uint8 tableId = updated.getTableId();
+ final FlowId flowId = flowRef.getValue().firstKeyOf(Flow.class).getId();
+ // FIXME: this does not look right, we probably want better integration
+ deviceFlowRegistry.appendHistoryFlow(flowId, tableId, FlowGroupStatus.MODIFIED);
+
+ updatedFlowDescriptor = FlowDescriptorFactory.create(tableId, flowId);
+ } else if (isUpdate) {
+ updatedFlowDescriptor = origFlowDescriptor;
+ } else {
+ deviceFlowRegistry.store(updatedFlowRegistryKey);
+ updatedFlowDescriptor = deviceFlowRegistry.retrieveDescriptor(updatedFlowRegistryKey);