-//%2005////////////////////////////////////////////////////////////////////////
+//%LICENSE////////////////////////////////////////////////////////////////
//
-// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
-// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
-// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
-// 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.
+// Licensed to The Open Group (TOG) under one or more contributor license
+// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
+// this work for additional information regarding copyright ownership.
+// Each contributor licenses this file to you under the OpenPegasus Open
+// Source License; you may not use this file except in compliance with the
+// License.
//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
-// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
-// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
//
-//==============================================================================
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
//
-// Author: Mike Brasher (mbrasher@bmc.com)
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// Modified By: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
-// Sushma Fernandes, Hewlett-Packard Company
-// (sushma_fernandes@hp.com)
-// Carol Ann Krug Graves, Hewlett-Packard Company
-// (carolann_graves@hp.com)
-// David Dillard, VERITAS Software Corp.
-// (david.dillard@veritas.com)
-// Yi Zhou, Hewlett-Packard Company (yi.zhou@hp.com)
+//////////////////////////////////////////////////////////////////////////
//
//%/////////////////////////////////////////////////////////////////////////////
#include "CIMScope.h"
#include "DeclContext.h"
#include "Resolver.h"
-#include "Indentor.h"
#include "CIMName.h"
#include "Constants.h"
-#include "XmlWriter.h"
-#include "MofWriter.h"
#include "StrLit.h"
PEGASUS_USING_STD;
{
// ATTN: Verify that references are initialized.
-#if 0
- if (_resolved)
- throw InstanceAlreadyResolved();
-#endif
-
if (!context)
- throw NullPointer();
+ throw NullPointer();
//----------------------------------------------------------------------
// First obtain the class:
//----------------------------------------------------------------------
CIMConstClass cimClass =
- context->lookupClass(nameSpace, _reference.getClassName());
+ context->lookupClass(nameSpace, _reference.getClassName());
if (cimClass.isUninitialized())
- throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_CLASS,
+ throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_CLASS,
_reference.getClassName().getString ());
cimClassOut = cimClass;
-#if 0
- if (!cimClass._rep->_resolved)
- throw ClassNotResolved(_reference.getClassName());
-#endif
-
//----------------------------------------------------------------------
// Disallow instantiation of abstract classes.
//----------------------------------------------------------------------
if (cimClass.isAbstract())
- throw InstantiatedAbstractClass(_reference.getClassName().getString ());
+ throw InstantiatedAbstractClass(_reference.getClassName().getString ());
//----------------------------------------------------------------------
// Validate and propagate qualifiers.
//----------------------------------------------------------------------
_qualifiers.resolve(
- context,
- nameSpace,
+ context,
+ nameSpace,
(cimClass.isAssociation()) ? CIMScope::ASSOCIATION : CIMScope::CLASS,
- false,
- cimClass._rep->_qualifiers,
- propagateQualifiers);
+ false,
+ cimClass._rep->_qualifiers,
+ propagateQualifiers);
//----------------------------------------------------------------------
// First iterate the properties of this instance and verify that
for (Uint32 i = 0, n = _properties.size(); i < n; i++)
{
- CIMProperty& property = _properties[i];
+ CIMProperty& property = _properties[i];
- Uint32 index = cimClass.findProperty(property.getName());
+ Uint32 index = cimClass.findProperty(property.getName());
- if (index == PEG_NOT_FOUND)
+ if (index == PEG_NOT_FOUND)
{
//
// Allow addition of Creator property to Indication Subscription,
// Filter and Handler instances
//
-// l10n add language property support
- if (!(((className.equal
+// l10n add language property support
+ if (!(((className.equal
(CIMName (PEGASUS_CLASSNAME_INDSUBSCRIPTION))) ||
- (className.equal
+ (className.equal
(CIMName (PEGASUS_CLASSNAME_FORMATTEDINDSUBSCRIPTION))) ||
- (className.equal
+ (className.equal
(CIMName (PEGASUS_CLASSNAME_INDHANDLER_CIMXML))) ||
- (className.equal
+ (className.equal
(CIMName (PEGASUS_CLASSNAME_LSTNRDST_CIMXML))) ||
- (className.equal
+ (className.equal
(CIMName (PEGASUS_CLASSNAME_INDHANDLER_SNMP))) ||
#ifdef PEGASUS_ENABLE_SYSTEM_LOG_HANDLER
- (className.equal
+ (className.equal
(CIMName (PEGASUS_CLASSNAME_LSTNRDST_SYSTEM_LOG))) ||
#endif
#ifdef PEGASUS_ENABLE_EMAIL_HANDLER
- (className.equal
+ (className.equal
(CIMName (PEGASUS_CLASSNAME_LSTNRDST_EMAIL))) ||
#endif
(className.equal (CIMName (PEGASUS_CLASSNAME_INDFILTER)))) &&
- ((property.getName ().equal
+ ((property.getName ().equal
(CIMName (PEGASUS_PROPERTYNAME_INDSUB_CREATOR))) ||
- (property.getName ().equal
+ (property.getName ().equal
(CIMName (PEGASUS_PROPERTYNAME_INDSUB_ACCEPTLANGS))) ||
- (property.getName ().equal
+ (property.getName ().equal
+ (CIMName (PEGASUS_PROPERTYNAME_LSTNRDST_CREATIONTIME))) ||
+ (property.getName ().equal
(CIMName (PEGASUS_PROPERTYNAME_INDSUB_CONTENTLANGS))))))
{
- throw NoSuchProperty(property.getName().getString ());
+ throw NoSuchProperty(property.getName().getString ());
}
}
else
{
- // resolve the property
- Resolver::resolveProperty (property, context, nameSpace, true,
+ // resolve the property
+ Resolver::resolveProperty (property, context, nameSpace, true,
cimClass.getProperty (index), propagateQualifiers);
- // Ensure that the PROPAGATED attribute is false
- property.setPropagated(false);
}
}
// instance. Copy over the class-origin and set the propagated flag
// to true. NOTE: The propagated flag indicates that the property
// was not part of the property set input with the create and
- // was inherited from the default in the class (see cimxml spec sect 3.1.5)
+ // was inherited from the default in the class (see cimxml spec sect 3.1.5)
//----------------------------------------------------------------------
for (Uint32 i = 0, m = 0, n = cimClass.getPropertyCount(); i < n; i++)
{
- CIMConstProperty property = cimClass.getProperty(i);
- const CIMName& name = property.getName();
-
- // See if this instance already contains a property with this name:
-
- Boolean found = false;
-
- for (Uint32 j = m, n = _properties.size(); j < n; j++)
- {
- if (name.equal(_properties[j].getName()))
- {
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- CIMProperty p = property.clone();
- p.setPropagated(true);
- _properties.insert(m++, p);
- }
- }
+ CIMConstProperty property = cimClass.getProperty(i);
+ const CIMName& name = property.getName();
-#if 0
- _resolved = true;
-#endif
-}
-
-CIMInstanceRep::CIMInstanceRep()
-{
+ // See if this instance already contains a property with this name:
-}
+ Boolean found = false;
-CIMInstanceRep::CIMInstanceRep(const CIMInstanceRep& x) : CIMObjectRep(x)
-{
-
-}
-
-void CIMInstanceRep::toXml(Buffer& out) const
-{
- // Class opening element:
-
- out << STRLIT("<INSTANCE ");
- out << STRLIT(" CLASSNAME=\"") << _reference.getClassName();
- out << STRLIT("\" ");
- out << STRLIT(">\n");
-
- // Qualifiers:
-
- _qualifiers.toXml(out);
-
- // Parameters:
-
- for (Uint32 i = 0, n = _properties.size(); i < n; i++)
- XmlWriter::appendPropertyElement(out, _properties[i]);
-
- // Class closing element:
+ for (Uint32 j = m, s = _properties.size(); j < s; j++)
+ {
+ if (name.equal(_properties[j].getName()))
+ {
+ found = true;
+ break;
+ }
+ }
- out << STRLIT("</INSTANCE>\n");
+ if (!found)
+ {
+ CIMProperty p;
+ if (propagateQualifiers)
+ {
+ p = property.clone();
+ }
+ else
+ {
+ p = CIMProperty(
+ property.getName(),
+ property.getValue(),
+ property.getArraySize(),
+ property.getReferenceClassName(),
+ property.getClassOrigin(),
+ property.getPropagated());
+ }
+ p.setPropagated(true);
+ _properties.insert(m++, p);
+ }
+ }
}
-void CIMInstanceRep::toMof(Buffer& out) const
+CIMInstanceRep::CIMInstanceRep(const CIMInstanceRep& x) : CIMObjectRep(x)
{
- // Get and format the class qualifiers
- out << STRLIT("\n//Instance of Class ") << _reference.getClassName();
- if (_qualifiers.getCount())
- out.append('\n');
- _qualifiers.toMof(out);
-
- // Separate qualifiers from Class Name
- out.append('\n');
-
- // output class statement
- out << STRLIT("instance of class ") << _reference.getClassName();
-
- out << STRLIT("\n{");
-
- // format the Properties:
- for (Uint32 i = 0, n = _properties.size(); i < n; i++)
- {
- // Generate MOF if this property not propagated
- // Note that the test is required only because
- // there is an error in getclass that does not
- // test the localOnly flag.
- if (!_properties[i].getPropagated())
- MofWriter::appendPropertyElement(out, _properties[i]);
- }
-
- // Class closing element:
- out << STRLIT("\n};\n");
}
CIMObjectPath CIMInstanceRep::buildPath(
cimClass.getKeyNames(keyNames);
if (keyNames.size() == 0)
- return CIMObjectPath("", CIMNamespaceName(), className);
+ return CIMObjectPath("", CIMNamespaceName(), className);
//--------------------------------------------------------------------------
// Get type and value for each key (building up key bindings):
for (Uint32 i = 0, n = keyNames.size(); i < n; i++)
{
- const CIMName& keyName = keyNames[i];
+ const CIMName& keyName = keyNames[i];
- Uint32 index = findProperty(keyName);
+ Uint32 index = findProperty(keyName);
if (index == PEG_NOT_FOUND)
{
throw NoSuchProperty(keyName.getString());
}
- CIMConstProperty tmp = getProperty(index);
-
- if (keyName.equal(tmp.getName()))
- {
- keyBindings.append(CIMKeyBinding(keyName, tmp.getValue()));
- }
+ CIMConstProperty tmp = getProperty(index);
+ keyBindings.append(CIMKeyBinding(keyName, tmp.getValue()));
}
return CIMObjectPath(String(), CIMNamespaceName(), className, keyBindings);
// KS Mar 05 - The following removal functions are very inefficient and should
// be optimized to avoid the multiple memory moves. Actually, the remove
// qualifiers should be added as a function and optimized that once.
-void CIMInstanceRep::filter(Boolean includeQualifiers, Boolean includeClassOrigin,
- const CIMPropertyList& propertyList)
+void CIMInstanceRep::filter(
+ Boolean includeQualifiers,
+ Boolean includeClassOrigin,
+ const CIMPropertyList& propertyList)
{
// Filter any qualifiers from this instance.
if (!includeQualifiers && _qualifiers.getCount() > 0)
{
- while( _qualifiers.getCount() )
+ while (_qualifiers.getCount())
{
_qualifiers.removeQualifier(0);
}
// remove qualifiers if required.
if (!includeQualifiers && _properties[i].getQualifierCount() > 0)
{
- while( _properties[i].getQualifierCount() > 0 )
+ while (_properties[i].getQualifierCount() > 0)
{
_properties[i].removeQualifier(0);
}