libzypp  17.14.0
ServiceInfo.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #include <ostream>
13 #include <iostream>
14 
15 #include "zypp/base/String.h"
18 
19 #include "zypp/RepoInfo.h"
20 #include "zypp/ServiceInfo.h"
21 
22 using namespace std;
23 using zypp::xml::escape;
24 
26 namespace zypp
27 {
28 
30  //
31  // CLASS NAME : ServiceInfo::Impl
32  //
34  {
37 
38  public:
46 
47  public:
48  Impl()
49  {}
50 
51  Impl( const Url & url_r )
52  : _url( url_r )
53  {}
54 
55  ~Impl()
56  {}
57 
58  void setProbedType( const repo::ServiceType & type_r ) const
59  {
60  if ( _type == repo::ServiceType::NONE
61  && type_r != repo::ServiceType::NONE )
62  {
63  // lazy init!
64  const_cast<Impl*>(this)->_type = type_r;
65  }
66  }
67 
68  private:
69  friend Impl * rwcowClone<Impl>( const Impl * rhs );
70 
72  Impl * clone() const
73  { return new Impl( *this ); }
74  };
76 
77 
79  //
80  // CLASS NAME : ServiceInfo::Impl
81  //
83 
84  const ServiceInfo ServiceInfo::noService;
85 
86  ServiceInfo::ServiceInfo() : _pimpl( new Impl() ) {}
87 
88  ServiceInfo::ServiceInfo(const string & alias)
89  : repo::RepoInfoBase(alias), _pimpl( new Impl() )
90  {}
91 
92  ServiceInfo::ServiceInfo(const string & alias, const Url & url)
93  : repo::RepoInfoBase(alias), _pimpl( new Impl(url) )
94  {}
95 
97  {}
98 
99  Url ServiceInfo::url() const // Variables replaced
100  { return _pimpl->_url.transformed(); }
101 
102  Url ServiceInfo::rawUrl() const // Raw
103  { return _pimpl->_url.raw(); }
104 
105  void ServiceInfo::setUrl( const Url& url ) // Raw
106  { _pimpl->_url.raw() = url; }
107 
111 
113  void ServiceInfo::setTtl( Date::Duration ttl_r ) { _pimpl->_ttl = ttl_r; }
114  void ServiceInfo::setProbedTtl( Date::Duration ttl_r ) const { const_cast<ServiceInfo*>(this)->setTtl( ttl_r ); }
115 
116  Date ServiceInfo::lrf() const { return _pimpl->_lrf; }
117  void ServiceInfo::setLrf( Date lrf_r ) { _pimpl->_lrf = lrf_r; }
118 
119  bool ServiceInfo::reposToEnableEmpty() const { return _pimpl->_reposToEnable.empty(); }
121  ServiceInfo::ReposToEnable::const_iterator ServiceInfo::reposToEnableBegin() const { return _pimpl->_reposToEnable.begin(); }
122  ServiceInfo::ReposToEnable::const_iterator ServiceInfo::reposToEnableEnd() const { return _pimpl->_reposToEnable.end(); }
123 
124  bool ServiceInfo::repoToEnableFind( const std::string & alias_r ) const
125  { return( _pimpl->_reposToEnable.find( alias_r ) != _pimpl->_reposToEnable.end() ); }
126 
127  void ServiceInfo::addRepoToEnable( const std::string & alias_r )
128  {
129  _pimpl->_reposToEnable.insert( alias_r );
130  _pimpl->_reposToDisable.erase( alias_r );
131  }
132 
133  void ServiceInfo::delRepoToEnable( const std::string & alias_r )
134  { _pimpl->_reposToEnable.erase( alias_r ); }
135 
137  { _pimpl->_reposToEnable.clear(); }
138 
139 
140  bool ServiceInfo::reposToDisableEmpty() const { return _pimpl->_reposToDisable.empty(); }
142  ServiceInfo::ReposToDisable::const_iterator ServiceInfo::reposToDisableBegin() const { return _pimpl->_reposToDisable.begin(); }
143  ServiceInfo::ReposToDisable::const_iterator ServiceInfo::reposToDisableEnd() const { return _pimpl->_reposToDisable.end(); }
144 
145  bool ServiceInfo::repoToDisableFind( const std::string & alias_r ) const
146  { return( _pimpl->_reposToDisable.find( alias_r ) != _pimpl->_reposToDisable.end() ); }
147 
148  void ServiceInfo::addRepoToDisable( const std::string & alias_r )
149  {
150  _pimpl->_reposToDisable.insert( alias_r );
151  _pimpl->_reposToEnable.erase( alias_r );
152  }
153 
154  void ServiceInfo::delRepoToDisable( const std::string & alias_r )
155  { _pimpl->_reposToDisable.erase( alias_r ); }
156 
158  { _pimpl->_reposToDisable.clear(); }
159 
160 
162  void ServiceInfo::setRepoStates( RepoStates newStates_r ) { swap( _pimpl->_repoStates, newStates_r ); }
163 
164 
165  std::ostream & operator<<( std::ostream & str, const ServiceInfo::RepoState & obj )
166  {
167  return str
168  << "enabled=" << obj.enabled << " "
169  << "autorefresh=" << obj.autorefresh << " "
170  << "priority=" << obj.priority;
171  }
172 
173  std::ostream & ServiceInfo::dumpAsIniOn( std::ostream & str ) const
174  {
175  RepoInfoBase::dumpAsIniOn(str)
176  << "url = " << rawUrl() << endl
177  << "type = " << type() << endl;
178 
179  if ( ttl() )
180  str << "ttl_sec = " << ttl() << endl;
181 
182  if ( lrf() )
183  str << "lrf_dat = " << lrf().asSeconds() << endl;
184 
185  if ( ! repoStates().empty() )
186  {
187  unsigned cnt = 0U;
188  for ( const auto & el : repoStates() )
189  {
190  std::string tag( "repo_" );
191  tag += str::numstring( ++cnt );
192  const RepoState & state( el.second );
193 
194  str << tag << "=" << el.first << endl
195  << tag << "_enabled=" << state.enabled << endl
196  << tag << "_autorefresh=" << state.autorefresh << endl;
197  if ( state.priority != RepoInfo::defaultPriority() )
198  str
199  << tag << "_priority=" << state.priority << endl;
200  }
201  }
202 
203  if ( ! reposToEnableEmpty() )
204  str << "repostoenable = " << str::joinEscaped( reposToEnableBegin(), reposToEnableEnd() ) << endl;
205  if ( ! reposToDisableEmpty() )
206  str << "repostodisable = " << str::joinEscaped( reposToDisableBegin(), reposToDisableEnd() ) << endl;
207  return str;
208  }
209 
210  ostream & ServiceInfo::dumpAsXmlOn( ostream & str, const string & content ) const
211  {
212  str
213  << "<service"
214  << " alias=\"" << escape(alias()) << "\""
215  << " name=\"" << escape(name()) << "\""
216  << " enabled=\"" << enabled() << "\""
217  << " autorefresh=\"" << autorefresh() << "\""
218  << " url=\"" << escape(url().asString()) << "\""
219  << " type=\"" << type().asString() << "\""
220  << " ttl_sec=\"" << ttl() << "\"";
221 
222  if (content.empty())
223  str << "/>" << endl;
224  else
225  str << ">" << endl << content << "</service>" << endl;
226 
227  return str;
228  }
229 
230 
231  std::ostream & operator<<( std::ostream& str, const ServiceInfo &obj )
232  {
233  return obj.dumpAsIniOn(str);
234  }
235 
236 
238 } //namespace zypp