a23981756c83d06711afa00f3f3962ad97aebb3e
[platform/upstream/libzypp.git] / zypp / ProblemSolution.h
1 /**
2  *
3  * Easy-to use interface to the ZYPP dependency resolver
4  *
5  * Author: Stefan Hundhammer <sh@suse.de>
6  *
7  **/
8
9 #ifndef ZYPP_PROBLEMSOLUTION_H
10 #define ZYPP_PROBLEMSOLUTION_H
11
12 #include <list>
13 #include <string>
14
15 #include "zypp/base/ReferenceCounted.h"
16 #include "zypp/base/PtrTypes.h"
17 #include "zypp/solver/detail/Resolver.h"
18 #include "zypp/ResolverProblem.h"
19 #include "zypp/solver/detail/SolutionAction.h"
20 #include "zypp/solver/detail/Types.h"
21
22 /////////////////////////////////////////////////////////////////////////
23 namespace zypp
24 { ///////////////////////////////////////////////////////////////////////
25
26
27     /**
28      * Class representing one possible solution to one problem found during resolving
29      *
30      * All problems should have at least 2-3 (mutually exclusive) solutions:
31      *
32      *    -      Undo: Do not perform the offending transaction
33      *   (do not install the package that had unsatisfied requirements,
34      *    do not remove  the package that would break other packages' requirements)
35      *
36      *    - Remove referrers: Remove all packages that would break because
37      *  they depend on the package that is requested to be removed
38      *
39      *    - Ignore: Inject artificial "provides" for a missing requirement
40      *  (pretend that requirement is satisfied)
41      **/
42     class ProblemSolution : public base::ReferenceCounted
43     {
44     protected:
45
46         /**
47          * Clear all data.
48          * In particular, delete all members of _actions.
49          **/
50         void clear();
51
52         //
53         // Data members
54         //
55         ResolverProblem_Ptr     _problem;
56         solver::detail::CSolutionActionList     _actions;
57         std::string             _description;
58         std::string             _details;
59
60     public:
61
62         /**
63          * Constructor.
64          **/
65         ProblemSolution( ResolverProblem_Ptr parent, const  std::string & description, const std::string & details );
66
67         /**
68          * Destructor.
69          **/
70         ~ProblemSolution();
71
72         // ---------------------------------- I/O
73
74         friend std::ostream& operator<<(std::ostream&, const ProblemSolution & solution);
75         friend std::ostream& operator<<(std::ostream&, const ProblemSolutionList & solutionlist);
76         friend std::ostream& operator<<(std::ostream&, const CProblemSolutionList & solutionlist);
77
78         // ---------------------------------- accessors
79         /**
80          * Return a one-line text description of this solution.
81          **/
82         std::string description() const { return _description; }
83
84         /**
85          * Return a (possibly multi-line) detailed description of this
86          * solution or an empty string if there are no useful details.
87          **/
88         std::string details() const { return _details; }
89
90         /**
91          * Return the parent dependency problem.
92          **/
93         ResolverProblem_Ptr problem() const { return _problem; }
94
95         // ---------------------------------- methods
96
97         /**
98          * Apply this solution, i.e. execute all of its actions.
99          *
100          * Returns 'true' on success, 'false' if actions could not be performed.
101          **/
102         bool apply (solver::detail::Resolver & resolver);
103
104         /**
105          * Add an action to the actions list.
106          **/
107         void addAction( solver::detail::SolutionAction_constPtr action );
108
109         solver::detail::CSolutionActionList actions() {return _actions;}
110
111     };
112
113
114     ///////////////////////////////////////////////////////////////////////
115 };// namespace zypp
116 /////////////////////////////////////////////////////////////////////////
117
118 #endif // ZYPP_PROBLEMSOLUTION_H
119