/// <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()); }
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)); }
/// <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); }
/// <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)); }