Exemplo n.º 1
0
 public IDNode(string _id)
 {
     this.ID    = _id;
     this.right = null;
     this.left  = null;
 }
Exemplo n.º 2
0
        /// <summary>
        /// READ - read proxy given a model
        /// </summary>
        public static TProxy Read <TProxy>(IDNode node) where TProxy : class
        {
            TProxy tProxy = default(TProxy);

            switch (typeof(TProxy).Name) // alphabetized list
            {
            case "ActionProxy":          // action
            {
                ActionModel model = (ActionModel)node;
                {
                    DataContext         db    = model.Connection._db;
                    Table <ActionProxy> table = db.GetTable <ActionProxy>();
                    var query = from row in table where row.ActionID == model.ActionID select row;
                    tProxy = query.First() as TProxy;
                }
                //{
                //    string query = $"SELECT ActionID, ActionTypeID, SystemActionTypeID, Name, TimeSpent, DateStarted, IsVisibleOnPortal, IsKnowledgeBase, ImportID, DateCreated, DateModified, CreatorID, ModifierID, TicketID, Description, SalesForceID, DateModifiedBySalesForceSync, Pinned, ImportFileID FROM Actions WHERE ActionID={model.ActionID}";
                //    DataRow row = model.Connection.GetRowCollection(query)[0];
                //    tProxy = new ActionProxy(row) as TProxy;
                //}
            }
            break;

            case "ActionProxy[]":       // ticket actions
            {
                TicketModel ticket = (TicketModel)node;
                string      query  = $"SELECT * FROM Actions WHERE ActionID={ticket.TicketID}";
                tProxy = ticket.ExecuteQuery <ActionProxy>(query).ToArray() as TProxy;
            }
            break;

            case "AttachmentProxy":     // read all attachment types
                tProxy = ReadRefTypeProxy <TProxy>(node.Connection, (node as AttachmentModel).AttachmentID);
                break;

            case "AttachmentProxy[]":
                switch (node)
                {
                case ActionModel model:         // action attachments
                    Table <AttachmentProxy> table = node.Connection._db.GetTable <AttachmentProxy>();
                    tProxy = table.Where(a => a.RefID == model.ActionID && a.RefType == AttachmentProxy.References.Actions).ToArray() as TProxy;
                    break;

                case null:
                default:
                    if (Debugger.IsAttached)
                    {
                        Debugger.Break();
                    }
                    break;
                }
                break;

            case "ReminderProxy":
            {
                TicketReminderModel reminder = (TicketReminderModel)node;
                string query = $"SELECT * FROM Reminders WHERE ReminderID = {reminder.ReminderID} AND RefType=17";
                tProxy = reminder.ExecuteQuery <ReminderProxy>(query).ToArray() as TProxy;
            }
            break;

            case "SubscriptionModel[]":
            {
                TicketModel ticket = (TicketModel)node;
                string      query  = $"SELECT * FROM Subscriptions WHERE Reftype = 17 and RefID = {ticket.TicketID} and MarkDeleted = 0";
                tProxy = ticket.ExecuteQuery <SubscriptionModel>(query).ToArray() as TProxy;
            }
            break;

            case "TaskAssociationProxy":
            {
                TaskAssociationModel taskAssociation = (TaskAssociationModel)node;
                string query = String.Empty;        // = $"SELECT TaskID, RefID, RefType,CreatorID, DateCreated FROM TaskAssociations WHERE TaskID = {model.TaskID} AND RefID = {model.Ticket.TicketID} AND RefType = 17";
                tProxy = taskAssociation.ExecuteQuery <TaskAssociationProxy>(query).First() as TProxy;
            }
            break;

            case "TagLinkProxy[]":
            {
                TicketModel ticket = (TicketModel)node;
                //string query = $"SELECT * FROM TagLinks WHERE RefType = 17 AND RefID = {ticket.TicketID}";
                //tProxy = ticket.ExecuteQuery<TProxy>(query).ToArray() as TProxy;

                Table <TagLinkProxy> table = ticket.Connection._db.GetTable <TagLinkProxy>();
                tProxy = table.Where(t => (t.RefType == ReferenceType.Tickets) && (t.RefID == ticket.TicketID)).ToArray() as TProxy;
            }
            break;

            case "TicketProxy":     // ticket
            {
                TicketModel         model = (TicketModel)node;
                DataContext         db    = model.Connection._db;
                Table <TicketProxy> table = db.GetTable <TicketProxy>();
                var query = from row in table where row.TicketID == model.TicketID select row;
                tProxy = query.First() as TProxy;
            }
            break;

            case "TicketRelationshipProxy[]":
            {
                TicketModel model = (TicketModel)node;
                //string query = $"SELECT * FROM TicketRelationships WHERE Ticket1ID={model.TicketID} OR Ticket2ID={model.TicketID}";
                string query = $"SELECT * FROM TicketRelationships WHERE Ticket1ID={model.TicketID} OR Ticket2ID={model.TicketID}";
                tProxy = model.ExecuteQuery <TicketRelationshipProxy>(query).ToArray() as TProxy;
            }
            break;

            case "UserProxy":
            {
                UserModel user  = (UserModel)node;
                string    query = $"SELECT * FROM Users WHERE UserID={user.UserID}";
                tProxy = node.ExecuteQuery <UserProxy>(query).First() as TProxy;
            }
            break;

            default:
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }
                break;
            }
            return(tProxy);
        }
