Пример #1
0
 /// <summary>
 /// Clones the event and adds it (if necessary) to the project, then runs all enabled filters against it. Returns a string that is null if there was no error, or an error code such as "FILTER ERROR" if there was an error.
 /// </summary>
 /// <param name="p">Project to insert the event into.</param>
 /// <param name="eventOriginal">Event to clone and insert.  The event object is not changed by this method.</param>
 /// <returns>Returns a string that is null if there was no error, or an error code such as "FILTER ERROR" if there was an error.</returns>
 private SubmitResult InsertIntoProject(Project p, Event eventOriginal)
 {
     try
     {
         Event ev = JsonConvert.DeserializeObject <Event>(JsonConvert.SerializeObject(eventOriginal));
         using (FilterEngine fe = new FilterEngine(p.Name))
         {
             BasicEventTimer bet = fe.AddEventAndRunEnabledFilters(ev);
             if (Settings.data.verboseSubmitLogging)
             {
                 Util.SubmitLog(p.Name, "Event " + ev.EventId + " Submission Succeeded\r\n" + bet.ToString("\r\n"));
             }
         }
         PushManager.Notify(p.Name, ev);
         return(SubmitResult.OK);
     }
     catch (FilterException ex)
     {
         string timing = "\r\n" + ex.timer.ToString("\r\n");
         Util.SubmitLog(p.Name, "Event Submission Failed with FilterException" + timing + "\r\n" + ex.ToString());
         Logger.Debug(ex, "FilterEngine Error" + timing);
         Emailer.SendError(Context, "FilterEngine Error" + timing, ex);
         return(SubmitResult.FilterError);
     }
     catch (Exception ex)
     {
         Util.SubmitLog(p.Name, "Event Submission Failed with Exception\r\n" + ex.ToString());
         Logger.Debug(ex, "Unhandled exception thrown when inserting event into project \"" + p.Name + "\".");
         Emailer.SendError(Context, "Unhandled exception thrown when inserting event into project \"" + p.Name + "\".", ex);
         return(SubmitResult.FatalError);
     }
 }
Пример #2
0
        public void DateTime_LessThanOrEqual()
        {
            var builder = new QueryBuilder();

            builder.AddClause("BirthDate", new DateTime(1990, 03, 2), Operator.LessThanOrEqual, Connector.And);

            var engine = new FilterEngine();

            var expression = engine.BuildPredicate <Person>(builder.Clauses);
            var result     = Persons.Where(expression);

            Assert.True(result.Count() == 2);
        }
Пример #3
0
        public void DateTime_Equals()
        {
            var builder = new QueryBuilder();

            builder.AddClause("AccountBalance", 1000000098987868767, Operator.Equal, Connector.And);

            var engine = new FilterEngine();

            var expression = engine.BuildPredicate <Person>(builder.Clauses);
            var result     = Persons.Where(expression);

            Assert.True(result.Count() == 1);
        }
Пример #4
0
        public ActionResult RunEnabledFiltersAgainstAllEvents()
        {
            ProjectRequestBase request = ApiRequestBase.ParseRequest <ProjectRequestBase>(this);

            if (!request.Validate(out Project p, out ApiResponseBase error))
            {
                return(Json(error));
            }

            using (FilterEngine fe = new FilterEngine(request.projectName))
                fe.RunEnabledFiltersAgainstAllEvents();
            return(Json(new ApiResponseBase(true)));
        }
Пример #5
0
        public ActionResult RunFilterAgainstAllEvents()
        {
            OneFilterRequest request = ApiRequestBase.ParseRequest <OneFilterRequest>(this);

            if (!request.Validate(out Project p, out ApiResponseBase error))
            {
                return(Json(error));
            }

            using (FilterEngine fe = new FilterEngine(request.projectName))
                fe.RunFilterAgainstAllEvents(request.filterId, true);
            return(Json(new ApiResponseBase(true)));
        }
Пример #6
0
        public void Decimal_Equals()
        {
            var builder = new QueryBuilder();

            builder.AddClause("Debit", 100m, Operator.Equal, Connector.And);

            var engine = new FilterEngine();

            var expression = engine.BuildPredicate <Person>(builder.Clauses);
            var result     = Persons.Where(expression);

            Assert.True(result.Count() == 1);
        }
