Example #1
0
        public static DomAttribute CreateFromClrAttribute(IServiceModel serviceModel, IAttributeInfo attributeInfo, object clrAttribute)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(attributeInfo != null);

            var domAttribute = CreateFromClrAttribute(attributeInfo, clrAttribute);

            var isComplexType = attributeInfo.IsComplexType;

            if (!isComplexType)
            {
                return(domAttribute);
            }

            var isCollection = attributeInfo.IsCollection;

            if (isCollection)
            {
                AddCollectionOfComplexTypeAttributes(serviceModel, attributeInfo, domAttribute);
            }
            else
            {
                AddComplexTypeAttributes(serviceModel, attributeInfo, domAttribute);
            }

            return(domAttribute);
        }
Example #2
0
        // PROTECTED CONSTRUCTORS ///////////////////////////////////////////
        #region Constructors
        protected ResourceIdentifierBuilder(IServiceModel serviceModel, IContainerNode <DomNodeType> domContainerNode, Type clrResourceType, object clrResource)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(domContainerNode != null);

            this.DomContainerNode = domContainerNode;

            if (clrResourceType == null)
            {
                return;
            }

            this.BuildingResourceIdentifier = true;

            var resourceType = serviceModel.GetResourceType(clrResourceType);

            this.ResourceType = resourceType;

            if (clrResource == null)
            {
                return;
            }

            this.CreateAndAddDomReadWriteResourceIdentifierIfNeeded();
            this.DomReadWriteResourceIdentifier.SetDomIdFromClrResource(this.ResourceType, clrResource);
        }
        public static bool TryGetHomeResourceType(this IServiceModel serviceModel, out IResourceType homeResourceType)
        {
            Contract.Requires(serviceModel != null);

            homeResourceType = serviceModel.HomeResourceType;
            return(homeResourceType != null);
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal RelationshipBuilder(TParentBuilder parentBuilder, IServiceModel serviceModel, IContainerNode <DomNodeType> domContainerNode, string rel)
            : base(serviceModel, domContainerNode, rel)
        {
            Contract.Requires(parentBuilder != null);

            this.ParentBuilder = parentBuilder;
        }
Example #5
0
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal RelationshipsCollectionBuilder(TParentBuilder parentBuilder, IServiceModel serviceModel, IReadOnlyCollection <IContainerNode <DomNodeType> > domContainerNodeCollection, IReadOnlyList <TResource> clrResourceCollection)
        {
            Contract.Requires(parentBuilder != null);
            Contract.Requires(serviceModel != null);
            Contract.Requires(domContainerNodeCollection != null);

            var domReadWriteRelationshipsCollectionCount = domContainerNodeCollection.Count;
            var clrResourceCollectionCount = clrResourceCollection.Count;

            if (clrResourceCollectionCount != domReadWriteRelationshipsCollectionCount)
            {
                var detail = ServerErrorStrings
                             .InternalErrorExceptionDetailCollectionCountMismatch
                             .FormatWith("DOM read-write relationships collection", domReadWriteRelationshipsCollectionCount, "CLR resource collection", clrResourceCollectionCount);
                throw new InternalErrorException(detail);
            }

            this.ParentBuilder = parentBuilder;

            this.ServiceModel = serviceModel;

            var resourceType = serviceModel.GetResourceType <TResource>();

            this.ResourceType = resourceType;

            var domReadWriteRelationshipsCollection = domContainerNodeCollection
                                                      .Select(x => x.GetOrAddNode(DomNodeType.Relationships, () => DomReadWriteRelationships.Create()))
                                                      .ToList();

            this.DomReadWriteRelationshipsCollection = domReadWriteRelationshipsCollection;

            this.ClrResourceCollection = clrResourceCollection;
        }
        private void AddResourceLinkage(IServiceModel serviceModel, Type fromClrResourceType, object fromClrResource, string fromApiRel, Type toClrResourceType, IEnumerable <object> toClrResourceCollection)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(String.IsNullOrWhiteSpace(fromApiRel));

            if (fromClrResourceType == null || fromClrResource == null)
            {
                return;
            }

            // Create ResourceLinkageKey from ToManyIncludedResources.
            var fromResourceType          = serviceModel.GetResourceType(fromClrResourceType);
            var fromApiResourceIdentifier = fromResourceType.GetApiResourceIdentifier(fromClrResource);
            var apiResourceLinkageKey     = new ApiResourceLinkageKey(fromApiResourceIdentifier, fromApiRel);

            // Create ResourceLinkage from ToManyIncludedResources.
            var toApiResourceIdentifierCollection = Enumerable.Empty <ResourceIdentifier>()
                                                    .ToList();

            if (toClrResourceType != null && toClrResourceCollection != null)
            {
                var toResourceType = serviceModel.GetResourceType(toClrResourceType);
                toApiResourceIdentifierCollection = toClrResourceCollection.Select(toResourceType.GetApiResourceIdentifier)
                                                    .ToList();
            }

            var apiResourceLinkage = new ApiResourceLinkage(toApiResourceIdentifierCollection);

            // Add ResourceLinkage to this DocumentBuilderContext
            this.AddResourceLinkage(apiResourceLinkageKey, apiResourceLinkage);
        }
        // PRIVATE METHODS //////////////////////////////////////////////////
        #region Methods
        private void AddResourceLinkage(IServiceModel serviceModel, Type fromClrResourceType, object fromClrResource, string fromApiRel, Type toClrResourceType, object toClrResource)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(String.IsNullOrWhiteSpace(fromApiRel));

            if (fromClrResourceType == null || fromClrResource == null)
            {
                return;
            }

            // Create ResourceLinkageKey from ToOneIncludedResource.
            var fromResourceType          = serviceModel.GetResourceType(fromClrResourceType);
            var fromApiResourceIdentifier = fromResourceType.GetApiResourceIdentifier(fromClrResource);
            var apiResourceLinkageKey     = new ApiResourceLinkageKey(fromApiResourceIdentifier, fromApiRel);

            // Create ResourceLinkage from ToOneIncludedResource
            var toApiResourceIdentifier = default(ResourceIdentifier);

            if (toClrResourceType != null && toClrResource != null)
            {
                var toResourceType = serviceModel.GetResourceType(toClrResourceType);
                toApiResourceIdentifier = toResourceType.GetApiResourceIdentifier(toClrResource);
            }

            var apiResourceLinkage = new ApiResourceLinkage(toApiResourceIdentifier);

            // Add ResourceLinkage to this DocumentBuilderContext
            this.AddResourceLinkage(apiResourceLinkageKey, apiResourceLinkage);
        }
