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