Merge branch 'master' of gitorious.org:opensuse/libzypp
[platform/upstream/libzypp.git] / zypp / repo / RepoType.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9
10 #include <iostream>
11 #include <map>
12 #include "zypp/repo/RepoException.h"
13 #include "RepoType.h"
14
15 namespace zypp
16 {
17 namespace repo
18 {
19
20   static std::map<std::string,RepoType::Type> _table;
21
22   const RepoType RepoType::RPMMD(RepoType::RPMMD_e);
23   const RepoType RepoType::YAST2(RepoType::YAST2_e);
24   const RepoType RepoType::RPMPLAINDIR(RepoType::RPMPLAINDIR_e);
25   const RepoType RepoType::NONE(RepoType::NONE_e);
26
27   RepoType::RepoType(const std::string & strval_r)
28     : _type(parse(strval_r))
29   {}
30
31   RepoType::Type RepoType::parse(const std::string & strval_r)
32   {
33     if (_table.empty())
34     {
35       // initialize it
36       _table["repomd"]
37       = _table["rpmmd"]
38       = _table["rpm-md"]
39       = _table["yum"]
40       = _table["YUM"]
41       = _table["up2date"]
42       = RepoType::RPMMD_e;
43
44       _table["susetags"]
45       = _table["yast"]
46       = _table["YaST"]
47       = _table["YaST2"]
48       = _table["YAST"]
49       = _table["YAST2"]
50       = _table["yast2"]
51       = RepoType::YAST2_e;
52
53       _table["plaindir"]
54       = _table["Plaindir"]
55       = RepoType::RPMPLAINDIR_e;
56
57       _table["NONE"]
58       = _table["none"]
59       = RepoType::NONE_e;
60     }
61
62     std::map<std::string,RepoType::Type>::const_iterator it
63       = _table.find(strval_r);
64     if (it == _table.end())
65     {
66       ZYPP_THROW(RepoUnknownTypeException(
67         "Unknown repository type '" + strval_r + "'"));
68     }
69     return it->second;
70   }
71
72
73   const std::string & RepoType::asString() const
74   {
75     static std::map<Type, std::string> _table;
76     if ( _table.empty() )
77     {
78       // initialize it
79       _table[RPMMD_e]           = "rpm-md";
80       _table[YAST2_e]           = "yast2";
81       _table[RPMPLAINDIR_e]     = "plaindir";
82       _table[NONE_e]            = "NONE";
83     }
84     return _table[_type];
85   }
86
87
88   } // ns repo
89 } // ns zypp
90
91 // vim: set ts=2 sts=2 sw=2 et ai: