1 #ifndef LIBDNF_PACKAGE_HPP
2 #define LIBDNF_PACKAGE_HPP
3 
4 #include <vector>
5 #include <solv/solvable.h>
6 #include <solv/repo.h>
7 
8 
9 #include "libdnf/hy-types.h"
10 #include "libdnf/hy-repo-private.hpp"
11 
12 #include "Dependency.hpp"
13 
14 namespace libdnf {
15 
16 struct Package
17 {
18 public:
19     Package(DnfSack *sack, Id id);
20     Package(const Package &package);
21     virtual ~Package();
22 
23     std::shared_ptr<DependencyContainer> getConflicts() const;
24     std::shared_ptr<DependencyContainer> getEnhances() const;
25     std::shared_ptr<DependencyContainer> getObsoletes() const;
26     std::shared_ptr<DependencyContainer> getProvides() const;
27     std::shared_ptr<DependencyContainer> getRecommends() const;
28     std::shared_ptr<DependencyContainer> getRequires() const;
29     std::shared_ptr<DependencyContainer> getRequiresPre() const;
30     std::shared_ptr<DependencyContainer> getSuggests() const;
31     std::shared_ptr<DependencyContainer> getSupplements() const;
32     Id getId() const;
33 
34     virtual const char *getName() const = 0;
35     virtual const char *getVersion() const = 0;
36     const char *getArch() const;
37 
38 protected:
39     Package(DnfSack *sack, HyRepo repo, const char *name, const char *version, const char *arch, bool createSolvable = true);
40     Package(DnfSack *sack, HyRepo repo, const std::string &name, const std::string &version, const std::string &arch, bool createSolvable = true);
41 
42     void addConflicts(std::shared_ptr<Dependency> dependency);
43     void addEnhances(std::shared_ptr<Dependency> dependency);
44     void addObsoletes(std::shared_ptr<Dependency> dependency);
45     void addProvides(std::shared_ptr<Dependency> dependency);
46     void addRecommends(std::shared_ptr<Dependency> dependency);
47     void addRequires(std::shared_ptr<Dependency> dependency);
48     void addRequiresPre(std::shared_ptr<Dependency> dependency);
49     void addSuggests(std::shared_ptr<Dependency> dependency);
50     void addSupplements(std::shared_ptr<Dependency> dependency);
51 
52     const char *getSolvableName() const;
53     const char *getSolvableEvr() const;
54     const char *getSolvableVendor() const;
55     void setSolvableVendor(const char *vendor);
56 
57 private:
58     void createSolvable(HyRepo repo);
59     void fillSolvableData(const char *name, const char *version, const char *arch) const;
60     std::shared_ptr<DependencyContainer> getDependencies(Id type, Id marker = -1) const;
61     void addDependency(std::shared_ptr<Dependency> dependency, int type, Id marker = -1);
62     Queue *getDependencyQueue(Id type, Id marker) const;
63 
64     DnfSack *sack;
65     Id id;
66 };
67 
68 }
69 
70 #endif //LIBDNF_PACKAGE_HPP
71