Exemplo n.º 3
0
        /// <summary>
        /// CREATE - create proxy child for model parent
        /// </summary>
        public static IDNode Create <TProxy>(IDNode idNode, TProxy tProxy) where TProxy : class
        {
            IDNode result = null;

            if (TryCreateAttachment(idNode as IAttachmentDestination, tProxy as AttachmentProxy, out result))
            {
                return(result);
            }

            string modification = $", CreatorID={idNode.Connection.UserID}, DateCreated={UpdateArguments.ToSql(DateTime.UtcNow)}";
            string now          = UpdateArguments.ToSql(DateTime.UtcNow);
            int    creatorID    = idNode.Connection.UserID;
            string command      = String.Empty;

            switch (tProxy) // alphabetized list
            {
            case ActionProxy proxy:
            {
                TicketModel model = (TicketModel)idNode;
                proxy.TicketID    = model.TicketID;
                proxy.CreatorID   = proxy.ModifierID = model.Connection.UserID;
                proxy.DateCreated = proxy.DateModified = DateTime.UtcNow;

                // 1. sql command
                //command = proxy.InsertCommandText();
                //SqlCommand sqlCommand = new SqlCommand(command, model.Connection._connection);
                //int id = Decimal.ToInt32((decimal)sqlCommand.ExecuteScalar());
                //result = new ActionModel(model, id);    // how to bypass Verify?

                // 2. linq
                DataContext         db    = model.Connection._db;
                Table <ActionProxy> table = db.GetTable <ActionProxy>();
                table.InsertOnSubmit(proxy);
                db.SubmitChanges();

                // 3. TeamSupport.Data
                //proxy.ActionID = NewAction(model, proxy);

                result = new ActionModel(model, proxy.ActionID);            // how to bypass Verify?
            }
            break;

            case ContactProxy proxy:
            {
                TicketModel model = (TicketModel)idNode;
                command = $"INSERT INTO UserTickets (TicketID, UserID, DateCreated, CreatorID)" +
                          $"SELECT {model.TicketID}, {proxy.UserID}, '{now}', {creatorID} ";
            }
            break;

            case CustomerProxy proxy:
            {
                TicketModel model = (TicketModel)idNode;
                command = $"INSERT INTO OrganizationTickets (TicketID, OrganizationID, DateCreated, CreatorID, DateModified, ModifierID)" +
                          $"SELECT {model.TicketID}, {proxy.OrganizationID}, '{now}', {creatorID}, '{now}', {creatorID}";
            }
            break;

            case SubscriptionProxy proxy:
            {
                TicketModel model = (TicketModel)idNode;
                command = $"INSERT INTO Subscriptions (RefType, RefID, UserID, DateCreated, DateModified, CreatorID, ModifierID)" +
                          $"SELECT 17, {model.TicketID}, {proxy.UserID}, '{now}','{now}', {creatorID}, {creatorID} ";
            }
            break;

            case TicketProxy proxy:
            {
                UserModel model = (UserModel)idNode;
                proxy.OrganizationID = model.Organization.OrganizationID;
                proxy.CreatorID      = proxy.ModifierID = model.UserID;
                proxy.UserID         = model.Connection.UserID;
                proxy.DateCreated    = proxy.DateModified = DateTime.UtcNow;
                proxy.TicketNumber   = 1 + model.ExecuteQuery <int>($"SELECT MAX(TicketNumber) FROM Tickets WHERE OrganizationID={model.Organization.OrganizationID}").Max();

                // 1. sql command
                //command = proxy.InsertCommandText(proxy.TicketNumber);
                //SqlCommand sqlCommand = new SqlCommand(command, model.Connection._connection);
                //int id = Decimal.ToInt32((decimal)sqlCommand.ExecuteScalar());
                //result = new TicketModel(model.Organization, id);    // how to bypass Verify?

                // 2. linq
                DataContext         db    = model.Organization.Connection._db;
                Table <TicketProxy> table = db.GetTable <TicketProxy>();
                table.InsertOnSubmit(proxy);
                db.SubmitChanges();

                // 3. TeamSupport.Data
                //proxy.TicketID = NewTicket(model, proxy);

                result = new TicketModel(model.Organization, proxy.TicketID);            // how to bypass Verify? - move to UserModel?
            }
            break;

            case null:
            default:
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }
                break;
            }

            //if (!String.IsNullOrEmpty(command))
            //    idNode.ExecuteCommand(command);
            // TODO - log
            return(result);
        }
