34ff2329790d5437494d133caecb4748683f9929
[platform/upstream/libzypp.git] / zypp / solver / detail / ProblemSolutionIgnore.cc
1
2 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
3 /* ProblemSolution.cc
4  *
5  * Easy-to use interface to the ZYPP dependency resolver
6  *
7  * Copyright (C) 2000-2002 Ximian, Inc.
8  * Copyright (C) 2005 SUSE Linux Products GmbH
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License,
12  * version 2, as published by the Free Software Foundation.
13  *
14  * This program is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22  * 02111-1307, USA.
23  */
24
25 #include "zypp/base/String.h"
26 #include "zypp/base/Gettext.h"
27 #include "zypp/base/Logger.h"
28 #include "zypp/solver/detail/ProblemSolutionIgnore.h"
29 #include "zypp/solver/detail/Helper.h"
30
31 using namespace std;
32
33 /////////////////////////////////////////////////////////////////////////
34 namespace zypp
35 { ///////////////////////////////////////////////////////////////////////
36   ///////////////////////////////////////////////////////////////////////
37   namespace solver
38   { /////////////////////////////////////////////////////////////////////
39     /////////////////////////////////////////////////////////////////////
40     namespace detail
41     { ///////////////////////////////////////////////////////////////////
42
43 IMPL_PTR_TYPE(ProblemSolutionIgnoreConflicts);
44 IMPL_PTR_TYPE(ProblemSolutionIgnoreRequires);
45 IMPL_PTR_TYPE(ProblemSolutionIgnoreArchitecture);
46 IMPL_PTR_TYPE(ProblemSolutionIgnoreVendor);     
47 IMPL_PTR_TYPE(ProblemSolutionIgnoreInstalled);  
48
49 //---------------------------------------------------------------------------
50
51 ProblemSolutionIgnoreRequires::ProblemSolutionIgnoreRequires( ResolverProblem_Ptr parent,
52                                                               PoolItem item,
53                                                               const Capability & capability)
54     : ProblemSolution (parent, "", "")
55 {
56         _description = _("Ignore this requirement just here");
57         addAction ( new InjectSolutionAction (item, capability, REQUIRES));
58 }       
59         
60 ProblemSolutionIgnoreRequires::ProblemSolutionIgnoreRequires( ResolverProblem_Ptr parent,
61                                                               PoolItemList itemList,      
62                                                               const Capability & capability)
63     : ProblemSolution (parent, "", "")
64 {
65         _description = _("Generally ignore this requirement");
66         for (PoolItemList::const_iterator iter = itemList.begin();
67              iter != itemList.end(); iter++) {
68             addAction ( new InjectSolutionAction (*iter, capability, REQUIRES));
69         }
70 }
71
72 ProblemSolutionIgnoreArchitecture::ProblemSolutionIgnoreArchitecture( ResolverProblem_Ptr parent,
73                                                                   PoolItem item)
74     : ProblemSolution (parent, "", "")
75 {
76         // TranslatorExplanation %s = name of package, patch, selection ...
77         _description = str::form(_("Install %s although it would change the architecture"),
78                                  item->name().c_str());
79         // TranslatorExplanation %s = name of package, patch, selection ...     
80         _details = str::form(_("%s provides this dependency, but would change the architecture of the installed item"),
81                             Helper::itemToString (item).c_str());
82         addAction ( new InjectSolutionAction (item, ARCHITECTURE));
83 }
84
85 ProblemSolutionIgnoreVendor::ProblemSolutionIgnoreVendor( ResolverProblem_Ptr parent,
86                                                           PoolItem item)
87     : ProblemSolution (parent, "", "")
88 {
89         // TranslatorExplanation %s = name of package, patch, selection ...
90         _description = str::form(_("Install %s although it would change the vendor"),
91                                  item->name().c_str());
92         // TranslatorExplanation %s = name of package, patch, selection ...     
93         _details = str::form(_("%s provides this dependency, but would change the vendor of the installed item"),
94                             Helper::itemToString (item).c_str());
95         addAction ( new InjectSolutionAction (item, VENDOR));
96 }
97         
98 ProblemSolutionIgnoreConflicts::ProblemSolutionIgnoreConflicts( ResolverProblem_Ptr parent,
99                                                                 PoolItem item,
100                                                                 const Capability & capability,
101                                                                 PoolItem otherItem)
102     : ProblemSolution (parent, "", "")
103 {
104         // TranslatorExplanation %s = name of package, patch, selection ...
105         _description = str::form (_("Ignore this conflict of %s"),
106                                   item->name().c_str());
107         addAction (new InjectSolutionAction (item, capability, CONFLICTS, otherItem));  
108 }
109
110 ProblemSolutionIgnoreConflicts::ProblemSolutionIgnoreConflicts( ResolverProblem_Ptr parent,
111                                                                 PoolItem item,
112                                                                 const Capability & capability,
113                                                                 PoolItemList itemList)
114     : ProblemSolution (parent, "", "")
115 {
116         // TranslatorExplanation %s = name of package, patch, selection ...
117         _description = str::form (_("Ignore this conflict of %s"),
118                                   item->name().c_str());
119         for (PoolItemList::const_iterator iter = itemList.begin();
120              iter != itemList.end(); iter++) {
121             addAction (new InjectSolutionAction (item, capability, CONFLICTS, *iter));              
122         }
123 }
124
125 ProblemSolutionIgnoreObsoletes::ProblemSolutionIgnoreObsoletes( ResolverProblem_Ptr parent,
126                                                                 PoolItem item,
127                                                                 const Capability & capability,
128                                                                 PoolItem otherItem)
129     : ProblemSolution (parent, "", "")
130 {
131         // TranslatorExplanation %s = name of package, patch, selection ...
132         _description = str::form (_("Ignore the obsolete %s in %s"),
133                                   Helper::capToString (capability).c_str(),
134                                   otherItem->name().c_str());
135         addAction (new InjectSolutionAction (item, capability, OBSOLETES, otherItem));  
136 }
137
138
139 ProblemSolutionIgnoreInstalled::ProblemSolutionIgnoreInstalled( ResolverProblem_Ptr parent,
140                                                                 PoolItem item,
141                                                                 PoolItem otherItem)
142     : ProblemSolution (parent, "", "")
143 {
144         // TranslatorExplanation %s = name of package, patch, selection ...
145         _description = str::form (_("Ignore that %s is already set to install"),
146                                   item->name().c_str());
147         addAction (new InjectSolutionAction (item, Capability(), INSTALLED, otherItem));        
148 }
149         
150       ///////////////////////////////////////////////////////////////////
151     };// namespace detail
152     /////////////////////////////////////////////////////////////////////
153     /////////////////////////////////////////////////////////////////////
154   };// namespace solver
155   ///////////////////////////////////////////////////////////////////////
156   ///////////////////////////////////////////////////////////////////////
157 };// namespace zypp
158 /////////////////////////////////////////////////////////////////////////