(file) Return to CIMObjectPath.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/CIMObjectPath.cpp between version 1.38 and 1.60.4.1

version 1.38, 2004/05/18 11:03:38 version 1.60.4.1, 2007/06/08 10:40:29
Line 1 
Line 1 
 //%2003////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.  // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.; // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
 // IBM Corp.; EMC Corporation, The Open Group. // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 23 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Mike Brasher (mbrasher@bmc.com)  
 //  
 // Modified By: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)  
 //              Carol Ann Krug Graves, Hewlett-Packard Company  
 //                (carolann_graves@hp.com)  
 //              Amit K Arora, IBM (amita@in.ibm.com)  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <cctype>  
 #include <cstring> #include <cstring>
 #include <iostream> #include <iostream>
 #include "HashTable.h" #include "HashTable.h"
Line 43 
Line 41 
 #include "XmlWriter.h" #include "XmlWriter.h"
 #include "XmlReader.h" #include "XmlReader.h"
 #include "ArrayInternal.h" #include "ArrayInternal.h"
   #include "HostAddress.h"
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
Line 177 
Line 176 
 }; };
  
  
 CIMKeyBinding::CIMKeyBinding():  CIMKeyBinding::CIMKeyBinding()
             _rep(new CIMKeyBindingRep())  
 { {
       _rep = new CIMKeyBindingRep();
 } }
  
 CIMKeyBinding::CIMKeyBinding(const CIMKeyBinding& x):  CIMKeyBinding::CIMKeyBinding(const CIMKeyBinding& x)
             _rep(new CIMKeyBindingRep(*(x._rep.get())))  
 { {
       _rep = new CIMKeyBindingRep(*x._rep);
 } }
  
 CIMKeyBinding::CIMKeyBinding(const CIMName& name, const String& value, Type type) :  CIMKeyBinding::CIMKeyBinding(
             _rep(new CIMKeyBindingRep(name, value, type))      const CIMName& name,
       const String& value,
       Type type)
 { {
       _rep = new CIMKeyBindingRep(name, value, type);
 } }
  
 CIMKeyBinding::CIMKeyBinding(const CIMName& name, const CIMValue& value) CIMKeyBinding::CIMKeyBinding(const CIMName& name, const CIMValue& value)
Line 215 
Line 217 
     case CIMTYPE_REFERENCE:     case CIMTYPE_REFERENCE:
         kbType = REFERENCE;         kbType = REFERENCE;
         break;         break;
   //  case CIMTYPE_REAL32:
   //  case CIMTYPE_REAL64:
       case CIMTYPE_OBJECT:
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
       case CIMTYPE_INSTANCE:
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
           // From PEP 194: EmbeddedObjects cannot be keys.
           throw TypeMismatchException();
           break;
     default:     default:
         kbType = NUMERIC;         kbType = NUMERIC;
         break;         break;
     }     }
  
     _rep.reset(new CIMKeyBindingRep(name, kbValue, kbType));      _rep = new CIMKeyBindingRep(name, kbValue, kbType);
 } }
  
 CIMKeyBinding::~CIMKeyBinding() CIMKeyBinding::~CIMKeyBinding()
 { {
       delete _rep;
 } }
  
 CIMKeyBinding& CIMKeyBinding::operator=(const CIMKeyBinding& x) CIMKeyBinding& CIMKeyBinding::operator=(const CIMKeyBinding& x)
 { {
     CIMKeyBindingRep *tmp = new CIMKeyBindingRep(*x._rep.get());      *_rep = *x._rep;
     _rep.reset(tmp);  
     return *this;     return *this;
 } }
  
