private Task BuildTreeForSnapshotAsync(IDependenciesSnapshot snapshot)
        {
            var viewProvider = ViewProviders.FirstOrDefault();

            if (viewProvider == null)
            {
                return(Task.CompletedTask);
            }

            var nowait = SubmitTreeUpdateAsync(
                (treeSnapshot, configuredProjectExports, cancellationToken) =>
            {
                var dependenciesNode = treeSnapshot.Value.Tree;
                if (!cancellationToken.IsCancellationRequested)
                {
                    dependenciesNode = viewProvider.Value.BuildTree(dependenciesNode, snapshot, cancellationToken);
                }

                // TODO We still are getting mismatched data sources and need to figure out better
                // way of merging, mute them for now and get to it in U1
                return(Task.FromResult(new TreeUpdateResult(dependenciesNode, false, null)));
            });

            return(Task.CompletedTask);
        }
        public override bool HandleChanges(IGraphContext graphContext, SnapshotChangedEventArgs e)
        {
            IDependenciesSnapshot snapshot = e.Snapshot;

            if (snapshot == null || e.Token.IsCancellationRequested)
            {
                return(false);
            }

            foreach (GraphNode inputGraphNode in graphContext.InputNodes.ToList())
            {
                string existingDependencyId = inputGraphNode.GetValue <string>(DependenciesGraphSchema.DependencyIdProperty);
                if (string.IsNullOrEmpty(existingDependencyId))
                {
                    continue;
                }

                string projectPath = inputGraphNode.Id.GetValue(CodeGraphNodeIdName.Assembly);
                if (string.IsNullOrEmpty(projectPath))
                {
                    continue;
                }

                IDependency updatedDependency = GetDependency(projectPath, existingDependencyId, out IDependenciesSnapshot updatedSnapshot);
                if (updatedDependency == null)
                {
                    continue;
                }

                IDependenciesGraphViewProvider viewProvider = ViewProviders
                                                              .FirstOrDefaultValue((x, d) => x.SupportsDependency(d), updatedDependency);
                if (viewProvider == null)
                {
                    continue;
                }

                if (!viewProvider.ShouldTrackChanges(projectPath, snapshot.ProjectPath, updatedDependency))
                {
                    continue;
                }

                using (var scope = new GraphTransactionScope())
                {
                    viewProvider.TrackChanges(
                        graphContext,
                        projectPath,
                        updatedDependency,
                        inputGraphNode,
                        updatedSnapshot.Targets[updatedDependency.TargetFramework]);

                    scope.Complete();
                }
            }

            return(false);
        }
Esempio n. 3
0
        public override bool HandleChanges(IGraphContext graphContext, SnapshotChangedEventArgs changes)
        {
            var snapshot = changes.Snapshot;

            if (snapshot == null)
            {
                return(false);
            }

            foreach (var inputGraphNode in graphContext.InputNodes.ToList())
            {
                var existingDependency = inputGraphNode.GetValue <IDependency>(
                    DependenciesGraphSchema.DependencyProperty);
                if (existingDependency == null)
                {
                    continue;
                }

                var projectPath = inputGraphNode.Id.GetValue(CodeGraphNodeIdName.Assembly);
                if (string.IsNullOrEmpty(projectPath))
                {
                    continue;
                }

                var viewProvider = ViewProviders.FirstOrDefault(x => x.Value.SupportsDependency(existingDependency));
                if (viewProvider == null)
                {
                    continue;
                }

                if (!viewProvider.Value.ShouldTrackChanges(projectPath, snapshot.ProjectPath, existingDependency))
                {
                    continue;
                }

                var updatedDependency = GetDependency(projectPath, existingDependency.Id);
                if (updatedDependency == null)
                {
                    continue;
                }

                using (var scope = new GraphTransactionScope())
                {
                    viewProvider.Value.TrackChanges(
                        graphContext, projectPath, existingDependency, updatedDependency, inputGraphNode);

                    scope.Complete();
                }
            }

            return(false);
        }
