/// <summary> /// Returns true if the Detail will be shown in the Tree /// </summary> /// <param name="lDetail"></param> /// <returns></returns> private bool CalculateShowInTree(IDetailController detail) { // If it has no role path, won't be shown in the Tree ExchangeInfoNavigation lNavInfo = detail.ExchangeInformation as ExchangeInfoNavigation; if (lNavInfo != null && lNavInfo.RolePath.Equals("")) { return(false); } // If it is a Master Detail and its Master is a Population with Filters, won't be shown in the Tree IUMasterDetailController lMasterDetail = detail as IUMasterDetailController; if (lMasterDetail != null) { IUPopulationController lPopulationController = lMasterDetail.Master as IUPopulationController; if (lPopulationController != null && lPopulationController.Filters.Count > 0) { return(false); } else { return(true); } } // It is not a Master Detail and its role path is not empty return(false); }
/// <summary> /// Occurs when the selected instance changes. /// </summary> /// <param name="sender">Sender object.</param> /// <param name="e">SelectedInstanceChangedEventArgs.</param> private void HandleMasterSelectedInstanceChanged(object sender, SelectedInstanceChangedEventArgs e) { // Update context UpdateContext(); // Update details ExchangeInfoNavigation lInfoNav; foreach (IDetailController lDetail in Details) { ExchangeInfo lExchgInfo = lDetail.ExchangeInformation; lInfoNav = new ExchangeInfoNavigation(lExchgInfo as ExchangeInfoNavigation); if (lDetail.IsActiveDetail() && e.SelectedInstances != null && e.SelectedInstances.Count == 1) { lInfoNav.SelectedOids = e.SelectedInstances; } else { lInfoNav.SelectedOids = null; } lDetail.ExchangeInformation = lInfoNav; ClearLastOids(lDetail as IUQueryController); lDetail.UpdateData(true); } }
/// <summary> /// Process the RefreshDetailRequired event for any detail. /// </summary> /// <param name="sender"></param> protected void ProcessDetailRefreshDetailRequired(object sender) { IDetailController lDetail = sender as IDetailController; if (lDetail == null) { return; } // Update the detail. ExchangeInfoNavigation lInfoNav; ExchangeInfo lExchgInfo = lDetail.ExchangeInformation; lInfoNav = new ExchangeInfoNavigation(lExchgInfo as ExchangeInfoNavigation); if (Master.InstancesSelected != null && Master.InstancesSelected.Count == 1) { lInfoNav.SelectedOids = Master.InstancesSelected; } else { lInfoNav.SelectedOids = null; } lDetail.ExchangeInformation = lInfoNav; ClearLastOids(lDetail as IUQueryController); lDetail.UpdateData(true); }
/// <summary> /// Launchs a navigation in an scenario. /// </summary> /// <param name="navigationInfo">Navigation information.</param> public static void LaunchNavigationScenario(ExchangeInfoNavigation navigationInfo, INavigationItemSuscriber navigationItem) { // Instance Scenario, initialize and return the controller instance inside the Scenario. Form lScenario = CreateScenarioInstance(navigationInfo); IUController lController = Initialize(lScenario, navigationInfo); if (lController != null) { if (navigationItem != null) { IUMasterDetailController lMasterDetailController = lController as IUMasterDetailController; if (lMasterDetailController != null) { navigationItem.SuscribeNavigationEvents(lMasterDetailController.Master as INavigationItemEvents); } else { navigationItem.SuscribeNavigationEvents(lController as INavigationItemEvents); } } } if (lScenario != null) { lScenario.MdiParent = MainForm; LaunchShowState = ShowState.Showing; lScenario.Show(); LaunchShowState = ShowState.Showed; } }
/// <summary> /// Calculate if the node representing the Master will require Intermedia nodes /// </summary> /// <param name="masterDetailController"></param> /// <returns></returns> private bool CalculateDetailsGroupingNode(IUMasterDetailController masterDetailController) { // If there is just one detail if (masterDetailController.Details.Count == 1) { return(false); } // If there is more than 2 if (masterDetailController.Details.Count > 2) { return(true); } // There is only 2 int lNumNoPath = 0; int lNumNoInTree = 0; foreach (IDetailController lDetail in masterDetailController.Details) { ExchangeInfoNavigation lNavInfo = lDetail.ExchangeInformation as ExchangeInfoNavigation; if (lNavInfo != null && lNavInfo.RolePath.Equals("")) { lNumNoPath++; } else { IUMasterDetailController lMasterDetail = lDetail as IUMasterDetailController; if (lMasterDetail != null) { // This detail won't de represented in the Tree if the Master is a population with filters IUPopulationController lPopController = lMasterDetail.Master as IUPopulationController; if (lPopController != null && lPopController.Filters.Count > 0) { lNumNoInTree++; } } else { lNumNoInTree++; } } } // Just one can be shown when this node is selected or both must appear in the tree if (lNumNoPath + lNumNoInTree != 1) { return(true); } return(false); }
/// <summary> /// Creates the specific IUMasterDetailController of the 'MDIU_PasajeroAeronave' IU pattern. /// </summary> /// <param name="exchangeInfo">Exchange information received.</param> /// <returns>Specific IUMasterDetailController of the 'MDIU_PasajeroAeronave' IU pattern.</returns> public static IUMasterDetailController MasterDetail_MDIU_PasajeroAeronave(ExchangeInfo exchangeInfo) { IUMasterDetailContext lContext = new IUMasterDetailContext("PasajeroAeronave", "MDIU_PasajeroAeronave"); IUMasterDetailController lController = new IUMasterDetailController("MDIU_PasajeroAeronave", "PasajeroAeronave", "Clas_1348178542592177UIMaDet_1_Alias", lContext, null); // Master interaction unit. lController.Master = Instance_IIU_PasajeroAeronave(exchangeInfo); // Detail interaction units. ExchangeInfoNavigation infoDetail0 = new ExchangeInfoNavigation("Pasajero", "", "PasajeroAeronave", "", null, null, ""); lController.AddDetail(Pasajero.Population_PIU_Pasajero(infoDetail0), "Pasajero", "Clas_1348178542592177UIMaDet_1Det_2_Alias"); return(lController); }
/// <summary> /// Copy constructor /// </summary> /// <param name="nodeToBeCopied"></param> /// <param name="newExchangeInfo"></param> public TreeNodeController(TreeNodeController nodeToBeCopied, ExchangeInfoNavigation newExchangeInfo) { mRecursiveNodes = new List <TreeNodeController>(); mParentNodeId = nodeToBeCopied.ParentNodeId; mNodeId = nodeToBeCopied.NodeId; mIsMainMaster = false; mShowGroupingNode = nodeToBeCopied.ShowGroupingNode; Filters = new FilterControllerList(); mQueryContext = new IUPopulationContext(newExchangeInfo, nodeToBeCopied.QueryContext.ClassName, ""); mQueryContext.DisplaySetAttributes = nodeToBeCopied.QueryContext.DisplaySetAttributes; mOriginalNode = nodeToBeCopied; IUPopulationContext lPopContext = nodeToBeCopied.QueryContext as IUPopulationContext; if (lPopContext != null) { ((IUPopulationContext)QueryContext).BlockSize = lPopContext.BlockSize; } mShowInTree = nodeToBeCopied.ShowInTree; mFinalNodeID = nodeToBeCopied.FinalNodeID; }
/// <summary> /// Updates the final controller data, the related instances with the received Oid /// </summary> /// <param name="parentOid"></param> /// <returns></returns> internal bool UpdateFinalControllerData(Oid parentOid) { if (FinalNodeQueryController == null) { return(false); } // Update the exchange information List <Oid> lOids = new List <Oid>(); ExchangeInfo lExchgInfo = null; ExchangeInfoNavigation lInfoNav = null; if (parentOid != null) { lOids.Add(parentOid); } lExchgInfo = FinalNodeQueryController.ExchangeInformation; lInfoNav = new ExchangeInfoNavigation(lExchgInfo as ExchangeInfoNavigation); lInfoNav.SelectedOids = lOids; FinalNodeQueryController.ExchangeInformation = lInfoNav; // Clear the last Oid in the population controller IUPopulationController lPopulationController = FinalNodeQueryController as IUPopulationController; if (lPopulationController != null) { lPopulationController.Context.LastOid = null; lPopulationController.Context.LastOids.Clear(); } // Refresh data in the controller FinalNodeQueryController.UpdateData(true); if (lOids.Count == 0) { return(false); } return(true); }
/// <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> /// Updates the final controller data, the related instances with the received Oid /// </summary> /// <param name="parentOid"></param> /// <returns></returns> internal bool UpdateFinalControllerData(Oid parentOid) { if (FinalNodeQueryController == null) { return false; } // Update the exchange information List<Oid> lOids = new List<Oid>(); ExchangeInfo lExchgInfo = null; ExchangeInfoNavigation lInfoNav = null; if (parentOid != null) { lOids.Add(parentOid); } lExchgInfo = FinalNodeQueryController.ExchangeInformation; lInfoNav = new ExchangeInfoNavigation(lExchgInfo as ExchangeInfoNavigation); lInfoNav.SelectedOids = lOids; FinalNodeQueryController.ExchangeInformation = lInfoNav; // Clear the last Oid in the population controller IUPopulationController lPopulationController = FinalNodeQueryController as IUPopulationController; if (lPopulationController != null) { lPopulationController.Context.LastOid = null; lPopulationController.Context.LastOids.Clear(); } // Refresh data in the controller FinalNodeQueryController.UpdateData(true); if (lOids.Count == 0) return false; return true; }
/// <summary> /// Copy constructor /// </summary> /// <param name="nodeToBeCopied"></param> /// <param name="newExchangeInfo"></param> public TreeNodeController(TreeNodeController nodeToBeCopied, ExchangeInfoNavigation newExchangeInfo) { mRecursiveNodes = new List<TreeNodeController>(); mParentNodeId = nodeToBeCopied.ParentNodeId; mNodeId = nodeToBeCopied.NodeId; mIsMainMaster = false; mShowGroupingNode = nodeToBeCopied.ShowGroupingNode; Filters = new FilterControllerList(); mQueryContext = new IUPopulationContext(newExchangeInfo, nodeToBeCopied.QueryContext.ClassName, ""); mQueryContext.DisplaySetAttributes = nodeToBeCopied.QueryContext.DisplaySetAttributes; mOriginalNode = nodeToBeCopied; IUPopulationContext lPopContext = nodeToBeCopied.QueryContext as IUPopulationContext; if (lPopContext != null) { ((IUPopulationContext)QueryContext).BlockSize = lPopContext.BlockSize; } mShowInTree = nodeToBeCopied.ShowInTree; mFinalNodeID = nodeToBeCopied.FinalNodeID; }
/// <summary> /// Process the RefreshDetailRequired event for any detail. /// </summary> /// <param name="sender"></param> protected void ProcessDetailRefreshDetailRequired(object sender) { IDetailController lDetail = sender as IDetailController; if (lDetail == null) return; // Update the detail. ExchangeInfoNavigation lInfoNav; ExchangeInfo lExchgInfo = lDetail.ExchangeInformation; lInfoNav = new ExchangeInfoNavigation(lExchgInfo as ExchangeInfoNavigation); if (Master.InstancesSelected != null && Master.InstancesSelected.Count == 1) { lInfoNav.SelectedOids = Master.InstancesSelected; } else { lInfoNav.SelectedOids = null; } lDetail.ExchangeInformation = lInfoNav; ClearLastOids(lDetail as IUQueryController); lDetail.UpdateData(true); }
/// <summary> /// This method allows the creation of recursive relations in the Tree /// Adds a new child node to an existing one that must be one of the parent nodes at any level /// The new child node will show related instances using the role path /// </summary> /// <param name="parentNode">Parent node</param> /// <param name="newChildNode">New child node</param> /// <param name="rolePath">Role path</param> /// <param name="navigationalFilterId">Navigational filter id</param> /// <param name="alias">Alias to be shown in the grouping node</param> public void AddRecursiveNode(TreeNodeController parentNode, TreeNodeController newChildNode, string rolePath, string navigationalFilterId, string alias) { // Check if the new child node contains the parent node or it is the same // If not, it is not a recursive node bool lFound = parentNode == newChildNode; if (!lFound) { foreach (TreeNodeController lNodeController in newChildNode.SubNodes) { lFound = ContainsNodeController(lNodeController, parentNode); if (lFound) { break; } } } if (!lFound) { return; } // Parent node has a new subnode. All existing subnodes requires a grouping intermedia node foreach (TreeNodeController lSubNode in parentNode.SubNodes) { lSubNode.ShowGroupingNode = true; } // Add to the list ExchangeInfoNavigation lNavInfo = new ExchangeInfoNavigation(newChildNode.QueryContext.ClassName, "", rolePath, navigationalFilterId, null, null, ""); TreeNodeController lNewNode = new TreeNodeController(newChildNode, lNavInfo); parentNode.RecursiveNodes.Add(lNewNode); // Notify to the Tree the new recursive node Tree.AddRecursiveNode(parentNode.NodeId, newChildNode.NodeId, alias); }
/// <summary> /// Obtains the NavigationalFiltering contained in a IUContext. /// </summary> /// <param name="context">Context the NavigationalFiltering is obtained from.</param> /// <returns>NavigationalFiltering contained in the context.</returns> public static NavigationalFiltering GetNavigationalFiltering(IUContext context) { NavigationalFiltering lResult = null; if (HasNavigationalFiltering(context)) { switch (context.ExchangeInformation.ExchangeType) { case ExchangeType.Navigation: { ExchangeInfoNavigation lExchangeInfo = context.ExchangeInformation as ExchangeInfoNavigation; lResult = new NavigationalFiltering( new SelectedObjectNavigationFiltering( lExchangeInfo.NavigationalFilterIdentity, lExchangeInfo.SelectedOids[0])); } break; case ExchangeType.Action: { ExchangeInfoAction lExchangeInfo = context.ExchangeInformation as ExchangeInfoAction; if ((lExchangeInfo.SelectedOids == null) || (lExchangeInfo.SelectedOids.Count == 0) || (lExchangeInfo.SelectedOids[0] == null)) { IUServiceContext lServiceContext = context.ExchangeInformation.Previous as IUServiceContext; ArgumentsList lArguments = ArgumentsList.GetArgumentsFromContext(lServiceContext); lResult = new NavigationalFiltering( new ServiceIUNavigationFiltering( lExchangeInfo.NavigationalFilterIdentity, lArguments)); } else { lResult = new NavigationalFiltering( new SelectedObjectNavigationFiltering( lExchangeInfo.NavigationalFilterIdentity, lExchangeInfo.SelectedOids[0])); } } break; case ExchangeType.SelectionForward: { ExchangeInfoSelectionForward lExchangeInfo = context.ExchangeInformation as ExchangeInfoSelectionForward; ArgumentsList lArguments = null; IUServiceContext lServiceContext = null; IUPopulationContext lPopulationContext = null; string lClassName = string.Empty; // context is of IUServiceContext type. if (context.ExchangeInformation.Previous.ContextType == ContextType.Service) { lServiceContext = context.ExchangeInformation.Previous as IUServiceContext; lArguments = ArgumentsList.GetArgumentsFromContext(lServiceContext); lClassName = lServiceContext.ClassName; if (string.Compare(lClassName, "Global", true) == 0) { lClassName = string.Empty; } lResult = new NavigationalFiltering( new ArgumentNavigationFiltering( lClassName, lServiceContext.ServiceName, lServiceContext.SelectedInputField, lArguments)); } // context is of lPopulationContext type. if (context.ExchangeInformation.Previous.ContextType == ContextType.Population) { lPopulationContext = context.ExchangeInformation.Previous as IUPopulationContext; lClassName = lPopulationContext.ClassName; string lFilterName = lExchangeInfo.ServiceName; string lFilterVariableName = lExchangeInfo.ArgumentName; lArguments = ArgumentsList.GetArgumentsFromContext(lPopulationContext.Filters[lFilterName]); lResult = new NavigationalFiltering( new FilterVariableNavigationFiltering( lClassName, lFilterName, lFilterVariableName, lArguments)); } } break; case ExchangeType.SelectionBackward: break; default: break; } } return(lResult); }