/// <summary>
        /// Execute a query to retrieve a set of instances, without any condition.
        /// </summary>
        /// <param name="context">Current context.</param>
        /// <returns>A DataTable with the instances searched.</returns>
        public static DataTable ExecuteQueryPopulation(IUPopulationContext context)
        {
            // Last Oid
            PasajeroOid lLastOid = null;

            if (context.LastOids.Count > 0)
            {
                lLastOid = new PasajeroOid(context.LastOids.Peek());
            }

            // Last Block
            bool lLastBlock = true;
            NavigationalFiltering navigationalFiltering = NavigationalFiltering.GetNavigationalFiltering(context);
            DataTable             lDataTable            = ExecuteQueryRelated(context.Agent, new Dictionary <string, Oid>(), context.DisplaySetAttributes, context.OrderCriteriaNameSelected, navigationalFiltering, lLastOid, context.BlockSize, ref lLastBlock);

            context.LastBlock = lLastBlock;

            return(lDataTable);
        }
        /// <summary>
        /// Execute a query related with other instance.
        /// </summary>
        /// <param name="context">Current context.</param>
        /// <returns>A DataTable with the instances searched.</returns>
        public static DataTable ExecuteQueryRelated(IUQueryContext context)
        {
            try
            {
                ExchangeInfo lExchangeInfo = context.ExchangeInformation;

                if (lExchangeInfo.ExchangeType != ExchangeType.Navigation || lExchangeInfo.SelectedOids.Count == 0)
                {
                    return(null);
                }

                IUPopulationContext lIUContext = context as IUPopulationContext;
                int blockSize = 1;
                if (lIUContext != null)
                {
                    blockSize = lIUContext.BlockSize;
                }
                ExchangeInfoNavigation lNavInfo = lExchangeInfo as ExchangeInfoNavigation;
                // Specific case. No role name indicates Query by Instance.
                if (lNavInfo.RolePath == "")
                {
                    if (lIUContext != null)
                    {
                        lIUContext.LastBlock = true;
                    }

                    PasajeroOid lOidInstance = new PasajeroOid(lNavInfo.SelectedOids[0]);
                    return(ExecuteQueryInstance(context.Agent, lOidInstance, context.DisplaySetAttributes));
                }

                // Get link items.
                Oid lOid = lNavInfo.SelectedOids[0];
                Dictionary <string, Oid> lLinkItems = new Dictionary <string, Oid>(StringComparer.CurrentCultureIgnoreCase);
                lLinkItems.Add(lNavInfo.RolePath, lOid);

                bool        lLastBlock     = true;
                PasajeroOid lLastOid       = null;
                string      lOrderCriteria = string.Empty;

                // Get population members.
                if (lIUContext != null)
                {
                    if (lIUContext.LastOid != null)
                    {
                        lLastOid = new PasajeroOid(lIUContext.LastOid);
                    }
                    lOrderCriteria = lIUContext.OrderCriteriaNameSelected;
                }
                NavigationalFiltering navigationalFiltering = NavigationalFiltering.GetNavigationalFiltering(context);
                DataTable             lDataTable            = ExecuteQueryRelated(context.Agent, lLinkItems, context.DisplaySetAttributes, lOrderCriteria, navigationalFiltering, lLastOid, blockSize, ref lLastBlock);

                if (lIUContext != null)
                {
                    lIUContext.LastBlock = lLastBlock;
                }

                return(lDataTable);
            }
            catch (Exception e)
            {
                ScenarioManager.LaunchErrorScenario(e);
                return(null);
            }
        }
        /// <summary>
        /// Execute a query related with other instance.
        /// </summary>
        /// <param name="agent">Application agent.</param>
        /// <param name="linkItems">List of related instance oids (path - role).</param>
        /// <param name="displaySet">List of attributes to return.</param>
        /// <param name="orderCriteria">Order criteria name.</param>
        /// <param name="lastOid">Oid from which to search (not included).</param>
        /// <param name="blockSize">Number of instances to return (0 for all population).</param>
        /// <param name="lastBlock">Indicates if it is last block.</param>
        /// <returns>A DataTable with the instances searched.</returns>
        public static DataTable ExecuteQueryRelated(Oid agent, Dictionary <string, Oid> linkItems, string displaySet, string orderCriteria, NavigationalFiltering navigationalFiltering, Oid lastOid, int blockSize, ref bool lastBlock)
        {
            DataTable lDataTable = Logic.Adaptor.ExecuteQueryRelated(agent, "Pasajero", linkItems, displaySet, orderCriteria, navigationalFiltering, lastOid, blockSize);

            // Last block
            if (lDataTable.ExtendedProperties.Contains("LastBlock"))
            {
                lastBlock = (bool)lDataTable.ExtendedProperties["LastBlock"];
            }
            else
            {
                lastBlock = false;
            }

            return(lDataTable);
        }
 /// <summary>
 /// Execute a query to retrieve a set of instances, without any condition.
 /// </summary>
 /// <param name="agent">Application agent.</param>
 /// <param name="displaySet">List of attributes to return.</param>
 /// <param name="orderCriteria">Order criteria name.</param>
 /// <param name="lastOid">Oid from which to search (not included).</param>
 /// <param name="blockSize">Number of instances to return (0 for all population).</param>
 /// <returns>A DataTable with the instances searched.</returns>
 public static DataTable ExecuteQueryPopulation(Oid agent, string displaySet, string orderCriteria, NavigationalFiltering navigationalFiltering, Oid lastOid, int blockSize, ref bool lastBlock)
 {
     return(ExecuteQueryRelated(agent, new Dictionary <string, Oid>(), displaySet, orderCriteria, navigationalFiltering, lastOid, blockSize, ref lastBlock));
 }
        /// <summary>
        /// Serializes a NavigationalFiltering to an XML stream.
        /// </summary>
        /// <param name="writer">XML stream to write.</param>
        /// <param name="navigationalFiltering">NavigationalFiltering.</param>
        /// <returns>XML stream with the NavigationalFiltering.</returns>
        public static XmlWriter Serialize(XmlWriter writer, NavigationalFiltering navigationalFiltering)
        {
            #region <NavFilt>
            writer.WriteStartElement(DTD.Request.QueryRequest.TagNavFilt);

            if (navigationalFiltering.IsNavigationalArgument)
            {
            #region <NavFilt.Argument>
            writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltArgument);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltArgument.TagClass, navigationalFiltering.Argument.ClassName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltArgument.TagService, navigationalFiltering.Argument.ServiceName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltArgument.TagArgument, navigationalFiltering.Argument.ArgumentName);

            #region <Arguments>
                XMLNavigationalFilteringArgumentsListSerializer.Serialize(writer, navigationalFiltering.Argument.Arguments);
            #endregion <Arguments>

            writer.WriteEndElement();
            #endregion <NavFilt.Argument>
            }
            else if (navigationalFiltering.IsNavigationalFilterVariable)
            {
                #region <NavFilt.Variable>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltVariable);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltVariable.TagClass, navigationalFiltering.FilterVariable.ClassName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltVariable.TagFilter, navigationalFiltering.FilterVariable.FilterName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltVariable.TagVariable, navigationalFiltering.FilterVariable.ArgumentName);

                #region <Filter.Variables>
                XMLNavigationalFilteringVariablesListSerializer.Serialize(writer, navigationalFiltering.FilterVariable.Arguments);
                #endregion <Filter.Variables>

                writer.WriteEndElement();
                #endregion <NavFilt.Variable>
            }
            else if(navigationalFiltering.IsNavigationalSelectObject)
            {
                #region <NavFilt.SelectedObject>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltSelectedObject);

                #region <NavFilt.SelectedObject NavFilterID Attribute>
                if (navigationalFiltering.SelectedObject.NavigationalFilterID.Length > 0)
                {
                    writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.TagNavFilterID, navigationalFiltering.SelectedObject.NavigationalFilterID);
                }
                #endregion <NavFilt.SelectedObject NavFilterID Attribute>

                #region OID
                XMLAdaptorOIDSerializer.Serialize(writer, navigationalFiltering.SelectedObject.SelectedObjectOID);
                #endregion OID

                writer.WriteEndElement();
                #endregion <NavFilt.SelectedObject>
            }
            else if (navigationalFiltering.IsNavigationalServiceIU)
            {
            #region <NavFilt.ServiceIU>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltServiceIU);

                #region <NavFilt.ServiceIU NavFilterID Attribute>
                if (navigationalFiltering.ServiceIU.NavigationalFilterID.Length > 0)
                {
                    writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.TagNavFilterID, navigationalFiltering.ServiceIU.NavigationalFilterID);
                }
                #endregion <NavFilt.ServiceIU NavFilterID Attribute>

                #region <Arguments>
                XMLNavigationalFilteringArgumentsListSerializer.Serialize(writer, navigationalFiltering.ServiceIU.Arguments);
                #endregion <Arguments>

                writer.WriteEndElement();
            #endregion <NavFilt.ServiceIU>
            }

            writer.WriteEndElement();
            return writer;
            #endregion <NavFilt>
        }
        /// <summary>
        /// Serializes a NavigationalFiltering to an XML stream.
        /// </summary>
        /// <param name="writer">XML stream to write.</param>
        /// <param name="navigationalFiltering">NavigationalFiltering.</param>
        /// <returns>XML stream with the NavigationalFiltering.</returns>
        public static XmlWriter Serialize(XmlWriter writer, NavigationalFiltering navigationalFiltering)
        {
            #region <NavFilt>
            writer.WriteStartElement(DTD.Request.QueryRequest.TagNavFilt);

            if (navigationalFiltering.IsNavigationalArgument)
            {
                #region <NavFilt.Argument>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltArgument);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltArgument.TagClass, navigationalFiltering.Argument.ClassName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltArgument.TagService, navigationalFiltering.Argument.ServiceName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltArgument.TagArgument, navigationalFiltering.Argument.ArgumentName);

                #region <Arguments>
                XMLNavigationalFilteringArgumentsListSerializer.Serialize(writer, navigationalFiltering.Argument.Arguments);
                #endregion <Arguments>

                writer.WriteEndElement();
                #endregion <NavFilt.Argument>
            }
            else if (navigationalFiltering.IsNavigationalFilterVariable)
            {
                #region <NavFilt.Variable>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltVariable);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltVariable.TagClass, navigationalFiltering.FilterVariable.ClassName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltVariable.TagFilter, navigationalFiltering.FilterVariable.FilterName);
                writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.NaviFiltVariable.TagVariable, navigationalFiltering.FilterVariable.ArgumentName);

                #region <Filter.Variables>
                XMLNavigationalFilteringVariablesListSerializer.Serialize(writer, navigationalFiltering.FilterVariable.Arguments);
                #endregion <Filter.Variables>

                writer.WriteEndElement();
                #endregion <NavFilt.Variable>
            }
            else if (navigationalFiltering.IsNavigationalSelectObject)
            {
                #region <NavFilt.SelectedObject>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltSelectedObject);

                #region <NavFilt.SelectedObject NavFilterID Attribute>
                if (navigationalFiltering.SelectedObject.NavigationalFilterID.Length > 0)
                {
                    writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.TagNavFilterID, navigationalFiltering.SelectedObject.NavigationalFilterID);
                }
                #endregion <NavFilt.SelectedObject NavFilterID Attribute>

                #region OID
                XMLAdaptorOIDSerializer.Serialize(writer, navigationalFiltering.SelectedObject.SelectedObjectOID);
                #endregion OID

                writer.WriteEndElement();
                #endregion <NavFilt.SelectedObject>
            }
            else if (navigationalFiltering.IsNavigationalServiceIU)
            {
                #region <NavFilt.ServiceIU>
                writer.WriteStartElement(DTD.Request.QueryRequest.NavFilt.TagNavFiltServiceIU);

                #region <NavFilt.ServiceIU NavFilterID Attribute>
                if (navigationalFiltering.ServiceIU.NavigationalFilterID.Length > 0)
                {
                    writer.WriteAttributeString(DTD.Request.QueryRequest.NavFilt.TagNavFilterID, navigationalFiltering.ServiceIU.NavigationalFilterID);
                }
                #endregion <NavFilt.ServiceIU NavFilterID Attribute>

                #region <Arguments>
                XMLNavigationalFilteringArgumentsListSerializer.Serialize(writer, navigationalFiltering.ServiceIU.Arguments);
                #endregion <Arguments>

                writer.WriteEndElement();
                #endregion <NavFilt.ServiceIU>
            }

            writer.WriteEndElement();
            return(writer);

            #endregion <NavFilt>
        }