Example #8
0
        // PRIVATE METHODS //////////////////////////////////////////////////
        #region Factory Methods
        private static IDocumentContextOptions CreateDocumentContextOptions(IServiceModel apiServiceModel,
                                                                            IHypermediaAssemblerRegistry apiHypermediaAssemblerRegistry,
                                                                            IOptions <ApiHypermediaOptions> apiHypermediaOptionsAccessor)
        {
            Contract.Requires(apiServiceModel != null);
            Contract.Requires(apiHypermediaOptionsAccessor != null);

            var options        = new DocumentContextOptions <DocumentContext>();
            var optionsBuilder = new DocumentContextOptionsBuilder(options);

            optionsBuilder.UseServiceModel(apiServiceModel);
            if (apiHypermediaAssemblerRegistry != null)
            {
                optionsBuilder.UseHypermediaAssemblerRegistry(apiHypermediaAssemblerRegistry);
            }

            var apiHypermediaOptions = apiHypermediaOptionsAccessor.Value;

            var scheme = apiHypermediaOptions.Scheme;
            var host   = apiHypermediaOptions.Host;
            var port   = apiHypermediaOptions.Port;
            var urlBuilderConfiguration = new UrlBuilderConfiguration(scheme, host, port);

            optionsBuilder.UseUrlBuilderConfiguration(urlBuilderConfiguration);

            return(options);
        }
 public HomeController(ISingletonService singletonService, ITransientService transientService, IScopedService scopedService, IServiceModel servicesModel)
 {
     _singletonService = singletonService;
     _transientService = transientService;
     _scopedService    = scopedService;
     _serviceModel     = servicesModel;
 }
        // PUBLIC CONSTRUCTORS //////////////////////////////////////////////
        #region Constructors
        public HypermediaContext(IServiceModel serviceModel, IUrlBuilderConfiguration urlBuilderConfiguration)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(urlBuilderConfiguration != null);

            this.ServiceModel            = serviceModel;
            this.UrlBuilderConfiguration = urlBuilderConfiguration;
        }