Пример #7
0
        [SetUp] public void SetUp()
        {
            _core = new TestCore();
            _storage = _core.ResourceStore;

            CreateNecessaryResources();

            _registry = _core.FilterRegistry as FilterRegistry;
            _engine = _core.FilterEngine as FilterEngine;
            _wsManager = _core.WorkspaceManager;
            _unreads = _core.UnreadManager as UnreadManager;
            _mockResourceTabProvider = _core.GetComponentInstanceOfType( typeof(MockResourceTabProvider) ) as MockResourceTabProvider;
            _unreads.RegisterUnreadCountProvider( FilterManagerProps.ViewResName, new ViewUnreadCountProvider() );
        }
Пример #8
0
        public ActionResult SearchAdvanced()
        {
            SearchAdvancedRequest request = ApiRequestBase.ParseRequest <SearchAdvancedRequest>(this);

            if (!request.Validate(out Project p, out ApiResponseBase error))
            {
                return(Json(error));
            }

            SearchResultsResponse response = new SearchResultsResponse();

            using (FilterEngine fe = new FilterEngine(p.Name))
            {
                HashSet <long> readEventIds = new HashSet <long>(fe.db.GetAllReadEventIds(session.GetUser().UserId));

                response.events = fe.AdvancedSearch(request.conditions, request.matchAll, request.folderId, session.GetUser().GetEventListCustomTagKey(p.Name))
                                  .Select(ev => ProduceEventSummary(ev, readEventIds))
                                  .ToList();
            }
            return(Json(response));
        }
Пример #9
0
 private void Awake()
 {
     filterEngine = new FilterEngine();
     if (CineastConfiguration.HasConfig())
     {
         CineastConfiguration config = CineastConfiguration.Load();
         if (!config.IsEmpty())
         {
             CineastUtils.Configuration = config;
         }
         else
         {
             CineastUtils.Configuration = CineastConfiguration.GetDefault();
         }
     }
     else
     {
         CineastConfiguration.StoreEmpty();
     }
     _guidHandlerMap = new Dictionary <string, CineastResponseHandler <List <MultimediaObject> > >();
 }
Пример #10
0
        public void IsMatch_Equal_And_StringStatement_SimpleStatements_Success()
        {
            var builder = new QueryBuilder();

            builder.AddClause("Name", "Ana", Operator.Equal, Connector.And);
            builder.AddClause("Age", 32, Operator.Equal, Connector.Or);

            var engine = new FilterEngine();

            var dictionary = new Dictionary <string, object>();

            dictionary.Add("Name", "Ana");
            dictionary.Add("Age", 32);

            var obj = dictionary.BuildTargetObject();

            var isValid = engine.Evaluate(obj, builder.Clauses);

            var expression = engine.BuildPredicate <Person>(builder.Clauses);

            var result = Persons.Where(expression);

            Assert.True(result.Count() == 1);
        }
