示例#1
0
        public static FactsPartsDictionary GetFactsOfParts(Taxonomy taxonomy)
        {
            var instance = new FactsPartsDictionary();

            instance.DeSerializeItems = (lines) => {
                var values = new IntervalList();
                foreach (var line in lines)
                {
                    values.AddInterval(Interval.GetInstanceFromString(line));
                }
                values.TrimExcess();

                return(values);
            };
            instance.SerializeItem = (itemcontainer) =>
            {
                var sb = new StringBuilder();
                foreach (var item in itemcontainer.Intervals)
                {
                    sb.AppendLine(item.Content());
                }
                return(sb);
            };
            instance.Folder            = () => taxonomy.TaxonomyFactsFolder;
            instance.FileSearchPattern = "FactsOfParts_*.dat";
            instance.GetKey            = (file) =>
            {
                return(Utilities.Converters.FastParse(Utilities.Strings.TextBetween(file, "FactsOfParts_", ".dat")));
            };

            return(instance);
        }
示例#2
0
        public Message ProcessRequest(Message request)
        {
            var ajaxtag = "ajax";


            //Logger.WriteLine("ProcessRequest " + request.Url);
            Message result = new Message();

            result.Id          = request.Id;
            result.Url         = request.Url;
            result.Error       = "";
            result.ContentType = request.ContentType;
            result.Category    = request.Category;
            if (request.Category == "notification")
            {
                Utilities.Logger.WriteLine(request.Data);
                if (request.Data.ToLower().Contains("ui ready"))
                {
                    AppEngine.Features.OnUIReady();
                    //AppEngine.Features.LoadTaxonomyToUI();
                }
            }
            if (request.Category == ajaxtag)
            {
                if (Utilities.FS.FileExists(request.Url))
                {
                    result.Data = Utilities.FS.ReadAllText(request.Url);
                }
                else
                {
                    var filextension = "";
                    var extix        = request.Url.LastIndexOf(".");
                    if (extix > -1)
                    {
                        filextension = request.Url.Substring(extix + 1);
                    }
                    if (filextension.In("html"))
                    {
                        var table = Engine.CurrentTaxonomy.Tables.FirstOrDefault(i => i.HtmlPath == request.Url);
                        if (table != null)
                        {
                            result.Data = Utilities.FS.ReadAllText(table.FullHtmlPath);
                        }
                    }

                    if (filextension.In("xml", "xsd"))
                    {
                        var doc = Engine.CurrentTaxonomy.TaxonomyDocuments.FirstOrDefault(i => i.LocalRelPath == request.Url);
                        if (doc != null)
                        {
                            result.Data = Utilities.FS.ReadAllText(doc.LocalPath);
                        }
                    }
                    var urlparts = request.Url.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                    if (urlparts.Length == 2)
                    {
                        var part0 = urlparts[0].ToLower();
                        var part1 = urlparts[1].ToLower();
                        if (part0 == "settings")
                        {
                            var settings = Settings.Current;

                            if (part1 == "get")
                            {
                                result.Data = settings.GetJsonObj();
                            }
                            if (part1 == "save")
                            {
                                var keys = settings.Keys.ToList();

                                foreach (var key in keys)
                                {
                                    var value = request.GetParameter(key);
                                    settings.SetValue(key, value);
                                }
                                //settings.CheckValidationCells = request.GetParameter<bool>("CheckValidationCells");
                                //settings.ReDownloadFiles = request.GetParameter<bool>("ReDownloadFiles");
                                //settings.ReloadFullTaxonomy = request.GetParameter<bool>("ReloadFullTaxonomy");
                                //settings.ReloadFullTaxonomyButStructure = request.GetParameter<bool>("ReloadFullTaxonomyButStructure");
                                if (settings.ReloadFullTaxonomy)
                                {
                                    settings.ReloadFullTaxonomyButStructure = true;
                                }
                                //settings.ReloadTaxonomyOnInstanceLoaded = request.GetParameter<bool>("ReloadTaxonomyOnInstanceLoaded");
                                //settings.ValidateOnInstanceLoaded = request.GetParameter<bool>("ValidateOnInstanceLoaded");

                                this.AppEngine.Features.SaveSettings();
                            }
                        }
                        if (part0 == "instance")
                        {
                            if (Engine.CurrentInstance != null && Engine.CurrentTaxonomy != null)
                            {
                                if (part1 == "get")
                                {
                                    var json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.CurrentInstancePath);
                                    json = json.Replace("\r\n", "");

                                    result.Data = json;
                                }
                                if (part1 == "save")
                                {
                                    var factsjson = request.GetParameter("facts");
                                    var facts     = Utilities.Converters.JsonTo <List <InstanceFact> >(factsjson);
                                    var json      = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.CurrentInstancePath);
                                    Engine.CurrentInstance.SaveFacts(facts);
                                    this.AppEngine.Features.SaveInstance("");
                                    //result.Data = "Ok";
                                }
                                if (part1 == "validation")
                                {
                                    var json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.CurrentInstanceValidationResultPath);
                                    result.Data = json;
                                }
                                if (part1 == "factindexes")
                                {
                                    var indexes_str = request.GetParameter("indexes").ToLower();
                                    var indexes     = indexes_str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
                                    var items       = Engine.CurrentInstance.GetFactStringsByFactIdStrings(indexes);
                                    var json        = Utilities.Converters.ToJson(items);
                                    result.Data = json;
                                }
                                if (part1 == "validationresults")
                                {
                                    var page     = int.Parse(request.GetParameter("page"));
                                    var pagesize = int.Parse(request.GetParameter("pagesize"));
                                    var ruleid   = request.GetParameter("ruleid").ToLower();
                                    var full     = request.GetParameter("full").ToLower();

                                    var taxonomy = AppEngine.Features.Engine.CurrentTaxonomy;
                                    var instance = AppEngine.Features.Engine.CurrentInstance;

                                    var rs    = new DataResult <LogicalModel.Validation.ValidationRuleResult>();
                                    var query = Engine.CurrentInstance.ValidationRuleResults.AsQueryable();
                                    if (full == "1")
                                    {
                                        SimpleValidationRule rule = taxonomy.ValidationRules.FirstOrDefault(i => i.ID.Equals(ruleid, StringComparison.OrdinalIgnoreCase));
                                        if (rule == null)
                                        {
                                            rule = taxonomy.SimpleValidationRules.FirstOrDefault(i => i.ID.Equals(ruleid, StringComparison.OrdinalIgnoreCase));
                                        }
                                        if (rule != null)
                                        {
                                            query = rule.GetAllInstanceResults(instance).AsQueryable();
                                        }
                                        else
                                        {
                                            Utilities.Logger.WriteLine(String.Format("Rule {0} was not Found (DataService)", ruleid));
                                        }
                                    }
                                    query = query.Where(i => i.ID.Equals(ruleid, StringComparison.OrdinalIgnoreCase));
                                    //TODO

                                    var idlist = new List <int>();


                                    rs.Items = query.Skip(pagesize * page).Take(pagesize).ToList();
                                    foreach (var item in rs.Items)
                                    {
                                        foreach (var p in item.Parameters)
                                        {
                                            foreach (var fid in p.FactIDs)
                                            {
                                                var fact = instance.GetFactBaseByIndexString(fid);
                                                if (fact != null)
                                                {
                                                    //p.Facts.Add(fact.FactString);
                                                }
                                            }
                                        }
                                    }
                                    rs.Total = query.Count();
                                    var json = Utilities.Converters.ToJson(rs);
                                    foreach (var item in rs.Items)
                                    {
                                        foreach (var p in item.Parameters)
                                        {
                                            p.InstanceFacts.Clear();
                                        }
                                    }
                                    result.Data = json;
                                }
                            }
                        }
                        if (part0 == "layout")
                        {
                            var url     = request.Url.Replace("/", "\\");
                            var content = System.IO.File.ReadAllText(url);
                            result.Data = content;
                        }
                        if (part0 == "ui")
                        {
                            if (part1 == "menu")
                            {
                                var commandid = request.GetParameter("command").ToLower();
                                var p1        = request.GetParameter("p1").ToLower();
                                if (!string.IsNullOrEmpty(commandid))
                                {
                                    var command = this.AppEngine.Features.CommandContainer.Where(i => i.ID.ToLower() == commandid).FirstOrDefault();
                                    if (command != null)
                                    {
                                        var originalca = command.ContextAccessor;
                                        command.ContextAccessor = () => { return(new object[] { p1 }); };
                                        command.Execute();
                                        command.ContextAccessor = originalca;
                                    }
                                }
                                else
                                {
                                    var json = AppEngine.Features.GetJsonObj(AppEngine.Features.CommandContainer);
                                    result.Data = json;
                                }
                            }
                        }
                        if (part0 == "browse")
                        {
                            var json = "";
                            if (part1 == "file")
                            {
                                json = AppEngine.Features.UI.BrowseFile("", "");
                            }
                            if (part1 == "folder")
                            {
                                json = AppEngine.Features.UI.BrowseFolder("");
                            }
                            result.Data = json;
                        }
                        if (part0 == "app")
                        {
                            var json = "";
                            if (part1 == "info")
                            {
                                json = AppEngine.Features.GetAppInfo();
                            }
                            result.Data = json;
                        }
                        if (part0 == "taxonomy")
                        {
                            var json = "";
                            if (Engine.CurrentTaxonomy != null)
                            {
                                if (part1 == "get")
                                {
                                    json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.TaxonomyModulePath);
                                }
                                if (part1 == "concepts")
                                {
                                    json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.TaxonomyConceptPath);
                                }
                                if (part1 == "cellindexes")
                                {
                                    json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.TaxonomyCellIndexPath);
                                }
                                if (part1 == "documents")
                                {
                                    json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.TaxonomyStructurePath);
                                    if (Utilities.FS.FileExists(Engine.CurrentInstance.FullPath))
                                    {
                                        var td = new TaxonomyDocument();
                                        td.LocalRelPath = Engine.CurrentInstance.FullPath;
                                        td.FileName     = Utilities.Strings.GetFileName(td.LocalRelPath);
                                        var instjson = Utilities.Converters.ToJson(td);
                                        json = json.Insert(json.IndexOf("[") + 1, instjson + ", ");
                                    }
                                }
                                if (part1 == "validationrules")
                                {
                                    json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.TaxonomySimpleValidationPath);
                                }
                                if (part1 == "validationrule")
                                {
                                    var id   = request.Parameters["id"];
                                    var rule = Engine.CurrentTaxonomy.ValidationRules.FirstOrDefault(i => i.ID == id);
                                    if (rule != null)
                                    {
                                        var results = Engine.CurrentInstance.Facts.Count > 0 ? rule.GetAllInstanceResults(Engine.CurrentInstance) : rule.GetAllResults();
                                        json = Utilities.Converters.ToJson(results);
                                    }
                                }
                                if (part1 == "hierarchies")
                                {
                                    json = Utilities.FS.ReadAllText(Engine.CurrentTaxonomy.TaxonomyHierarchyPath);
                                }
                                if (part1 == "labels")
                                {
                                    var page     = int.Parse(request.GetParameter("page"));
                                    var pagesize = int.Parse(request.GetParameter("pagesize"));
                                    var key      = request.GetParameter("key");
                                    var code     = request.GetParameter("code");
                                    var content  = request.GetParameter("content");
                                    var query    = AppEngine.Features.Engine.CurrentTaxonomy.TaxonomyLabels.AsQueryable();
                                    if (!String.IsNullOrEmpty(key))
                                    {
                                        query = query.Where(i => i.Key.IndexOf(key, StringComparison.InvariantCultureIgnoreCase) > -1);
                                    }
                                    if (!String.IsNullOrEmpty(code))
                                    {
                                        query = query.Where(i => i.Code.IndexOf(code, StringComparison.InvariantCultureIgnoreCase) > -1);
                                    }
                                    if (!String.IsNullOrEmpty(content))
                                    {
                                        query = query.Where(i => i.Content.IndexOf(content, StringComparison.InvariantCultureIgnoreCase) > -1);
                                    }
                                    var rs = new DataResult <Label>();
                                    rs.Items = query.Skip(pagesize * page).Take(pagesize).ToList();
                                    rs.Total = query.Count();
                                    json     = Utilities.Converters.ToJson(rs);
                                }
                                if (part1 == "facts")
                                {
                                    var page       = int.Parse(request.GetParameter("page"));
                                    var pagesize   = int.Parse(request.GetParameter("pagesize"));
                                    var factstring = request.GetParameter("factstring");
                                    var cellid     = request.GetParameter("cellid").ToLower();
                                    var rs         = new DataResult <KeyValue>();
                                    var taxonomy   = Engine.CurrentTaxonomy;
                                    var query      = taxonomy.FactIndexEnumerable();

                                    var qry = LogicalModel.Base.FactBaseQuery.GetQuery(factstring, Engine.CurrentTaxonomy.FactParts);
                                    if (qry != null)
                                    {
                                        var all    = new Interval(0, taxonomy.FactsManager.FactsOfPages.HashKeys.Count);
                                        var allist = new IntervalList();
                                        allist.AddInterval(all);
                                        var idlist2 = qry.EnumerateIntervals(taxonomy.FactsOfParts, 0, allist, false).SelectMany(i => i);

                                        var indexes  = idlist2.Select(i => i).Distinct().ToDictionary(k => k, v => true);
                                        var comparer = new Utilities.IntArrayEqualityComparer();
                                        query = query.Where(i => indexes.ContainsKey(i));
                                    }
                                    if (!String.IsNullOrEmpty(cellid))
                                    {
                                        //var cells = taxonomy.CellIndexDictionary.Where(i => i.Value.IndexOf(cellid, StringComparison.Ordinal)>-1).Select(i=>i.Key);
                                        //longcellid=cellid
                                        //query = query.Where(i => i.Value.Any(j => cells.Contains(j)));
                                        query = query.Where(i => taxonomy.FactsManager.GetFact(i).Value.Any(j => taxonomy.CellIndexDictionary[j].IndexOf(cellid, StringComparison.OrdinalIgnoreCase) > -1));
                                    }

                                    rs.Items = query.Skip(pagesize * page).Take(pagesize).Select(i =>
                                    {
                                        var keycell = taxonomy.FactsManager.GetFactKeywithCells(i);
                                        var keystr  = taxonomy.GetFactStringKey(keycell.FactKey);
                                        return(new KeyValue(keystr, keycell.CellIndexes));       //.Select(c => taxonomy.CellIndexDictionary[c]).ToList()
                                    }
                                                                                                 ).ToList();
                                    rs.Total = query.Count();
                                    json     = Utilities.Converters.ToJson(rs);
                                }
                                if (part1 == "table")
                                {
                                    if (request.Parameters.ContainsKey("cell"))
                                    {
                                        var cell      = request.Parameters["cell"];
                                        var report    = "";
                                        var extension = "";
                                        var row       = "";
                                        var column    = "";
                                        if (cell.IndexOf(">") > -1)
                                        {
                                            report = cell.Remove(cell.IndexOf("<"));
                                            var cellspecifiers = cell.TextBetween("<", ">").Split('|');
                                            var nr_params      = cellspecifiers.Length;
                                            extension = nr_params > 0 ? cellspecifiers[0] : "";
                                            row       = nr_params > 1 ? cellspecifiers[1] : "";
                                            column    = nr_params > 2 ? cellspecifiers[2] : "";
                                        }
                                        else
                                        {
                                            report = cell;
                                        }

                                        json = GetTableHtmlPath(report, extension, row, column);
                                    }
                                    if (request.Parameters.ContainsKey("item"))
                                    {
                                        var item = request.Parameters["item"];
                                        if (item == "factmap")
                                        {
                                            var reportid = request.Parameters["reportid"];
                                            var table    = this.Engine.CurrentTaxonomy.Tables.FirstOrDefault(i => i.ID == reportid);
                                            if (table != null)
                                            {
                                                json = Utilities.FS.ReadAllText(table.FactMapPath);
                                            }
                                        }
                                    }
                                }
                                if (part1 == "tables")
                                {
                                    var h           = new BaseModel.Hierarchy <TableInfo>();
                                    var tablegroups = Engine.CurrentTaxonomy.Module.TableGroups.Cast <TableInfo>(i =>
                                    {
                                        var ti    = new TableInfo();
                                        ti.ID     = i.ID;// String.IsNullOrEmpty(i.FilingIndicator) ? i.ID : i.FilingIndicator;
                                        ti.Tables = i.TableIDs;
                                        //var name = String.IsNullOrEmpty(i.LabelCode) ? i.LabelContent : i.LabelCode;
                                        var name       = String.IsNullOrEmpty(i.FilingIndicator) ? i.LabelContent : i.FilingIndicator;
                                        ti.Name        = Utilities.Strings.TrimTo(name, 40);
                                        ti.Description = i.LabelContent;
                                        ti.Type        = "tablegroup";
                                        return(ti);
                                    });

                                    var tgs            = tablegroups.All();
                                    var tablesingroups = tgs.SelectMany(i => i.Item.Tables).Distinct().ToList();
                                    var alltableids    = Engine.CurrentTaxonomy.Tables.Select(i => i.ID).ToList();
                                    var ungrouped      = alltableids.Except(tablesingroups).ToList();
                                    foreach (var tgcontainer in tgs)
                                    {
                                        var tg  = tgcontainer.Item;
                                        var htg = tgcontainer;// new BaseModel.Hierarchy<LogicalModel.TableInfo>(tg);

                                        //h.Children.Add(htg);
                                        //var tables = Engine.CurrentTaxonomy.Tables.Where(i => i.FilingIndicator == tg.ID);
                                        var tables = Engine.CurrentTaxonomy.Tables.Where(i => tg.Tables.Contains(i.ID)).ToList();
                                        if (tables.Count > 0)
                                        {
                                            //htg.Children.Clear();
                                        }
                                        foreach (var tbl in tables)
                                        {
                                            var tbinfo = new TableInfo();
                                            var ht     = htg.Children.FirstOrDefault(i => i.Item.ID == tbl.ID);
                                            if (ht == null)
                                            {
                                                ht = new BaseModel.Hierarchy <TableInfo>(tbinfo);
                                                htg.Children.Add(ht);
                                            }

                                            ht.Item.ID      = String.Format("{0}<>", tbl.ID);
                                            ht.Item.HasData = tbl.InstanceFactsCount;
                                            var name = tbl.Name;
                                            ht.Item.Name        = Utilities.Strings.TrimTo(name, 40);
                                            ht.Item.Description = string.IsNullOrEmpty(tbl.LabelContent) ? name : tbl.LabelContent;
                                            ht.Item.Type        = "table";
                                            //TODO EXT
                                            //var tbextensions = tbl.Extensions.Children;
                                            var tbextensions = Engine.CurrentInstance.GetTableExtensions(tbl);
                                            ht.Children.AddRange(tbextensions.Select(i => new BaseModel.Hierarchy <TableInfo>(i)));
                                        }
                                    }
                                    h = tablegroups;
                                    if (ungrouped.Count > 0)
                                    {
                                        var ungroupedti = new TableInfo();
                                        ungroupedti.Type = "tablegroup";
                                        ungroupedti.Name = "Ungrouped";
                                        var hungr = new Hierarchy <TableInfo>(ungroupedti);
                                        h.AddChild(hungr);
                                        foreach (var t in ungrouped)
                                        {
                                            var tbinfo = new TableInfo();
                                            var tbl    = Engine.CurrentTaxonomy.Tables.FirstOrDefault(i => i.ID == t);
                                            var ht     = new BaseModel.Hierarchy <TableInfo>(tbinfo);


                                            ht.Item.ID      = String.Format("{0}<>", tbl.ID);
                                            ht.Item.HasData = tbl.InstanceFactsCount;
                                            var name = tbl.Name;
                                            ht.Item.Name        = Utilities.Strings.TrimTo(name, 40);
                                            ht.Item.Description = string.IsNullOrEmpty(tbl.LabelContent) ? name : tbl.LabelContent;
                                            ht.Item.Type        = "table";
                                            hungr.AddChild(ht);
                                        }
                                    }
                                    var itemswithdata = h.Where(i => i.Item.HasData > 0).ToList();
                                    foreach (var itemwithdata in itemswithdata)
                                    {
                                        var current = itemwithdata;
                                        while (current.Parent != null)
                                        {
                                            current = current.Parent;
                                            current.Item.HasData = itemwithdata.Item.HasData;
                                        }
                                    }
                                    json = Utilities.Converters.ToJson(h);
                                }
                            }
                            result.Data = json;
                        }
                    }
                }
                //Logger.WriteLine("Finished " + request.Url);
            }
            return(result);
        }