00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 #if !defined(XMLURL_HPP)
00062 #define XMLURL_HPP
00063 
00064 #include <util/XercesDefs.hpp>
00065 #include <util/XMLException.hpp>
00066 
00067 class BinInputStream;
00068 
00069 MakeXMLException(MalformedURLException, )
00070 
00071 
00072 
00073 
00074 
00075 
00076 class  XMLURL
00077 {
00078 public:
00079     
00080     
00081     
00082     
00083     
00084     
00085     enum Protocols
00086     {
00087         File
00088         , HTTP
00089         , FTP
00090 
00091         , Protocols_Count
00092         , Unknown
00093     };
00094 
00095 
00096     
00097     
00098     
00099     Protocols lookupByName(const XMLCh* const protoName);
00100 
00101 
00102     
00103     
00104     
00105     XMLURL();
00106     XMLURL
00107     (
00108         const   XMLCh* const    baseURL
00109         , const XMLCh* const    relativeURL
00110     );
00111     XMLURL
00112     (
00113         const   XMLCh* const    baseURL
00114         , const char* const     relativeURL
00115     );
00116     XMLURL
00117     (
00118         const   XMLURL&         baseURL
00119         , const XMLCh* const    relativeURL
00120     );
00121     XMLURL
00122     (
00123         const   XMLURL&         baseURL
00124         , const char* const     relativeURL
00125     );
00126     XMLURL
00127     (
00128         const   XMLCh* const    urlText
00129     );
00130     XMLURL
00131     (
00132         const   char* const     urlText
00133     );
00134     XMLURL(const XMLURL& toCopy);
00135     virtual ~XMLURL();
00136 
00137 
00138     
00139     
00140     
00141     XMLURL& operator=(const XMLURL& toAssign);
00142     bool operator==(const XMLURL& toCompare) const;
00143     bool operator!=(const XMLURL& toCompare) const;
00144 
00145 
00146     
00147     
00148     
00149     const XMLCh* getFragment() const;
00150     const XMLCh* getHost() const;
00151     const XMLCh* getPassword() const;
00152     const XMLCh* getPath() const;
00153     unsigned int getPortNum() const;
00154     Protocols getProtocol() const;
00155     const XMLCh* getProtocolName() const;
00156     const XMLCh* getQuery() const;
00157     const XMLCh* getURLText() const;
00158     const XMLCh* getUser() const;
00159 
00160 
00161     
00162     
00163     
00164     void setURL(const XMLCh* const urlText);
00165     void setURL
00166     (
00167         const   XMLCh* const    baseURL
00168         , const XMLCh* const    relativeURL
00169     );
00170     void setURL
00171     (
00172         const   XMLURL&         baseURL
00173         , const XMLCh* const    relativeURL
00174     );
00175 
00176 
00177     
00178     
00179     
00180     bool isRelative() const;
00181     BinInputStream* makeNewStream() const;
00182     void makeRelativeTo(const XMLCh* const baseURLText);
00183     void makeRelativeTo(const XMLURL& baseURL);
00184 
00185 
00186 private:
00187     
00188     
00189     
00190     void buildFullText();
00191     void cleanup();
00192     bool conglomerateWithBase(const XMLURL& baseURL, bool useExceptions=true);
00193     void parse
00194     (
00195         const   XMLCh* const    urlText
00196     );
00197     void weavePaths(const XMLCh* const basePart);
00198 
00199 
00200     
00201     
00202     
00203     
00204     
00205     
00206     
00207     
00208     
00209     
00210     
00211     
00212     
00213     
00214     
00215     
00216     
00217     
00218     
00219     
00220     
00221     
00222     
00223     
00224     
00225     
00226     
00227     
00228     
00229     
00230     
00231     
00232     
00233     
00234     
00235     
00236     XMLCh*          fFragment;
00237     XMLCh*          fHost;
00238     XMLCh*          fPassword;
00239     XMLCh*          fPath;
00240     unsigned int    fPortNum;
00241     Protocols       fProtocol;
00242     XMLCh*          fQuery;
00243     XMLCh*          fUser;
00244     XMLCh*          fURLText;
00245 };
00246 
00247 
00248 
00249 
00250 
00251 inline bool XMLURL::operator!=(const XMLURL& toCompare) const
00252 {
00253     return !operator==(toCompare);
00254 }
00255 
00256 
00257 
00258 
00259 
00260 inline const XMLCh* XMLURL::getFragment() const
00261 {
00262     return fFragment;
00263 }
00264 
00265 inline const XMLCh* XMLURL::getHost() const
00266 {
00267     return fHost;
00268 }
00269 
00270 inline const XMLCh* XMLURL::getPassword() const
00271 {
00272     return fPassword;
00273 }
00274 
00275 inline const XMLCh* XMLURL::getPath() const
00276 {
00277     return fPath;
00278 }
00279 
00280 inline XMLURL::Protocols XMLURL::getProtocol() const
00281 {
00282     return fProtocol;
00283 }
00284 
00285 inline const XMLCh* XMLURL::getQuery() const
00286 {
00287     return fQuery;
00288 }
00289 
00290 inline const XMLCh* XMLURL::getUser() const
00291 {
00292     return fUser;
00293 }
00294 
00295 inline const XMLCh* XMLURL::getURLText() const
00296 {
00297     
00298     
00299     
00300     
00301     
00302     if (!fURLText)
00303         ((XMLURL*)this)->buildFullText();
00304 
00305     return fURLText;
00306 }
00307 
00308 #endif