public async Task <TreeNode> AddMigrationTargetToTargetTree(IMigrationTarget parentNode) { if (parentNode == null) { throw new ArgumentNullException("Migration Target cannot be null."); } TreeNode targetResourceGroupNode = SeekResourceGroupTreeNode(); if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualNetwork)) { Azure.MigrationTarget.VirtualNetwork targetVirtualNetwork = (Azure.MigrationTarget.VirtualNetwork)parentNode; TreeNode virtualNetworkNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetVirtualNetwork.SourceName, targetVirtualNetwork.ToString(), targetVirtualNetwork, true); foreach (Azure.MigrationTarget.Subnet targetSubnet in targetVirtualNetwork.TargetSubnets) { TreeNode subnetNode = SeekARMChildTreeNode(virtualNetworkNode.Nodes, targetVirtualNetwork.ToString(), targetSubnet.ToString(), targetSubnet, true); } targetResourceGroupNode.ExpandAll(); return(virtualNetworkNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.StorageAccount)) { Azure.MigrationTarget.StorageAccount targetStorageAccount = (Azure.MigrationTarget.StorageAccount)parentNode; TreeNode storageAccountNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetStorageAccount.SourceName, targetStorageAccount.ToString(), targetStorageAccount, true); targetResourceGroupNode.ExpandAll(); return(storageAccountNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.NetworkSecurityGroup)) { Azure.MigrationTarget.NetworkSecurityGroup targetNetworkSecurityGroup = (Azure.MigrationTarget.NetworkSecurityGroup)parentNode; TreeNode networkSecurityGroupNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetNetworkSecurityGroup.SourceName, targetNetworkSecurityGroup.ToString(), targetNetworkSecurityGroup, true); targetResourceGroupNode.ExpandAll(); return(networkSecurityGroupNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.LoadBalancer)) { Azure.MigrationTarget.LoadBalancer targetLoadBalancer = (Azure.MigrationTarget.LoadBalancer)parentNode; TreeNode targetLoadBalancerNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetLoadBalancer.SourceName, targetLoadBalancer.ToString(), targetLoadBalancer, true); targetResourceGroupNode.ExpandAll(); return(targetLoadBalancerNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.PublicIp)) { Azure.MigrationTarget.PublicIp targetPublicIp = (Azure.MigrationTarget.PublicIp)parentNode; TreeNode targetPublicIpNode = SeekARMChildTreeNode(targetResourceGroupNode.Nodes, targetPublicIp.SourceName, targetPublicIp.ToString(), targetPublicIp, true); targetResourceGroupNode.ExpandAll(); return(targetPublicIpNode); } else if (parentNode.GetType() == typeof(Azure.MigrationTarget.VirtualMachine)) { Azure.MigrationTarget.VirtualMachine targetVirtualMachine = (Azure.MigrationTarget.VirtualMachine)parentNode; TreeNode virtualMachineParentNode = targetResourceGroupNode; TreeNode targetAvailabilitySetNode = null; // https://docs.microsoft.com/en-us/azure/virtual-machines/windows/manage-availability if (targetVirtualMachine.TargetAvailabilitySet != null) { targetAvailabilitySetNode = GetTargetAvailabilitySetNode(targetResourceGroupNode, targetVirtualMachine.TargetAvailabilitySet); virtualMachineParentNode = targetAvailabilitySetNode; } TreeNode virtualMachineNode = SeekARMChildTreeNode(virtualMachineParentNode.Nodes, targetVirtualMachine.SourceName, targetVirtualMachine.ToString(), targetVirtualMachine, true); foreach (Azure.MigrationTarget.Disk targetDisk in targetVirtualMachine.DataDisks) { TreeNode dataDiskNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, targetDisk.ToString(), targetDisk.ToString(), targetDisk, true); } foreach (Azure.MigrationTarget.NetworkInterface targetNetworkInterface in targetVirtualMachine.NetworkInterfaces) { TreeNode networkInterfaceNode = SeekARMChildTreeNode(virtualMachineNode.Nodes, targetNetworkInterface.ToString(), targetNetworkInterface.ToString(), targetNetworkInterface, true); } targetResourceGroupNode.ExpandAll(); return(virtualMachineNode); } else { throw new Exception("Unhandled Node Type in AddMigrationTargetToTargetTree: " + parentNode.GetType()); } }