Example #11
0
        // PUBLIC METHODS ///////////////////////////////////////////////////
        #region IInfoObject Implementation
        public virtual void Initialize(IServiceModel serviceModel, IResourceType resourceType)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(resourceType != null);

            this.ServiceModel = serviceModel;
            this.ResourceType = resourceType;
        }
        internal PrimaryResourceIdentifierBuilder(IDocumentWriter parentBuilder, IServiceModel serviceModel, DomDocument domDocument, TResource clrResource)
            : base(serviceModel, domDocument.AddData(), clrResource)
        {
            Contract.Requires(parentBuilder != null);

            this.Builder       = this;
            this.ParentBuilder = parentBuilder;
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal ResourcePathContextBuilder(TParentBuilder parentBuilder, IServiceModel serviceModel)
        {
            Contract.Requires(parentBuilder != null);
            Contract.Requires(serviceModel != null);

            this.ParentBuilder = parentBuilder;
            this.ServiceModel  = serviceModel;
        }
Example #14
0
        // PROTECTED CONSTRUCTORS ///////////////////////////////////////////
        #region Constructors
        protected ResourceIdentifierCollectionBuilder(IServiceModel serviceModel, IContainerNode <DomNodeType> domContainerNode)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(domContainerNode != null);

            this.ServiceModel     = serviceModel;
            this.DomContainerNode = domContainerNode;
        }
Example #15
0
        // PUBLIC METHODS ///////////////////////////////////////////////////
        #region IServiceModel Extensions Methods
        public static IContractResolver CreateComplexTypesContractResolver(this IServiceModel serviceModel)
        {
            Contract.Requires(serviceModel != null);

            return(serviceModel.ComplexTypes.Any()
                ? new ComplexTypesContractResolver(serviceModel)
                : null);
        }
Example #16
0
        public static DomDocument Create(IServiceModel serviceModel, params Node <DomNodeType>[] domNodes)
        {
            Contract.Requires(serviceModel != null);

            var domDocument = NodesContainer <DomNodeType> .CreateRoot(() => new DomDocument(serviceModel), domNodes);

            return(domDocument);
        }
 public override IEnumerable <string> DeclareUsings(IServiceModel service)
 {
     return(new[]
     {
         "using NLog;",
         "using System.Diagnostics;"
     });
 }
 public override IEnumerable <string> DeclareUsings(IServiceModel service)
 {
     return(new[]
     {
         "using Intent.Framework;",
         "using Intent.Framework.Core.Context;",
     });
 }
Example #19
0
        // PUBLIC CONSTRUCTORS //////////////////////////////////////////////
        #region Constructors
        public DocumentReader(Document apiDocument, IServiceModel serviceModel)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(apiDocument != null);

            var domDocument = DomDocument.Parse(apiDocument, serviceModel);

            this.DomDocument = domDocument;
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal DocumentBuilder(DomDocument domDocument, IServiceModel serviceModel, IDocumentWriter documentWriter)
        {
            Contract.Requires(documentWriter != null);
            Contract.Requires(serviceModel != null);
            Contract.Requires(domDocument != null);

            this.DocumentWriter = documentWriter;
            this.ServiceModel   = serviceModel;
            this.DomDocument    = domDocument;
        }