Пример #11
0
        private void ConfigureDisplayOptions(IResource view, string viewName, IResourceList result)
        {
            _displayOptions         = new ResourceListDisplayOptions();
            _displayOptions.Caption = !String.IsNullOrEmpty(viewName) ? viewName : "Unnamed view";

            string deepName = view.GetStringProp("DeepName");
            string errorMsg = view.GetStringProp(Core.Props.LastError);

            if (!String.IsNullOrEmpty(errorMsg))
            {
                _displayOptions.StatusLine             = errorMsg;
                _displayOptions.StatusLineClickHandler = RefreshViewState;
                _lastErrorView = view;
            }
            else
            if (deepName != Core.FilterRegistry.ViewNameForSearchResults)
            {
                if (!view.HasProp("DefaultSort"))
                {
                    result = SafeSort(result);
                    result.Sort(new SortSettings(Core.Props.Date, false));
                }

                string content = view.GetStringProp(Core.Props.ContentType);
                if (content == null || content.IndexOf('|') != -1)
                {
                    _displayOptions.SeeAlsoBar = true;
                }

                _displayOptions.DefaultGroupItems = !view.HasProp("DisableDefaultGroupping");
            }
            else
            {
                //  If we are in the normal mode (Running) - just show the
                //  result to the user. Otherwise, through the chain of two
                //  event handlers, wait until both events take place:
                //  1. Core is switched to state Running;
                //  2. Text Index is completely loaded.
                if (Core.State == CoreState.Running)
                {
                    _displayOptions.HighlightDataProvider = FilterEngine.Highlighter;
                    _displayOptions.SeeAlsoBar            = true;

                    string stopWordsMessage = FilterEngine.VisualizeStopWords();
                    if (FilterEngine._lastQueryError != null)
                    {
                        _displayOptions.StatusLine = FilterEngine._lastQueryError;
                    }
                    else if (stopWordsMessage.Length > 0)
                    {
                        _displayOptions.StatusLine = stopWordsMessage;
                    }

                    /* [yole] This behavior is unusable.
                     * Use case: Perform a search in a tab where there are no search results for some type. Omea
                     * remembers that the search view was selected. Then the following code switches to the tab where
                     * search results are present. Then, as soon as you try to switch to the original tab again,
                     * the search view is selected again, the following code runs again, and the selection jumps back.
                     * In effect, the original tab becomes unreachable.
                     *
                     * if( view.HasProp( "RunToTabIfSingleTyped" ) )
                     * {
                     *      string[] types = ResourceTypeHelper.GetUnderlyingResourceTypes( result );
                     *      if( types != null && types.Length == 1 )
                     *      {
                     *              string tabID = Core.TabManager.FindResourceTypeTab( types[ 0 ] );
                     *              if( tabID != null )
                     *                      Core.TabManager.ActivateTab( tabID );
                     *      }
                     * }
                     */
                }
                else
                {
                    _displayOptions.EmptyText          = "Loading information from text index... Please wait or switch to another view.";
                    Core.TextIndexManager.IndexLoaded += ExecSearchViewLateMarshaller;
                }
            }
        }
