Example #1
0
        private void SortHierarchy()
        {
            popupHierarchy = new Hierarchy(windowSize.x - 26.0f, 17.0f, this);

            var favourites            = propertyBoxes.Where(propertyBox => propertyBox.Favourite);
            var suggestions           = propertyBoxes.Where(propertyBox => PropertyFieldInfoUtility.IsSuggestedProperty(propertyBox.Component, propertyBox.PropertyName));
            var displayableProperties = propertyBoxes.ToList();

            var favouritesItem = new LabelHierarchyItem("Favourites");

            popupHierarchy.AddChild(favouritesItem);

            if (!favourites.Any())
            {
                var emptyLabelItem = new LabelHierarchyItem("Click the heart next to any property.");
                favouritesItem.Children = new List <IHierarchyItem>()
                {
                    emptyLabelItem,
                };
            }
            else
            {
                favouritesItem.Children = new List <IHierarchyItem>();
                foreach (var favourite in favourites)
                {
                    favouritesItem.Children.Add(new FavouriteHierarchyItem(favourite));
                }
            }

            if (suggestions.Any())
            {
                var suggestionsLabel = new LabelHierarchyItem("Suggestions");
                popupHierarchy.AddChild(suggestionsLabel);
                suggestionsLabel.Children = new List <IHierarchyItem>();

                foreach (var suggested in suggestions)
                {
                    if (favourites.Contains(suggested))
                    {
                        continue;
                    }

                    suggestionsLabel.Children.Add(new SuggestionHierarchyItem(suggested));
                }
            }

            var allPropertiesItem = new LabelHierarchyItem("All Properties");

            allPropertiesItem.Children = new List <IHierarchyItem>();
            popupHierarchy.AddChild(allPropertiesItem);

            var components = displayableProperties.Select(displayableProperty => displayableProperty.Component);

            components = components.Distinct().ToList();
            foreach (var component in components)
            {
                var properties = displayableProperties.Where(displayableProperty => displayableProperty.Component == component).ToList();
                allPropertiesItem.Children.Add(new ComponentHierarchyItem(component, properties));
            }
        }
Example #2
0
    public void SetParent(Hierarchy newParent)
    {
        var rTransform = (RectTransform)transform;

        if (parent != null)
        {
            var position = rTransform.GetParent().GetWorldPoint(rTransform.anchorMin);
            var size     = rTransform.GetSizeWorld();
            transform.SetParent(newParent.transform, false);
            parent.RemoveChild(this);
            rTransform.SetPositionAnchorLocal(rTransform.GetParent().GetLocalPoint(position));
            rTransform.SetSizeWorld(size);
        }
        else
        {
            transform.SetParent(newParent.transform, false);
        }
        parent = newParent;
        parent.AddChild(this);
        if (!HierarchyView.IsCreated(gameObject))
        {
            HierarchyView.AddChild(gameObject);
        }
        HierarchyView.ChangeParent(parent.gameObject, gameObject);
    }
Example #3
0
        public static Hierarchy <LayoutItem> GetExpandedExtensions(Hierarchy <LayoutItem> axisnode, Table table)
        {
            var result   = new Hierarchy <LayoutItem>(new LayoutItem());
            var taxonomy = table.Taxonomy;
            //get the domain ids of the extensions
            var domains     = new List <int>();
            var layoutnodes = axisnode.All().Where(i => i.Item.IsLayout).ToList();

            foreach (var lnode in layoutnodes)
            {
                var dimensions = lnode.Item.Dimensions.Select(i => i.DomMapID).ToList();
                domains.AddRange(dimensions);
            }
            domains = domains.Distinct().ToList();

            //get the factindexes for a given cell
            var firstcellix = int.Parse(table.LayoutCellDictionary.FirstOrDefault().Key);
            var indexes     = new List <int>();

            for (int i = 0; i < table.FactIndexToCells.Count; i++)
            {
                var item = table.FactIndexToCells[i];
                if (item.v2 != firstcellix)
                {
                    break;
                }
                indexes.Add(item.v1);
            }
            //extract the keyparts of the domains of the extensions
            var extensionskeys = new List <int[]>();

            foreach (var ix in indexes)
            {
                var key  = table.Taxonomy.FactsManager.GetFactKey(ix);
                var xkey = table.Taxonomy.GetPartsOfDomains(key, domains);
                extensionskeys.Add(xkey.ToArray());
            }
            //set the labels
            foreach (var extensionkey in extensionskeys)
            {
                var sbtitle        = new StringBuilder();
                var sbdescription  = new StringBuilder();
                var aggregatelabel = new Label();
                foreach (var keypart in extensionkey)
                {
                    var l = taxonomy.GetLabelForAspect(keypart);
                    aggregatelabel.Code    = aggregatelabel.Code + "|" + l.Code;
                    aggregatelabel.Content = aggregatelabel.Content + "|" + l.Content;
                }
                result.Item.Label = aggregatelabel;
                var li = new LayoutItem();
                li.Category = LayoutItemCategory.Rule;
                li.Label    = aggregatelabel;
                var h = new Hierarchy <LayoutItem>(li);
                result.AddChild(h);
            }
            return(result);
        }
