- support also "Plaindir" as valid repo type name (#298622)
[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"] = RepoType::RPMMD_e;
37       _table["rpmmd"] = RepoType::RPMMD_e;
38       _table["rpm-md"] = RepoType::RPMMD_e;
39       _table["yum"] = RepoType::RPMMD_e;
40       _table["YUM"] = RepoType::RPMMD_e;
41       _table["susetags"] = RepoType::YAST2_e;
42       _table["yast"] = RepoType::YAST2_e;
43       _table["YaST"] = RepoType::YAST2_e;
44       _table["YaST2"] = RepoType::YAST2_e;
45       _table["YAST"] = RepoType::YAST2_e;
46       _table["YAST2"] = RepoType::YAST2_e;
47       _table["yast2"] = RepoType::YAST2_e;
48       _table["plaindir"] = _table["Plaindir"] = RepoType::RPMPLAINDIR_e;
49       _table["NONE"] = _table["none"] = RepoType::NONE_e;
50     }
51
52     std::map<std::string,RepoType::Type>::const_iterator it
53       = _table.find(strval_r);
54     if (it == _table.end())
55     {
56       ZYPP_THROW(RepoUnknownTypeException(
57         "Unknown repository type '" + strval_r + "'"));
58     }
59     return it->second;
60   }
61
62
63   const std::string & RepoType::asString() const
64   {
65     static std::map<Type, std::string> _table;
66     if ( _table.empty() )
67     {
68       // initialize it
69       _table[RPMMD_e]   = "rpm-md";
70       _table[YAST2_e]   = "yast2";
71       _table[RPMPLAINDIR_e]   = "plaindir";
72       _table[NONE_e] = "NONE";
73     }
74     return _table[_type];
75   }
76
77
78   } // ns repo
79 } // ns zypp
80
81 // vim: set ts=2 sts=2 sw=2 et ai: