/// <exclude />
        public string GetResult()
        {
            EntityTokenHtmlPrettyfierHelper helper = new EntityTokenHtmlPrettyfierHelper();

            helper.StartTable();
            helper.AddHeading("<b>Basic Information</b>");
            OnWriteEntityTokenType(this.EntityToken, helper);
            OnWriteType(this.EntityToken, helper);
            OnWriteSource(this.EntityToken, helper);
            OnWriteId(this.EntityToken, helper);

            var extraInfo = EntityToken.OnGetExtraPrettyHtml();

            if (!extraInfo.IsNullOrEmpty())
            {
                helper.AddFullRow(new[] { "<b>Extra</b>", extraInfo });
            }

            helper.AddHeading("<b>Custom Properties</b>");
            foreach (var kvp in _customProperties)
            {
                PropertyInfo propertyInfo = this.EntityToken.GetType().GetPropertiesRecursively().Single(f => f.Name == kvp.Key);
                kvp.Value(kvp.Key, propertyInfo.GetValue(this.EntityToken, null), helper);
            }


            helper.AddHeading("<b>Piggybag</b>");
            foreach (var kvp in this.PiggyBag)
            {
                OnPiggyBagEntry(kvp.Key, kvp.Value, helper);
            }

            helper.AddHeading("<b>SecurityAncestorProvider</b>");
            SecurityAncestorProviderAttribute attribute = this.EntityToken.GetType().GetCustomAttributesRecursively <SecurityAncestorProviderAttribute>().SingleOrDefault();

            OnWriteSecurityAncestorProvider(attribute, helper);


            helper.AddHeading("<b>AuxiliarySecurityAncestorProviders</b>");
            foreach (IAuxiliarySecurityAncestorProvider auxiliarySecurityAncestorProvider in AuxiliarySecurityAncestorFacade.GetAuxiliaryAncestorProviders(this.EntityToken.GetType()))
            {
                OnWriteAuxiliarySecurityAncestorProvider(auxiliarySecurityAncestorProvider, helper);
            }

            helper.EndTable();

            return(helper.GetResult());
        }
        /// <exclude />
        public string GetResult()
        {
            EntityTokenHtmlPrettyfierHelper helper = new EntityTokenHtmlPrettyfierHelper();

            helper.StartTable();
            helper.AddHeading("<b>Basic Information</b>");
            OnWriteEntityTokenType(this.EntityToken, helper);
            OnWriteType(this.EntityToken, helper);
            OnWriteSource(this.EntityToken, helper);
            OnWriteId(this.EntityToken, helper);

            var extraInfo = EntityToken.OnGetExtraPrettyHtml();
            if (!extraInfo.IsNullOrEmpty())
            {
                helper.AddFullRow(new[] { "<b>Extra</b>", extraInfo });
            }

            helper.AddHeading("<b>Custom Properties</b>");
            foreach (var kvp in _customProperties)
            {
                PropertyInfo propertyInfo = this.EntityToken.GetType().GetPropertiesRecursively().Single(f => f.Name == kvp.Key);
                kvp.Value(kvp.Key, propertyInfo.GetValue(this.EntityToken, null), helper);
            }


            helper.AddHeading("<b>Piggybag</b>");
            foreach (var kvp in this.PiggyBag)
            {
                OnPiggyBagEntry(kvp.Key, kvp.Value, helper);
            }

            helper.AddHeading("<b>SecurityAncestorProvider</b>");
            SecurityAncestorProviderAttribute attribute = this.EntityToken.GetType().GetCustomAttributesRecursively<SecurityAncestorProviderAttribute>().SingleOrDefault();
            OnWriteSecurityAncestorProvider(attribute, helper);


            helper.AddHeading("<b>AuxiliarySecurityAncestorProviders</b>");
            foreach (IAuxiliarySecurityAncestorProvider auxiliarySecurityAncestorProvider in AuxiliarySecurityAncestorFacade.GetAuxiliaryAncestorProviders(this.EntityToken.GetType()))
            {
                OnWriteAuxiliarySecurityAncestorProvider(auxiliarySecurityAncestorProvider, helper);
            }

            helper.EndTable();

            return helper.GetResult();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            string idString = Request.QueryString["Id"];
            if (string.IsNullOrEmpty(idString) == true)
            {
                return;
            }

            Guid id = new Guid(idString);
            string filename = Path.Combine(PathUtil.Resolve(GlobalSettingsFacade.TempDirectory), string.Format("{0}.RelationshipGraph", id));

            EntityToken startEntityToken = EntityTokenSerializer.Deserialize(C1File.ReadAllLines(filename)[0]);

            RelationshipOrientedGraph graph = new RelationshipOrientedGraph(startEntityToken);

            IEnumerable<IEnumerable<EntityToken>> paths = graph.Root.GetAllPaths();

            RelationshipOrientedGraphPlaceHolder.Controls.Add(new LiteralControl(string.Format("<div><b>Path count: {0}</b></div>", paths.Count())));

            int pathCounter = 1;
            foreach (IEnumerable<EntityToken> path in paths)
            {
                EntityTokenHtmlPrettyfierHelper helper = new EntityTokenHtmlPrettyfierHelper();
                helper.StartTable();

                helper.AddHeading(string.Format("<b>Path: {0}</b>", pathCounter++));

                int levelCounter = 0;
                foreach (EntityToken entityToken in path)
                {
                    helper.StartRow();
                    helper.AddCell(string.Format("<center><b>Level: {0}</b></center>", levelCounter++), 2, "#aaaaaa");
                    helper.EndRow();

                    helper.StartRow();
                    helper.AddCell("<b>Id</b>");
                    helper.AddCell(entityToken.OnGetIdPrettyHtml());
                    helper.EndRow();

                    helper.StartRow();
                    helper.AddCell("<b>Type</b>");
                    helper.AddCell(entityToken.OnGetTypePrettyHtml());
                    helper.EndRow();

                    helper.StartRow();
                    helper.AddCell("<b>Source</b>");
                    helper.AddCell(entityToken.OnGetSourcePrettyHtml());
                    helper.EndRow();

                    string extra = entityToken.OnGetExtraPrettyHtml();
                    if (string.IsNullOrEmpty(extra) == false)
                    {
                        helper.StartRow();
                        helper.AddCell("<b>Extra</b>");
                        helper.AddCell(extra);
                        helper.EndRow();
                    }

                    helper.StartRow();
                    helper.AddCell("<b>RTT</b>");
                    helper.AddCell(TypeManager.SerializeType(entityToken.GetType()));
                    helper.EndRow();
                }

                helper.EndTable();

                RelationshipOrientedGraphPlaceHolder.Controls.Add(new LiteralControl(helper.GetResult()));
            }
        }