Beispiel #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");
     }
 }
Beispiel #2
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);
     }
 }
Beispiel #3
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);
			}
		}
        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);
        }