Esempio n. 1
0
 /// <summary>
 /// Gets the list of implemented interface for merged api type
 /// </summary>
 /// <param name="type">The merged api type</param>
 /// <param name="providers">The list of api providers</param>
 /// <param name="allInterfaces">The list of all api type interfaces</param>
 /// <returns>The list of interfaces implemented by type</returns>
 private static List <TypeInterface> GetTypeInterfaces(
     MergedType type,
     List <ApiProvider> providers,
     Dictionary <string, IGraphType> allInterfaces)
 {
     return(type is MergedInputType
                ? null
                : providers.Select(type.GetInterfaceName)
            .Where(name => name != null)
            .Select(n => allInterfaces[n])
            .OfType <TypeInterface>()
            .ToList());
 }
Esempio n. 2
0
        public static Rectangle GetCellBounds(CustomDrawRowValueCellEventArgs e, DevExpress.XtraEditors.Drawing.BaseEditPainter pb, DevExpress.XtraEditors.ViewInfo.BaseEditViewInfo bvi, DevExpress.XtraVerticalGrid.ViewInfo.BaseViewInfo vi)
        {
            Rectangle  result     = e.Bounds;
            MergedType mergedType = GetMergedType(e);

            if (mergedType == MergedType.Regular)
            {
                return(result);
            }
            if (mergedType == MergedType.Middle)
            {
                return(Rectangle.Empty);
            }
            return(GetFirstMergedCellBounds(e, vi));
        }
Esempio n. 3
0
        /// <summary>
        /// Merges schemes from multiple APIs
        /// </summary>
        /// <param name="providers">
        /// The API providers descriptions
        /// </param>
        /// <param name="createdTypes">
        /// The list of created types.
        /// <remarks>
        /// This is the mutation dictionary and will be filled during creation process
        /// </remarks>
        /// </param>
        /// <returns>
        /// Merged API
        /// </returns>
        private static MergedApiRoot MergeApis(List <ApiProvider> providers, Dictionary <string, MergedType> createdTypes)
        {
            var apiRoot = new MergedApiRoot("api");

            apiRoot.AddProviders(providers.Select(p => new FieldProvider {
                Provider = p, FieldType = p.Description
            }));
            apiRoot.Category = providers.Count > 1
                                   ? MergedObjectType.EnCategory.MultipleApiType
                                   : MergedObjectType.EnCategory.SingleApiType;

            foreach (var provider in providers)
            {
                MergeFields(apiRoot, provider.Description.Fields, provider, new List <string>(), false, createdTypes);

                foreach (var apiMutation in provider.Description.Mutations)
                {
                    var mutationName =
                        $"{MergedType.EscapeName(provider.Description.ApiName)}_{MergedType.EscapeName(apiMutation.Name)}";
                    MergedField mutation = null;
                    switch (apiMutation.Type)
                    {
                    case ApiMutation.EnType.ConnectionCreate:
                    case ApiMutation.EnType.ConnectionUpdate:
                    case ApiMutation.EnType.ConnectionDelete:
                    case ApiMutation.EnType.Connection:
                        mutation = RegisterConnectionMutation(provider, apiMutation, apiRoot, createdTypes);
                        break;

                    case ApiMutation.EnType.Untyped:
                        mutation = RegisterUntypedMutation(provider, apiMutation, apiRoot, createdTypes);
                        break;
                    }

                    if (mutation != null)
                    {
                        apiRoot.Mutations[mutationName] = mutation;
                    }
                }
            }

            var nodeSearcher = new NodeSearcher(apiRoot);

            apiRoot.NodeSearher = nodeSearcher;
            return(apiRoot);
        }
Esempio n. 4
0
        /// <summary>
        /// Register the mutation
        /// </summary>
        /// <param name="provider">The mutation api provider</param>
        /// <param name="apiMutation">The mutation description</param>
        /// <param name="apiRoot">The api root</param>
        /// <param name="typesCreated">The list of created types</param>
        /// <returns>The mutation as merged field </returns>
        private static MergedField RegisterConnectionMutation(
            ApiProvider provider,
            ApiMutation apiMutation,
            MergedApiRoot apiRoot,
            Dictionary <string, MergedType> typesCreated)
        {
            var field          = FindContainer(apiMutation, apiRoot);
            var connectionType = field?.Type as MergedConnectionType;

            if (connectionType == null)
            {
                return(null);
            }

            var errorDescriptionApiType =
                provider.Description.Types.FirstOrDefault(t => t.TypeName == "ErrorDescription") as ApiObjectType;
            MergedType errorDescriptionType = null;

            if (errorDescriptionApiType != null)
            {
                errorDescriptionType = CreateConnectionType(errorDescriptionApiType, provider, typesCreated);
            }

            var returnType = new MergedConnectionMutationResultType(
                connectionType.ElementType,
                apiRoot,
                errorDescriptionType,
                provider);

            typesCreated[returnType.ComplexTypeName] = returnType;

            var inputType = new MergedInputType(apiMutation.Name);

            inputType.AddProvider(
                new FieldProvider {
                Provider = provider, FieldType = new ApiObjectType(apiMutation.Name)
            });
            typesCreated[inputType.ComplexTypeName] = inputType;

            foreach (var apiField in apiMutation.Arguments)
            {
                inputType.Fields.Add(
                    apiField.Name,
                    new MergedField(
                        apiField.Name,
                        CreateMergedType(provider, apiField, null, new List <string>(), true, typesCreated),
                        provider,
                        apiMutation,
                        apiMutation.Flags,
                        description: apiField.Description));
            }

            inputType.Fields["clientMutationId"] = new MergedField(
                "clientMutationId",
                CreateScalarType(EnScalarType.String, typesCreated),
                provider,
                apiMutation);

            var arguments = new Dictionary <string, MergedField>
            {
                {
                    "input",
                    new MergedField(
                        "input",
                        inputType,
                        provider,
                        apiMutation)
                }
            };

            return(new MergedField(
                       apiMutation.Name,
                       returnType,
                       provider,
                       apiMutation,
                       apiMutation.Flags,
                       arguments,
                       apiMutation.Description));
        }