Example #21
0
        public static DomAttribute CreateFromClrResource(IServiceModel serviceModel, IAttributeInfo attributeInfo, object clrResource)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(attributeInfo != null);
            Contract.Requires(clrResource != null);

            var clrAttribute = attributeInfo.GetClrProperty(clrResource);

            return(CreateFromClrAttribute(serviceModel, attributeInfo, clrAttribute));
        }
Example #22
0
 public ViewModel(IServiceModel locationsServiceModel)
 {
     Location = new LocationModel();
     _locationServiceModel = locationsServiceModel;
     GetAllDataCommand     = new RelayCommand(ReloadLocations);
     Locations             = new ObservableCollection <LocationModel>(_locationServiceModel.GetAll());
     AddLocationCommand    = new RelayCommand(AddLocation);
     DeleteLocationCommand = new RelayCommand(RemoveLocation);
     UpdateLocationCommand = new RelayCommand(UpdateLocation);
 }
        // PUBLIC CONSTRUCTORS //////////////////////////////////////////////
        #region Constructors
        public DocumentWriter(IServiceModel serviceModel)
        {
            Contract.Requires(serviceModel != null);

            this.ServiceModel = serviceModel;

            var domDocument = DomDocument.Create(serviceModel);

            this.DomDocument = domDocument;
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal ResourcePathContextBuilder(TParentBuilder parentBuilder, IServiceModel serviceModel, Type clrResourceType)
        {
            Contract.Requires(parentBuilder != null);
            Contract.Requires(serviceModel != null);
            Contract.Requires(clrResourceType != null);

            this.ParentBuilder   = parentBuilder;
            this.ServiceModel    = serviceModel;
            this.ClrResourceType = clrResourceType;
        }
        public void TestDomDocumentDomResources(string name, IServiceModel serviceModel, Document apiDocument)
        {
            // Arrange
            var domDocument = DomDocument.Parse(apiDocument, serviceModel);

            var expectedApiResources = new List <Resource>();

            if (!apiDocument.IsDataNullOrEmpty())
            {
                if (apiDocument.IsResourceDocument())
                {
                    var apiResource = apiDocument.GetResource();
                    expectedApiResources.Add(apiResource);
                }
                else if (apiDocument.IsResourceCollectionDocument())
                {
                    var apiResourceCollection = apiDocument.GetResourceCollection();
                    expectedApiResources.AddRange(apiResourceCollection);
                }
            }

            if (!apiDocument.IsIncludedNullOrEmpty())
            {
                var apiIncludedResources = apiDocument.GetIncludedResources();
                expectedApiResources.AddRange(apiIncludedResources);
            }

            // Act
            var actualDomResources = domDocument.DomResources()
                                     .SafeToList();
            var actualApiResources = actualDomResources.Select(x => x.ApiResource)
                                     .SafeToList();

            this.Output.WriteLine("Test Name: {0}", name);
            this.Output.WriteLine(String.Empty);
            this.OutputDomTree(domDocument);
            this.OutputEmptyLine();

            this.Output.WriteLine("Expected Resources");
            foreach (var expectedApiResource in expectedApiResources)
            {
                this.Output.WriteLine(expectedApiResource.ToString());
            }

            this.OutputEmptyLine();
            this.Output.WriteLine("Actual Resources");
            foreach (var actualApiResource in actualApiResources)
            {
                this.Output.WriteLine(actualApiResource.ToString());
            }

            // Assert
            ResourceAssert.Equal(expectedApiResources, actualApiResources);
        }
Example #26
0
        // PUBLIC CONSTRUCTORS //////////////////////////////////////////////
        #region Constructors
        public HypermediaContext(IServiceModel serviceModel,
                                 IUrlBuilderConfiguration urlBuilderConfiguration,
                                 IDictionary <Type, IUrlBuilderConfiguration> urlBuilderConfigurationPerResourceType)
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(urlBuilderConfiguration != null);

            this.ServiceModel            = serviceModel;
            this.UrlBuilderConfiguration = urlBuilderConfiguration;
            this.UrlBuilderConfigurationPerResourceType = urlBuilderConfigurationPerResourceType;
        }
        public override string GetDecoratedImplementation(IServiceModel serviceModel, IOperationModel operationModel)
        {
            var currentDomain = GetDomainForService(serviceModel);

            if (currentDomain == null)
            {
                return(string.Empty);
            }

            return(MethodImplementationStrategy.ImplementOnMatch(_metaDataManager, _application, currentDomain, operationModel));
        }