Example #4
0
        public static void SetDynamicAxis2(Table table, Hierarchy <LayoutItem> source, Hierarchy <LayoutItem> target)
        {
            var aspects = source.Where(i => i.Item.Category == LayoutItemCategory.Aspect).ToList();

            var targetAxisnode = target.FirstOrDefault(i => !String.IsNullOrEmpty(i.Item.Axis));
            var sourceAxisnode = source.FirstOrDefault(i => !String.IsNullOrEmpty(i.Item.Axis));

            if (targetAxisnode != null)
            {
                var aspect_source_dimensions = new List <Dimension>();

                var ix = 0;
                foreach (var aspect in aspects)
                {
                    aspect.Item.LabelID      = aspect.Parent.Item.LabelID;
                    aspect.Item.Label        = aspect.Parent.Item.Label;
                    aspect.Item.LabelContent = aspect.Parent.Item.LabelContent;
                    aspect.Item.LabelCode    = String.Format(Table.KeyLabelCodeFormat, ix);
                    aspect.Item.LabelID      = "";
                    var rolenode = aspect.FirstOrDefault(i => !String.IsNullOrEmpty(i.Item.Role));
                    if (rolenode != null)
                    {
                        aspect.Item.Role     = rolenode.Item.Role;
                        aspect.Item.RoleAxis = rolenode.Item.RoleAxis;
                    }
                    aspect.Item.Category = LayoutItemCategory.Key;
                    SetDimensions(aspect);
                    targetAxisnode.Children.Insert(ix, aspect);

                    source.Remove(aspect.Parent);

                    aspect.Parent.Remove(aspect);
                    aspect.Parent = targetAxisnode;
                    ix++;
                    aspect_source_dimensions.AddRange(aspect.Item.Dimensions);
                    //aspect.Item.Dimensions.Clear();
                }
                var visiblenodes = source.Where(i => i.Item.IsVisible);

                if (aspects.Count > 0)
                {
                    var dyn_li = new LayoutItem();

                    dyn_li.ID         = "dynamic_" + sourceAxisnode.Item.Axis;
                    dyn_li.Dimensions = aspect_source_dimensions;
                    dyn_li.Category   = LayoutItemCategory.Dynamic;
                    dyn_li.LabelCode  = Literals.DynamicCode;
                    //var dyn_h = new Hierarchy<LayoutItem>(dyn_li);
                    //source.Item = dyn_li;
                    var dyn_hli = new Hierarchy <LayoutItem>(dyn_li);
                    source.AddChild(dyn_hli);
                }
                //source.Item
            }
        }
Example #5
0
        public void AddChildEntity(MyEntity child)
        {
            if (MyFakes.ENABLE_PLANET_HIERARCHY)
            {
                var bbox = child.PositionComp.WorldAABB;

                ProfilerShort.Begin("Add sector to tree.");
                int proxyId = m_sectors.AddProxy(ref bbox, child, 0);
                ProfilerShort.BeginNextBlock("Add to child hierarchy.");
                Hierarchy.AddChild(child, true);
                ProfilerShort.End();

                MyHierarchyComponentBase childHierarchy = child.Components.Get <MyHierarchyComponentBase>();
                childHierarchy.ChildId = proxyId;
            }
            else
            {
                MyEntities.Add(child);
            }
        }
