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); }
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); }
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); }
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; } }