version 1.69.4.1, 2008/01/16 12:11:23
|
version 1.72, 2008/02/20 14:00:31
|
|
|
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | // 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. | // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// | // |
//============================================================================== |
//============================================================================= |
// | // |
//%///////////////////////////////////////////////////////////////////////////// |
//%//////////////////////////////////////////////////////////////////////////// |
| |
/////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////// |
// Interop Provider - This provider services those classes from the | // Interop Provider - This provider services those classes from the |
|
|
{ | { |
initProvider(); | initProvider(); |
} | } |
catch(const Exception & e) |
catch(const Exception &) |
{ | { |
// Provider initialization may fail if the repository is not | // Provider initialization may fail if the repository is not |
// populated | // populated |
|
|
ref.getNameSpace()); | ref.getNameSpace()); |
break; | break; |
} | } |
|
case PG_ELEMENTCONFORMSTOPROFILE_RP_RP: |
|
{ |
|
instances = enumElementConformsToProfileRPRPInstances( |
|
context, |
|
ref.getNameSpace()); |
|
break; |
|
} |
case PG_SUBPROFILEREQUIRESPROFILE: | case PG_SUBPROFILEREQUIRESPROFILE: |
{ | { |
instances = enumSubProfileRequiresProfileInstances(); | instances = enumSubProfileRequiresProfileInstances(); |
|
|
// role and resultRole parameter of an associators/associatorNames operation. | // role and resultRole parameter of an associators/associatorNames operation. |
// | // |
bool InteropProvider::validAssocClassForObject( | bool InteropProvider::validAssocClassForObject( |
const CIMName & assocClass, const CIMName & originClass, |
const OperationContext & context, |
|
const CIMName & assocClass, |
|
const CIMObjectPath & objectName, |
const CIMNamespaceName & opNamespace, | const CIMNamespaceName & opNamespace, |
String & originProperty, String & targetProperty) |
String & originProperty, |
|
String & targetProperty) |
{ | { |
PEG_METHOD_ENTER(TRC_CONTROLPROVIDER, | PEG_METHOD_ENTER(TRC_CONTROLPROVIDER, |
"InteropProvider::validAssocClassForObject()"); | "InteropProvider::validAssocClassForObject()"); |
TARGET_CLASS assocClassEnum = translateClassInput(assocClass); | TARGET_CLASS assocClassEnum = translateClassInput(assocClass); |
TARGET_CLASS originClassEnum; | TARGET_CLASS originClassEnum; |
|
CIMName originClass = objectName.getClassName(); |
// If the association class is PG_ElementConformsToProfile, we'll have to | // If the association class is PG_ElementConformsToProfile, we'll have to |
// do some special processing in case the origin instance for the operation | // do some special processing in case the origin instance for the operation |
// is managed by another provider. | // is managed by another provider. |
|
|
CIMName expectedTargetRole; | CIMName expectedTargetRole; |
CIMName expectedOriginRole; | CIMName expectedOriginRole; |
| |
|
Array<CIMName> propNames; |
|
String profileName; |
|
CIMPropertyList propertyList; |
|
CIMInstance tmpInstance; |
|
Uint32 index; |
|
propNames.clear(); |
|
|
// | // |
// Set the target and origin role values. Note that if these values are | // Set the target and origin role values. Note that if these values are |
// not set following the switch block, that implies that the origin class | // not set following the switch block, that implies that the origin class |
|
|
ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT; | ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT; |
} | } |
break; | break; |
|
case PG_ELEMENTCONFORMSTOPROFILE_RP_RP: |
|
propNames.append(CIMName("RegisteredName")); |
|
propertyList = CIMPropertyList(propNames); |
|
tmpInstance = localGetInstance( |
|
context, |
|
objectName, |
|
propertyList); |
|
index = tmpInstance.findProperty("RegisteredName"); |
|
if (index != PEG_NOT_FOUND) |
|
{ |
|
const CIMValue &tmpVal = |
|
tmpInstance.getProperty(index).getValue(); |
|
if (!tmpVal.isNull()) |
|
{ |
|
tmpVal.get(profileName); |
|
} |
|
} |
|
if (String::compareNoCase(profileName, String("SMI-S")) == 0) |
|
{ |
|
expectedTargetRole = |
|
ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT; |
|
expectedOriginRole = |
|
ELEMENTCONFORMSTOPROFILE_PROPERTY_CONFORMANTSTANDARD; |
|
} |
|
else |
|
{ |
|
expectedTargetRole = |
|
ELEMENTCONFORMSTOPROFILE_PROPERTY_CONFORMANTSTANDARD; |
|
expectedOriginRole = |
|
ELEMENTCONFORMSTOPROFILE_PROPERTY_MANAGEDELEMENT; |
|
} |
|
break; |
case PG_SUBPROFILEREQUIRESPROFILE: | case PG_SUBPROFILEREQUIRESPROFILE: |
if(originClassEnum == PG_REGISTEREDPROFILE) | if(originClassEnum == PG_REGISTEREDPROFILE) |
{ | { |
|
|
expectedOriginRole = PROPERTY_DEPENDENT; | expectedOriginRole = PROPERTY_DEPENDENT; |
} | } |
break; | break; |
|
case PG_REFERENCEDPROFILE: |
|
if (originClassEnum == PG_REGISTEREDSUBPROFILE) |
|
{ |
|
expectedTargetRole = PROPERTY_ANTECEDENT; |
|
expectedOriginRole = PROPERTY_DEPENDENT; |
|
} |
|
else if (originClassEnum == PG_REGISTEREDPROFILE) |
|
{ |
|
if ((targetProperty.size() != 0) && |
|
(originProperty.size() != 0) && |
|
String::equalNoCase(targetProperty, originProperty)) |
|
{ |
|
return false; |
|
} |
|
if (targetProperty.size() != 0) |
|
{ |
|
if (!(String::equalNoCase(targetProperty, "Antecedent") || |
|
String::equalNoCase(targetProperty, "Dependent") )) |
|
{ |
|
return false; |
|
} |
|
} |
|
if (originProperty.size() != 0) |
|
{ |
|
if (!(String::equalNoCase(originProperty, "Antecedent") || |
|
String::equalNoCase(originProperty, "Dependent") )) |
|
{ |
|
return false; |
|
} |
|
} |
|
if (String::equalNoCase(originProperty, "Antecedent") && |
|
targetProperty.size() == 0) |
|
{ |
|
targetProperty = String("Dependent"); |
|
} |
|
if (String::equalNoCase(originProperty, "Dependent") && |
|
targetProperty.size() == 0) |
|
{ |
|
targetProperty = String("Antecedent"); |
|
} |
|
if (String::equalNoCase(targetProperty, "Antecedent") && |
|
originProperty.size() == 0) |
|
{ |
|
originProperty = String("Dependent"); |
|
} |
|
if (String::equalNoCase(targetProperty, "Dependent") && |
|
originProperty.size() == 0) |
|
{ |
|
originProperty = String("Antecedent"); |
|
} |
|
return true; |
|
} |
|
break; |
case PG_ELEMENTSOFTWAREIDENTITY: | case PG_ELEMENTSOFTWAREIDENTITY: |
if(originClassEnum == PG_SOFTWAREIDENTITY) | if(originClassEnum == PG_SOFTWAREIDENTITY) |
{ | { |
|
|
CIMNamespaceName originNamespace(objectName.getNameSpace()); | CIMNamespaceName originNamespace(objectName.getNameSpace()); |
| |
// Check that the association traversal request is valid | // Check that the association traversal request is valid |
if(validAssocClassForObject(assocClass, objectName.getClassName(), |
if (validAssocClassForObject( |
originNamespace, originProperty, targetProperty)) |
context, |
|
assocClass, |
|
objectName, |
|
originNamespace, |
|
originProperty, |
|
targetProperty)) |
{ | { |
// retrieve all of the association class instances | // retrieve all of the association class instances |
Array<CIMInstance> localInstances = localEnumerateInstances(context, | Array<CIMInstance> localInstances = localEnumerateInstances(context, |