Пример #1
0
 public static QueryGroupNode operator |(QueryNode node1, QueryNode node2)
 {
     QueryGroupNode res = new QueryGroupNode(GroupType.Or);
     res.Nodes.Add(node1);
     res.Nodes.Add(node2);
     return res;
 }
Пример #2
0
 public static QueryGroupNode operator &(QueryGroupNode node1, QueryNode node2)
 {
     if (node1.Group == GroupType.And) {
         node1.Nodes.Add(node2);
         return node1;
     }
     QueryGroupNode res = new QueryGroupNode(GroupType.And);
     res.Nodes.Add(node1);
     res.Nodes.Add(node2);
     return res;
 }
Пример #3
0
 private QueryNode SetQueryResult(QueryNode qn)
 {
     if (qn is QueryConditionNode) {
         var resultData = LocalStorage.Get(new Query { Condition = qn });
         if (resultData != null) {
             resultData = resultData.Select(r => new OverlayData(r) { ResponsibleNode = Node }).ToArray();
         } else {
             resultData = new OverlayData[0];
         }
         return new QueryConditionNodeResult(qn) {
             ResultData = resultData,
             IsExecutedByResponsibleNode = (Node.Equals((qn as QueryConditionNode).ResponsibleNode))
         };
     } else if (qn is QueryGroupNode) {
         var qng = qn as QueryGroupNode;
         QueryGroupNode result = new QueryGroupNode(qng.Group);
         foreach (var innerQn in qng.Nodes) {
             result.Nodes.Add(SetQueryResult(innerQn));
         }
         return result;
     } else {
         throw new NotImplementedException();
     }
 }
Пример #4
0
        protected QueryGroupNode ComposeGroupNode(QueryNode node1, QueryNode node2, GroupType groupType)
        {
            QueryGroupNode group1 = node1 as QueryGroupNode, group2 = node2 as QueryGroupNode;
            if (group1 != null && group1.Group != groupType)
                group1 = null;
            if (group2 != null && group2.Group != groupType)
                group2 = null;

            // don't corrupt named groups
            //if (group1 != null && group1.Name != null || group2 != null && group2.Name != null)
            //	group1 = group2 = null;

            if (group1 == null) {
                if (group2 == null) {
                    QueryGroupNode group = new QueryGroupNode(groupType);
                    group.Nodes.Add(node1);
                    group.Nodes.Add(node2);
                    return group;
                } else {
                    group2.Nodes.Insert(0, node1);
                    return group2;
                }
            } else {
                if (group2 == null)
                    group1.Nodes.Add(node2);
                else
                    foreach (QueryNode qn in group2.Nodes)
                        group1.Nodes.Add(qn);
                return group1;
            }
        }