private AzureSubscription MergeSubscriptionProperties(AzureSubscription subscription1, AzureSubscription subscription2)
{
if (subscription1 == null || subscription2 == null)
{
throw new ArgumentNullException("subscription1");
}
if (subscription1.Id != subscription2.Id)
{
throw new ArgumentException("Subscription Ids do not match.");
}
AzureSubscription mergedSubscription = new AzureSubscription
{
Id = subscription1.Id,
Name = subscription1.Name,
Environment = subscription1.Environment,
State = (subscription1.State != null &&
subscription1.State.Equals(subscription2.State, StringComparison.OrdinalIgnoreCase)) ?
subscription1.State : null,
Account = subscription1.Account ?? subscription2.Account
};
// Merge all properties
foreach (AzureSubscription.Property property in Enum.GetValues(typeof(AzureSubscription.Property)))
{
string propertyValue = subscription1.GetProperty(property) ?? subscription2.GetProperty(property);
if (propertyValue != null)
{
mergedSubscription.Properties[property] = propertyValue;
}
}
// Merge RegisteredResourceProviders
var registeredProviders = subscription1.GetPropertyAsArray(AzureSubscription.Property.RegisteredResourceProviders)
.Union(subscription2.GetPropertyAsArray(AzureSubscription.Property.RegisteredResourceProviders), StringComparer.CurrentCultureIgnoreCase);
mergedSubscription.SetProperty(AzureSubscription.Property.RegisteredResourceProviders, registeredProviders.ToArray());
// Merge Tenants
var tenants = subscription1.GetPropertyAsArray(AzureSubscription.Property.Tenants)
.Union(subscription2.GetPropertyAsArray(AzureSubscription.Property.Tenants), StringComparer.CurrentCultureIgnoreCase);
mergedSubscription.SetProperty(AzureSubscription.Property.Tenants, tenants.ToArray());
return mergedSubscription;
}