示例#1
0
 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");
     }
 }
示例#2
0
		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;
		}
 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;
 }
示例#4
0
 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);
     }
 }
示例#5
0
		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);
			}
		}
示例#6
0
        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));
        }
示例#7
0
        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);
        }
示例#8
0
			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;
				}
			}
示例#9
0
        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);
        }
示例#10
0
		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;
		}
示例#11
0
        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);
        }
示例#12
0
		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));
		}
示例#13
0
		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;
		}
示例#14
0
        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);
        }
示例#15
0
		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;
			}
		}
示例#16
0
		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;
			}
		}
示例#17
0
		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;
			}
		}
示例#18
0
		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);
			}
		}