Line 298 
Line 309 
             kbValue = XmlReader::stringToValue(0, getValue().getCString(),             kbValue = XmlReader::stringToValue(0, getValue().getCString(),
                                                value.getType());                                                value.getType());
             break;             break;
   //      case CIMTYPE_REAL32:
   //      case CIMTYPE_REAL64:
           case CIMTYPE_OBJECT:
   #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
           case CIMTYPE_INSTANCE:
   #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
               // From PEP 194: EmbeddedObjects cannot be keys.
               return false;
               break;
         default:  // Numerics         default:  // Numerics
             if (getType() != NUMERIC) return false;             if (getType() != NUMERIC) return false;
             kbValue = XmlReader::stringToValue(0, getValue().getCString(),             kbValue = XmlReader::stringToValue(0, getValue().getCString(),
Line 333 
Line 353 
         catch (Exception&)         catch (Exception&)
         {         {
             // If CIMObjectPath parsing fails, just compare strings             // If CIMObjectPath parsing fails, just compare strings
             return (String::equal(x.getValue(), y.getValue()));              return String::equal(x.getValue(), y.getValue());
         }         }
         break;         break;
     case CIMKeyBinding::BOOLEAN:     case CIMKeyBinding::BOOLEAN:
         // Case-insensitive comparison is sufficient for booleans         // Case-insensitive comparison is sufficient for booleans
         return (String::equalNoCase(x.getValue(), y.getValue()));          return String::equalNoCase(x.getValue(), y.getValue());
         break;         break;
     case CIMKeyBinding::NUMERIC:     case CIMKeyBinding::NUMERIC:
         // Note: This comparison assumes XML syntax for integers         // Note: This comparison assumes XML syntax for integers
Line 368 
Line 388 
         }         }
         // Note: Keys may not be real values, so don't try comparing as reals         // Note: Keys may not be real values, so don't try comparing as reals
         // We couldn't parse the numbers, so just compare the strings         // We couldn't parse the numbers, so just compare the strings
         return (String::equal(x.getValue(), y.getValue()));          return String::equal(x.getValue(), y.getValue());
         break;         break;
     default:  // CIMKeyBinding::STRING     default:  // CIMKeyBinding::STRING
         return (String::equal(x.getValue(), y.getValue()));          return String::equal(x.getValue(), y.getValue());
         break;         break;
     }     }
  
Line 426 
Line 446 
  
     static Boolean isValidHostname(const String& hostname)     static Boolean isValidHostname(const String& hostname)
     {     {
         //------------------------------------------------------------------          HostAddress addr(hostname);
         // Validate the hostname.  The hostname value may or may not be a  
         // fully-qualified domain name (e.g., xyz.company.com) or may be an  
         // IP address.  A port number may follow the hostname.  
         // Hostnames must match one of the following regular expressions:  
         // ^([A-Za-z][A-Za-z0-9-]*)(\.[A-Za-z][A-Za-z0-9-]*)*(:[0-9]*)?$  
         // ^([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)(:[0-9]*)?$  
         //------------------------------------------------------------------  
   
         Uint32 i = 0;  
   
         if (isdigit(hostname[0]))  
         {  
             // Validate an IP address  
   
             for (Uint32 octet=1; octet<=4; octet++)  
             {  
                 Uint32 octetValue = 0;  
   
                 if (!isdigit(hostname[i]))  
                 {  
                     return false;  
                 }  
   
                 while (isdigit(hostname[i]))  
                 {  
                     octetValue = octetValue*10 + (hostname[i] - '0');  
                     i++;  
                 }  
   
                 if (octetValue > 255)  
                 {  
                     return false;  
                 }  
   
                 if ((octet != 4) && (hostname[i++] != '.'))  
                 {  
                     return false;  
                 }  
             }  
         }  
         else  
         {  
             // Validate a hostname  
   
             Boolean expectHostSegment = true;  
   
             while (expectHostSegment == true)  
             {  
                 expectHostSegment = false;  
  
                 if (!isalpha(hostname[i++]))          return addr.isValid();
                 {  
                     return false;  
                 }  
   
                 while (isalnum(hostname[i]) || (hostname[i] == '-'))  
                 {  
                     i++;  
                 }  
   
                 if (hostname[i] == '.')  
                 {  
                     i++;  
                     expectHostSegment = true;  
                 }  
             }  
         }  
   
         // Check for a port number:  
   
         if (hostname[i] == ':')  
         {  
             if (!isdigit(hostname[++i]))  
             {  
                 return false;  
             }  
   
             while (isdigit(hostname[++i]));  
         }  
   
         return (hostname[i] == char(0));  
     }     }
  
     //     //
