9ee42540d242081040dd94ff05828744622accff
[platform/upstream/libzypp.git] / zypp / solver / detail / Testcase.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/solver/detail/Testcase.h
10  *
11 */
12
13 #ifndef ZYPP_SOLVER_DETAIL_TESTCASE_H
14 #define ZYPP_SOLVER_DETAIL_TESTCASE_H
15
16 #include <iosfwd>
17 #include <string>
18 #include "zypp/base/ReferenceCounted.h"
19 #include "zypp/base/NonCopyable.h"
20 #include "zypp/base/PtrTypes.h"
21 #include "zypp/solver/detail/Resolver.h"
22 #include "zypp/Capabilities.h"
23 #include "zypp/ResPool.h"
24 #include "zypp/base/GzStream.h"
25 #include "zypp/Repository.h"
26 #include "zypp/Locale.h"
27
28 /////////////////////////////////////////////////////////////////////////
29 namespace zypp
30 { ///////////////////////////////////////////////////////////////////////
31   ///////////////////////////////////////////////////////////////////////
32   namespace solver
33   { /////////////////////////////////////////////////////////////////////
34     /////////////////////////////////////////////////////////////////////
35     namespace detail
36     { ///////////////////////////////////////////////////////////////////
37
38
39 template<class T>
40 std::string helixXML( const T &obj ); //undefined
41
42 template<> 
43 std::string helixXML( const Edition &edition );
44
45 template<> 
46 std::string helixXML( const Arch &arch );
47
48 template<> 
49 std::string helixXML( const Capability &cap );
50
51 template<> 
52 std::string helixXML( const Capabilities &caps );
53
54 template<> 
55 std::string helixXML( const CapabilitySet &caps );
56
57 template<> 
58 std::string helixXML( const Dependencies &dep );
59         
60 template<> 
61 std::string helixXML( const PoolItem &item );
62
63
64 ///////////////////////////////////////////////////////////////////
65 //
66 //      CLASS NAME : HelixResolvable
67 /**
68  * Creates a file in helix format which includes all available
69  * or installed packages,patches,selections.....
70  **/
71 class  HelixResolvable : public base::ReferenceCounted, private base::NonCopyable{
72
73   private:
74     std::string dumpFile; // Path of the generated testcase
75     ofgzstream *file;    
76
77   public:
78     HelixResolvable (const std::string & path);
79     ~HelixResolvable ();
80
81     void addResolvable (const PoolItem item);
82     std::string filename () { return dumpFile; }
83 };
84
85 DEFINE_PTR_TYPE(HelixResolvable);
86 typedef std::map<Repository, HelixResolvable_Ptr> RepositoryTable;
87
88 ///////////////////////////////////////////////////////////////////
89 //
90 //      CLASS NAME : HelixControl
91 /**
92  * Creates a file in helix format which contains all controll
93  * action of a testcase ( file is known as *-test.xml)
94  **/
95 class  HelixControl {
96
97   private:
98     std::string dumpFile; // Path of the generated testcase
99     std::ofstream *file;
100
101   public:
102     HelixControl (const std::string & controlPath,
103                   const RepositoryTable & sourceTable,
104                   const Arch & systemArchitecture,
105                   const LocaleSet &languages,             
106                   const std::string & systemPath = "solver-system.xml.gz");
107     HelixControl ();    
108     ~HelixControl ();
109
110     void installResolvable (const ResObject::constPtr &resObject,
111                             const ResStatus &status);
112     void lockResolvable (const ResObject::constPtr &resObject,
113                          const ResStatus &status);
114     void keepResolvable (const ResObject::constPtr &resObject,
115                          const ResStatus &status);        
116     void deleteResolvable (const ResObject::constPtr &resObject,
117                            const ResStatus &status);
118     void addDependencies (const CapabilitySet &capRequire, const CapabilitySet &capConflict);
119     std::string filename () { return dumpFile; }
120 };
121         
122
123
124         
125 ///////////////////////////////////////////////////////////////////
126 //
127 //      CLASS NAME : Testcase
128 /**
129  * Generating a testcase of the current pool and solver state
130  **/
131 class Testcase {
132
133   private:
134     std::string dumpPath; // Path of the generated testcase
135
136   public:
137     Testcase (const std::string & path);
138     Testcase ();    
139     ~Testcase ();
140
141     bool createTestcase (Resolver & resolver, bool dumpPool = true, bool runSolver = true);
142     bool createTestcasePool(const ResPool &pool);    
143 };
144
145
146 ///////////////////////////////////////////////////////////////////
147     };// namespace detail
148     /////////////////////////////////////////////////////////////////////
149     /////////////////////////////////////////////////////////////////////
150   };// namespace solver
151   ///////////////////////////////////////////////////////////////////////
152   ///////////////////////////////////////////////////////////////////////
153 };// namespace zypp
154 /////////////////////////////////////////////////////////////////////////
155
156 #endif // ZYPP_SOLVER_DETAIL_TESTCASE_H