version 1.3, 2001/02/20 05:16:57
|
version 1.7, 2001/04/29 18:57:33
|
|
|
//BEGIN_LICENSE |
//%///////////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM | // Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM |
// | // |
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
// DEALINGS IN THE SOFTWARE. | // DEALINGS IN THE SOFTWARE. |
// | // |
//END_LICENSE |
//============================================================================== |
//BEGIN_HISTORY |
|
// | // |
// Author: |
// Author: Mike Brasher (mbrasher@bmc.com) |
// | // |
// $Log$ |
// Modified By: |
// Revision 1.3 2001/02/20 05:16:57 mike |
|
// Implemented CIMInstance::getInstanceName() |
|
// | // |
// Revision 1.2 2001/02/19 01:47:16 mike |
//%///////////////////////////////////////////////////////////////////////////// |
// Renamed names of the form CIMConst to ConstCIM. |
|
// |
|
// Revision 1.1 2001/02/18 18:39:05 mike |
|
// new |
|
// |
|
// Revision 1.2 2001/02/18 03:56:00 mike |
|
// Changed more class names (e.g., ConstClassDecl -> ConstCIMClass) |
|
// |
|
// Revision 1.1 2001/02/16 02:06:06 mike |
|
// Renamed many classes and headers. |
|
// |
|
// Revision 1.6 2001/01/28 04:11:03 mike |
|
// fixed qualifier resolution |
|
// |
|
// Revision 1.5 2001/01/26 23:26:53 mike |
|
// reworked CGI inteface |
|
// |
|
// Revision 1.4 2001/01/25 02:12:05 mike |
|
// Added meta-qualifiers to LoadRepository program. |
|
// |
|
// Revision 1.3 2001/01/23 01:25:34 mike |
|
// Reworked resolve scheme. |
|
// |
|
// Revision 1.2 2001/01/15 04:31:43 mike |
|
// worked on resolve scheme |
|
// |
|
// Revision 1.1.1.1 2001/01/14 19:50:39 mike |
|
// Pegasus import |
|
// |
|
// |
|
//END_HISTORY |
|
| |
#include "CIMClass.h" | #include "CIMClass.h" |
#include "DeclContext.h" | #include "DeclContext.h" |
|
|
if (!CIMName::legal(className)) | if (!CIMName::legal(className)) |
throw IllegalName(); | throw IllegalName(); |
| |
if (superClassName.getLength() && !CIMName::legal(superClassName)) |
if (superClassName.size() && !CIMName::legal(superClassName)) |
throw IllegalName(); | throw IllegalName(); |
} | } |
| |
|
|
// Set the class origin: | // Set the class origin: |
// ATTN: put this check in other places: | // ATTN: put this check in other places: |
| |
if (x.getClassOrigin().getLength() == 0) |
if (x.getClassOrigin().size() == 0) |
CIMProperty(x).setClassOrigin(_className); | CIMProperty(x).setClassOrigin(_className); |
| |
// Add the property: | // Add the property: |
|
|
| |
void CIMClassRep::removeProperty(Uint32 pos) | void CIMClassRep::removeProperty(Uint32 pos) |
{ | { |
if (pos >= _properties.getSize()) |
if (pos >= _properties.size()) |
throw OutOfBounds(); | throw OutOfBounds(); |
} | } |
| |
Uint32 CIMClassRep::findProperty(const String& name) | Uint32 CIMClassRep::findProperty(const String& name) |
{ | { |
for (Uint32 i = 0, n = _properties.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _properties.size(); i < n; i++) |
{ | { |
if (CIMName::equal(_properties[i].getName(), name)) | if (CIMName::equal(_properties[i].getName(), name)) |
return i; | return i; |
|
|
| |
CIMProperty CIMClassRep::getProperty(Uint32 pos) | CIMProperty CIMClassRep::getProperty(Uint32 pos) |
{ | { |
if (pos >= _properties.getSize()) |
if (pos >= _properties.size()) |
throw OutOfBounds(); | throw OutOfBounds(); |
| |
return _properties[pos]; | return _properties[pos]; |
|
|
| |
Uint32 CIMClassRep::getPropertyCount() const | Uint32 CIMClassRep::getPropertyCount() const |
{ | { |
return _properties.getSize(); |
return _properties.size(); |
} | } |
| |
void CIMClassRep::addMethod(const CIMMethod& x) | void CIMClassRep::addMethod(const CIMMethod& x) |
|
|
| |
Uint32 CIMClassRep::findMethod(const String& name) | Uint32 CIMClassRep::findMethod(const String& name) |
{ | { |
for (Uint32 i = 0, n = _methods.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _methods.size(); i < n; i++) |
{ | { |
if (CIMName::equal(_methods[i].getName(), name)) | if (CIMName::equal(_methods[i].getName(), name)) |
return i; | return i; |
|
|
| |
CIMMethod CIMClassRep::getMethod(Uint32 pos) | CIMMethod CIMClassRep::getMethod(Uint32 pos) |
{ | { |
if (pos >= _methods.getSize()) |
if (pos >= _methods.size()) |
throw OutOfBounds(); | throw OutOfBounds(); |
| |
return _methods[pos]; | return _methods[pos]; |
|
|
| |
Uint32 CIMClassRep::getMethodCount() const | Uint32 CIMClassRep::getMethodCount() const |
{ | { |
return _methods.getSize(); |
return _methods.size(); |
} | } |
| |
void CIMClassRep::resolve( | void CIMClassRep::resolve( |
|
|
if (!context) | if (!context) |
throw NullPointer(); | throw NullPointer(); |
| |
if (_superClassName.getLength()) |
if (_superClassName.size()) |
{ | { |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
// First check to see if the super-class really exists: | // First check to see if the super-class really exists: |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
| |
ConstCIMClass superClass |
CIMConstClass superClass |
= context->lookupClassDecl(nameSpace, _superClassName); |
= context->lookupClass(nameSpace, _superClassName); |
| |
if (!superClass) | if (!superClass) |
throw NoSuchSuperClass(_superClassName); | throw NoSuchSuperClass(_superClassName); |
|
|
// set the class-origin: | // set the class-origin: |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
| |
for (Uint32 i = 0, n = _properties.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _properties.size(); i < n; i++) |
{ | { |
CIMProperty& property = _properties[i]; | CIMProperty& property = _properties[i]; |
Uint32 pos = superClass.findProperty(property.getName()); | Uint32 pos = superClass.findProperty(property.getName()); |
|
|
} | } |
else | else |
{ | { |
ConstCIMProperty superClassProperty = superClass.getProperty(pos); |
CIMConstProperty superClassProperty = superClass.getProperty(pos); |
property.resolve(context, nameSpace, false, superClassProperty); | property.resolve(context, nameSpace, false, superClassProperty); |
} | } |
} | } |
|
|
| |
for (Uint32 i = 0, m = 0, n = superClass.getPropertyCount(); i < n; i++) | for (Uint32 i = 0, m = 0, n = superClass.getPropertyCount(); i < n; i++) |
{ | { |
ConstCIMProperty superClassProperty = superClass.getProperty(i); |
CIMConstProperty superClassProperty = superClass.getProperty(i); |
| |
// Find the property in *this* class; if not found, then clone and | // Find the property in *this* class; if not found, then clone and |
// insert it (setting the propagated flag). Otherwise, change | // insert it (setting the propagated flag). Otherwise, change |
|
|
| |
Uint32 pos = Uint32(-1); | Uint32 pos = Uint32(-1); |
| |
for (Uint32 j = m, n = _properties.getSize(); j < n; j++) |
for (Uint32 j = m, n = _properties.size(); j < n; j++) |
{ | { |
if (CIMName::equal( | if (CIMName::equal( |
_properties[j].getName(), | _properties[j].getName(), |
|
|
// set the class-origin: | // set the class-origin: |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
| |
for (Uint32 i = 0, n = _methods.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _methods.size(); i < n; i++) |
{ | { |
CIMMethod& method = _methods[i]; | CIMMethod& method = _methods[i]; |
Uint32 pos = superClass.findMethod(method.getName()); | Uint32 pos = superClass.findMethod(method.getName()); |
|
|
| |
Uint32 pos = Uint32(-1); | Uint32 pos = Uint32(-1); |
| |
for (Uint32 j = m, n = _methods.getSize(); j < n; j++) |
for (Uint32 j = m, n = _methods.size(); j < n; j++) |
{ | { |
if (CIMName::equal( | if (CIMName::equal( |
_methods[j].getName(), | _methods[j].getName(), |
|
|
// Resolve each property: | // Resolve each property: |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
| |
for (Uint32 i = 0, n = _properties.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _properties.size(); i < n; i++) |
_properties[i].resolve(context, nameSpace, false); | _properties[i].resolve(context, nameSpace, false); |
| |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
// Resolve each method: | // Resolve each method: |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
| |
for (Uint32 i = 0, n = _methods.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _methods.size(); i < n; i++) |
_methods[i].resolve(context, nameSpace); | _methods[i].resolve(context, nameSpace); |
| |
//---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
|
|
out << "<CLASS "; | out << "<CLASS "; |
out << " NAME=\"" << _className << "\" "; | out << " NAME=\"" << _className << "\" "; |
| |
if (_superClassName.getLength()) |
if (_superClassName.size()) |
out << " SUPERCLASS=\"" << _superClassName << "\" "; | out << " SUPERCLASS=\"" << _superClassName << "\" "; |
| |
out << ">\n"; | out << ">\n"; |
|
|
| |
// Parameters: | // Parameters: |
| |
for (Uint32 i = 0, n = _properties.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _properties.size(); i < n; i++) |
_properties[i].toXml(out); | _properties[i].toXml(out); |
| |
// Methods: | // Methods: |
| |
for (Uint32 i = 0, n = _methods.getSize(); i < n; i++) |
for (Uint32 i = 0, n = _methods.size(); i < n; i++) |
_methods[i].toXml(out); | _methods[i].toXml(out); |
| |
// Class closing element: | // Class closing element: |
|
|
out << "</CLASS>\n"; | out << "</CLASS>\n"; |
} | } |
| |
void CIMClassRep::print() const |
void CIMClassRep::print(std::ostream &os) const |
{ | { |
Array<Sint8> tmp; | Array<Sint8> tmp; |
toXml(tmp); | toXml(tmp); |
tmp.append('\0'); | tmp.append('\0'); |
XmlWriter::indentedPrint(std::cout, tmp.getData(), 4); |
XmlWriter::indentedPrint(os, tmp.getData(), 4); |
// cout << tmp.getData() << endl; | // cout << tmp.getData() << endl; |
} | } |
| |
|
|
{ | { |
x._qualifiers.cloneTo(_qualifiers); | x._qualifiers.cloneTo(_qualifiers); |
| |
_properties.reserve(x._properties.getSize()); |
_properties.reserve(x._properties.size()); |
| |
for (Uint32 i = 0, n = x._properties.getSize(); i < n; i++) |
for (Uint32 i = 0, n = x._properties.size(); i < n; i++) |
_properties.append(x._properties[i].clone()); | _properties.append(x._properties[i].clone()); |
| |
_methods.reserve(x._methods.getSize()); |
_methods.reserve(x._methods.size()); |
| |
for (Uint32 i = 0, n = x._methods.getSize(); i < n; i++) |
for (Uint32 i = 0, n = x._methods.size(); i < n; i++) |
_methods.append(x._methods[i].clone()); | _methods.append(x._methods[i].clone()); |
} | } |
| |
|
|
const Array<CIMProperty>& tmp1 = _properties; | const Array<CIMProperty>& tmp1 = _properties; |
const Array<CIMProperty>& tmp2 = x->_properties; | const Array<CIMProperty>& tmp2 = x->_properties; |
| |
if (tmp1.getSize() != tmp2.getSize()) |
if (tmp1.size() != tmp2.size()) |
return false; | return false; |
| |
for (Uint32 i = 0, n = tmp1.getSize(); i < n; i++) |
for (Uint32 i = 0, n = tmp1.size(); i < n; i++) |
{ | { |
if (!tmp1[i].identical(tmp2[i])) | if (!tmp1[i].identical(tmp2[i])) |
return false; | return false; |
|
|
const Array<CIMMethod>& tmp1 = _methods; | const Array<CIMMethod>& tmp1 = _methods; |
const Array<CIMMethod>& tmp2 = x->_methods; | const Array<CIMMethod>& tmp2 = x->_methods; |
| |
if (tmp1.getSize() != tmp2.getSize()) |
if (tmp1.size() != tmp2.size()) |
return false; | return false; |
| |
for (Uint32 i = 0, n = tmp1.getSize(); i < n; i++) |
for (Uint32 i = 0, n = tmp1.size(); i < n; i++) |
{ | { |
if (!tmp1[i].identical(tmp2[i])) | if (!tmp1[i].identical(tmp2[i])) |
return false; | return false; |
|
|
| |
for (Uint32 i = 0, n = getPropertyCount(); i < n; i++) | for (Uint32 i = 0, n = getPropertyCount(); i < n; i++) |
{ | { |
ConstCIMProperty property = getProperty(i); |
CIMConstProperty property = getProperty(i); |
| |
if (property.isKey()) | if (property.isKey()) |
keyNames.append(property.getName()); | keyNames.append(property.getName()); |