Line 521 
Line 462 
 }; };
  
  
 CIMObjectPath::CIMObjectPath() :  CIMObjectPath::CIMObjectPath()
          _rep(new CIMObjectPathRep())  
 { {
       _rep = new CIMObjectPathRep();
 } }
  
 CIMObjectPath::CIMObjectPath(const CIMObjectPath& x) :  CIMObjectPath::CIMObjectPath(const CIMObjectPath& x)
          _rep(new CIMObjectPathRep(*x._rep.get()))  
 { {
       _rep = new CIMObjectPathRep(*x._rep);
 } }
  
 CIMObjectPath::CIMObjectPath(const String& objectName) CIMObjectPath::CIMObjectPath(const String& objectName)
Line 538 
Line 478 
     CIMObjectPath tmpRef;     CIMObjectPath tmpRef;
     tmpRef.set(objectName);     tmpRef.set(objectName);
  
     _rep.reset(new CIMObjectPathRep(*tmpRef._rep.get()));      _rep = new CIMObjectPathRep(*tmpRef._rep);
 } }
  
 CIMObjectPath::CIMObjectPath( CIMObjectPath::CIMObjectPath(
Line 551 
Line 491 
     CIMObjectPath tmpRef;     CIMObjectPath tmpRef;
     tmpRef.set(host, nameSpace, className, keyBindings);     tmpRef.set(host, nameSpace, className, keyBindings);
  
     _rep.reset(new CIMObjectPathRep(*tmpRef._rep.get()));      _rep = new CIMObjectPathRep(*tmpRef._rep);
 } }
  
 CIMObjectPath::~CIMObjectPath() CIMObjectPath::~CIMObjectPath()
 { {
       delete _rep;
 } }
  
 CIMObjectPath& CIMObjectPath::operator=(const CIMObjectPath& x) CIMObjectPath& CIMObjectPath::operator=(const CIMObjectPath& x)
 { {
     CIMObjectPathRep *tmp = new CIMObjectPathRep(*x._rep.get());      *_rep = *x._rep;
     _rep.reset(tmp);  
     return *this;     return *this;
 } }
  
Line 750 
Line 690 
                     type = CIMKeyBinding::REFERENCE;                     type = CIMKeyBinding::REFERENCE;
                 }                 }
             }             }
             catch (Exception & e)              catch (const Exception &)
             {             {
                 // Not a reference value; leave type as STRING                 // Not a reference value; leave type as STRING
             }             }
Line 797 
Line 737 
                 isComma = true;                 isComma = true;
             }             }
  
               if (*p == '-')
               {
             Sint64 x;             Sint64 x;
   
             if (!XmlReader::stringToSignedInteger(p, x))             if (!XmlReader::stringToSignedInteger(p, x))
                 throw MalformedObjectNameException(objectName);                 throw MalformedObjectNameException(objectName);
               }
               else
               {
                   Uint64 x;
                   if (!XmlReader::stringToUnsignedInteger(p, x))
                       throw MalformedObjectNameException(objectName);
               }
  
             valueString.assign(p, n);             valueString.assign(p, n);
  
Line 986 
Line 934 
  
             CIMKeyBinding::Type type = keyBindings[i].getType();             CIMKeyBinding::Type type = keyBindings[i].getType();
  
             if (type == CIMKeyBinding::STRING || type == CIMKeyBinding::REFERENCE)              if (type == CIMKeyBinding::STRING ||
                   type == CIMKeyBinding::REFERENCE)
                 objectName.append('"');                 objectName.append('"');
  
             objectName.append(value);             objectName.append(value);
  
             if (type == CIMKeyBinding::STRING || type == CIMKeyBinding::REFERENCE)              if (type == CIMKeyBinding::STRING ||
                   type == CIMKeyBinding::REFERENCE)
                 objectName.append('"');                 objectName.append('"');
  
             if (i + 1 != n)             if (i + 1 != n)
Line 1115 
Line 1065 
     return !operator==(x, y);     return !operator==(x, y);
 } }
  
 #ifdef PEGASUS_USE_DEPRECATED_INTERFACES  
 PEGASUS_STD(ostream)& operator<<(  
     PEGASUS_STD(ostream)& os,  
     const CIMObjectPath& x)  
 {  
     return os << x.toString();  
 }  
 #endif  
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.38  
changed lines
  Added in v.1.60.4.1

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2