Exemplo n.º 4
0
 public VariableNotDeclaredException(IDNode node, string message) : base(message)
 {
     Node = node;
 }
Exemplo n.º 5
0
        private static bool TryCreateAttachment(IAttachmentDestination attachedTo, AttachmentProxy tProxy, out IDNode result)
        {
            if ((attachedTo == null) || (tProxy == null))
            {
                result = null;
                return(false);
            }

            IDNode idNode = attachedTo as IDNode;

            tProxy.DateCreated    = tProxy.DateModified = DateTime.UtcNow;
            tProxy.CreatorID      = tProxy.ModifierID = idNode.Connection.UserID;
            tProxy.OrganizationID = idNode.Connection.OrganizationID;

            switch (tProxy)                   // alphabetized list
            {
            case ActionAttachmentProxy proxy: // create action attachment
                proxy.RefID = (idNode as ActionModel).ActionID;
                break;

            case AssetAttachmentProxy proxy:       // create asset attachment
                proxy.RefID = (idNode as AssetModel).AssetID;
                break;

            case ChatAttachmentProxy proxy:       // create asset attachment
                proxy.RefID = (idNode as ChatModel).ChatID;
                break;

            case CompanyActivityAttachmentProxy proxy:
                proxy.RefID = (idNode as NoteModel).NoteID;
                break;

            case ContactActivityAttachmentProxy proxy:
                proxy.RefID = (idNode as NoteModel).NoteID;
                break;

            case OrganizationAttachmentProxy proxy:
                proxy.RefID = (idNode as OrganizationModel).OrganizationID;
                break;

            case ProductVersionAttachmentProxy proxy:
                proxy.RefID = (idNode as ProductVersionModel).ProductVersionID;
                break;

            case TaskAttachmentProxy proxy:
                proxy.RefID = (idNode as TaskModel).TaskID;
                break;

            case UserAttachmentProxy proxy:       // create action attachment
                proxy.RefID = (idNode as UserModel).UserID;
                break;

            case UserPhotoAttachmentProxy proxy:       // create action attachment
                proxy.RefID = (idNode as UserModel).UserID;
                break;

            case WatercoolerMsgAttachmentProxy proxy:       // create action attachment
                proxy.RefID = (idNode as WatercoolerMsgModel).MessageID;
                break;

            case null:
            default:
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }
                break;
            }

            Table <AttachmentProxy> table = idNode.Connection._db.GetTable <AttachmentProxy>();

            table.InsertOnSubmit(tProxy);
            idNode.Connection._db.SubmitChanges();

            result = new AttachmentModel(attachedTo, tProxy.AttachmentID);    // disable Verify?
            return(true);
        }