Example #28
0
 public override string AfterCallToAppLayer(IServiceModel service, IOperationModel operation)
 {
     if (operation.Stereotypes.Any(x => x.Name == "ReadOnly"))
     {
         return("");
     }
     return(operation.IsAsync()
         ? $@"
             await _dbContext.SaveChangesAsync();"
         : $@"
             _dbContext.SaveChanges();");
 }
Example #29
0
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal RelationshipCollectionBuilder(TParentBuilder parentBuilder, IServiceModel serviceModel, IReadOnlyList <DomReadWriteRelationships> domReadWriteRelationshipsCollection, IReadOnlyList <TResource> clrResourceCollection, string rel, Func <TResource, bool> predicate)
        {
            Contract.Requires(parentBuilder != null);
            Contract.Requires(serviceModel != null);
            Contract.Requires(domReadWriteRelationshipsCollection != null);
            Contract.Requires(clrResourceCollection != null);
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);

            var domReadWriteRelationshipsCollectionCount = domReadWriteRelationshipsCollection.Count;
            var clrResourceCollectionCount = clrResourceCollection.Count;

            if (clrResourceCollectionCount != domReadWriteRelationshipsCollectionCount)
            {
                var detail = ServerErrorStrings
                             .InternalErrorExceptionDetailCollectionCountMismatch
                             .FormatWith("DOM read-write relationships collection", domReadWriteRelationshipsCollectionCount, "CLR resource collection", clrResourceCollectionCount);
                throw new InternalErrorException(detail);
            }

            this.ParentBuilder = parentBuilder;

            this.ServiceModel = serviceModel;

            var resourceType = serviceModel.GetResourceType <TResource>();

            this.ResourceType = resourceType;

            this.Rel = rel;

            var domReadWriteRelationshipCollection = new List <DomReadWriteRelationship>();
            var clrResourceCollectionFiltered      = new List <TResource>();

            var count = clrResourceCollectionCount;

            for (var i = 0; i < count; ++i)
            {
                var clrResource        = clrResourceCollection[i];
                var canAddRelationship = predicate == null || predicate(clrResource);
                if (canAddRelationship == false)
                {
                    continue;
                }

                var domReadWriteRelationships = domReadWriteRelationshipsCollection[i];
                var domReadWriteRelationship  = domReadWriteRelationships.AddDomReadWriteRelationship(rel);
                domReadWriteRelationshipCollection.Add(domReadWriteRelationship);

                clrResourceCollectionFiltered.Add(clrResource);
            }

            this.DomReadWriteRelationshipCollection = domReadWriteRelationshipCollection;
            this.ClrResourceCollection = clrResourceCollectionFiltered;
        }
        protected ResourceIdentifierBuilder(IServiceModel serviceModel, IContainerNode <DomNodeType> domContainerNode, TResource clrResource)
            : this(serviceModel, domContainerNode)
        {
            if (clrResource == null)
            {
                return;
            }

            this.CreateAndAddDomReadWriteResourceIdentifierIfNeeded();

            this.DomReadWriteResourceIdentifier.SetDomIdFromClrResource(this.ResourceType, clrResource);
        }