public static DSResource CreateResourceWithKeyAndReferenceSetCmdlets(ResourceType resourceType, Dictionary <string, object> keyProperties, EntityMetadata entityMetadata) { DSResource dSResource = ResourceTypeExtensions.CreateKeyOnlyResource(resourceType, keyProperties); if (dSResource != null) { PSEntityMetadata pSEntityMetadatum = entityMetadata as PSEntityMetadata; ReadOnlyCollection <ResourceProperty> properties = resourceType.Properties; foreach (ResourceProperty resourceProperty in properties.Where <ResourceProperty>((ResourceProperty it) => (it.Kind & ResourcePropertyKind.ResourceSetReference) == ResourcePropertyKind.ResourceSetReference)) { PSEntityMetadata.ReferenceSetCmdlets referenceSetCmdlet = null; if (!pSEntityMetadatum.CmdletsForReferenceSets.TryGetValue(resourceProperty.Name, out referenceSetCmdlet) || !referenceSetCmdlet.Cmdlets.ContainsKey(CommandType.GetReference)) { continue; } if (referenceSetCmdlet.GetRefHidden) { dSResource.SetValue(resourceProperty.Name, null); } else { PSReferencedResourceSet pSReferencedResourceSet = new PSReferencedResourceSet(resourceProperty, resourceType); dSResource.SetValue(resourceProperty.Name, pSReferencedResourceSet); } } return(dSResource); } else { return(null); } }
private static void GetAllDependencies(ResourceType resourceType, HashSet <ResourceType> dependencies) { foreach (ResourceProperty property in resourceType.Properties) { ResourceType itemType = null; if (property.ResourceType.ResourceTypeKind != ResourceTypeKind.ComplexType) { if (property.ResourceType.ResourceTypeKind == ResourceTypeKind.Collection) { CollectionResourceType collectionResourceType = property.ResourceType as CollectionResourceType; if (collectionResourceType.ItemType.ResourceTypeKind != ResourceTypeKind.Primitive) { itemType = collectionResourceType.ItemType; } } } else { itemType = property.ResourceType; } if (itemType == null || dependencies.Any <ResourceType>((ResourceType item) => item.FullName == itemType.FullName)) { continue; } dependencies.Add(itemType); ResourceTypeExtensions.GetAllDependencies(itemType, dependencies); } }
public static HashSet <ResourceType> GetAllDependencies(this ResourceType resourceType) { HashSet <ResourceType> resourceTypes = new HashSet <ResourceType>(); ResourceTypeExtensions.GetAllDependencies(resourceType, resourceTypes); return(resourceTypes); }
public static HashSet <ResourceType> GetFamily(this ResourceType resourceType) { ResourceType topmostAncestor = ResourceTypeExtensions.GetTopmostAncestor(resourceType); HashSet <ResourceType> resourceTypes = new HashSet <ResourceType>(); ResourceTypeExtensions.GetDescendants(topmostAncestor, resourceTypes); return(resourceTypes); }
private static void GetDescendants(ResourceType resourceType, HashSet <ResourceType> familyResources) { familyResources.Add(resourceType); foreach (ResourceType derivedType in resourceType.GetDerivedTypes()) { Func <ResourceType, bool> func = null; HashSet <ResourceType> resourceTypes = familyResources; if (func == null) { func = (ResourceType item) => item.FullName == derivedType.FullName; } if (resourceTypes.Any <ResourceType>(func)) { continue; } ResourceTypeExtensions.GetDescendants(derivedType, familyResources); } }