merge REFACTORING-10_3 back to trunk
[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["susetags"] = RepoType::YAST2_e;
41       _table["yast"] = RepoType::YAST2_e;
42       _table["yast2"] = RepoType::YAST2_e;
43       _table["plaindir"] = RepoType::RPMPLAINDIR_e;
44       _table["NONE"] = _table["none"] = RepoType::NONE_e;
45     }
46
47     std::map<std::string,RepoType::Type>::const_iterator it
48       = _table.find(strval_r);
49     if (it == _table.end())
50     {
51       ZYPP_THROW(RepoUnknownTypeException(
52         "Unknown repository type '" + strval_r + "'"));
53     }
54     return it->second;
55   }
56
57
58   const std::string & RepoType::asString() const
59   {
60     static std::map<Type, std::string> _table;
61     if ( _table.empty() )
62     {
63       // initialize it
64       _table[RPMMD_e]   = "rpm-md";
65       _table[YAST2_e]   = "yast2";
66       _table[RPMPLAINDIR_e]   = "plaindir";
67       _table[NONE_e] = "NONE";
68     }
69     return _table[_type];
70   }
71
72
73   } // ns repo
74 } // ns zypp
75
76 // vim: set ts=2 sts=2 sw=2 et ai: