private void RestoreConnection(UnitPortPreservation sourcePreservation, UnitPortPreservation destinationPreservation) { InvalidOutput newInvalidSource; InvalidInput newInvalidDestination; var source = sourcePreservation.GetOrCreateOutput(out newInvalidSource); var destination = destinationPreservation.GetOrCreateInput(out newInvalidDestination); if (source.CanValidlyConnectTo(destination)) { source.ValidlyConnectTo(destination); } else if (source.CanInvalidlyConnectTo(destination)) { source.InvalidlyConnectTo(destination); } else { // In this case, we created invalid ports to attempt a connection, // but even that failed (due to, for example, a cross-graph restoration). // Therefore, we need to delete the invalid ports we created. if (newInvalidSource != null) { sourcePreservation.unit.invalidOutputs.Remove(newInvalidSource); } if (newInvalidDestination != null) { destinationPreservation.unit.invalidInputs.Remove(newInvalidDestination); } } }
public void RestoreTo(IUnit unit) { if (disposed) { throw new ObjectDisposedException(ToString()); } // Restore inline values if possible foreach (var previousDefaultValue in defaultValues) { if (unit.defaultValues.ContainsKey(previousDefaultValue.Key) && unit.valueInputs.Contains(previousDefaultValue.Key) && unit.valueInputs[previousDefaultValue.Key].type.IsAssignableFrom(previousDefaultValue.Value)) { unit.defaultValues[previousDefaultValue.Key] = previousDefaultValue.Value; } } // Restore connections if possible foreach (var previousInputConnections in inputConnections) { var previousInputPort = new UnitPortPreservation(unit, previousInputConnections.Key); var previousOutputPorts = previousInputConnections.Value; foreach (var previousOutputPort in previousOutputPorts) { RestoreConnection(previousOutputPort, previousInputPort); } } foreach (var previousOutputConnections in outputConnections) { var previousOutputPort = new UnitPortPreservation(unit, previousOutputConnections.Key); var previousInputPorts = previousOutputConnections.Value; foreach (var previousInputPort in previousInputPorts) { RestoreConnection(previousOutputPort, previousInputPort); } } GenericPool <UnitPreservation> .Free(this); }