ResolveResourceType() public method

public ResolveResourceType ( string resourceName, string ownerPrefix = null ) : System.Data.Services.Providers.ResourceType
resourceName string
ownerPrefix string
return System.Data.Services.Providers.ResourceType
Example #1
0
        public static DSPResource CreateDSPResource(BsonDocument document, MongoMetadata mongoMetadata, string resourceName, string ownerPrefix = null)
        {
            var resourceType = mongoMetadata.ResolveResourceType(resourceName, ownerPrefix);

            if (resourceType == null)
            {
                throw new ArgumentException(string.Format("Unable to resolve resource type {0}", resourceName), "resourceName");
            }
            var resource = new DSPResource(resourceType);

            foreach (var element in document.Elements)
            {
                var resourceProperty = mongoMetadata.ResolveResourceProperty(resourceType, element);
                if (resourceProperty == null)
                {
                    continue;
                }

                object propertyValue = ConvertBsonValue(element.Value, resourceType, resourceProperty, resourceProperty.Name, mongoMetadata);
                resource.SetValue(resourceProperty.Name, propertyValue);
            }
            AssignNullCollections(resource, resourceType);

            return(resource);
        }
Example #2
0
        public static DSPResource CreateDSPResource(BsonDocument document, MongoMetadata mongoMetadata, string resourceName, string ownerPrefix = null)
        {
            var resourceType = mongoMetadata.ResolveResourceType(resourceName, ownerPrefix);
            if (resourceType == null)
                throw new ArgumentException(string.Format("Unable to resolve resource type {0}", resourceName), "resourceName");
            var resource = new DSPResource(resourceType);

            foreach (var element in document.Elements)
            {
                var resourceProperty = mongoMetadata.ResolveResourceProperty(resourceType, element);
                if (resourceProperty == null)
                    continue;

                object propertyValue = ConvertBsonValue(element.Value, resourceType, resourceProperty, resourceProperty.Name, mongoMetadata);
                resource.SetValue(resourceProperty.Name, propertyValue);
            }
            AssignNullCollections(resource, resourceType);

            return resource;
        }
Example #3
0
        public static DSPResource CreateDSPResource(BsonDocument document, MongoMetadata mongoMetadata, string resourceName, string ownerPrefix = null)
        {
            var resourceType = mongoMetadata.ResolveResourceType(resourceName, ownerPrefix);
            if (resourceType == null)
                throw new ArgumentException(string.Format("Unable to resolve resource type {0}", resourceName), "resourceName");
            var resource = new DSPResource(resourceType);

            foreach (var element in document.Elements)
            {
                var resourceProperty = mongoMetadata.ResolveResourceProperty(resourceType, element);
                if (resourceProperty == null)
                    continue;

                string propertyName = null;
                object propertyValue = null;

                if (MongoMetadata.IsObjectId(element))
                {
                    propertyName = MongoMetadata.MappedObjectIdName;
                    propertyValue = element.Value.RawValue.ToString();
                }
                else if (element.Value.GetType() == typeof(BsonDocument))
                {
                    propertyName = element.Name;
                    propertyValue = CreateDSPResource(element.Value.AsBsonDocument, mongoMetadata, element.Name,
                        MongoMetadata.GetComplexTypePrefix(resourceType.Name));
                }
                else if (element.Value.GetType() == typeof(BsonArray))
                {
                    var bsonArray = element.Value.AsBsonArray;
                    if (bsonArray != null && bsonArray.Count > 0)
                    {
                        propertyName = element.Name;
                        int nonNullItemCount = 0;
                        for (int index = 0; index < bsonArray.Count; index++)
                        {
                            if (bsonArray[index] != BsonNull.Value)
                                ++nonNullItemCount;
                        }
                        var valueArray = new DSPResource[nonNullItemCount];
                        int valueIndex = 0;
                        for (int index = 0; index < bsonArray.Count; index++)
                        {
                            if (bsonArray[index] != BsonNull.Value)
                            {
                                valueArray[valueIndex++] = CreateDSPResource(bsonArray[index].AsBsonDocument, mongoMetadata, element.Name,
                                    MongoMetadata.GetCollectionTypePrefix(resourceType.Name));
                            }
                        }
                        propertyValue = valueArray;
                    }
                }
                else
                {
                    propertyName = element.Name;
                    if (element.Value.RawValue != null)
                    {
                        switch (element.Value.BsonType)
                        {
                            case BsonType.DateTime:
                                propertyValue = UnixEpoch + TimeSpan.FromMilliseconds(element.Value.AsBsonDateTime.MillisecondsSinceEpoch);
                                break;
                            default:
                                propertyValue = element.Value.RawValue;
                                break;
                        }
                    }
                    else
                    {
                        switch (element.Value.BsonType)
                        {
                            case BsonType.Binary:
                                propertyValue = element.Value.AsBsonBinaryData.Bytes;
                                break;
                            default:
                                propertyValue = element.Value.RawValue;
                                break;
                        }
                    }
                }

                if (propertyValue != null && element.Value.GetType() != typeof(BsonArray))
                {
                    propertyValue = Convert.ChangeType(propertyValue, resourceProperty.ResourceType.InstanceType);
                }
                resource.SetValue(propertyName, propertyValue);
            }

            return resource;
        }