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 
00036 #include "OWBI1_config.h"
00037 #include "OWBI1_CIMNameSpace.hpp"
00038 #include "OWBI1_CIMUrl.hpp"
00039 #include "OW_StrictWeakOrdering.hpp"
00040 #include "OWBI1_COWIntrusiveCountableBase.hpp"
00041 #include <cctype>
00042 
00043 namespace OWBI1
00044 {
00045 
00046 using namespace OpenWBEM;
00047 using std::ostream;
00048 using std::istream;
00050 struct CIMNameSpace::NSData : public COWIntrusiveCountableBase
00051 {
00052    String m_nameSpace;
00053    CIMUrl m_url;
00054    NSData* clone() const { return new NSData(*this); }
00055 };
00057 bool operator<(const CIMNameSpace::NSData& x, const CIMNameSpace::NSData& y)
00058 {
00059    return StrictWeakOrdering(
00060       x.m_nameSpace, y.m_nameSpace,
00061       x.m_url, y.m_url);
00062 }
00064 CIMNameSpace::CIMNameSpace() :
00065    CIMBase(), m_pdata(new NSData)
00066 {
00067    
00068 }
00070 CIMNameSpace::CIMNameSpace(CIMNULL_t) :
00071    CIMBase(), m_pdata(0)
00072 {
00073 }
00075 CIMNameSpace::CIMNameSpace(const CIMUrl& hostUrl,
00076    const String& nameSpace) :
00077    CIMBase(), m_pdata(new NSData)
00078 {
00079    m_pdata->m_url = hostUrl;
00080    if (nameSpace.empty())
00081    {
00082       
00083    }
00084    else
00085    {
00086       setNameSpace(nameSpace);
00087    }
00088 }
00090 CIMNameSpace::CIMNameSpace(const String& nameSpace) :
00091    CIMBase(), m_pdata(new NSData)
00092 {
00093    if (nameSpace.empty())
00094    {
00095       
00096    }
00097    else
00098    {
00099       setNameSpace(nameSpace);
00100    }
00101 }
00103 CIMNameSpace::CIMNameSpace(const char* nameSpace) :
00104    CIMBase(), m_pdata(new NSData)
00105 {
00106    if (nameSpace == 0 || nameSpace[0] == '\0')
00107    {
00108       
00109    }
00110    else
00111    {
00112       setNameSpace(nameSpace);
00113    }
00114 }
00116 CIMNameSpace::CIMNameSpace(const CIMNameSpace& arg) :
00117    CIMBase(), m_pdata(arg.m_pdata)
00118 {
00119 }
00121 CIMNameSpace::~CIMNameSpace()
00122 {
00123 }
00125 void
00126 CIMNameSpace::setNull()
00127 {
00128    m_pdata = 0;
00129 }
00131 CIMNameSpace&
00132 CIMNameSpace::operator= (const CIMNameSpace& arg)
00133 {
00134    m_pdata = arg.m_pdata;
00135    return *this;
00136 }
00138 String
00139 CIMNameSpace::getNameSpace() const
00140 {
00141    return m_pdata->m_nameSpace;
00142 }
00144 String
00145 CIMNameSpace::getHost() const
00146 {
00147    return m_pdata->m_url.getHost();
00148 }
00150 CIMUrl
00151 CIMNameSpace::getHostUrl() const
00152 {
00153    return m_pdata->m_url;
00154 }
00156 Int32
00157 CIMNameSpace::getPortNumber() const
00158 {
00159    return m_pdata->m_url.getPort();
00160 }
00162 String
00163 CIMNameSpace::getProtocol() const
00164 {
00165    return m_pdata->m_url.getProtocol();
00166 }
00168 String
00169 CIMNameSpace::getFileName() const
00170 {
00171    return m_pdata->m_url.getFile();
00172 }
00174 bool
00175 CIMNameSpace::isLocal() const
00176 {
00177    return m_pdata->m_url.isLocal();
00178 }
00180 String
00181 CIMNameSpace::toString() const
00182 {
00183    return String(m_pdata->m_nameSpace);
00184 }
00186 CIMNameSpace&
00187 CIMNameSpace::setNameSpace(const String& nameSpace)
00188 {
00189    
00190    String tns(nameSpace);
00191    tns.trim();
00192    const char* p = tns.c_str();
00193    while (*p && *p == '/')
00194    {
00195       p++;
00196    }
00197    m_pdata->m_nameSpace = p;
00198    return *this;
00199 }
00201 CIMNameSpace&
00202 CIMNameSpace::setHostUrl(const CIMUrl& hostUrl)
00203 {
00204    m_pdata->m_url = hostUrl;
00205    return *this;
00206 }
00208 CIMNameSpace&
00209 CIMNameSpace::setHost(const String& host)
00210 {
00211    m_pdata->m_url.setHost(host);
00212    return *this;
00213 }
00215 CIMNameSpace&
00216 CIMNameSpace::setProtocol(const String& protocol)
00217 {
00218    m_pdata->m_url.setProtocol(protocol);
00219    return *this;
00220 }
00222 void
00223 CIMNameSpace::readObject(istream &istrm)
00224 {
00225    CIMBase::readSig( istrm, OWBI1_CIMNAMESPACESIG );
00226    String ns;
00227    ns.readObject(istrm);
00228    CIMUrl url(CIMNULL);
00229    url.readObject(istrm);
00230    
00231    if (!m_pdata)
00232    {
00233       m_pdata = new NSData;
00234    }
00235    m_pdata->m_nameSpace = ns;
00236    m_pdata->m_url = url;
00237 }
00239 void
00240 CIMNameSpace::writeObject(ostream &ostrm) const
00241 {
00242    CIMBase::writeSig( ostrm, OWBI1_CIMNAMESPACESIG );
00243    m_pdata->m_nameSpace.writeObject(ostrm);
00244    m_pdata->m_url.writeObject(ostrm);
00245 }
00247 bool operator<(const CIMNameSpace& lhs, const CIMNameSpace& rhs)
00248 {
00249    return *lhs.m_pdata < *rhs.m_pdata;
00250 }
00251 
00253 String
00254 CIMNameSpace::toMOF() const
00255 {
00256    return "UMIMPLEMENTED"; 
00257 }
00258 
00259 } 
00260