Пример #12
0
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            string CAMLQuery             = null;


            try
            {
                if (this._listId != null && this._viewName != null)
                {
                    using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                    {
                        using (SPWeb web = site.OpenWeb(this.ListWebId))
                        {
                            SPList selectedList        = web.Lists[this._listId];
                            SPListItemCollection items = selectedList.Items;
                            SPView defaultView         = selectedList.Views[this._viewName];
                            uint   itemsPerPage        = defaultView.RowLimit;

                            SPViewFieldCollection fields = defaultView.ViewFields;
                            System.Collections.Specialized.StringCollection stringCol = fields.ToStringCollection();

                            if (Page.Request.QueryString != null && Page.Request.QueryString.Count > 0)
                            {
                                FilterEngine filterEngine = new FilterEngine(Page.Request.QueryString, selectedList);
                                CAMLQuery = filterEngine.CAMLQuery;
                            }

                            // Nik20121105 - Write the table headers;
                            sb.AppendLine("<table class=\"wet-boew-zebra\">");
                            sb.Append("<tr>");
                            foreach (string field in stringCol)
                            {
                                sb.Append("<th>" + selectedList.Fields.GetFieldByInternalName(field).Title + "</th>");
                            }
                            sb.Append("</tr>");

                            if (CAMLQuery == null)
                            {
                                CAMLQuery = "";
                            }

                            SPQuery query = new SPQuery();
                            query.Query    = CAMLQuery;
                            query.RowLimit = itemsPerPage;
                            items          = selectedList.GetItems(query);

                            if (Page.Request.QueryString["p_ID"] != null)
                            {
                                string prev = "";
                                if (Page.Request.QueryString["PagedPrev"] == "TRUE")
                                {
                                    prev = "&PagedPrev=TRUE";
                                }
                                SPListItemCollectionPosition position = new SPListItemCollectionPosition("Paged=TRUE&p_ID=" + Page.Request.QueryString["p_ID"] + prev);
                                query.ListItemCollectionPosition = position;
                            }

                            string lastId = "";
                            foreach (SPListItem item in items)
                            {
                                sb.AppendLine("<tr>");
                                bool firstCol = true;
                                foreach (string field in stringCol)
                                {
                                    if (firstCol)
                                    {
                                        firstCol = false;

                                        string  itemUrl = string.Empty;
                                        SPField test    = item.Fields.TryGetFieldByStaticName("BdcIdentity");

                                        if (test != null)
                                        {
                                            itemUrl = HttpUtility.UrlEncode(this._listWeb + "/_layouts/listform.aspx?PageType=4&ListId={" + this._listId.ToString() + "}&ID=" + item["BdcIdentity"].ToString());
                                        }
                                        else
                                        {
                                            itemUrl = HttpUtility.UrlEncode(this._listWeb + "/_layouts/listform.aspx?PageType=4&ListId={" + this._listId.ToString() + "}&ID=" + item.ID.ToString());
                                        }

                                        string renderedField = string.Empty;
                                        if (item[field] != null)
                                        {
                                            renderedField = item[field].ToString();
                                        }

                                        sb.AppendLine("<td><a href=\"" + this.ItemViewerUrl + "?ItemUrl=" + itemUrl + "\">" + renderedField.Replace("string;#", "").Replace("datetime;#", "").Replace("number;#", "") + "</a></td>");
                                    }
                                    else
                                    {
                                        string renderedField = string.Empty;
                                        if (item[field] != null)
                                        {
                                            renderedField = FieldRenderer.RenderField(item[field].ToString(), item.Fields.GetFieldByInternalName(field));
                                        }
                                        sb.AppendLine("<td>" + renderedField + "</td>");
                                    }
                                }
                                sb.AppendLine("</tr>");
                                lastId = item.ID.ToString();
                            }

                            sb.AppendLine("</table>");

                            string curUrl     = Page.Request.Url.OriginalString;
                            string forwardUrl = curUrl.Replace("p_ID=" + Page.Request.QueryString["p_ID"], "p_ID=" + lastId).Replace("&PagedPrev=TRUE", "");
                            string prevUrl    = curUrl.Replace("p_ID=" + Page.Request.QueryString["p_ID"], "p_ID=" + items[0].ID.ToString());

                            if (forwardUrl.IndexOf("p_ID") < 0)
                            {
                                if (!forwardUrl.Contains("?"))
                                {
                                    forwardUrl += "?p_ID=" + lastId;
                                }
                                else
                                {
                                    forwardUrl += "&p_ID=" + lastId;
                                }
                            }

                            if (prevUrl.IndexOf("p_ID") < 0)
                            {
                                if (!prevUrl.Contains("?"))
                                {
                                    prevUrl += "?p_ID=" + items[0].ID.ToString();
                                }
                                else
                                {
                                    prevUrl += "&p_ID=" + items[0].ID.ToString();
                                }
                            }

                            if (!prevUrl.Contains("PagedPrev"))
                            {
                                prevUrl += "&PagedPrev=TRUE";
                            }

                            if (CAMLQuery != null)
                            {
                                SPQuery newQuery = new SPQuery();
                                newQuery.Query = CAMLQuery;
                                if (items[0].ID != selectedList.GetItems(newQuery)[0].ID)
                                {
                                    sb.AppendLine("<a href=\"" + prevUrl + "\">< Previous</a>&nbsp;&nbsp;");
                                }
                            }
                            else if (items[0].ID != selectedList.Items[0].ID)
                            {
                                sb.AppendLine("<a href=\"" + prevUrl + "\">< Previous</a>&nbsp;&nbsp;");
                            }

                            if ((int.Parse(lastId) + itemsPerPage) < selectedList.Items.Count)
                            {
                                sb.AppendLine("<a href=\"" + forwardUrl + "\">Next ></a>");
                            }
                            writer.Write(sb.ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogEngine.Log(ex, "Accessible Lists");
            }
        }
Пример #13
0
 private void Awake()
 {
     logger       = LogManager.GetInstance().GetLogger(GetType());
     filterEngine = new FilterEngine();
 }
Пример #14
0
        public List <VS_CUSTOMERS> GetCustomers(bool search, string txtSearch, string columnName, int filterCount, CustomerType customerType, bool filterIsValidAndOn)
        {
            List <VS_CUSTOMERS> lstCustomers = new List <VS_CUSTOMERS>();
            Guid currentUserId = AppSettings.GetActiveUserId();
            var  companyId     = AppSettings.GetCompanyId(currentUserId);
            var  prop          = typeof(VS_CUSTOMERS).GetProperty(columnName.ToLower(),
                                                                  BindingFlags.Public
                                                                  | BindingFlags.Instance
                                                                  | BindingFlags.IgnoreCase);
            AppSecurityUtil appSecurityUtil = new AppSecurityUtil();

            //Filtering is on.
            if (search)
            {
                FilterEngine filter = new FilterEngine();
                filter = filter.GetFilterByPropertyType(prop, txtSearch);
                List <FilterEngine> filters = new List <FilterEngine> {
                    filter
                };

                var filterCriteria = ExpressionBuilder.GetExpression <VS_CUSTOMERS>(filters).Compile();

                //SuperAdmin
                if (appSecurityUtil.ValidateRoles())
                {
                    switch (customerType)
                    {
                    case CustomerType.All:
                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable().AsEnumerable()
                                       .Where(filterCriteria)
                                       .OrderByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;

                    case CustomerType.Private:
                    case CustomerType.Business:

                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable()
                                       .Where(u => u.CustomerTypeId == (int)customerType).AsEnumerable()
                                       .Where(filterCriteria)
                                       .OrderByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;
                    }
                }
                else
                {
                    //Regular users
                    switch (customerType)
                    {
                    case CustomerType.All:
                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable()
                                       .Where(u => u.UserId == currentUserId ||
                                              (u.IsPrivate == false && u.CompanyId == companyId)).AsEnumerable()
                                       .Where(filterCriteria)
                                       .OrderByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;

                    case CustomerType.Private:
                    case CustomerType.Business:

                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable()
                                       .Where(u => u.UserId == currentUserId && u.CustomerTypeId == (int)customerType ||
                                              (u.IsPrivate == false && u.CompanyId == companyId &&
                                               u.CustomerTypeId == (int)customerType)).AsEnumerable()
                                       .Where(filterCriteria)
                                       .OrderByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;
                    }
                }
            }

            else
            {
                //No Filtering
                //SuperAdmin
                if (appSecurityUtil.ValidateRoles())
                {
                    switch (customerType)
                    {
                    case CustomerType.All:
                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable().AsEnumerable()
                                       .OrderByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;

                    case CustomerType.Private:
                    case CustomerType.Business:

                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable()
                                       .Where(u => u.CustomerTypeId == (int)customerType).AsEnumerable()
                                       .OrderByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;
                    }
                }
                else
                {
                    //Regular users
                    switch (customerType)
                    {
                    case CustomerType.All:
                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable()
                                       .Where(u => u.UserId == currentUserId ||
                                              (u.IsPrivate == false && u.CompanyId == companyId)).AsEnumerable()
                                       .OrderBy(x => x.CustomerCaseNumber)
                                       .ThenByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;

                    case CustomerType.Private:
                    case CustomerType.Business:

                        lstCustomers = _repository.GetRepository <VS_CUSTOMERS>().Queryable()
                                       .Where(u => u.UserId == currentUserId && u.CustomerTypeId == (int)customerType ||
                                              (u.IsPrivate == false && u.CompanyId == companyId &&
                                               u.CustomerTypeId == (int)customerType)).AsEnumerable()
                                       .OrderBy(x => x.CustomerCaseNumber)
                                       .ThenByDescending(x => x.ModifiedDateTime).Take(filterCount)
                                       .ToList();
                        break;
                    }
                }
            }

            if (filterIsValidAndOn)
            {
                if (FilterEngine.GetCurrentFilter != null && FilterEngine.GetCurrentFilter.Count > 0)
                {
                    var deleg1 =
                        ExpressionBuilder.GetExpression <VS_CUSTOMERS>(FilterEngine.GetCurrentFilter).Compile();
                    lstCustomers = lstCustomers.Where(deleg1).ToList();
                }
            }
            return(lstCustomers);
        }
Пример #15
0
        static void Main(string[] args)
        {
            int minStatPercentile = 80;
            var inventory         = new Inventory(@"..\..\..\..\..\my-gear-list-with-mods.json", minStatPercentile, @"S:\");

            Console.WriteLine("Pre-computing all build combinations...");
            var cacheName   = "tactician-striker-electronics";
            var start       = DateTime.Now;
            var buildsCount = inventory.GenerateBuildCombinationCache(cacheName);
            var end         = DateTime.Now;

            Console.WriteLine(string.Format("\nCompleted - created {0} build combinations - ({1} builds/sec)", buildsCount, buildsCount / (end - start).TotalSeconds));

            var engine = new FilterEngine(cacheName, 5, @"S:\");

            var filters = new List <FilterPipelineStep>
            {
                new FilterPipelineStep {
                    Filter = "Lib.UnlockNamedGearSetFilter", Parameters = new Dictionary <string, string>()
                    {
                        { "gearset", "tactician" }, { "min_items", "3" }
                    }
                },
                new FilterPipelineStep {
                    Filter = "Lib.UnlockNamedGearSetFilter", Parameters = new Dictionary <string, string>()
                    {
                        { "gearset", "striker" }, { "min_items", "2" }
                    }
                },
                new FilterPipelineStep {
                    Filter = "Lib.EnsureAtLeastFilter", Parameters = new Dictionary <string, string>()
                    {
                        { "stat", "firearms" }, { "min_value", "3832" }
                    }
                },
                new FilterPipelineStep {
                    Filter = "Lib.EnsureAtLeastFilter", Parameters = new Dictionary <string, string>()
                    {
                        { "stat", "stamina" }, { "min_value", "3832" }
                    }
                }
            };

            engine.Filters = filters;

            var sortCriteria = new List <string> {
                "electronics", "skillhaste"
            };

            engine.SortCriteria = sortCriteria;

            start = DateTime.Now;
            var results = engine.Process();

            end = DateTime.Now;
            Console.WriteLine(string.Format("\n Completed searching for optimal builds - ({0} builds/sec)", buildsCount / (end - start).TotalSeconds));

            foreach (var res in results)
            {
                Console.WriteLine(string.Format("*** Top {0} builds", results.Count()));
                Console.WriteLine(string.Format("\nElectronics: {0}", res.Stats["electronics"]));
                Console.WriteLine(string.Format("Armor: {0}", res.Stats["armor"]));
                Console.WriteLine(string.Format("Skill Haste: {0}", res.Stats["skillhaste"]));
                Console.WriteLine(string.Format("Firearms: {0}", res.Stats["firearms"]));
                Console.WriteLine(string.Format("Stamina: {0}", res.Stats["stamina"]));
            }

            var resultsFile = string.Format("{0}-results.json", cacheName);

            Console.WriteLine("Results saved to: {0}", resultsFile);
            using (var sw = new StreamWriter(resultsFile))
            {
                sw.WriteLine(JsonConvert.SerializeObject(results));
            }
        }
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            string CAMLQuery = null;

            try
            {
                if (this._listId != null && this._viewName != null)
                {
                     using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                    {
                        using (SPWeb web = site.OpenWeb(this.ListWebId))
                        {
                            SPList selectedList = web.Lists[this._listId];
                            SPListItemCollection items = selectedList.Items;
                            SPView defaultView = selectedList.Views[this._viewName];
                            uint itemsPerPage = defaultView.RowLimit;

                            SPViewFieldCollection fields = defaultView.ViewFields;
                            System.Collections.Specialized.StringCollection stringCol = fields.ToStringCollection();

                            if (Page.Request.QueryString != null && Page.Request.QueryString.Count > 0)
                            {
                                FilterEngine filterEngine = new FilterEngine(Page.Request.QueryString, selectedList);
                                CAMLQuery = filterEngine.CAMLQuery;
                            }

                            // Nik20121105 - Write the table headers;
                            sb.AppendLine("<table class=\"wet-boew-zebra\">");
                            sb.Append("<tr>");
                            foreach (string field in stringCol)
                            {
                                sb.Append("<th>" + selectedList.Fields.GetFieldByInternalName(field).Title + "</th>");
                            }
                            sb.Append("</tr>");

                            if (CAMLQuery == null)
                            {
                                CAMLQuery = "";
                            }

                            SPQuery query = new SPQuery();
                            query.Query = CAMLQuery;
                            query.RowLimit = itemsPerPage;
                            items = selectedList.GetItems(query);

                            if (Page.Request.QueryString["p_ID"] != null)
                            {
                                string prev = "";
                                if (Page.Request.QueryString["PagedPrev"] == "TRUE")
                                    prev = "&PagedPrev=TRUE";
                                SPListItemCollectionPosition position = new SPListItemCollectionPosition("Paged=TRUE&p_ID=" + Page.Request.QueryString["p_ID"] + prev);
                                query.ListItemCollectionPosition = position;
                            }

                            string lastId = "";
                            foreach (SPListItem item in items)
                            {
                                sb.AppendLine("<tr>");
                                bool firstCol = true;
                                foreach (string field in stringCol)
                                {
                                    if (firstCol)
                                    {
                                        firstCol = false;

                                        string itemUrl = string.Empty;
                                        SPField test = item.Fields.TryGetFieldByStaticName("BdcIdentity");

                                        if(test != null)
                                            itemUrl = HttpUtility.UrlEncode(this._listWeb + "/_layouts/listform.aspx?PageType=4&ListId={" + this._listId.ToString() + "}&ID=" + item["BdcIdentity"].ToString());
                                        else
                                            itemUrl = HttpUtility.UrlEncode(this._listWeb + "/_layouts/listform.aspx?PageType=4&ListId={" + this._listId.ToString() + "}&ID=" + item.ID.ToString());

                                        string renderedField = string.Empty;
                                        if (item[field] != null)
                                            renderedField = item[field].ToString();

                                        sb.AppendLine("<td><a href=\"" + this.ItemViewerUrl + "?ItemUrl=" + itemUrl + "\">" + renderedField.Replace("string;#", "").Replace("datetime;#", "").Replace("number;#", "") + "</a></td>");
                                    }
                                    else
                                    {
                                        string renderedField = string.Empty;
                                        if(item[field] != null)
                                            renderedField = FieldRenderer.RenderField(item[field].ToString(), item.Fields.GetFieldByInternalName(field));
                                        sb.AppendLine("<td>" + renderedField + "</td>");
                                    }
                                }
                                sb.AppendLine("</tr>");
                                lastId = item.ID.ToString();
                            }

                            sb.AppendLine("</table>");

                            string curUrl = Page.Request.Url.OriginalString;
                            string forwardUrl = curUrl.Replace("p_ID=" + Page.Request.QueryString["p_ID"], "p_ID=" + lastId).Replace("&PagedPrev=TRUE", "");
                            string prevUrl = curUrl.Replace("p_ID=" + Page.Request.QueryString["p_ID"], "p_ID=" + items[0].ID.ToString());

                            if(forwardUrl.IndexOf("p_ID") < 0)
                            {
                                if(!forwardUrl.Contains("?"))
                                    forwardUrl += "?p_ID=" + lastId;
                                else
                                    forwardUrl += "&p_ID=" + lastId;
                            }

                            if (prevUrl.IndexOf("p_ID") < 0)
                            {
                                if (!prevUrl.Contains("?"))
                                    prevUrl += "?p_ID=" + items[0].ID.ToString();
                                else
                                    prevUrl += "&p_ID=" + items[0].ID.ToString();
                            }

                            if (!prevUrl.Contains("PagedPrev"))
                                prevUrl += "&PagedPrev=TRUE";

                            if (CAMLQuery != null)
                            {
                                SPQuery newQuery = new SPQuery();
                                newQuery.Query = CAMLQuery;
                                if(items[0].ID != selectedList.GetItems(newQuery)[0].ID)
                                    sb.AppendLine("<a href=\"" + prevUrl + "\">< Previous</a>&nbsp;&nbsp;");
                            }
                            else if(items[0].ID != selectedList.Items[0].ID)
                                sb.AppendLine("<a href=\"" + prevUrl + "\">< Previous</a>&nbsp;&nbsp;");

                            if((int.Parse(lastId) + itemsPerPage) < selectedList.Items.Count)
                                sb.AppendLine("<a href=\"" + forwardUrl + "\">Next ></a>");
                            writer.Write(sb.ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogEngine.Log(ex, "Accessible Lists");
            }
        }