Example #6
0
        public static void ProjectNodes(Hierarchy <LayoutItem> axisnode)
        {
            var nodes = axisnode.Children.Where(i => Utilities.ObjectExtensions.In(i.Item.Category, LayoutItemCategory.BreakDown, LayoutItemCategory.Dynamic)).ToList();

            //Project Axisnodes
            if (nodes.Count > 0)
            {
                var basenode = nodes.FirstOrDefault();

                for (int i = 1; i < nodes.Count; i++)
                {
                    var node      = nodes[i];
                    var baseleafs = basenode.GetLeafs();

                    var projectionnodes = node.GetLeafs();
                    foreach (var leaf in baseleafs)
                    {
                        foreach (var projectionnode in projectionnodes)
                        {
                            var copynode = projectionnode.Copy();
                            copynode.All().ForEach(n => n.Item = new LayoutItem(n.Item));
                            leaf.AddChild(copynode);
                            leaf.Item.IsAbstract = true;
                        }
                    }
                }
                if (nodes.Count > 1)
                {
                    var li = new LayoutItem();
                    li.Category = LayoutItemCategory.BreakDown;
                    li.Axis     = axisnode.Item.Axis;
                    li.ID       = "Effective_Breakdown_" + li.Axis;
                    li.LabelID  = li.ID;
                    var hli = new Hierarchy <LayoutItem>(li);
                    hli.AddChild(basenode);
                    axisnode.Clear();
                    axisnode.AddChild(hli);
                }
            }
        }
Example #7
0
        protected Hierarchy <Link> GetXbrlRendering()
        {
            var result = new Hierarchy <Link>();

            foreach (var arc in Arcs)
            {
                var from  = Identifiables.FirstOrDefault(i => i.LabelID == arc.From);
                var to    = Identifiables.FirstOrDefault(i => i.LabelID == arc.To);
                var harc  = new Hierarchy <Link>(arc);
                var hfrom = new Hierarchy <Link>(from);
                var hto   = new Hierarchy <Link>(to);
                hfrom.AddChild(harc);
                harc.AddChild(hto);
                if (result.Item == null)
                {
                    result = hfrom;
                }
            }
            while (result.Parent != null)
            {
                result = result.Parent;
            }
            return(result);
        }
Example #8
0
        public void AttachPilot(MyCharacter pilot, bool storeOriginalPilotWorld = true, bool calledFromInit = false)
        {
            System.Diagnostics.Debug.Assert(pilot != null);
            System.Diagnostics.Debug.Assert(m_pilot == null);

            m_pilot = pilot;
            m_pilot.OnMarkForClose += m_pilotClosedHandler;
            m_pilot.IsUsing         = this;

            //m_soundEmitter.OwnedBy = m_pilot;
            if (MyFakes.ENABLE_NEW_SOUNDS)
            {
                StartLoopSound();
            }

            if (storeOriginalPilotWorld)
            {
                m_pilotRelativeWorld = (Matrix)MatrixD.Multiply(pilot.WorldMatrix, this.PositionComp.GetWorldMatrixNormalizedInv());
                if (Sync.IsServer)
                {
                    var relativeEntry = new MyPositionAndOrientation(m_pilotRelativeWorld.Value);
                    SyncObject.SendPilotRelativeEntryUpdate(ref relativeEntry);
                }
            }

            if (pilot.InScene)
            {
                MyEntities.Remove(pilot);
            }

            m_pilot.Physics.Enabled = false;
            m_pilot.PositionComp.SetWorldMatrix(WorldMatrix);
            m_pilot.Physics.Clear();
            //m_pilot.SetPosition(GetPosition() - WorldMatrix.Forward * 0.5f);

            Hierarchy.AddChild(m_pilot, true, true);

            var gunEntity = m_pilot.CurrentWeapon as MyEntity;

            if (gunEntity != null)
            {
                var ob = gunEntity.GetObjectBuilder();
                m_pilotGunDefinition = ob.GetId();
            }
            else
            {
                m_pilotGunDefinition = null;
            }

            MyAnimationDefinition animationDefinition;
            MyDefinitionId        id = new MyDefinitionId(typeof(MyObjectBuilder_AnimationDefinition), BlockDefinition.CharacterAnimation);

            if (!MyDefinitionManager.Static.TryGetDefinition(id, out animationDefinition) && !MyFileSystem.FileExists(BlockDefinition.CharacterAnimation))
            {
                BlockDefinition.CharacterAnimation = null;
            }

            PlacePilotInSeat(pilot);
            m_rechargeSocket.PlugIn(m_pilot.SuitBattery);

            // Control should be handled elsewhere if we initialize the grid in the Init(...)
            if (!calledFromInit)
            {
                GiveControlToPilot();
            }
            m_pilot.SwitchToWeapon(null);
        }
Example #9
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);
        }