public ReferenceTypeSerializer(ResourceType referringResourceType, ResourceProperty resourceProperty) : base(resourceProperty.ResourceType) { if (resourceProperty.ResourceType.ResourceTypeKind == ResourceTypeKind.EntityType) { object[] name = new object[1]; name[0] = resourceProperty.Name; referringResourceType.ThrowIfNull("referringResourceType", new ParameterExtensions.MessageLoader(SerializerBase.GetReferringResourceTypeCannotNullMessage), name); DataContext currentContext = DataServiceController.Current.GetCurrentContext(); if (currentContext != null) { PSEntityMetadata entityMetadata = currentContext.UserSchema.GetEntityMetadata(referringResourceType) as PSEntityMetadata; PSEntityMetadata.ReferenceSetCmdlets referenceSetCmdlet = null; if (!entityMetadata.CmdletsForReferenceSets.TryGetValue(resourceProperty.Name, out referenceSetCmdlet)) { this.referencePropertyType = PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType.Instance; } else { this.referencePropertyType = referenceSetCmdlet.PropertyType; return; } } return; } else { throw new ArgumentException("resourceType"); } }
public EntityTypeSerializer(ResourceType resourceType, bool serializeKeyOnly = false) : base(resourceType) { object[] resourceTypeKind = new object[2]; resourceTypeKind[0] = resourceType.ResourceTypeKind; resourceTypeKind[1] = ResourceTypeKind.EntityType; ExceptionHelpers.ThrowArgumentExceptionIf("resourceType", resourceType.ResourceTypeKind != ResourceTypeKind.EntityType, new ExceptionHelpers.MessageLoader(SerializerBase.GetInvalidArgMessage), resourceTypeKind); this.serializeKeyOnly = serializeKeyOnly; this.TestHookEntityMetadata = null; }
private void AddEntitiesToSchema(Microsoft.Management.Odata.Schema.Schema logicalSchema, Microsoft.Management.Odata.Schema.Schema userSchema, List <PSSchemaBuilder.EntityDataForSchemaBuilding> entityDataCollection, Dictionary <string, CommandInfo> sessionCmdlets) { foreach (PSSchemaBuilder.EntityDataForSchemaBuilding referenceSetCommand in entityDataCollection) { if (!referenceSetCommand.IncludeInSchema) { continue; } userSchema.AddEntity(referenceSetCommand.EntityName, referenceSetCommand.IncludeEntitySet, logicalSchema); PSEntityMetadata pSEntityMetadatum = new PSEntityMetadata(); PSEntityMetadata item = (PSEntityMetadata)logicalSchema.EntityMetadataDictionary[referenceSetCommand.EntityName]; foreach (CommandType command in referenceSetCommand.Commands) { PSCmdletInfo pSCmdletInfo = item.Cmdlets[command]; pSEntityMetadatum.Cmdlets.Add(command, PSSchemaBuilder.ConstructMetadata(pSCmdletInfo, sessionCmdlets)); } Dictionary <string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> .Enumerator enumerator = referenceSetCommand.ReferenceSetCommands.GetEnumerator(); try { while (enumerator.MoveNext()) { KeyValuePair <string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> keyValuePair = enumerator.Current; PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo = null; PSReferenceSetCmdletInfo item1 = null; PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo1 = null; if (keyValuePair.Value.IncludeAdd) { pSReferenceSetCmdletInfo = item.CmdletsForReferenceSets[keyValuePair.Key].Cmdlets[CommandType.AddReference]; } if (keyValuePair.Value.IncludeRemove) { item1 = item.CmdletsForReferenceSets[keyValuePair.Key].Cmdlets[CommandType.RemoveReference]; } if (keyValuePair.Value.IncludeGet) { pSReferenceSetCmdletInfo1 = item.CmdletsForReferenceSets[keyValuePair.Key].Cmdlets[CommandType.GetReference]; } PSEntityMetadata.ReferenceSetCmdlets referenceSetCmdlet = new PSEntityMetadata.ReferenceSetCmdlets(item.CmdletsForReferenceSets[keyValuePair.Key].PropertyType, pSReferenceSetCmdletInfo, item1, pSReferenceSetCmdletInfo1, keyValuePair.Value.GetHidden); pSEntityMetadatum.CmdletsForReferenceSets[keyValuePair.Key] = referenceSetCmdlet; } } finally { enumerator.Dispose(); } userSchema.EntityMetadataDictionary.Add(referenceSetCommand.EntityName, pSEntityMetadatum); } }
private void AddEntitiesToSchema(Microsoft.Management.Odata.Schema.Schema logicalSchema, Microsoft.Management.Odata.Schema.Schema userSchema, List<PSSchemaBuilder.EntityDataForSchemaBuilding> entityDataCollection, Dictionary<string, CommandInfo> sessionCmdlets) { foreach (PSSchemaBuilder.EntityDataForSchemaBuilding referenceSetCommand in entityDataCollection) { if (!referenceSetCommand.IncludeInSchema) { continue; } userSchema.AddEntity(referenceSetCommand.EntityName, referenceSetCommand.IncludeEntitySet, logicalSchema); PSEntityMetadata pSEntityMetadatum = new PSEntityMetadata(); PSEntityMetadata item = (PSEntityMetadata)logicalSchema.EntityMetadataDictionary[referenceSetCommand.EntityName]; foreach (CommandType command in referenceSetCommand.Commands) { PSCmdletInfo pSCmdletInfo = item.Cmdlets[command]; pSEntityMetadatum.Cmdlets.Add(command, PSSchemaBuilder.ConstructMetadata(pSCmdletInfo, sessionCmdlets)); } Dictionary<string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData>.Enumerator enumerator = referenceSetCommand.ReferenceSetCommands.GetEnumerator(); try { while (enumerator.MoveNext()) { KeyValuePair<string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> keyValuePair = enumerator.Current; PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo = null; PSReferenceSetCmdletInfo item1 = null; PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo1 = null; if (keyValuePair.Value.IncludeAdd) { pSReferenceSetCmdletInfo = item.CmdletsForReferenceSets[keyValuePair.Key].Cmdlets[CommandType.AddReference]; } if (keyValuePair.Value.IncludeRemove) { item1 = item.CmdletsForReferenceSets[keyValuePair.Key].Cmdlets[CommandType.RemoveReference]; } if (keyValuePair.Value.IncludeGet) { pSReferenceSetCmdletInfo1 = item.CmdletsForReferenceSets[keyValuePair.Key].Cmdlets[CommandType.GetReference]; } PSEntityMetadata.ReferenceSetCmdlets referenceSetCmdlet = new PSEntityMetadata.ReferenceSetCmdlets(item.CmdletsForReferenceSets[keyValuePair.Key].PropertyType, pSReferenceSetCmdletInfo, item1, pSReferenceSetCmdletInfo1, keyValuePair.Value.GetHidden); pSEntityMetadatum.CmdletsForReferenceSets[keyValuePair.Key] = referenceSetCmdlet; } } finally { enumerator.Dispose(); } userSchema.EntityMetadataDictionary.Add(referenceSetCommand.EntityName, pSEntityMetadatum); } }
public ICommand GetCommand(CommandType commandType, UserContext userContext, ResourceType entityType, EntityMetadata entityMetadata, string membershipId) { Envelope <PSRunspace, UserContext> envelope = this.runspaceStore.Borrow(userContext, membershipId); PSEntityMetadata pSEntityMetadatum = entityMetadata as PSEntityMetadata; object[] assemblyQualifiedName = new object[3]; assemblyQualifiedName[0] = "entityMetadata"; assemblyQualifiedName[1] = entityMetadata.GetType().AssemblyQualifiedName; assemblyQualifiedName[2] = typeof(PSEntityMetadata).AssemblyQualifiedName; ExceptionHelpers.ThrowArgumentExceptionIf("entityMetadata", pSEntityMetadatum == null, Resources.InvalidArgClrType, assemblyQualifiedName); object[] name = new object[2]; name[0] = entityType.Name; name[1] = commandType.ToString(); ExceptionHelpers.ThrowArgumentExceptionIf("entityMetadata", !pSEntityMetadatum.Cmdlets.ContainsKey(commandType), Resources.EntityDoesNotHaveCommand, name); return(new PSCommand(envelope, entityType, pSEntityMetadatum.Cmdlets[commandType], commandType)); }
private List <PSSchemaBuilder.EntityDataForSchemaBuilding> CreateEntityDataForSchemaBuilding(Microsoft.Management.Odata.Schema.Schema logicalSchema, HashSet <string> initialSessionCommands) { IEnumerable <PSSchemaBuilder.EntityDataForSchemaBuilding> entityDataForSchemaBuildings = null; List <PSSchemaBuilder.EntityDataForSchemaBuilding> entityDataForSchemaBuildings1 = new List <PSSchemaBuilder.EntityDataForSchemaBuilding>(); foreach (string key in logicalSchema.EntityMetadataDictionary.Keys) { if (logicalSchema.EntityMetadataDictionary[key].MgmtSystem != ManagementSystemType.PowerShell) { continue; } PSSchemaBuilder.EntityDataForSchemaBuilding entityDataForSchemaBuilding = new PSSchemaBuilder.EntityDataForSchemaBuilding(key); PSEntityMetadata item = (PSEntityMetadata)logicalSchema.EntityMetadataDictionary[key]; entityDataForSchemaBuilding.Commands = this.FindSupportedCommands(item, initialSessionCommands); entityDataForSchemaBuilding.ReferenceSetCommands = this.FindSupportedReferenceCommands(item, initialSessionCommands); entityDataForSchemaBuildings1.Add(entityDataForSchemaBuilding); } foreach (PSSchemaBuilder.EntityDataForSchemaBuilding entityDataForSchemaBuilding1 in entityDataForSchemaBuildings1) { if (!entityDataForSchemaBuilding1.Commands.Contains(CommandType.Read)) { continue; } entityDataForSchemaBuilding1.IncludeEntitySet = true; entityDataForSchemaBuilding1.IncludeInSchema = true; new HashSet <ResourceType>(); ResourceType resourceType = logicalSchema.ResourceTypes[entityDataForSchemaBuilding1.EntityName]; HashSet <ResourceType> family = resourceType.GetFamily(); List <PSSchemaBuilder.EntityDataForSchemaBuilding> entityDataForSchemaBuildings2 = entityDataForSchemaBuildings1; HashSet <ResourceType> resourceTypes = family; Func <PSSchemaBuilder.EntityDataForSchemaBuilding, string> func = (PSSchemaBuilder.EntityDataForSchemaBuilding entityStat) => entityStat.EntityName; Func <ResourceType, string> func1 = (ResourceType res) => res.FullName; entityDataForSchemaBuildings = entityDataForSchemaBuildings2.Join <PSSchemaBuilder.EntityDataForSchemaBuilding, ResourceType, string, PSSchemaBuilder.EntityDataForSchemaBuilding>(resourceTypes, func, func1, (PSSchemaBuilder.EntityDataForSchemaBuilding entityStat, ResourceType res) => entityStat); IEnumerator <PSSchemaBuilder.EntityDataForSchemaBuilding> enumerator = entityDataForSchemaBuildings.GetEnumerator(); using (enumerator) { while (enumerator.MoveNext()) { PSSchemaBuilder.EntityDataForSchemaBuilding entityDataForSchemaBuilding2 = entityDataForSchemaBuilding1; entityDataForSchemaBuilding2.IncludeInSchema = true; } } } return(entityDataForSchemaBuildings1); }
public ReferenceSetCmdlets(PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType propertyType, PSReferenceSetCmdletInfo addRefCmdlet, PSReferenceSetCmdletInfo removeRefCmdlet, PSReferenceSetCmdletInfo getRefCmdlet = null, bool getRefHidden = false) { this.Cmdlets = new Dictionary<CommandType, PSReferenceSetCmdletInfo>(); this.PropertyType = propertyType; if (addRefCmdlet != null) { this.Cmdlets.Add(CommandType.AddReference, addRefCmdlet); } if (removeRefCmdlet != null) { this.Cmdlets.Add(CommandType.RemoveReference, removeRefCmdlet); } if (getRefCmdlet != null) { this.Cmdlets.Add(CommandType.GetReference, getRefCmdlet); this.GetRefHidden = getRefHidden; } }
internal List <CommandType> FindSupportedCommands(PSEntityMetadata entityMetadata, HashSet <string> initialSessionCommands) { List <CommandType> commandTypes = new List <CommandType>(); foreach (CommandType key in entityMetadata.Cmdlets.Keys) { Func <string, bool> func = null; HashSet <string> strs = initialSessionCommands; if (func == null) { func = (string item) => string.Equals(item, entityMetadata.Cmdlets[key].CmdletName, StringComparison.OrdinalIgnoreCase); } string str = strs.FirstOrDefault <string>(func); if (str == null) { continue; } commandTypes.Add(key); } return(commandTypes); }
internal List<CommandType> FindSupportedCommands(PSEntityMetadata entityMetadata, HashSet<string> initialSessionCommands) { List<CommandType> commandTypes = new List<CommandType>(); foreach (CommandType key in entityMetadata.Cmdlets.Keys) { Func<string, bool> func = null; HashSet<string> strs = initialSessionCommands; if (func == null) { func = (string item) => string.Equals(item, entityMetadata.Cmdlets[key].CmdletName, StringComparison.OrdinalIgnoreCase); } string str = strs.FirstOrDefault<string>(func); if (str == null) { continue; } commandTypes.Add(key); } return commandTypes; }
internal Dictionary <string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> FindSupportedReferenceCommands(PSEntityMetadata entityMetadata, HashSet <string> initialSessionCommands) { string str; Dictionary <string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> strs = new Dictionary <string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData>(); foreach (KeyValuePair <string, PSEntityMetadata.ReferenceSetCmdlets> cmdletsForReferenceSet in entityMetadata.CmdletsForReferenceSets) { Func <string, bool> func = null; Func <string, bool> func1 = null; Func <string, bool> func2 = null; PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData referencePropertyDatum = new PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData(); PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo = null; if (cmdletsForReferenceSet.Value.Cmdlets.TryGetValue(CommandType.AddReference, out pSReferenceSetCmdletInfo)) { HashSet <string> strs1 = initialSessionCommands; if (func == null) { func = (string item) => string.Equals(item, pSReferenceSetCmdletInfo.CmdletName, StringComparison.OrdinalIgnoreCase); } str = strs1.FirstOrDefault <string>(func); referencePropertyDatum.IncludeAdd = str != null; } if (cmdletsForReferenceSet.Value.Cmdlets.TryGetValue(CommandType.RemoveReference, out pSReferenceSetCmdletInfo)) { HashSet <string> strs2 = initialSessionCommands; if (func1 == null) { func1 = (string item) => string.Equals(item, pSReferenceSetCmdletInfo.CmdletName, StringComparison.OrdinalIgnoreCase); } str = strs2.FirstOrDefault <string>(func1); referencePropertyDatum.IncludeRemove = str != null; } if (cmdletsForReferenceSet.Value.Cmdlets.TryGetValue(CommandType.GetReference, out pSReferenceSetCmdletInfo)) { HashSet <string> strs3 = initialSessionCommands; if (func2 == null) { func2 = (string item) => string.Equals(item, pSReferenceSetCmdletInfo.CmdletName, StringComparison.OrdinalIgnoreCase); } str = strs3.FirstOrDefault <string>(func2); referencePropertyDatum.IncludeGet = true; referencePropertyDatum.GetHidden = str == null; } strs.Add(cmdletsForReferenceSet.Key, referencePropertyDatum); } return(strs); }
public void AddCmdletsForReference(string property, PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType propertyType, PSReferenceSetCmdletInfo addRefCmdlet, PSReferenceSetCmdletInfo removeRefCmdlet, PSReferenceSetCmdletInfo getRefCmdlet = null) { this.CmdletsForReferenceSets.Add(property, new PSEntityMetadata.ReferenceSetCmdlets(propertyType, addRefCmdlet, removeRefCmdlet, getRefCmdlet, false)); }
internal Dictionary<string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> FindSupportedReferenceCommands(PSEntityMetadata entityMetadata, HashSet<string> initialSessionCommands) { string str; Dictionary<string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData> strs = new Dictionary<string, PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData>(); foreach (KeyValuePair<string, PSEntityMetadata.ReferenceSetCmdlets> cmdletsForReferenceSet in entityMetadata.CmdletsForReferenceSets) { Func<string, bool> func = null; Func<string, bool> func1 = null; Func<string, bool> func2 = null; PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData referencePropertyDatum = new PSSchemaBuilder.EntityDataForSchemaBuilding.ReferencePropertyData(); PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo = null; if (cmdletsForReferenceSet.Value.Cmdlets.TryGetValue(CommandType.AddReference, out pSReferenceSetCmdletInfo)) { HashSet<string> strs1 = initialSessionCommands; if (func == null) { func = (string item) => string.Equals(item, pSReferenceSetCmdletInfo.CmdletName, StringComparison.OrdinalIgnoreCase); } str = strs1.FirstOrDefault<string>(func); referencePropertyDatum.IncludeAdd = str != null; } if (cmdletsForReferenceSet.Value.Cmdlets.TryGetValue(CommandType.RemoveReference, out pSReferenceSetCmdletInfo)) { HashSet<string> strs2 = initialSessionCommands; if (func1 == null) { func1 = (string item) => string.Equals(item, pSReferenceSetCmdletInfo.CmdletName, StringComparison.OrdinalIgnoreCase); } str = strs2.FirstOrDefault<string>(func1); referencePropertyDatum.IncludeRemove = str != null; } if (cmdletsForReferenceSet.Value.Cmdlets.TryGetValue(CommandType.GetReference, out pSReferenceSetCmdletInfo)) { HashSet<string> strs3 = initialSessionCommands; if (func2 == null) { func2 = (string item) => string.Equals(item, pSReferenceSetCmdletInfo.CmdletName, StringComparison.OrdinalIgnoreCase); } str = strs3.FirstOrDefault<string>(func2); referencePropertyDatum.IncludeGet = true; referencePropertyDatum.GetHidden = str == null; } strs.Add(cmdletsForReferenceSet.Key, referencePropertyDatum); } return strs; }
public override object Serialize(object clrObject, int depth) { object value; object[] name = new object[1]; name[0] = base.ResourceType.Name; clrObject.ThrowIfNull("clrObject", new ParameterExtensions.MessageLoader(SerializerBase.GetNullPassedForSerializingEntityMessage), name); ResourceType resourceType = base.ResourceType; if (clrObject as PSObject == null) { resourceType = base.ResourceType.FindResourceType(clrObject.GetType()); } else { PSObject pSObject = clrObject as PSObject; if (pSObject != null && pSObject.BaseObject != null) { resourceType = base.ResourceType.FindResourceType(pSObject.BaseObject.GetType()); } } DSResource dSResource = new DSResource(resourceType, this.serializeKeyOnly); foreach (ResourceProperty property in resourceType.Properties) { if (this.serializeKeyOnly && (property.Kind & ResourcePropertyKind.Key) != ResourcePropertyKind.Key) { continue; } if ((property.Kind & ResourcePropertyKind.ResourceSetReference) == ResourcePropertyKind.ResourceSetReference) { PSEntityMetadata testHookEntityMetadata = this.TestHookEntityMetadata; if (testHookEntityMetadata == null) { DataContext currentContext = DataServiceController.Current.GetCurrentContext(); if (currentContext != null) { testHookEntityMetadata = currentContext.UserSchema.GetEntityMetadata(base.ResourceType) as PSEntityMetadata; } } if (testHookEntityMetadata != null) { PSEntityMetadata.ReferenceSetCmdlets referenceSetCmdlet = null; if (testHookEntityMetadata.CmdletsForReferenceSets.TryGetValue(property.Name, out referenceSetCmdlet) && referenceSetCmdlet.Cmdlets.ContainsKey(CommandType.GetReference)) { if (referenceSetCmdlet.GetRefHidden) { dSResource.SetValue(property.Name, null); continue; } else { PSReferencedResourceSet pSReferencedResourceSet = new PSReferencedResourceSet(property, base.ResourceType); dSResource.SetValue(property.Name, pSReferencedResourceSet); continue; } } } } if (clrObject != null) { value = SerializerBase.GetValue(property, clrObject); } else { value = null; } object obj = value; if (obj == null) { if (!property.ResourceType.IsPrimitive() || property.ResourceType.IsNullable()) { if ((property.Kind & (ResourcePropertyKind.Primitive | ResourcePropertyKind.ResourceReference)) != 0) { Tracer tracer = new Tracer(); tracer.DebugMessage(string.Concat(property.Name, " is null; skipping")); continue; } } else { object[] objArray = new object[1]; objArray[0] = property.Name; throw new PSObjectSerializationFailedException(string.Format(CultureInfo.CurrentCulture, Resources.PropertyNotFoundInPSObject, objArray)); } } dSResource.SetValue(property.Name, SerializerBase.SerializeResourceProperty(obj, base.ResourceType, property, depth)); } return(dSResource); }
private static void PopulateCmdletReferenceSetInfo(ResourceType type, XElement entityXml, PSEntityMetadata entityMetadata) { ResourceType resourceType; XNamespace xNamespace = "http://schemas.microsoft.com/powershell-web-services/2010/09"; XElement xElement = entityXml.Elements(xNamespace + "Associations").FirstOrDefault<XElement>(); if (xElement != null) { foreach (XElement xElement1 in xElement.Elements()) { string value = xElement1.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "Name").Value; ResourceProperty resourceProperty = type.Properties.FirstOrDefault<ResourceProperty>((ResourceProperty it) => string.Equals(it.Name, value, StringComparison.Ordinal)); if (resourceProperty != null) { ReferenceCustomState customState = resourceProperty.CustomState as ReferenceCustomState; if (customState != null) { PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo = null; PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo1 = null; PSReferenceSetCmdletInfo pSReferenceSetCmdletInfo2 = null; PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType referencePropertyType = PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType.Instance; bool flag = false; XElement xElement2 = xElement1.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "PropertyType"); if (xElement2 != null) { referencePropertyType = (PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType)Enum.Parse(typeof(PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType), xElement2.Value.ToString()); flag = true; } if (customState.AssociationType.Ends[0].Type != type) { resourceType = customState.AssociationType.Ends[0].Type; } else { resourceType = customState.AssociationType.Ends[1].Type; } ResourceType resourceType1 = resourceType; if (resourceType1.KeyProperties.Count <= 1 || referencePropertyType != PSEntityMetadata.ReferenceSetCmdlets.ReferencePropertyType.KeyOnly) { xElement2 = xElement1.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "AddReference"); if (xElement2 != null) { pSReferenceSetCmdletInfo1 = SchemaLoader.CreateRefSetCmdlet(resourceType1, type, xElement2); } xElement2 = xElement1.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "RemoveReference"); if (xElement2 != null) { pSReferenceSetCmdletInfo2 = SchemaLoader.CreateRefSetCmdlet(resourceType1, type, xElement2); } xElement2 = xElement1.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "GetReference"); if (xElement2 != null) { if (!flag) { pSReferenceSetCmdletInfo = SchemaLoader.CreateGetRefSetCmdlet(type, xElement2); } else { object[] name = new object[2]; name[0] = value; name[1] = type.Name; string str = string.Format(CultureInfo.CurrentCulture, Resources.ContainsBothPropertyTypeAndGetReference, name); throw new MetadataException(str); } } if (customState.IsSet || pSReferenceSetCmdletInfo1 == null && pSReferenceSetCmdletInfo2 == null && pSReferenceSetCmdletInfo == null) { entityMetadata.AddCmdletsForReference(resourceProperty.Name, referencePropertyType, pSReferenceSetCmdletInfo1, pSReferenceSetCmdletInfo2, pSReferenceSetCmdletInfo); } else { object[] objArray = new object[2]; objArray[0] = type.Name; objArray[1] = value; string str1 = string.Format(CultureInfo.CurrentCulture, Resources.RefSetCmdletsOnNonRefSet, objArray); throw new MetadataException(str1); } } else { object[] name1 = new object[3]; name1[0] = resourceType1.Name; name1[1] = value; name1[2] = type.Name; string str2 = string.Format(CultureInfo.CurrentCulture, Resources.CompoundForeignKeysCannotEmbeddedAsKeys, name1); throw new MetadataException(str2); } } else { object[] objArray1 = new object[2]; objArray1[0] = type.Name; objArray1[1] = value; string str3 = string.Format(CultureInfo.CurrentCulture, Resources.RefSetCmdletsOnNonRefSet, objArray1); throw new MetadataException(str3); } } else { object[] name2 = new object[3]; name2[0] = type.Name; name2[1] = "Associations"; name2[2] = value; string str4 = string.Format(CultureInfo.CurrentCulture, Resources.InvalidFieldInParameterMapping, name2); throw new MetadataException(str4); } } return; } else { return; } }
private static void PopulateCmdletInformation(ResourceType type, Microsoft.Management.Odata.Core.CommandType commandType, XElement entityXml, string xmlNodeName, PSEntityMetadata entityMetadata) { XNamespace xNamespace = "http://schemas.microsoft.com/powershell-web-services/2010/09"; XElement xElement = entityXml.Elements(xNamespace + xmlNodeName).FirstOrDefault<XElement>(); if (xElement != null) { entityMetadata.AddCmdlet(commandType, xElement.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "Cmdlet").Value); SchemaLoader.PopulateCmdletFieldParameterMapping(type, xmlNodeName, entityMetadata.Cmdlets[commandType], xElement.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "FieldParameterMap")); XElement xElement1 = xElement.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "Options"); if (xElement1 != null) { SchemaLoader.PopulateCmdletUrlOptions(type, entityMetadata.Cmdlets[commandType], xElement1); } XElement xElement2 = xElement.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "ImmutableParameters"); if (xElement2 != null) { SchemaLoader.PopulateCmdletMandatoryParameters(type, entityMetadata.Cmdlets[commandType], xElement2); } SchemaLoader.PopulateParameterSets(type, entityMetadata.Cmdlets[commandType], xElement.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "ParameterSets")); return; } else { return; } }
private static void UpdateEntityPropertyMetadata(PSEntityMetadata metadata, ResourceType resourceType) { foreach (ResourceProperty property in resourceType.Properties) { bool flag = false; if (property.Kind != ResourcePropertyKind.ResourceSetReference) { if ((property.Kind & ResourcePropertyKind.Key) != ResourcePropertyKind.Key && metadata.Cmdlets.ContainsKey(Microsoft.Management.Odata.Core.CommandType.Update)) { if (metadata.Cmdlets[Microsoft.Management.Odata.Core.CommandType.Update].FieldParameterMapping.ContainsKey(property.Name)) { flag = true; } if (!flag) { foreach (PSParameterSet parameterSet in metadata.Cmdlets[Microsoft.Management.Odata.Core.CommandType.Update].ParameterSets) { if (!parameterSet.Parameters.ContainsKey(property.Name)) { continue; } flag = true; break; } } } } else { if (metadata.CmdletsForReferenceSets.Count > 0) { flag = true; } } property.GetCustomState().IsUpdatable = flag; } }
private static void PopulateResourceMetadata(Schema schema, XDocument dispatchXml) { XElement uniqueElement = dispatchXml.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "ClassImplementations"); foreach (XElement xElement in uniqueElement.Elements()) { string value = xElement.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "Name").Value; ResourceType resourceType = null; if (schema.ResourceTypes.TryGetValue(SchemaLoader.TransformCimNameToCsdl(value, true), out resourceType)) { XElement xElement1 = xElement.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "ClrType"); if (xElement1 != null) { resourceType.SetClrTypeStr(xElement1.Value); } XElement xElement2 = xElement.TryGetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "RenamedFields"); if (xElement2 != null) { foreach (XElement xElement3 in xElement2.Elements()) { string str = xElement3.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "SchemaProperty").Value; string value1 = xElement3.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "PowerShellProperty").Value; ResourceProperty resourceProperty = resourceType.Properties.FirstOrDefault<ResourceProperty>((ResourceProperty it) => string.Equals(str, it.Name, StringComparison.Ordinal)); if (resourceProperty != null) { resourceProperty.GetCustomState().PsProperty = value1; } else { object[] objArray = new object[2]; objArray[0] = value; objArray[1] = str; throw new MetadataException(ExceptionHelpers.GetExceptionMessage(Resources.InvalidRenamedProperty, objArray)); } } } schema.ResourceTypes.Values.Where<ResourceType>((ResourceType item) => item.BaseType == resourceType).ToList<ResourceType>().ForEach((ResourceType item) => resourceType.AddDerivedType(item)); if (resourceType.ResourceTypeKind != ResourceTypeKind.EntityType) { continue; } PSEntityMetadata pSEntityMetadatum = new PSEntityMetadata(); XElement uniqueElement1 = xElement.GetUniqueElement("http://schemas.microsoft.com/powershell-web-services/2010/09", "CmdletImplementation"); SchemaLoader.PopulateCmdletInformation(resourceType, Microsoft.Management.Odata.Core.CommandType.Read, uniqueElement1, "Query", pSEntityMetadatum); SchemaLoader.PopulateCmdletInformation(resourceType, Microsoft.Management.Odata.Core.CommandType.Create, uniqueElement1, "Create", pSEntityMetadatum); SchemaLoader.PopulateCmdletInformation(resourceType, Microsoft.Management.Odata.Core.CommandType.Update, uniqueElement1, "Update", pSEntityMetadatum); SchemaLoader.PopulateCmdletInformation(resourceType, Microsoft.Management.Odata.Core.CommandType.Delete, uniqueElement1, "Delete", pSEntityMetadatum); SchemaLoader.PopulateCmdletReferenceSetInfo(resourceType, uniqueElement1, pSEntityMetadatum); schema.EntityMetadataDictionary.Add(SchemaLoader.TransformCimNameToCsdl(value, true), pSEntityMetadatum); } else { object[] objArray1 = new object[1]; objArray1[0] = value; throw new MetadataException(ExceptionHelpers.GetExceptionMessage(Resources.MappingClassNotFound, objArray1)); } } foreach (ResourceType resourceType1 in schema.ResourceTypes.Values) { if (resourceType1.ResourceTypeKind != ResourceTypeKind.EntityType) { continue; } if (!schema.EntityMetadataDictionary.ContainsKey(resourceType1.FullName)) { schema.EntityMetadataDictionary.Add(resourceType1.FullName, new PSEntityMetadata()); } if (schema.EntityMetadataDictionary[resourceType1.FullName] as PSEntityMetadata == null) { continue; } SchemaLoader.UpdateEntityPropertyMetadata(schema.EntityMetadataDictionary[resourceType1.FullName] as PSEntityMetadata, resourceType1); } }