/// <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;
        }
Exemplo n.º 2
0
        /// <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;
        }
Exemplo n.º 3
0
        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;
                }
            }
        }
Exemplo n.º 7
0
 public bool Equals(DependencyId other)
 {
     return(StringComparers.DependencyProviderTypes.Equals(ProviderId, other.ProviderId) &&
            StringComparers.DependencyTreeIds.Equals(ModelId, other.ModelId));
 }