Esempio n. 4
0
        public override bool HandleRequest(IGraphContext graphContext)
        {
            bool trackChanges = false;

            foreach (GraphNode inputGraphNode in graphContext.InputNodes)
            {
                if (graphContext.CancelToken.IsCancellationRequested)
                {
                    return(trackChanges);
                }

                string projectPath = inputGraphNode.Id.GetValue(CodeGraphNodeIdName.Assembly);
                if (string.IsNullOrEmpty(projectPath))
                {
                    continue;
                }

                IDependency dependency = GetDependency(inputGraphNode, out IDependenciesSnapshot snapshot);
                if (dependency == null || snapshot == null)
                {
                    continue;
                }

                IDependenciesGraphViewProvider viewProvider = ViewProviders
                                                              .FirstOrDefaultValue((x, d) => x.SupportsDependency(d), dependency);

                if (viewProvider == null)
                {
                    continue;
                }

                if (graphContext.TrackChanges)
                {
                    trackChanges = true;
                }

                using (var scope = new GraphTransactionScope())
                {
                    viewProvider.BuildGraph(
                        graphContext,
                        projectPath,
                        dependency,
                        inputGraphNode,
                        snapshot.Targets[dependency.TargetFramework]);

                    scope.Complete();
                }
            }

            return(trackChanges);
        }
        public override bool HandleRequest(IGraphContext graphContext)
        {
            var trackChanges = false;

            foreach (var inputGraphNode in graphContext.InputNodes)
            {
                if (graphContext.CancelToken.IsCancellationRequested)
                {
                    return(trackChanges);
                }

                var projectPath = inputGraphNode.Id.GetValue(CodeGraphNodeIdName.Assembly);
                if (string.IsNullOrEmpty(projectPath))
                {
                    continue;
                }

                var dependency = GetDependency(graphContext, inputGraphNode);
                if (dependency == null)
                {
                    continue;
                }

                var viewProvider = ViewProviders.FirstOrDefault(x => x.Value.SupportsDependency(dependency));
                if (viewProvider == null)
                {
                    continue;
                }

                if (dependency.Flags.Contains(DependencyTreeFlags.SupportsHierarchy))
                {
                    trackChanges = true;
                }

                using (var scope = new GraphTransactionScope())
                {
                    inputGraphNode.SetValue(DependenciesGraphSchema.DependencyProperty, dependency);

                    if (viewProvider.Value.HasChildren(projectPath, dependency))
                    {
                        inputGraphNode.SetValue(DgmlNodeProperties.ContainsChildren, true);
                    }

                    scope.Complete();
                }
            }

            return(trackChanges);
        }
