limal
UrlBase.hpp
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | |
3 | _ _ _ _ __ _ |
4 | | | | | | \_/ | / \ | | |
5 | | | | | | |_| | / /\ \ | | |
6 | | |__ | | | | | | / ____ \ | |__ |
7 | |____||_| |_| |_|/ / \ \|____| |
8 | |
9 | core library |
10 | |
11 | (C) SUSE Linux Products GmbH |
12 \----------------------------------------------------------------------/
13 
14  File: UrlBase.hpp
15 
16  Author: Marius Tomaschewski
17  Maintainer: Marius Tomaschewski
18 
19 /-*/
24 #ifndef LIMAL_URLBASE_HPP
25 #define LIMAL_URLBASE_HPP
26 
27 #include <limal/config.h>
28 #include <limal/UrlUtils.hpp>
29 #include <blocxx/COWReference.hpp>
30 
31 
32 // -------------------------------------------------------------------
33 namespace LIMAL_NAMESPACE
34 {
35 namespace url
36 {
37 
38 // ---------------------------------------------------------------
49 {
54  {
65  WITH_SCHEME = 1L << 0,
72  WITH_USERNAME = 1L << 1,
81  WITH_PASSWORD = 1L << 2,
88  WITH_HOST = 1L << 3,
95  WITH_PORT = 1L << 4,
101  WITH_PATH_NAME = 1L << 5,
109  WITH_PATH_PARAMS = 1L << 6,
115  WITH_QUERY_STR = 1L << 7,
121  WITH_FRAGMENT = 1L << 8,
135  EMPTY_AUTHORITY = 1L << 10,
147  EMPTY_PATH_NAME = 1L << 11,
157  EMPTY_PATH_PARAMS = 1L << 12,
168  EMPTY_QUERY_STR = 1L << 13,
179  EMPTY_FRAGMENT = 1L << 14,
181  };
182 
191  ViewOptions();
192 
198  friend inline ViewOptions
199  operator + (const ViewOptions &lv, const ViewOptions &rv)
200  {
201  return ViewOptions(lv.opt | rv.opt);
202  }
203  friend inline ViewOptions
205  {
206  return ViewOptions(v.opt | static_cast<int>(o));
207  }
208  friend inline ViewOptions
210  {
211  return ViewOptions(static_cast<int>(lo) | static_cast<int>(ro));
212  }
213 
219  friend inline ViewOptions
220  operator - (const ViewOptions &vl, const ViewOptions &vr)
221  {
222  return ViewOptions(vl.opt & ~vr.opt);
223  }
224  friend inline ViewOptions
225  operator - (const ViewOptions &v, EViewOption o)
226  {
227  return ViewOptions(v.opt & ~ static_cast<int>(o));
228  }
229 
236  inline ViewOptions &
237  operator = (const ViewOptions &v)
238  {
239  opt = v.opt;
240  return *this;
241  }
242 
243  inline ViewOptions &
244  operator += (const ViewOptions &v)
245  {
246  opt |= v.opt;
247  return *this;
248  }
249  inline ViewOptions &
250  operator += (EViewOption o)
251  {
252  opt |= static_cast<int>(o);
253  return *this;
254  }
255 
256  inline ViewOptions &
257  operator -= (const ViewOptions &v)
258  {
259  opt &= ~ v.opt;
260  return *this;
261  }
262  inline ViewOptions &
263  operator -= (EViewOption o)
264  {
265  opt &= ~ static_cast<int>(o);
266  return *this;
267  }
268 
275  inline bool
276  has(EViewOption o) const
277  {
278  return opt & static_cast<int>(o);
279  }
280 
287  inline bool
288  has(const ViewOptions &v) const
289  {
290  return opt & v.opt;
291  }
292 
293 private:
294  ViewOptions(int o);
295  int opt;
296 };
297 
298 
299 // ---------------------------------------------------------------
303 class UrlBase;
304 class UrlBaseData;
305 
307 UrlBaseData *COWReferenceClone(UrlBaseData* obj);
308 
309 
310 // ---------------------------------------------------------------
319 class UrlBase
320 {
321 public:
322 
326  virtual
327  ~UrlBase();
328 
332  UrlBase();
333 
338  UrlBase(const UrlBase &url);
339 
350  UrlBase(const UrlComponents &components);
351 
362  UrlBase(const blocxx::String &urlString);
363 
364 
365  // -----------------
375  UrlBase&
376  operator = (const UrlBase &url);
377 
378 
394  UrlBase&
395  operator = (const blocxx::String &urlString);
396 
397 
398  // -----------------
402  virtual void
403  clear();
404 
416  virtual UrlBase *
417  clone() const;
418 
428  virtual void
429  init(const UrlComponents &components);
430 
431 
432  // -----------------
450  virtual blocxx::StringArray
451  getKnownSchemes() const;
452 
457  virtual bool
458  isKnownScheme(const blocxx::String &scheme) const;
459 
460 
473  virtual bool
474  isValidScheme(const blocxx::String &scheme) const;
475 
485  virtual bool
486  isValid() const;
487 
488 
489  // -----------------
497  virtual blocxx::String
498  toString() const;
499 
512  virtual blocxx::String
513  toString(const limal::url::ViewOptions &opts) const;
514 
515 
516  // -----------------
521  virtual blocxx::String
522  getScheme() const;
523 
524 
525  // -----------------
535  virtual blocxx::String
536  getAuthority() const;
537 
545  virtual blocxx::String
546  getUsername(EEncoding eflag) const;
547 
555  virtual blocxx::String
556  getPassword(EEncoding eflag) const;
557 
570  virtual blocxx::String
571  getHost(EEncoding eflag) const;
572 
577  virtual blocxx::String
578  getPort() const;
579 
580 
581  // -----------------
591  virtual blocxx::String
592  getPathData() const;
593 
602  virtual blocxx::String
603  getPathName(EEncoding eflag) const;
604 
609  virtual blocxx::String
610  getPathParams() const;
611 
624  virtual blocxx::StringArray
625  getPathParamsArray() const;
626 
646  virtual limal::url::ParamMap
647  getPathParamsMap(EEncoding eflag) const;
648 
665  virtual blocxx::String
666  getPathParam(const blocxx::String &param, EEncoding eflag) const;
667 
668 
669  // -----------------
679  virtual blocxx::String
680  getQueryString() const;
681 
695  virtual blocxx::StringArray
696  getQueryStringArray() const;
697 
716  virtual limal::url::ParamMap
717  getQueryStringMap(EEncoding eflag) const;
718 
735  virtual blocxx::String
736  getQueryParam(const blocxx::String &param, EEncoding eflag) const;
737 
738 
739  // -----------------
747  virtual blocxx::String
748  getFragment(EEncoding eflag) const;
749 
750 
751  // -----------------
758  virtual void
759  setScheme(const blocxx::String &scheme);
760 
761 
762  // -----------------
776  virtual void
777  setAuthority(const blocxx::String &authority);
778 
788  virtual void
789  setUsername(const blocxx::String &user,
790  EEncoding eflag);
791 
801  virtual void
802  setPassword(const blocxx::String &pass,
803  EEncoding eflag);
804 
825  virtual void
826  setHost(const blocxx::String &host,
827  EEncoding eflag);
828 
836  virtual void
837  setPort(const blocxx::String &port);
838 
839 
840  // -----------------
851  virtual void
852  setPathData(const blocxx::String &pathdata);
853 
861  virtual void
862  setPathName(const blocxx::String &path,
863  EEncoding eflag);
864 
871  virtual void
872  setPathParams(const blocxx::String &params);
873 
880  virtual void
881  setPathParamsArray(const blocxx::StringArray &parray);
882 
889  virtual void
890  setPathParamsMap(const limal::url::ParamMap &pmap);
891 
901  virtual void
902  setPathParam(const blocxx::String &param, const blocxx::String &value);
903 
904 
905  // -----------------
918  virtual void
919  setQueryString(const blocxx::String &querystr);
920 
927  virtual void
928  setQueryStringArray(const blocxx::StringArray &qarray);
929 
936  virtual void
937  setQueryStringMap(const limal::url::ParamMap &qmap);
938 
948  virtual void
949  setQueryParam(const blocxx::String &param, const blocxx::String &value);
950 
951 
952  // -----------------
960  virtual void
961  setFragment(const blocxx::String &fragment,
962  EEncoding eflag);
963 
964 
965  // -----------------
1021  virtual void
1022  configure();
1023 
1024 
1035  blocxx::String
1036  config(const blocxx::String &opt) const;
1037 
1047  void
1048  config(const blocxx::String &opt, const blocxx::String &val);
1049 
1050 
1059  ViewOptions
1060  getViewOptions() const;
1061 
1070  void
1071  setViewOptions(const ViewOptions &vopts);
1072 
1073 
1074 protected:
1101  virtual blocxx::String
1102  cleanupPathName(const blocxx::String &path, bool authority) const;
1103 
1114  virtual blocxx::String
1115  cleanupPathName(const blocxx::String &path) const;
1116 
1117  virtual void
1118  checkValidScheme(const blocxx::String &scheme, EEncoding eflag) const;
1119 
1120  virtual void
1121  checkValidUser(const blocxx::String &user, EEncoding eflag) const;
1122 
1123  virtual void
1124  checkValidPass(const blocxx::String &pass, EEncoding eflag) const;
1125 
1149  virtual void
1150  checkValidHost(const blocxx::String &host, EEncoding eflag) const;
1151 
1158  virtual void
1159  checkValidPort(const blocxx::String &port, EEncoding eflag) const;
1160 
1161  virtual void
1162  checkValidPathName(const blocxx::String &path, EEncoding eflag) const;
1163 
1164  virtual void
1165  checkValidPathParams(const blocxx::String &params, EEncoding eflag) const;
1166 
1167  virtual void
1168  checkValidQueryStr(const blocxx::String &querystr, EEncoding eflag) const;
1169 
1170  virtual void
1171  checkValidFragment(const blocxx::String &fragment, EEncoding eflag) const;
1172 
1173 private:
1174  blocxx::COWReference<UrlBaseData> m_data;
1175 };
1176 
1177 
1178 // -------------------------------------------------------------------
1182 typedef blocxx::COWReference<UrlBase> UrlRef;
1183 
1184 
1185 // -------------------------------------------------------------------
1186 } // End url namespace
1187 } // End of LIMAL_NAMESPACE
1188 #endif // LIMAL_URLBASE_HPP
1189 // vim: set ts=8 sts=8 sw=8 ai noet: