Generates SelectionCandidates for ISolvers to choose among.
Caches loaded Feeds, preferences, etc..
        /// <inheritdoc/>
        public Selections Solve(Requirements requirements)
        {
            #region Sanity checks
            if (requirements == null)
            {
                throw new ArgumentNullException("requirements");
            }
            if (requirements.InterfaceUri == null)
            {
                throw new ArgumentException(Resources.MissingInterfaceUri, "requirements");
            }
            #endregion

            Log.Info("Running Backtracking Solver for: " + requirements);

            var effectiveRequirements = requirements.GetEffective();
            var candidateProvider     = new SelectionCandidateProvider(_config, _feedManager, _store, _packageManager);
            var solverRuns            = effectiveRequirements.Select(x => new BacktrackingSolverRun(x, _handler.CancellationToken, candidateProvider));

            var successfullSolverRun = solverRuns.FirstOrDefault(x => x.TryToSolve());
            if (successfullSolverRun == null)
            {
                throw new SolverException("No solution found");
            }

            successfullSolverRun.Selections.PurgeRestrictions();
            return(successfullSolverRun.Selections);
        }
            /// <summary>
            /// Creates a new backtracking solver run.
            /// </summary>
            /// <param name="requirements">The top-level requirements the solver should try to meet.</param>
            /// <param name="cancellationToken">Used to signal when the user wishes to cancel the solver run.</param>
            /// <param name="candidateProvider">Generates <see cref="SelectionCandidate"/>s for the solver to choose among.</param>
            public Pass([NotNull] Requirements requirements, CancellationToken cancellationToken, [NotNull] SelectionCandidateProvider candidateProvider)
            {
                #region Sanity checks
                if (requirements == null) throw new ArgumentNullException(nameof(requirements));
                #endregion

                _cancellationToken = cancellationToken;
                _candidateProvider = candidateProvider;

                _topLevelRequirements = requirements;
                Selections.InterfaceUri = requirements.InterfaceUri;
                Selections.Command = requirements.Command;
            }
Esempio n. 3
0
            /// <summary>
            /// Creates a new backtracking solver run.
            /// </summary>
            /// <param name="requirements">The top-level requirements the solver should try to meet.</param>
            /// <param name="cancellationToken">Used to signal when the user wishes to cancel the solver run.</param>
            /// <param name="candidateProvider">Generates <see cref="SelectionCandidate"/>s for the solver to choose among.</param>
            public Pass([NotNull] Requirements requirements, CancellationToken cancellationToken, [NotNull] SelectionCandidateProvider candidateProvider)
            {
                #region Sanity checks
                if (requirements == null)
                {
                    throw new ArgumentNullException(nameof(requirements));
                }
                #endregion

                _cancellationToken = cancellationToken;
                _candidateProvider = candidateProvider;

                _topLevelRequirements   = requirements;
                Selections.InterfaceUri = requirements.InterfaceUri;
                Selections.Command      = requirements.Command;
            }
Esempio n. 4
0
        /// <summary>
        /// Creates a new backtracking solver run.
        /// </summary>
        /// <param name="requirements">The top-level requirements the solver should try to meet.</param>
        /// <param name="cancellationToken">Used to signal when the user wishes to cancel the solver run.</param>
        /// <param name="candidateProvider">Generates <see cref="SelectionCandidate"/>s for the solver to choose among.</param>
        public BacktrackingSolverRun(Requirements requirements, CancellationToken cancellationToken, SelectionCandidateProvider candidateProvider)
        {
            #region Sanity checks
            if (requirements == null)
            {
                throw new ArgumentNullException("requirements");
            }
            #endregion

            _cancellationToken = cancellationToken;
            _candidateProvider = candidateProvider;

            _topLevelRequirements   = requirements;
            Selections.InterfaceUri = requirements.InterfaceUri;
            Selections.Command      = requirements.Command;
        }
        /// <inheritdoc/>
        public Selections Solve(Requirements requirements)
        {
            #region Sanity checks
            if (requirements == null) throw new ArgumentNullException(nameof(requirements));
            if (requirements.InterfaceUri == null) throw new ArgumentException(Resources.MissingInterfaceUri, nameof(requirements));
            #endregion

            Log.Info("Running Backtracking Solver for: " + requirements);

            var effectiveRequirements = requirements.GetEffective();
            var candidateProvider = new SelectionCandidateProvider(_config, _feedManager, _store, _packageManager, requirements.Languages);
            var solverRuns = effectiveRequirements.Select(x => new Pass(x, _handler.CancellationToken, candidateProvider));

            var successfullSolverRun = solverRuns.FirstOrDefault(x => x.TryToSolve());
            if (successfullSolverRun == null) throw new SolverException("No solution found");

            successfullSolverRun.Selections.PurgeRestrictions();
            successfullSolverRun.Selections.Implementations.Sort();
            return successfullSolverRun.Selections;
        }
Esempio n. 6
0
 public SelectionCandidateProviderTest()
 {
     _feedManagerMock    = CreateMock <IFeedManager>();
     _packageManagerMock = CreateMock <IPackageManager>();
     _provider           = new SelectionCandidateProvider(new Config(), _feedManagerMock.Object, new Mock <IImplementationStore>(MockBehavior.Loose).Object, _packageManagerMock.Object);
 }