Beispiel #1
0
        //    var datasets = HlidacStatu.Lib.Data.External.DataSets.DataSetDB.Instance.SearchDataRaw("*", 1, 100)
        //.Result
        //.Select(s => Newtonsoft.Json.JsonConvert.DeserializeObject<HlidacStatu.Lib.Data.External.DataSets.Registration>(s.Item2));


        private DataSetDB() : base(DataSourcesDbName, false)
        {
            if (client == null)
            {
                this.client = Lib.ES.Manager.GetESClient(DataSourcesDbName, idxType: ES.Manager.IndexType.DataSource);
                var ret = client.Indices.Exists(client.ConnectionSettings.DefaultIndex); //todo: es7 check
                if (!ret.Exists)
                {
                    Newtonsoft.Json.Schema.Generation.JSchemaGenerator jsonG = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
                    jsonG.DefaultRequired = Newtonsoft.Json.Required.Default;
                    Registration reg = new Registration()
                    {
                        datasetId  = DataSourcesDbName,
                        jsonSchema = jsonG.Generate(typeof(Registration)).ToString()
                    };
                    Lib.ES.Manager.CreateIndex(client);

                    //add record
                    Elasticsearch.Net.PostData pd = Elasticsearch.Net.PostData.String(Newtonsoft.Json.JsonConvert.SerializeObject(reg));

                    var tres = client.LowLevel.Index <Elasticsearch.Net.StringResponse>(client.ConnectionSettings.DefaultIndex, DataSourcesDbName, pd);
                    if (tres.Success == false)
                    {
                        throw new ApplicationException(tres.DebugInformation);
                    }
                }
            }
        }
Beispiel #2
0
        public static string Register()
        {
            Newtonsoft.Json.Schema.Generation.JSchemaGenerator jsonGen = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
            jsonGen.DefaultRequired = Newtonsoft.Json.Required.Default;

            registration.jsonSchema = jsonGen.Generate(typeof(item)); //JSON schema


            HttpClient httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.Add("Authorization", apiToken);


            var content    = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(registration));
            var jsonResult = httpClient.PostAsync(apiRoot + "/Datasets", content)
                             .Result.Content
                             .ReadAsStringAsync().Result;
            var result = JObject.Parse(jsonResult);

            if (result["error"] == null)
            {
                Console.WriteLine("Zaregistrovan dataset " + result["datasetId"].Value <string>());
                return(result["datasetId"].Value <string>());
            }
            else
            {
                Console.WriteLine("Chyba " + result["error"]["description"]);
                return(null);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Returns the json schema of the system tables
        /// </summary>
        /// <returns></returns>
        public static Newtonsoft.Json.Schema.JSchema Schema()
        {
            var generator = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
            var schema    = generator.Generate(typeof(DbSchemaConfig));

            return(schema);
        }
Beispiel #4
0
        public static string Register(string datasetId)
        {
            Newtonsoft.Json.Schema.Generation.JSchemaGenerator jsonGen = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
            jsonGen.DefaultRequired = Newtonsoft.Json.Required.Default;


            var registration = new
            {
                name             = "Rozhodnuti UOHS",                                          //povinne, verejne jmeno datasetu
                datasetId        = datasetId,                                                  //nepovinne, doporucujeme uvest. Jednoznacny identifikator datasetu v URL a ve volani API
                origUrl          = "http://www.uohs.cz/cs/verejne-zakazky/sbirky-rozhodnuti/", //zdroj dat datasetu
                jsonSchema       = jsonGen.Generate(typeof(UOHSData)),                         //JSON schema
                betaversion      = true,                                                       // pokud true, pak dataset neni videt v seznam datasetu na HlidacStatu.cz/data
                allowWriteAccess = false,                                                      // pokud true, pak data v datasetu muze kdokoliv přepsat nebo smazat. Stejně tak údaje v registraci.
                                                                                               // pokud false, pak kdokoliv muze data pridat, ale nemuze je prepsat či smazat
                orderList = new string[, ] {
                    { "Nabytí právní moci", "PravniMoc" }, { "Účastníci", "Ucastnici.Jmeno" }
                },
            };

            HttpClient httpClient = new HttpClient();

            httpClient.DefaultRequestHeaders.Add("Authorization", apiToken);

            string jsonResult = httpClient.GetAsync(apiRoot + "/Datasets/" + registration.datasetId)
                                .Result.Content
                                .ReadAsStringAsync().Result;
            var result = JContainer.Parse(jsonResult);

            if (result.HasValues == true) //dataset uz existuje
            {
                //smazu ho
                //zde uvedeno jako priklad,
                jsonResult = httpClient.DeleteAsync(apiRoot + "/Datasets/" + registration.datasetId)
                             .Result.Content
                             .ReadAsStringAsync().Result;
            }

            //vytvoreni nove registrace

            var content = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(registration));

            jsonResult = httpClient.PostAsync(apiRoot + "/Datasets", content)
                         .Result.Content
                         .ReadAsStringAsync().Result;
            result = JObject.Parse(jsonResult);
            if (result["error"] == null)
            {
                Console.WriteLine("Zaregistrovan dataset " + result["datasetId"].Value <string>());
                return(result["datasetId"].Value <string>());
            }
            else
            {
                Console.WriteLine("Chyba " + result["error"]["description"]);
                return(null);
            }
        }
