1/* 2 * Copyright 2013, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Ingo Weinhold <ingo_weinhold@gmx.de> 7 */ 8 9 10#include <Catalog.h> 11 12#include <package/solver/SolverProblem.h> 13 14#include <package/solver/SolverPackage.h> 15#include <package/solver/SolverProblemSolution.h> 16 17 18#undef B_TRANSLATION_CONTEXT 19#define B_TRANSLATION_CONTEXT "SolverProblem" 20 21 22static const char* const kToStringTexts[] = { 23 B_TRANSLATE_MARK("unspecified problem"), 24 B_TRANSLATE_MARK("%source% does not belong to a distupgrade repository"), 25 B_TRANSLATE_MARK("%source% has inferior architecture"), 26 B_TRANSLATE_MARK("problem with installed package %source%"), 27 B_TRANSLATE_MARK("conflicting requests"), 28 B_TRANSLATE_MARK("nothing provides requested %dependency%"), 29 B_TRANSLATE_MARK("%dependency% is provided by the system"), 30 B_TRANSLATE_MARK("dependency problem"), 31 B_TRANSLATE_MARK("package %source% is not installable"), 32 B_TRANSLATE_MARK("nothing provides %dependency% needed by %source%"), 33 B_TRANSLATE_MARK("cannot install both %source% and %target%"), 34 B_TRANSLATE_MARK("package %source% conflicts with %dependency% provided " 35 "by %target%"), 36 B_TRANSLATE_MARK("package %source% obsoletes %dependency% provided by " 37 "%target%"), 38 B_TRANSLATE_MARK("installed package %source% obsoletes %dependency% " 39 "provided by %target%"), 40 B_TRANSLATE_MARK("package %source% implicitly obsoletes %dependency% " 41 "provided by %target%"), 42 B_TRANSLATE_MARK("package %source% requires %dependency%, but none of the " 43 "providers can be installed"), 44 B_TRANSLATE_MARK("package %source% conflicts with %dependency% provided by " 45 "itself") 46}; 47 48 49namespace BPackageKit { 50 51 52BSolverProblem::BSolverProblem(BType type, BSolverPackage* sourcePackage, 53 BSolverPackage* targetPackage) 54 : 55 fType(type), 56 fSourcePackage(sourcePackage), 57 fTargetPackage(targetPackage), 58 fDependency(), 59 fSolutions(10, true) 60{ 61} 62 63 64BSolverProblem::BSolverProblem(BType type, BSolverPackage* sourcePackage, 65 BSolverPackage* targetPackage, 66 const BPackageResolvableExpression& dependency) 67 : 68 fType(type), 69 fSourcePackage(sourcePackage), 70 fTargetPackage(targetPackage), 71 fDependency(dependency), 72 fSolutions(10, true) 73{ 74} 75 76 77BSolverProblem::~BSolverProblem() 78{ 79} 80 81 82BSolverProblem::BType 83BSolverProblem::Type() const 84{ 85 return fType; 86} 87 88 89BSolverPackage* 90BSolverProblem::SourcePackage() const 91{ 92 return fSourcePackage; 93} 94 95 96BSolverPackage* 97BSolverProblem::TargetPackage() const 98{ 99 return fTargetPackage; 100} 101 102 103const BPackageResolvableExpression& 104BSolverProblem::Dependency() const 105{ 106 return fDependency; 107} 108 109 110int32 111BSolverProblem::CountSolutions() const 112{ 113 return fSolutions.CountItems(); 114} 115 116 117const BSolverProblemSolution* 118BSolverProblem::SolutionAt(int32 index) const 119{ 120 return fSolutions.ItemAt(index); 121} 122 123 124bool 125BSolverProblem::AppendSolution(BSolverProblemSolution* solution) 126{ 127 return fSolutions.AddItem(solution); 128} 129 130 131BString 132BSolverProblem::ToString() const 133{ 134 size_t index = fType; 135 if (index >= sizeof(kToStringTexts) / sizeof(kToStringTexts[0])) 136 index = 0; 137 138 return BString(B_TRANSLATE_NOCOLLECT(kToStringTexts[index])) 139 .ReplaceAll("%source%", 140 fSourcePackage != NULL 141 ? fSourcePackage->VersionedName().String() : "?") 142 .ReplaceAll("%target%", 143 fTargetPackage != NULL 144 ? fTargetPackage->VersionedName().String() : "?") 145 .ReplaceAll("%dependency%", 146 fDependency.InitCheck() == B_OK 147 ? fDependency.ToString().String() : "?"); 148} 149 150 151} // namespace BPackageKit 152