Ejemplo n.º 1
0
 private Processor()
 {
     gadgetSpecFactory = DefaultGadgetSpecFactory.Instance;
     substituter       = new VariableSubstituter();
     blacklist         = new BasicGadgetBlacklist("");
     containerConfig   = JsonContainerConfig.Instance;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Evaluates the tokens bound to this AggregatorNode and generates the list of InferredFacts.
        /// </summary>
        internal void Evaluate()
        {
            int cntOfEarlierConditions = lhs.Count - 1;
            VariableSubstituter vs     = null;

            for (int i = cntOfEarlierConditions; i >= 0; i--)
            {
                Condition earlier_cond = lhs[i];
                if (earlier_cond.ConditionType == ConditionType.Positive)
                {
                    for (int f2 = 0; f2 < 3; f2++)
                    {
                        Variable o = earlier_cond.Fields[f2] as Variable;
                        if (o != null && o.Equals(_groupBy))
                        {
                            vs                      = new VariableSubstituter();
                            vs.FieldNumber          = f2;
                            vs.NumberOfLevelsUp     = (cntOfEarlierConditions - i);
                            vs.BindingPair.Variable = o;
                            f2                      = 3;
                            i = -1; //escape loop of cntOfEarlierConditions
                        }
                    }
                }
            }
            if (vs == null)
            {
                throw new ApplicationException("Bad rule");
            }

            Dictionary <Term, List <WME> > sorter = new Dictionary <Term, List <WME> >();

            foreach (Token token in _aggregatorNode.Items)
            {
                Token ptoken = token.GetTokenUp(vs.NumberOfLevelsUp);
                Term  key    = ptoken.WME.Fields[vs.FieldNumber];

                if (sorter.ContainsKey(key))
                {
                    List <WME> list = sorter[key];
                    if (list.Contains(token.WME) == false)
                    {
                        list.Add(token.WME);
                    }
                }
                else
                {
                    List <WME> list = new List <WME>();
                    list.Add(token.WME);
                    sorter.Add(key, list);
                }
            }

            foreach (KeyValuePair <Term, List <WME> > pair in sorter)
            {
                Term val = _aggregator.Evaluate(pair.Value);
                _inferredFacts.Add(new Activation(new WME(pair.Key, _aggregator.Alias, val), _conditionType));
            }
        }
Ejemplo n.º 3
0
        public void Test()
        {
            var s = VariableSubstituter.SedTransform("Pokwer", "s/o/0/g");

            Assert.AreEqual("P0kwer", s);

            s = VariableSubstituter.SedTransform("Pokwer", "s/([A-Z]).*/$1$0/g");

            Assert.AreEqual("PPokwer", s);

            s = VariableSubstituter.SedTransform("DbPokwer", "s/Db(Pokwer)/$1/g");

            Assert.AreEqual("Pokwer", s);

            s = VariableSubstituter.SedTransform("Pokwer22", "s/Db(Pokwer)/$1/g");

            Assert.AreEqual("Pokwer22", s);
        }
        public void Test()
        {
            var s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g; s/HELL(.*)/BYE$1/");

            Assert.AreEqual("BYEO", s);

            s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g \n;\ts/HELL(.*)/BYE$1/");

            Assert.AreEqual("BYEO", s);

            s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g \n\t;s/HELL(.*)/BYE$1/     ");

            Assert.AreEqual("BYEO", s);

            s = VariableSubstituter.SedTransform("Pokwer22", "s/^.*$/$(env.USERNAME)$0/g");

            Assert.AreEqual(Environment.GetEnvironmentVariable("USERNAME") + "Pokwer22", s);

            s = VariableSubstituter.SedTransform("Pokwer", "s/o/0/g");

            Assert.AreEqual("P0kwer", s);

            s = VariableSubstituter.SedTransform("Pokwer", "s/([A-Z]).*/$1$0/g");

            Assert.AreEqual("PPokwer", s);

            s = VariableSubstituter.SedTransform("DbPokwer", "s/Db(Pokwer)/$1/g");

            Assert.AreEqual("Pokwer", s);

            s = VariableSubstituter.SedTransform("Pokwer22", "s/Db(Pokwer)/$1/g");

            Assert.AreEqual("Pokwer22", s);

            s = VariableSubstituter.SedTransform("Hello", "s/^$/HELLO/g");

            Assert.AreEqual("Hello", s);

            s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g");

            Assert.AreEqual("HELLO", s);
        }
Ejemplo n.º 5
0
        public void Test()
        {
            var s = VariableSubstituter.SedTransform("Pokwer22", "s/^.*$/$(env.USERNAME)$0/g");

            Assert.AreEqual(Environment.GetEnvironmentVariable("USERNAME") + "Pokwer22", s);

            s = VariableSubstituter.SedTransform("Pokwer", "s/o/0/g");

            Assert.AreEqual("P0kwer", s);

            s = VariableSubstituter.SedTransform("Pokwer", "s/([A-Z]).*/$1$0/g");

            Assert.AreEqual("PPokwer", s);

            s = VariableSubstituter.SedTransform("DbPokwer", "s/Db(Pokwer)/$1/g");

            Assert.AreEqual("Pokwer", s);

            s = VariableSubstituter.SedTransform("Pokwer22", "s/Db(Pokwer)/$1/g");

            Assert.AreEqual("Pokwer22", s);
        }
Ejemplo n.º 6
0
        public void TestSubstitution()
        {
            var subst  = new VariableSubstituter("n", two);
            var result = n.Accept(subst);

            Assert.AreEqual("2", testAsync(result, 200).Result);

            result = zero.Accept(subst);
            Assert.AreEqual("0", testAsync(result, 200).Result);

            var exists = new NumExists("n", n == n);

            result = exists.Accept(subst);
            Assert.AreEqual(True, testAsync(result, 200).Result);

            var test = new Apply(new LambdaExpression("n", n == n), two);

            Assert.AreEqual(True, testAsync(test, 200).Result);

            // test that substitution avoids explosions
            var test2 = new Apply(new LambdaExpression("x", logicTrue), logicLoop);

            Assert.AreEqual(True, testAsync(test2, 200).Result);

            var test3 = new Apply(new LambdaExpression("x", logicLoop), logicTrue);

            Assert.AreEqual(Loop, testAsync(test3, 500).Result);

            var test4 = new Apply(new LambdaExpression("x", x & logicTrue), logicLoop);

            Assert.AreEqual(Loop, testAsync(test4, 500).Result);

            var test5 = new Apply(new LambdaExpression("x", x | logicTrue), logicLoop);

            Assert.AreEqual(True, testAsync(test5, 500).Result);
        }
Ejemplo n.º 7
0
 internal string GetName(TypeDescriptor type, string transformString = "")
 {
     return(VariableSubstituter.SedTransform(VariableSubstituter.Substitute(this.Name ?? type.TypeName, type), transformString));
 }
        public static string GetHtml(ContentItem model)
        {
            if (model == null)
            {
                return("{model = null}");                  // nothing to do
            }
            if (!(model is ContentList))
            {
                return("{adapter failure - Model is not a NewsList}");                  // nothing to do
            }
            var errorList      = new List <string>();
            var currentItem    = model as ContentList;
            var chH            = currentItem.HtmlHeader ?? string.Empty;
            var chF            = currentItem.HtmlFooter ?? string.Empty;
            var sb             = new System.Text.StringBuilder(50 * 1024 + chH.Length + chF.Length);
            var allNews        = new List <ContentItem>();
            var containerLinks = currentItem.Containers as IEnumerable <ContentListContainerLink>;
            Func <ContentItem, bool> pageCriteria = x => x.IsPage && x.Published.HasValue;

            if (containerLinks == null)
            {
                sb.Append(@"<div class=""alert alert-error"">Content List: ContainerLinks is null.</div>");
            }
            else if (currentItem.Containers.Count == 0)
            {
                sb.Append(@"<div class=""alert alert-warning"">Content List: ContainerLinks is empty. Edit the content list and add at least one content container.</div>");
            }
            else
            {
                foreach (var containerLink in containerLinks.Where(c => c.Container != null && c.Container.IsPage))
                {
                    var aChildren =
                        currentItem.EnforcePermissions ?
                        containerLink.Container.GetChildren().Where(pageCriteria).ToList() :
                        containerLink.Container.Children.Where(pageCriteria).ToList();

                    var cycleCheck = new List <ContentItem>();
                    if (containerLink.Recursive)
                    {
                        while (aChildren.Count > 0)
                        {
                            var child = aChildren[0];
                            aChildren.RemoveAt(0);
                            var chr =
                                currentItem.EnforcePermissions ?
                                child.GetChildren().Where(pageCriteria).Where(f => !cycleCheck.Contains(f)) :
                                child.Children.Where(pageCriteria).Where(f => !cycleCheck.Contains(f));
                            var chrX = chr as ContentItem[] ?? chr.ToArray();                             /* otherwise possible multiple enumeration to follow */
                            aChildren.AddRange(chrX);
                            cycleCheck.AddRange(chrX);
                            allNews.Add(child);
                        }
                    }
                    else
                    {
                        allNews.AddRange(aChildren);
                    }
                }
            }


            foreach (var x in currentItem.Exceptions)
            {
                errorList.Add(x.ToString());
            }

            if (!String.IsNullOrEmpty(currentItem.Title))
            {
                sb.AppendFormat("<h{0}>{1}</h{0}>", currentItem.TitleLevel, currentItem.Title);
            }

            var newsEnumerable = allNews.Where(pageCriteria);

            {
                // apply sort order ***
                var sortAscending = currentItem.SortDirection == SortDirection.Ascending;
                switch (currentItem.SortColumn)
                {
                case ContentSortMode.Expiration:
                    Func <ContentItem, DateTime> expirySortSelector = a => a.Expires != null ? a.Expires.Value : new DateTime();
                    newsEnumerable = sortAscending ? allNews.OrderBy(expirySortSelector) : allNews.OrderByDescending(expirySortSelector);
                    break;

                case ContentSortMode.Title:
                    Func <ContentItem, String> titleSortSelector = a => a.Title;
                    newsEnumerable = sortAscending ? allNews.OrderBy(titleSortSelector) : allNews.OrderByDescending(titleSortSelector);
                    break;

                case ContentSortMode.PublishDate:
                    Func <ContentItem, DateTime> dateSortSelector = a => a.Published != null ? a.Published.Value : new DateTime();
                    newsEnumerable = sortAscending ? allNews.OrderBy(dateSortSelector) : allNews.OrderByDescending(dateSortSelector);
                    break;
                }

                // apply filter ***

                if (!currentItem.ShowFutureEvents)
                {
                    newsEnumerable = newsEnumerable.Where(a => a.Published != null && a.Published.Value <= N2.Utility.CurrentTime());
                }

                if (!currentItem.ShowPastEvents)
                {
                    newsEnumerable = newsEnumerable.Where(a => a.Published != null && a.Published.Value >= N2.Utility.CurrentTime());
                }

                if (currentItem.MaxNews > 0)
                {
                    newsEnumerable = newsEnumerable.Take(currentItem.MaxNews);
                }
            }

            if (currentItem.DisplayMode == NewsDisplayMode.HtmlItemTemplate)
            {
                sb.Append(chH);
            }

            DateTime?lastDate = null;

            // why no ForEach here? it turns out that the C# compiler changes the behavior RE: how it deals with foreach
            // variables accessed from within lambda expressions.
            using (var itemEnumerator = newsEnumerable.GetEnumerator())
                while (itemEnumerator.MoveNext())
                {
                    ContentItem item          = itemEnumerator.Current;
                    var         itemPublished = item.Published == null ? new DateTime() : item.Published.Value;
                    if (currentItem.SortColumn == ContentSortMode.PublishDate && currentItem.GroupByMonth && (lastDate == null || lastDate.Value.Month != itemPublished.Month))
                    {
                        // new month ***
                        sb.AppendFormat("<h2>{0:MMMM yyyy}</h2>\n", itemPublished);
                        lastDate = item.Published.Value;
                    }

                    var showTitle = !String.IsNullOrEmpty(item.Title);                    // && item.ShowTitle
                    var text      = (item.GetDetail("Text") ?? "").ToString();
                    var summary   = (item.GetDetail("Summary") ?? "").ToString();

                    // display either full article or abstract + link ***
                    switch (currentItem.DisplayMode)
                    {
                    case NewsDisplayMode.TitleAndText:
                        if (showTitle)
                        {
                            sb.AppendFormat("<h{1}>{0}</h{1}>\n", item.Title ?? "Untitled", currentItem.TitleLevel + 1);
                        }
                        Debug.Assert(item.Published != null, "item.Published != null");
                        sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value);
                        sb.AppendFormat("<div class=\"article\">\n{0}\n</div>\n", text);
                        break;

                    case NewsDisplayMode.TitleAndAbstract:
                        if (!String.IsNullOrEmpty(text))
                        {
                            if (showTitle)
                            {
                                sb.AppendFormat("<h{2}><a href=\"{1}\">{0}</a></h{2}>\n", item.Title ?? "Untitled", item.Url, currentItem.TitleLevel + 1);
                            }
                            Debug.Assert(item.Published != null, "item.Published != null");
                            sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value);
                            sb.AppendFormat("<div class=\"abstract\">\n{0}\n</div>\n", summary);
                            sb.AppendFormat("<a href=\"{0}\">Read more...</a>\n", item.Url);
                        }
                        else
                        {
                            if (showTitle)
                            {
                                sb.AppendFormat("<h{1}>{0}</h{1}>\n", item.Title ?? "Untitled", currentItem.TitleLevel + 1);
                            }
                            Debug.Assert(item.Published != null, "item.Published != null");
                            sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value);
                            sb.AppendFormat("<div class=\"abstract\">\n{0}\n</div>\n", summary);
                        }
                        break;

                    case NewsDisplayMode.TitleLinkOnly:
                        sb.AppendFormat("<h{2}><a href=\"{1}\">{0}</a></h{2}>\n", item.Title ?? "Untitled", item.Url, currentItem.TitleLevel + 1);
                        Debug.Assert(item.Published != null, "item.Published != null");
                        sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value);
                        break;

                    case NewsDisplayMode.HtmlItemTemplate:
                        try
                        {
                            if (String.IsNullOrWhiteSpace(currentItem.HtmlItemTemplate))
                            {
                                break;
                            }
                            if (!currentItem.HtmlItemTemplate.Contains("$$") && !currentItem.HtmlItemTemplate.Contains("{{"))
                            {
                                sb.Append(currentItem.HtmlItemTemplate);
                                break;
                            }

                            sb.Append(VariableSubstituter.Substitute(currentItem.HtmlItemTemplate, item));
                        }
                        catch (Exception x)
                        {
                            errorList.Add(x.ToString());
                        }
                        break;

                    default:
                        errorList.Add("Can't render web part: invalid NewsDisplayMode.");
                        break;
                    }
                }

            if (currentItem.DisplayMode == NewsDisplayMode.HtmlItemTemplate)
            {
                sb.Append(chF);
            }

            errorList.ForEach(x => sb.AppendFormat(@"<div class=""alert alert-error""><pre>{0}</pre></div>", x));

            return(sb.ToString());
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Called when [variable substituter] is visited.
 /// </summary>
 /// <param name="substituter">The substituter.</param>
 public override void OnVariableSubstituter(VariableSubstituter substituter)
 {
     _sb.AppendLine(substituter.ToString());
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Called when [variable substituter] is visited.
 /// </summary>
 /// <param name="substituter">The substituter.</param>
 public virtual void OnVariableSubstituter(VariableSubstituter substituter)
 {
 }
Ejemplo n.º 11
0
 internal string GetSuffixName(PropertyDescriptor property, string transformString = "")
 {
     return(VariableSubstituter.SedTransform(VariableSubstituter.Substitute(this.SuffixName, property), transformString));
 }