Exemplo n.º 6
0
        private void CheckExistVars(CommonTree node, string methodName)
        {
            dynamic left = node.GetChild(0);
            dynamic right = node.GetChild(1);
            if (left is IDNode)
            {
                var temp = left as IDNode;
                VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName);
                if (type == VarType.Undefined)
                {
                    Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line);
                }
                else
                {
                    AddID(temp, methodName);
                }
            }

            if (left is ArrayInitNode)
            {
                IDNode temp = left.GetChild(0);
                VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName);
                if (type == VarType.Undefined)
                {
                    Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line);
                }
                else
                {
                    AddID(temp, methodName);
                    Parsing(left.GetChild(1) as dynamic, methodName);
                }
            }

            if (right is IDNode)
            {
                var temp = right as IDNode;
                VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName);
                if (type == VarType.Undefined)
                {
                    Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line);
                }
                else
                {
                    AddID(temp, methodName);
                }

            }

            if (right is ArrayInitNode)
            {
                IDNode temp = right.GetChild(0);
                VarType type = Context.SearchVar(temp.GetChild(0).Text, methodName);
                if (type == VarType.Undefined)
                {
                    Console.WriteLine("Использование неопределенной переменной {0}. Строка {1}", temp.VarName, node.Line);
                }
                else
                {
                    AddID(temp, methodName);
                    Parsing(right.GetChild(1) as dynamic, methodName);
                }
            }
        }
Exemplo n.º 7
0
        public void Init(ParsingContext context, ParseTreeNode parseNode)
        {
            if (parseNode.ChildNodes[0].Token != null)
            {
                if (parseNode.ChildNodes[0].Token.Text == SonesGQLConstants.ASTERISKSYMBOL)
                {
                    SelType = TypesOfSelect.Asterisk;
                }
                else
                {
                    throw new NotImplementedQLException(parseNode.ChildNodes[0].Token.Text);
                }
            }
            else if (parseNode.ChildNodes[0].AstNode is SelByTypeNode)
            {
                TypeName = ((SelByTypeNode)parseNode.ChildNodes[0].AstNode).TypeName;
            }
            else
            {
                #region IDNode or AggregateNode

                SelType = TypesOfSelect.None;
                object astNode = parseNode.ChildNodes[0].AstNode;

                if (astNode == null)
                {
                    // why the hack are functions without a caller in the child/child?
                    if ((parseNode.ChildNodes[0].ChildNodes != null && parseNode.ChildNodes[0].ChildNodes.Count > 0) && parseNode.ChildNodes[0].ChildNodes[0].AstNode != null)
                    {
                        astNode = parseNode.ChildNodes[0].ChildNodes[0].AstNode;
                    }
                    else
                    {
                        if (parseNode.ChildNodes[0].ChildNodes != null && parseNode.ChildNodes[0].ChildNodes.Count > 0)
                        {
                            throw new ArgumentException("This is not a valid IDNode: " + (parseNode.ChildNodes[0].ChildNodes.Aggregate("", (result, elem) => { result += elem.Token.Text + "."; return(result); })));
                        }
                        else
                        {
                            throw new ArgumentException("Found an invalid IDNode");
                        }
                    }
                }


                if (astNode is IDNode)
                {
                    IDNode aIDNode = astNode as IDNode;

                    #region ID

                    TypeOfColumnSource = TypesOfColumnSource.ID;

                    #region get value

                    ColumnSourceValue = ((IDNode)aIDNode).IDChainDefinition;

                    #endregion

                    #region Alias handling

                    if (HasChildNodes(parseNode.ChildNodes[1]))                            // && parseNode.ChildNodes.Last().AstNode is AliasNode)
                    {
                        AliasId = parseNode.ChildNodes[1].ChildNodes[1].Token.ValueString; //(parseNode.ChildNodes.Last().AstNode as AliasNode).AliasId;
                    }

                    #endregion

                    #endregion
                }

                else if (astNode is AggregateNode)
                {
                    #region aggregate

                    TypeOfColumnSource = TypesOfColumnSource.Aggregate;

                    AggregateNode aAggregateNode = (AggregateNode)astNode;

                    ColumnSourceValue = aAggregateNode.AggregateDefinition;

                    #endregion

                    #region Alias handling

                    if (HasChildNodes(parseNode.ChildNodes[1]))                            //Last().AstNode is AliasNode)
                    {
                        AliasId = parseNode.ChildNodes[1].ChildNodes[1].Token.ValueString; //(parseNode.ChildNodes.Last().AstNode as AliasNode).AliasId;
                    }
                    else
                    {
                        AliasId = aAggregateNode.FuncDefinition.SourceParsedString;
                    }

                    #endregion
                }

                else
                {
                    throw new NotImplementedQLException(parseNode.ChildNodes[0].AstNode.GetType().Name);
                }

                #endregion
            }
        }
