Beispiel #1
0
        public CremaQuery(ICremaHost cremaHost)
        {
            this.cremaHost = cremaHost;
            this.Name      = "Query";

            Field <DataBaseType>()
            .Name("Database")
            .Argument <StringGraphType>("name", "")
            .Argument <StringGraphType>("tags", "")
            .Resolve(context =>
            {
                var dataBaseName = context.GetArgument <string>("name");
                var tags         = context.GetArgument <string>("tags");
                var database     = this.GetDataBase(dataBaseName);

                return(this.cremaHost.Dispatcher.Invoke(() =>
                {
                    var info = database.DataBaseInfo;
                    if (string.IsNullOrWhiteSpace(tags))
                    {
                        return database.Dispatcher.Invoke(() => DataBaseModel.ConvertFrom(database, info));
                    }
                    else
                    {
                        info.Tags = (TagInfo)tags;
                        info.Paths = this.GetItems(database, (TagInfo)tags).ToArray();
                        info.TypesHashValue = this.GetTypesHashValue(database, (TagInfo)tags);
                        info.TablesHashValue = this.GetTablesHashValue(database, (TagInfo)tags);
                        return DataBaseModel.ConvertFrom(database, info);
                    }
                }));
            });

            Field <ListGraphType <DataBaseType> >()
            .Name("Databases")
            .Argument <StringGraphType, string>("name", "", "*")
            .Argument <StringGraphType>("tags", "")
            .Resolve(context =>
            {
                var dataBaseName = context.GetArgument <string>("name");
                var tags         = context.GetArgument <string>("tags");
                var databases    = this.GetDataBases(dataBaseName);

                return(this.cremaHost.Dispatcher.Invoke(() =>
                {
                    if (string.IsNullOrWhiteSpace(tags))
                    {
                        return databases.Select(database =>
                        {
                            return database.Dispatcher.Invoke(() => DataBaseModel.ConvertFrom(database, database.DataBaseInfo));
                        }).ToArray();
                    }

                    return databases.Select(database =>
                    {
                        return database.Dispatcher.Invoke(() =>
                        {
                            var info = database.DataBaseInfo;
                            info.Tags = (TagInfo)tags;
                            info.Paths = this.GetItems(database, (TagInfo)tags).ToArray();
                            info.TypesHashValue = this.GetTypesHashValue(database, (TagInfo)tags);
                            info.TablesHashValue = this.GetTablesHashValue(database, (TagInfo)tags);
                            return DataBaseModel.ConvertFrom(database, info);
                        });
                    }).ToArray();
                }));
            });
        }