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);
     }
 }