Imported Upstream version 17.23.0
[platform/upstream/libzypp.git] / zypp / ResStatus.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/ResStatus.cc
10  *
11 */
12 #include <iostream>
13 //#include "zypp/base/Logger.h"
14
15 #include "zypp/ResStatus.h"
16
17 using std::endl;
18
19 ///////////////////////////////////////////////////////////////////
20 namespace zypp
21 { /////////////////////////////////////////////////////////////////
22
23   const ResStatus ResStatus::toBeInstalled               (UNINSTALLED, UNDETERMINED, TRANSACT);
24   const ResStatus ResStatus::toBeUninstalled             (INSTALLED,   UNDETERMINED, TRANSACT);
25   const ResStatus ResStatus::toBeUninstalledDueToUpgrade (INSTALLED,   UNDETERMINED, TRANSACT, EXPLICIT_INSTALL, DUE_TO_UPGRADE);
26   const ResStatus ResStatus::toBeUninstalledDueToObsolete(INSTALLED,   UNDETERMINED, TRANSACT, EXPLICIT_INSTALL, DUE_TO_OBSOLETE);
27
28   ///////////////////////////////////////////////////////////////////
29   //
30   //    METHOD NAME : ResStatus::ResStatus
31   //    METHOD TYPE : Ctor
32   //
33   ResStatus::ResStatus()
34   {}
35
36   ///////////////////////////////////////////////////////////////////
37   //
38   //    METHOD NAME : ResStatus::ResStatus
39   //    METHOD TYPE : Ctor
40   //
41   ResStatus::ResStatus( bool isInstalled_r )
42   : _bitfield( isInstalled_r ? INSTALLED : UNINSTALLED )
43   {}
44
45   ///////////////////////////////////////////////////////////////////
46   //
47   //    METHOD NAME : ResStatus::~ResStatus
48   //    METHOD TYPE : Dtor
49   //
50   ResStatus::~ResStatus()
51   {}
52
53
54   ResStatus::ResStatus (enum StateValue s, enum ValidateValue v, enum TransactValue t, enum InstallDetailValue i, enum RemoveDetailValue r)
55     : _bitfield (s)
56   {
57     fieldValueAssign<ValidateField>(v);
58     fieldValueAssign<TransactField>(t);
59     if (t == TRANSACT) {
60         if (s == INSTALLED) fieldValueAssign<TransactDetailField>(r);
61         else fieldValueAssign<TransactDetailField>(i);
62     }
63   }
64
65   namespace
66   {
67     // NOTE: Strings defined here are written to the history file
68     // and used by zypper. Do not change them!
69     static const char* strBROKEN = "needed";
70     static const char* strSATISFIED = "applied";
71     static const char* strNONRELEVANT = "not-needed";
72     static const char* strUNDETERMINED = "undetermined";
73   }
74
75   std::string ResStatus::validateValueAsString( ValidateValue val_r )
76   {
77     const char* ret = strUNDETERMINED;
78     switch ( val_r )
79     {
80       case BROKEN:      ret = strBROKEN; break;
81       case SATISFIED:   ret = strSATISFIED; break;
82       case NONRELEVANT: ret = strNONRELEVANT; break;
83       case UNDETERMINED:break;// to avoid default:
84     }
85     return ret;
86   }
87
88   ResStatus::ValidateValue ResStatus::stringToValidateValue( const std::string & str_r )
89   {
90     ValidateValue ret = UNDETERMINED;
91     if      ( str_r == strBROKEN )      ret = BROKEN;
92     else if ( str_r == strSATISFIED )   ret = SATISFIED;
93     else if ( str_r == strNONRELEVANT ) ret = NONRELEVANT;
94     return ret;
95   }
96
97   /******************************************************************
98   **
99   **    FUNCTION NAME : operator<<
100   **    FUNCTION TYPE : std::ostream &
101   */
102   std::ostream & operator<<( std::ostream & str, const ResStatus & obj )
103   {
104     str << (obj.isInstalled() ? "I" : "U");
105
106     str << (obj.isBroken() ? "B" :
107         ( obj.isSatisfied() ? "S" :
108         ( obj.isNonRelevant() ? "N" : "_") ) );
109
110     str << (obj.transacts () ? "T"
111                              : (obj.isLocked() ? "L" : "_") );
112
113     if (obj.isBySolver()) str << "s";
114     else if (obj.isByApplLow()) str << "l";
115     else if (obj.isByApplHigh()) str << "h";
116     else if (obj.isByUser()) str << "u";
117
118     str << (obj.isToBeUninstalledDueToObsolete() ? "O" :
119         ( obj.isToBeUninstalledDueToUpgrade() ? "U" :
120         ( obj.isToBeInstalledSoft() ? "S" : "_" ) ) );
121
122     str << (obj.isRecommended() ? "r" : "" );
123     str << (obj.isSuggested() ? "s" : "" );
124     str << (obj.isOrphaned() ? "o" : "" );
125     str << (obj.isUnneeded() ? "u" : "" );
126
127     return str;
128   }
129
130
131 #define OUTS(X) case ResStatus::X: return str << #X; break
132
133   std::ostream & operator<<( std::ostream & str, ResStatus::TransactValue obj )
134   {
135     switch ( obj )
136     {
137       OUTS( KEEP_STATE );
138       OUTS( LOCKED );
139       OUTS( TRANSACT );
140     }
141     return str;
142   }
143
144   std::ostream & operator<<( std::ostream & str, ResStatus::TransactByValue obj )
145   {
146     switch ( obj )
147     {
148       OUTS( SOLVER );
149       OUTS( APPL_LOW );
150       OUTS( APPL_HIGH );
151       OUTS( USER );
152     }
153     return str;
154   }
155
156   /////////////////////////////////////////////////////////////////
157 } // namespace zypp
158 ///////////////////////////////////////////////////////////////////