1/*
2 * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <package/PackageResolvable.h>
8
9#include <package/hpkg/PackageInfoAttributeValue.h>
10
11
12namespace BPackageKit {
13
14
15const char*
16BPackageResolvable::kTypeNames[B_PACKAGE_RESOLVABLE_TYPE_ENUM_COUNT] = {
17	"",
18	"lib",
19	"cmd",
20	"app",
21	"add_on",
22};
23
24
25BPackageResolvable::BPackageResolvable()
26	:
27	fType(B_PACKAGE_RESOLVABLE_TYPE_DEFAULT)
28{
29}
30
31
32BPackageResolvable::BPackageResolvable(const BPackageResolvableData& data)
33	:
34	fName(data.name),
35	fType(data.type),
36	fVersion(data.version),
37	fCompatibleVersion(data.compatibleVersion)
38{
39}
40
41
42BPackageResolvable::BPackageResolvable(const BString& name,
43	BPackageResolvableType type, const BPackageVersion& version,
44	const BPackageVersion& compatibleVersion)
45	:
46	fName(name),
47	fType(type),
48	fVersion(version),
49	fCompatibleVersion(compatibleVersion)
50{
51	fName.ToLower();
52}
53
54
55status_t
56BPackageResolvable::InitCheck() const
57{
58	return fName.Length() > 0 ? B_OK : B_NO_INIT;
59}
60
61
62const BString&
63BPackageResolvable::Name() const
64{
65	return fName;
66}
67
68
69BPackageResolvableType
70BPackageResolvable::Type() const
71{
72	return fType;
73}
74
75
76const BPackageVersion&
77BPackageResolvable::Version() const
78{
79	return fVersion;
80}
81
82
83const BPackageVersion&
84BPackageResolvable::CompatibleVersion() const
85{
86	return fCompatibleVersion;
87}
88
89
90BString
91BPackageResolvable::ToString() const
92{
93	// the type is part of the name
94	BString string = fName;
95
96	if (fVersion.InitCheck() == B_OK)
97		string << '=' << fVersion.ToString();
98
99	if (fCompatibleVersion.InitCheck() == B_OK)
100		string << " compat>=" << fCompatibleVersion.ToString();
101
102	return string;
103}
104
105
106void
107BPackageResolvable::SetTo(const BString& name, BPackageResolvableType type,
108	const BPackageVersion& version, const BPackageVersion& compatibleVersion)
109{
110	fName = name;
111	fType = type;
112	fVersion = version;
113	fCompatibleVersion = compatibleVersion;
114
115	fName.ToLower();
116}
117
118
119void
120BPackageResolvable::Clear()
121{
122	fName.Truncate(0);
123	fVersion.Clear();
124	fCompatibleVersion.Clear();
125}
126
127
128}	// namespace BPackageKit
129