/// <summary> /// Adds a new, or replaces an existing dependency (keyed on <see cref="IDependency.ProviderType"/> and <see cref="IDependency.Id"/>). /// </summary> /// <remarks> /// In the course of filtering one dependency, the filter may wish to modify or add other /// dependencies in the project's tree. This method allows that to happen. /// </remarks> public void AddOrUpdate(IDependency dependency) { DependencyId key = dependency.GetDependencyId(); _dependencyById.Remove(key); _dependencyById.Add(key, dependency); Changed = true; }
/// <summary> /// Adds a new, or replaces an existing dependency (keyed on <see cref="IDependency.ProviderType"/> and <see cref="IDependency.Id"/>). /// </summary> /// <remarks> /// In the course of filtering one dependency, the filter may wish to modify or add other /// dependencies in the project's tree. This method allows that to happen. /// </remarks> public void AddOrUpdate(IDependency dependency) { DependencyId dependencyId = dependency.GetDependencyId(); _dependencyById.Remove(dependencyId); _dependencyById.Add(dependencyId, dependency); Changed = true; }
public virtual string GetProperty(string strPropertyName, string strFormat, System.Globalization.CultureInfo formatProvider, DotNetNuke.Entities.Users.UserInfo accessingUser, DotNetNuke.Services.Tokens.Scope accessLevel, ref bool propertyNotFound) { switch (strPropertyName.ToLower()) { case "dependencyid": // Int return(DependencyId.ToString(strFormat, formatProvider)); case "componenthistoryid": // Int return(ComponentHistoryId.ToString(strFormat, formatProvider)); case "fullname": // VarChar return(PropertyAccess.FormatString(FullName, strFormat)); case "version": // VarChar return(PropertyAccess.FormatString(Version, strFormat)); case "versionnormalized": // VarChar return(PropertyAccess.FormatString(VersionNormalized, strFormat)); case "name": // VarChar return(PropertyAccess.FormatString(Name, strFormat)); case "depcomponenthistoryid": // Int if (DepComponentHistoryId == null) { return(""); } ; return(((int)DepComponentHistoryId).ToString(strFormat, formatProvider)); default: propertyNotFound = true; break; } return(Null.NullString); }
/// <summary> /// Returns <see langword="true"/> if the project tree contains a dependency with specified <paramref name="dependencyId"/>. /// </summary> public bool Contains(DependencyId dependencyId) { return(_dependencyById.ContainsKey(dependencyId)); }
/// <summary> /// Attempts to find the dependency in the project's tree with specified <paramref name="dependencyId"/>. /// </summary> public bool TryGetDependency(DependencyId dependencyId, out IDependency dependency) { return(_dependencyById.TryGetValue(dependencyId, out dependency)); }
/// <summary> /// Applies changes to <paramref name="previousSnapshot"/> and produces a new snapshot if required. /// If no changes are made, <paramref name="previousSnapshot"/> is returned unmodified. /// </summary> /// <returns>An updated snapshot, or <paramref name="previousSnapshot"/> if no changes occured.</returns> public static TargetedDependenciesSnapshot FromChanges( TargetedDependenciesSnapshot previousSnapshot, IDependenciesChanges?changes, IProjectCatalogSnapshot?catalogs, ImmutableArray <IDependenciesSnapshotFilter> snapshotFilters, IReadOnlyDictionary <string, IProjectDependenciesSubTreeProvider> subTreeProviderByProviderType, IImmutableSet <string>?projectItemSpecs) { Requires.NotNull(previousSnapshot, nameof(previousSnapshot)); Requires.Argument(!snapshotFilters.IsDefault, nameof(snapshotFilters), "Cannot be default."); Requires.NotNull(subTreeProviderByProviderType, nameof(subTreeProviderByProviderType)); bool anyChanges = false; TargetFramework targetFramework = previousSnapshot.TargetFramework; var dependencyById = previousSnapshot.Dependencies.ToDictionary(IDependencyExtensions.GetDependencyId); if (changes != null && changes.RemovedNodes.Count != 0) { var context = new RemoveDependencyContext(dependencyById); foreach (IDependencyModel removed in changes.RemovedNodes) { Remove(context, removed); } } if (changes != null && changes.AddedNodes.Count != 0) { var context = new AddDependencyContext(dependencyById); foreach (IDependencyModel added in changes.AddedNodes) { #pragma warning disable CS0618 // Type or member is obsolete // NOTE we still need to check this in case extensions (eg. WebTools) provide us with top level items that need to be filtered out if (!added.TopLevel) { continue; } #pragma warning restore CS0618 // Type or member is obsolete Add(context, added); } } // Also factor in any changes to path/framework/catalogs anyChanges = anyChanges || !targetFramework.Equals(previousSnapshot.TargetFramework) || !Equals(catalogs, previousSnapshot.Catalogs); if (anyChanges) { return(new TargetedDependenciesSnapshot( targetFramework, catalogs, dependencyById.ToImmutableValueArray())); } return(previousSnapshot); void Remove(RemoveDependencyContext context, IDependencyModel dependencyModel) { if (!context.TryGetDependency(dependencyModel.GetDependencyId(), out IDependency dependency)) { return; } context.Reset(); foreach (IDependenciesSnapshotFilter filter in snapshotFilters) { filter.BeforeRemove( dependency, context); anyChanges |= context.Changed; if (!context.GetResult(filter)) { // TODO breaking here denies later filters the opportunity to modify builders return; } } dependencyById.Remove(dependencyModel.GetDependencyId()); anyChanges = true; } void Add(AddDependencyContext context, IDependencyModel dependencyModel) { // Create the unfiltered dependency IDependency?dependency = new Dependency(dependencyModel); context.Reset(); foreach (IDependenciesSnapshotFilter filter in snapshotFilters) { filter.BeforeAddOrUpdate( dependency, subTreeProviderByProviderType, projectItemSpecs, context); dependency = context.GetResult(filter); if (dependency == null) { break; } } if (dependency != null) { // A dependency was accepted DependencyId id = dependencyModel.GetDependencyId(); dependencyById.Remove(id); dependencyById.Add(id, dependency); anyChanges = true; } else { // Even though the dependency was rejected, it's possible that filters made // changes to other dependencies. anyChanges |= context.Changed; } } }
public bool Equals(DependencyId other) { return(StringComparers.DependencyProviderTypes.Equals(ProviderId, other.ProviderId) && StringComparers.DependencyTreeIds.Equals(ModelId, other.ModelId)); }