Beispiel #5
0
        private static void WriteoutSchema(string path)
        {
            // Generate and write out scema for settings
            var generator = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
            var schema    = generator.Generate(typeof(Models.VSettings));

            using (StreamWriter file = File.CreateText(Path.Combine(Path.GetDirectoryName(path), "vsettings.schema.json")))
                using (var writer = new Newtonsoft.Json.JsonTextWriter(file))
                {
                    schema.WriteTo(writer);
                }
        }
        private string GenerateSchemaFromCSharpType()
        {
            Newtonsoft.Json.Schema.Generation.JSchemaGenerator generator = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator()
            {
                DefaultRequired = Required.DisallowNull,
            };

            JSchema schema = generator.Generate(templateType);

            schema.SchemaVersion = new Uri(SchemaVersionUriString);
            schema.Title         = "Input Template";
            schema.Description   = "Input Template";
            schema.Type          = JSchemaType.Object;

            return(schema.ToString());
        }
Beispiel #7
0
        public ActionResult CreateSimple2(CreateSimpleModel model, FormCollection form)
        {
            var email = Request?.RequestContext?.HttpContext?.User?.Identity?.Name;

            if (Request.IsAuthenticated == false)
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.PathAndQuery }));
            }

            var uTmp       = new Lib.IO.UploadedTmpFile();
            var path       = uTmp.GetFullPath(model.FileId.ToString(), model.FileId.ToString() + ".csv");
            var pathModels = uTmp.GetFullPath(model.FileId.ToString(), model.FileId.ToString() + ".json");

            model.Headers = (form["sheaders"] ?? "").Split('|');

            //check Keycolumn
            List <CreateSimpleModel.Column> cols = new List <CreateSimpleModel.Column>();
            int columns = model.Headers.Length;

            for (int i = 0; i < columns; i++)
            {
                string name = model.Headers[i];
                if (form[$"include_{i}"] == "1")
                {
                    cols.Add(
                        new CreateSimpleModel.Column()
                    {
                        Name             = name,
                        NiceName         = form[$"nicename_{i}"],
                        ValType          = form[$"typ_{i}"],
                        ShowSearchFormat = form[$"show_search_{i}"] == "--" ? "string" : form[$"show_search_{i}"],
                        ShowDetailFormat = form[$"show_detail_{i}"] == "--" ? "string" : form[$"show_detail_{i}"],
                    }
                        );
                }
            }
            if (string.IsNullOrEmpty(model.KeyColumn) && !cols.Any(m => m.Name.ToLower() == "id"))
            {
                cols.Add(new CreateSimpleModel.Column()
                {
                    Name             = "id",
                    NiceName         = "Id",
                    ValType          = "string",
                    ShowSearchFormat = "show",
                    ShowDetailFormat = "hide",
                });
            }

            model.Columns = cols.ToArray();
            model.Save(pathModels);


            bool addIcoCol = false;
            Dictionary <string, Type> properties = new Dictionary <string, Type>();

            //properties.Add("id", typeof(string));
            foreach (var c in model.Columns)
            {
                switch (c.ValType)
                {
                case "number":
                    properties.Add(c.NormalizedName(), typeof(Nullable <decimal>));
                    break;

                case "datetime":
                    properties.Add(c.NormalizedName(), typeof(Nullable <DateTime>));
                    break;

                case "url":
                case "ico":
                default:
                    properties.Add(c.NormalizedName(), typeof(string));
                    break;
                }
            }
            if (addIcoCol && !model.Columns.Any(m => m.NormalizedName() == "ico"))
            {
                properties.Add("ICO", typeof(string));
            }

            if (!properties.Any(m => m.Key.ToLower() == "id"))
            {
                properties.Add("id", typeof(string));
            }

            RuntimeClassBuilder rcb = new RuntimeClassBuilder(properties);
            var rcbObj = rcb.CreateObject();

            Newtonsoft.Json.Schema.Generation.JSchemaGenerator jsonGen = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
            jsonGen.DefaultRequired = Newtonsoft.Json.Required.Default;
            var schema = jsonGen.Generate(rcbObj.GetType()); //JSON schema



            //create registration
            Registration reg = new Registration();

            reg.allowWriteAccess = false;
            reg.betaversion      = true;
            reg.jsonSchema       = schema.ToString();
            reg.name             = model.Name;
            reg.NormalizeShortName();
            reg.createdBy = email;

            HlidacStatu.Api.Dataset.Connector.ClassicTemplate.ClassicSearchResultTemplate search = new Api.Dataset.Connector.ClassicTemplate.ClassicSearchResultTemplate();
            HlidacStatu.Api.Dataset.Connector.ClassicTemplate.ClassicDetailTemplate       detail = new Api.Dataset.Connector.ClassicTemplate.ClassicDetailTemplate();


            search.AddColumn("Detail", "<a href=\"{{ fn_DatasetItemUrl item.id }}\">Detail</a>");
            foreach (var col in model.Columns)
            {
                if (col.NormalizedName().ToLower() != "id")
                {
                    if (col.ShowSearchFormat == "price")
                    {
                        search.AddColumn(col.NiceName, "{{ fn_FormatPrice item." + col.NormalizedName() + " }}");
                    }
                    else if (col.ShowSearchFormat == "show")
                    {
                        if (col.ValType == "number")
                        {
                            search.AddColumn(col.NiceName, "{{ fn_FormatNumber item." + col.NormalizedName() + " }}");
                        }
                        else if (col.ValType == "datetime")
                        {
                            search.AddColumn(col.NiceName, "{{ fn_FormatDate item." + col.NormalizedName() + " }}");
                        }
                        else if (col.ValType == "ico")
                        {
                            search.AddColumn(col.NiceName, "{{ fn_RenderCompanyWithLink item." + col.NormalizedName() + " }}");
                        }
                        else if (col.ValType == "url")
                        {
                            search.AddColumn(col.NiceName, "<a href='{{ item." + col.NormalizedName() + " }}' target='_blank'>Odkaz</a>");
                        }
                        else
                        {
                            search.AddColumn(col.NiceName, "{{ item." + col.NormalizedName() + " }}");
                        }
                    }
                }

                if (col.ShowDetailFormat == "price")
                {
                    detail.AddColumn(col.NiceName, "{{ fn_FormatPrice item." + col.NormalizedName() + " }}");
                }
                else if (col.ShowDetailFormat == "show")
                {
                    if (col.ValType == "number")
                    {
                        detail.AddColumn(col.NiceName, "{{ fn_FormatNumber item." + col.NormalizedName() + " }}");
                    }
                    else if (col.ValType == "datetime")
                    {
                        detail.AddColumn(col.NiceName, "{{ fn_FormatDate item." + col.NormalizedName() + " }}");
                    }
                    else if (col.ValType == "ico")
                    {
                        detail.AddColumn(col.NiceName, "{{ fn_RenderCompanyWithLink item." + col.NormalizedName() + " }}");
                    }
                    else if (col.ValType == "url")
                    {
                        detail.AddColumn(col.NiceName, "<a href='{{ item." + col.NormalizedName() + " }}' target='_blank'>Odkaz</a>");
                    }
                    else
                    {
                        detail.AddColumn(col.NiceName, "{{ item." + col.NormalizedName() + " }}");
                    }
                }
            }

            reg.detailTemplate = new Registration.Template()
            {
                body = detail.Body
            };
            reg.searchResultTemplate = new Registration.Template()
            {
                body = search.Body
            };


            if (DataSet.ExistsDataset(reg.datasetId))
            {
                reg.datasetId = reg.datasetId + "-" + Devmasters.TextUtil.GenRandomString(5);
            }

            datasetIndexStatCache.Invalidate();

            var status = DataSet.Api.Create(reg, email);

            if (status.valid == false)
            {
                if (DataSet.ExistsDataset((status.value?.ToString() ?? "")))
                {
                    DataSetDB.Instance.DeleteRegistration(status.value?.ToString(), email);
                }

                ViewBag.ApiResponseError = status;
                return(View(model));
            }
            model.DatasetId = ((DataSet)status.value).DatasetId;
            model.Save(pathModels);
            return(RedirectToAction("createSimple3", model));
        }