Exemplo n.º 8
0
 // --- Values ---
 public override void Visit(IDNode node)
 {
     Emit(node.ID + "");
 }
Exemplo n.º 9
0
 private void AddID(IDNode node, string methodName)
 {
     ITree newNode = new CommonTree(new CommonToken(1, Context.GetID(node.VarName, methodName).ToString()));
     node.AddChild(newNode);
 }
Exemplo n.º 10
0
        public void Init(ParsingContext context, ParseTreeNode myParseTreeNode)
        {
            var _GraphQLGrammar = (SonesGQLGrammar)context.Language.Grammar;

            _Targets = new HashSet <AAttributeAssignOrUpdateOrRemove>();


            #region FROM Sources

            _SourceType = ((ATypeNode)myParseTreeNode.ChildNodes[1].AstNode).ReferenceAndType.TypeName;
            var typeNode = _SourceType;

            _Sources = (myParseTreeNode.ChildNodes[2].AstNode as TupleNode).TupleDefinition;

            if (_Sources.Count() > 1)
            {
                var firstElement = (BinaryExpressionDefinition)_Sources.First().Value;
                _Sources.Remove(_Sources.First());
                _Condition = GetConditionNode("OR", firstElement, _Sources);
            }

            else
            {
                _Condition = (BinaryExpressionDefinition)_Sources.First().Value;
            }

            #endregion

            #region Find statement "VIA Edge"

            IDNode _EdgeAttr = null;

            // Semantic Web Yoda-style...
            if (myParseTreeNode.ChildNodes[3].Token.KeyTerm == _GraphQLGrammar.S_VIA)
            {
                _EdgeAttr = (myParseTreeNode.ChildNodes[4].AstNode as IDNode);
            }

            else // Human language style...
            {
                if (myParseTreeNode.ChildNodes[5].Token.KeyTerm == _GraphQLGrammar.S_VIA)
                {
                    _EdgeAttr = (myParseTreeNode.ChildNodes[6].AstNode as IDNode);
                }
            }

            #endregion

            #region Find statement "TO Targets"

            TupleDefinition tupleDef = null;

            // Semantic Web Yoda-style...
            if (myParseTreeNode.ChildNodes[5].Token.KeyTerm == _GraphQLGrammar.S_TO)
            {
                typeNode = ((ATypeNode)myParseTreeNode.ChildNodes[6].ChildNodes[0].AstNode).ReferenceAndType.TypeName;
                tupleDef = (myParseTreeNode.ChildNodes[6].ChildNodes[1].AstNode as TupleNode).TupleDefinition;
            }

            else // Human language style...
            {
                if (myParseTreeNode.ChildNodes[3].Token.KeyTerm == _GraphQLGrammar.S_TO)
                {
                    typeNode = ((ATypeNode)myParseTreeNode.ChildNodes[4].ChildNodes[0].AstNode).ReferenceAndType.TypeName;
                    tupleDef = (myParseTreeNode.ChildNodes[4].ChildNodes[1].AstNode as TupleNode).TupleDefinition;
                }
            }

            #endregion

            #region Processing...

            var tupleDefTargetType = new TupleDefinition(tupleDef.KindOfTuple);

            foreach (var item in tupleDef.TupleElements)
            {
                var attrName = typeNode + SonesGQLConstants.EdgeTraversalDelimiterSymbol + ((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString;
                var leftNode = new IDChainDefinition(attrName, new List <TypeReferenceDefinition>()
                {
                    new TypeReferenceDefinition(typeNode, typeNode)
                });
                leftNode.AddPart(new ChainPartTypeOrAttributeDefinition(((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString));
                var rightNode = ((BinaryExpressionDefinition)item.Value).Right;

                var binExpression = new BinaryExpressionDefinition(((BinaryExpressionDefinition)item.Value).OperatorSymbol, leftNode, rightNode);

                tupleDefTargetType.AddElement(new TupleElement(binExpression));
            }

            _Targets.Add(new AttributeAssignOrUpdateList(new CollectionDefinition(CollectionType.Set, tupleDefTargetType), _EdgeAttr.IDChainDefinition, false));

            #endregion
        }
Exemplo n.º 11
0
 public virtual void VisitIDNode(IDNode node)
 {
 }
Exemplo n.º 12
0
        private Node CreateNode(IDNode dnode)
        {
            bool exists = false;

            return(CreateNode(dnode, out exists));
        }
Exemplo n.º 13
0
 public override void Visit(IDNode node)
 {
     Console.WriteLine(node.ID);
 }
Exemplo n.º 14
0
        public void Init(ParsingContext context, ParseTreeNode parseNode)
        {
            _Sources = new HashSet <AAttributeAssignOrUpdateOrRemove>();

            #region VIA edge

            IDNode _EdgeAttr = null;

            if (parseNode.ChildNodes[4].AstNode is IDNode) //Semantic Web Yoda style
            {
                _EdgeAttr = (parseNode.ChildNodes[4].AstNode as IDNode);
            }
            else //Human language style
            {
                _EdgeAttr = (parseNode.ChildNodes[6].AstNode as IDNode);
            }

            #endregion

            #region sources

            var typeNode = ((ATypeNode)parseNode.ChildNodes[1].AstNode).ReferenceAndType.TypeName;

            var tupleDef = (parseNode.ChildNodes[2].AstNode as TupleNode).TupleDefinition;

            var tupleDefSourceType = new TupleDefinition(tupleDef.KindOfTuple);

            _TargetType = typeNode;

            foreach (var item in tupleDef.TupleElements)
            {
                var attrName = typeNode + SonesGQLConstants.EdgeTraversalDelimiterSymbol + ((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString;
                var leftNode = new IDChainDefinition(attrName, new List <TypeReferenceDefinition>()
                {
                    new TypeReferenceDefinition(typeNode, typeNode)
                });
                leftNode.AddPart(new ChainPartTypeOrAttributeDefinition(((IDChainDefinition)((BinaryExpressionDefinition)item.Value).Left).ContentString));
                var rightNode = ((BinaryExpressionDefinition)item.Value).Right;

                var binExpression = new BinaryExpressionDefinition(((BinaryExpressionDefinition)item.Value).OperatorSymbol, leftNode, rightNode);

                tupleDefSourceType.AddElement(new TupleElement(binExpression));
            }

            _Sources.Add(new AttributeRemoveList(_EdgeAttr.IDChainDefinition, _EdgeAttr.IDChainDefinition.ContentString, tupleDefSourceType));

            #endregion

            #region sources FROM

            if (parseNode.ChildNodes[6].ChildNodes[0].AstNode is ATypeNode)  //Semantic Web Yoda style
            {
                typeNode = ((ATypeNode)parseNode.ChildNodes[6].ChildNodes[0].AstNode).ReferenceAndType.TypeName;
                _Targets = (parseNode.ChildNodes[6].ChildNodes[1].AstNode as TupleNode).TupleDefinition;
            }
            else  //Human language style
            {
                typeNode = ((ATypeNode)parseNode.ChildNodes[4].ChildNodes[0].AstNode).ReferenceAndType.TypeName;
                _Targets = (parseNode.ChildNodes[4].ChildNodes[1].AstNode as TupleNode).TupleDefinition;
            }

            _SourceType = typeNode;

            if (_Targets.Count() > 1)
            {
                var firstElement = (BinaryExpressionDefinition)_Targets.First().Value;
                _Targets.Remove(_Targets.First());

                _Condition = GetConditionNode("OR", firstElement, _Targets);
            }
            else
            {
                _Condition = (BinaryExpressionDefinition)_Targets.First().Value;
            }

            #endregion
        }