Esempio n. 6
0
        public override bool HandleRequest(IGraphContext graphContext)
        {
            foreach (GraphNode inputGraphNode in graphContext.InputNodes)
            {
                if (graphContext.CancelToken.IsCancellationRequested)
                {
                    return(false);
                }

                string projectPath = inputGraphNode.Id.GetValue(CodeGraphNodeIdName.Assembly);
                if (string.IsNullOrEmpty(projectPath))
                {
                    continue;
                }

                IDependency dependency = GetDependency(inputGraphNode, out IDependenciesSnapshot snapshot);
                if (dependency == null || snapshot == null)
                {
                    continue;
                }

                IDependenciesGraphViewProvider viewProvider = ViewProviders
                                                              .FirstOrDefaultValue((x, d) => x.SupportsDependency(d), dependency);

                if (viewProvider == null)
                {
                    continue;
                }

                using (var scope = new GraphTransactionScope())
                {
                    inputGraphNode.SetValue(DependenciesGraphSchema.DependencyIdProperty, dependency.Id);
                    inputGraphNode.SetValue(DependenciesGraphSchema.ResolvedProperty, dependency.Resolved);

                    if (viewProvider.HasChildren(projectPath, dependency))
                    {
                        inputGraphNode.SetValue(DgmlNodeProperties.ContainsChildren, true);
                    }

                    scope.Complete();
                }
            }

            return(false);
        }
        public override bool HandleRequest(IGraphContext graphContext)
        {
            var trackChanges = false;

            foreach (var inputGraphNode in graphContext.InputNodes)
            {
                if (graphContext.CancelToken.IsCancellationRequested)
                {
                    return(trackChanges);
                }

                var projectPath = inputGraphNode.Id.GetValue(CodeGraphNodeIdName.Assembly);
                if (string.IsNullOrEmpty(projectPath))
                {
                    continue;
                }

                var dependency = GetDependency(graphContext, inputGraphNode);
                if (dependency == null)
                {
                    continue;
                }

                var viewProvider = ViewProviders.FirstOrDefault(x => x.Value.SupportsDependency(dependency));
                if (viewProvider == null)
                {
                    continue;
                }

                if (graphContext.TrackChanges)
                {
                    trackChanges = true;
                }

                using (var scope = new GraphTransactionScope())
                {
                    viewProvider.Value.BuildGraph(graphContext, projectPath, dependency, inputGraphNode);

                    scope.Complete();
                }
            }

            return(trackChanges);
        }
        /// <summary>
        /// Generates search graph containing nodes matching search criteria in Solution Explorer
        /// and attaches it to correct top level node.
        /// </summary>
        private void Search(IGraphContext graphContext)
        {
            var searchParametersTypeName = typeof(ISolutionSearchParameters).GUID.ToString();
            var searchParameters         = graphContext.GetValue <ISolutionSearchParameters>(searchParametersTypeName);

            if (searchParameters == null)
            {
                return;
            }

            var searchTerm = searchParameters.SearchQuery.SearchString?.ToLowerInvariant();

            if (searchTerm == null)
            {
                return;
            }

            var cachedDependencyToMatchingResultsMap = new Dictionary <string, HashSet <IDependency> >(StringComparer.OrdinalIgnoreCase);
            var searchResultsPerContext = new Dictionary <string, HashSet <IDependency> >(StringComparer.OrdinalIgnoreCase);

            var snapshotProviders = AggregateSnapshotProvider.GetSnapshotProviders();

            foreach (var snapshotProvider in snapshotProviders)
            {
                var snapshot = snapshotProvider.CurrentSnapshot;
                if (snapshot == null)
                {
                    continue;
                }

                searchResultsPerContext[snapshotProvider.ProjectFilePath] = SearchFlat(snapshotProvider.ProjectFilePath,
                                                                                       searchTerm.ToLowerInvariant(),
                                                                                       graphContext,
                                                                                       snapshot);
            }

            foreach (var snapshotProvider in snapshotProviders)
            {
                var snapshot = snapshotProvider.CurrentSnapshot;
                if (snapshot == null)
                {
                    continue;
                }

                var allTopLevelDependencies = snapshot.GetFlatTopLevelDependencies();
                var matchedDependencies     = searchResultsPerContext[snapshotProvider.ProjectFilePath];

                using (var scope = new GraphTransactionScope())
                {
                    foreach (var topLevelDependency in allTopLevelDependencies)
                    {
                        var targetedSnapshot = snapshot.Targets[topLevelDependency.TargetFramework];

                        if (!cachedDependencyToMatchingResultsMap
                            .TryGetValue(topLevelDependency.Id, out HashSet <IDependency> topLevelDependencyMatches))
                        {
                            var viewProvider = ViewProviders.FirstOrDefault(x => x.Value.SupportsDependency(topLevelDependency));
                            if (viewProvider == null)
                            {
                                continue;
                            }

                            var processed = viewProvider.Value.MatchSearchResults(
                                snapshotProvider.ProjectFilePath,
                                topLevelDependency,
                                searchResultsPerContext,
                                out topLevelDependencyMatches);

                            if (!processed)
                            {
                                if (matchedDependencies.Count == 0)
                                {
                                    continue;
                                }

                                topLevelDependencyMatches = GetMatchingResultsForDependency(
                                    topLevelDependency,
                                    targetedSnapshot,
                                    matchedDependencies,
                                    cachedDependencyToMatchingResultsMap);
                            }

                            cachedDependencyToMatchingResultsMap[topLevelDependency.Id] = topLevelDependencyMatches;
                        }

                        if (topLevelDependencyMatches.Count == 0)
                        {
                            continue;
                        }

                        var topLevelNode = Builder.AddTopLevelGraphNode(graphContext,
                                                                        snapshotProvider.ProjectFilePath,
                                                                        topLevelDependency.ToViewModel(targetedSnapshot));
                        foreach (var matchedDependency in topLevelDependencyMatches)
                        {
                            var matchedDependencyNode = Builder.AddGraphNode(graphContext,
                                                                             snapshotProvider.ProjectFilePath,
                                                                             topLevelNode,
                                                                             matchedDependency.ToViewModel(targetedSnapshot));

                            graphContext.Graph.Links.GetOrCreate(topLevelNode,
                                                                 matchedDependencyNode,
                                                                 null /*label*/,
                                                                 GraphCommonSchema.Contains);
                        }

                        if (topLevelNode != null)
                        {
                            // 'node' is a GraphNode for top level dependency (which is part of solution explorer tree)
                            // Setting ProjectItem category (and correct GraphNodeId) ensures that search graph appears
                            // under right solution explorer hierarchy item
                            topLevelNode.AddCategory(CodeNodeCategories.ProjectItem);
                        }
                    }

                    scope.Complete();
                }
            }

            graphContext.OnCompleted();
        }
        private Task BuildTreeForSnapshotAsync(IDependenciesSnapshot snapshot)
        {
            Lazy <IDependenciesTreeViewProvider, IOrderPrecedenceMetadataView> viewProvider = ViewProviders.FirstOrDefault();

            if (viewProvider == null)
            {
                return(Task.CompletedTask);
            }

            Task <IProjectVersionedValue <IProjectTreeSnapshot> > nowait = SubmitTreeUpdateAsync(
                async(treeSnapshot, configuredProjectExports, cancellationToken) =>
            {
                IProjectTree dependenciesNode = treeSnapshot.Value.Tree;
                if (!cancellationToken.IsCancellationRequested)
                {
                    dependenciesNode = await viewProvider.Value.BuildTreeAsync(dependenciesNode, snapshot, cancellationToken)
                                       .ConfigureAwait(false);

                    _treeTelemetryService.ObserveTreeUpdateCompleted(snapshot.HasUnresolvedDependency);
                }

                // TODO We still are getting mismatched data sources and need to figure out better
                // way of merging, mute them for now and get to it in U1
                return(new TreeUpdateResult(dependenciesNode, false, null));
            });

            return(Task.CompletedTask);
        }
 /// <summary>
 /// Finds dependencies child nodes by their path. We need to override it since
 /// we need to find children under either:
 ///     - our dependencies root node.
 ///     - dependency sub tree nodes
 ///     - dependency sub tree top level nodes
 /// (deeper levels will be graph nodes with additional info, not direct dependencies
 /// specified in the project file)
 /// </summary>
 public override IProjectTree FindByPath(IProjectTree root, string path)
 {
     return(ViewProviders.FirstOrDefault()?.Value.FindByPath(root, path));
 }
        private void btnList_Click(object sender, EventArgs e)
        {
            removeAllManagamentControls();

            switch (this.Mantenimiento)
            {
            case "Users":

                ViewUsers viewUser = new ViewUsers();
                UserCtrl  userCtrl = new UserCtrl();

                viewUser.Height = Parent.Height;
                viewUser.Width  = Parent.Width;

                this.result = userCtrl.getAllUsers();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewUser.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewUser);
                }

                break;

            case "Clients":
                ClientsList       clientsList = new ClientsList();
                ClientsController cont        = new ClientsController();
                clientsList.Height = Parent.Height;
                clientsList.Width  = Parent.Width;
                Dictionary <Object, dynamic> res = cont.getAllClients();
                if (res["code"] == Result.Failed)
                {
                    MessageBox.Show(res["msg"]);
                    return;
                }
                if (res["code"] == Result.Processed)
                {
                    clientsList.loadDataGrid(res["content"]);
                    Parent.Controls.Add(clientsList);
                }
                break;

            case "States":

                ViewStates      viewState  = new ViewStates();
                StateController controller = new StateController();

                viewState.Height = Parent.Height;
                viewState.Width  = Parent.Width;

                this.result = controller.getAllStates();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewState.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewState);
                }

                break;

            case "PaymentMethods":

                ViewPaymentMethods      viewPayment = new ViewPaymentMethods();
                PaymentMethodController cnt         = new PaymentMethodController();

                viewPayment.Height = Parent.Height;
                viewPayment.Width  = Parent.Width;

                this.result = cnt.getAllPaymentMethods();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewPayment.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewPayment);
                }

                break;

            case "MaterialTypes":

                ViewMaterialTypes      viewMaterials = new ViewMaterialTypes();
                MaterialTypeController contr         = new MaterialTypeController();

                viewMaterials.Height = Parent.Height;
                viewMaterials.Width  = Parent.Width;

                this.result = contr.getAllMaterialTypes();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewMaterials.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewMaterials);
                }

                break;

            case "Materials":

                MaterialsList      listMaterials = new MaterialsList();
                MaterialController ctrl          = new MaterialController();

                listMaterials.Height = Parent.Height;
                listMaterials.Width  = Parent.Width;

                this.result = ctrl.getMaterialsToPopulate();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    listMaterials.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(listMaterials);
                }

                break;

            case "ProductTypes":
                ViewProductTypes      viewProductTypes = new ViewProductTypes();
                ProductTypeController contr2           = new ProductTypeController();

                viewProductTypes.Height = Parent.Height;
                viewProductTypes.Width  = Parent.Width;

                this.result = contr2.getAllProductTypes();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewProductTypes.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewProductTypes);
                }

                break;

            case "Products":
                ViewProducts      viewProducts = new ViewProducts();
                ProductController contr3       = new ProductController();

                viewProducts.Height = Parent.Height;
                viewProducts.Width  = Parent.Width;

                this.result = contr3.getAllProducts();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewProducts.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewProducts);
                }

                break;

            case "Providers":
                ViewProviders      viewProviders = new ViewProviders();
                ProviderController providerCtrl  = new ProviderController();

                viewProviders.Height = Parent.Height;
                viewProviders.Width  = Parent.Width;

                this.result = providerCtrl.getAllProviders();
                if (this.result["code"] == Result.Failed)
                {
                    MessageBox.Show(this.result["msg"]);
                    return;
                }

                if (this.result["code"] == Result.Processed)
                {
                    viewProviders.loadDataGrid(this.result["content"]);
                    Parent.Controls.Add(viewProviders);
                }
                break;
            }
        }