Issue 9165: Align reflective argument passing in EMOF to CMOF (mof2idl-ftf) Source: Fraunhofer FOKUS (Mr. Michael Soden, soden@ikv.de soden@fokus.fraunhofer.de) Nature: Uncategorized Issue Severity: Summary: Just as in CMOF, a RefArgument class should be introduced in EMOF in order to handle reflective argument passing the better way. Resolution: Revised Text: Resolution: Place RefArgument in the MOF package an use it for EMOF reflective too. The ReflectiveCollection, ReflectiveSequence and ReflectiveIterator should be used to handle collections of arguments. The statement: This does not conflict with the two <<combine>> dependencies from Reflection over CMOFReflection to CMOF, because through the inheritance the merge characteristic is preserved and all elements are available within CMOF, what is demanded in sense of a <<combine>>. In section 8.2 on page 71 was deleted because such a <<combine>> dependency doesn't exist anymore. The definition of and corresponding text to the RefArgument interface was moved to the section 8. Complete Reflective IDL was changed to module MOF { struct RefArgument { wstring name; any element; }; typedef sequence < RefArgument > RefArgumentSet; module EMOF { module Reflective { typedef wstring PropertyName; interface RefBaseObject; interface RefFactory; interface RefBaseObject : MOFObject { RefBaseObject get_meta_class (); RefBaseObject get_container (); boolean is_instance_of_type ( in RefBaseObject type, in boolean sub_types ); }; interface RefObject : RefBaseObject { any ref_get ( in Property prop ) raises (MofError, NotSet); void ref_set ( in Property prop, in any new_value ) raises (MofError); boolean ref_is_set ( in Property prop ) raises (MofError); void ref_unset ( in Property prop ) raises (MofError); any ref_get_by_name ( in PropertyName prop ) raises (MofError, NotSet); void ref_set_by_name ( in PropertyName prop, in any new_value ) raises (MofError); boolean ref_is_set_by_name ( in PropertyName prop ) raises (MofError); void ref_unset_by_name ( in PropertyName prop ) raises (MofError); }; interface RefPackage : RefBaseObject { RefFactory ref_factory (); ReflectiveCollection ref_all_of_class(in RefBaseObject class); ReflectiveCollection ref_all_of_type(in RefBaseObject class); }; interface RefFactory : RefBaseObject { RefPackage ref_package (); RefBaseObject ref_create_from_string ( in wstring from ) raises (MofError); wstring ref_convert_to_string ( in RefBaseObject element ) raises (MofError); RefBaseObject ref_create ( in RefBaseObject class ) raises (MofError); RefBaseObject ref_create_and_init ( in RefBaseObject class, RefArgumentSet arguments) raises (MofError); }; }; // Reflective module CCMReflective { typedef wstring Property; interface RefCCMBaseObject : MOFObject { RefCCMBaseObject get_meta_class (); RefCCMBaseObject get_container (); boolean is_instance_of_type ( in RefCCMBaseObject type, in boolean sub_types ); }; interface RefCCMObject : RefCCMBaseObject , Components::CCMObject { any ref_get ( in Property prop ) raises (MofError, NotSet); void ref_set ( in Property prop, in any new_value ) raises (MofError); boolean ref_is_set ( in Property prop ) raises (MofError); void ref_unset ( in Property prop ) raises (MofError); any ref_get_by_name ( in Property prop ) raises (MofError, NotSet); void ref_set_by_name ( in Property prop, in any new_value ) raises (MofError); boolean ref_is_set_by_name ( in Property prop ) raises (MofError); void ref_unset_by_name ( in Property prop ) raises (MofError); }; interface RefCCMHome : Components::CCMHome { RefCCMObject ref_create (); }; }; // CCMReflective }; // EMOF module CMOF { module Reflective { typedef wstring Operation; interface RefBaseObject; struct RefLink { RefBaseObject firstObject; RefBaseObject secondObject; }; typedef sequence < RefLink > RefLinkSet; typedef wstring OperationName interface RefBaseObject : MOF::EMOF::Reflective::RefBaseObject { any ref_invoke ( in Operation op, in RefArgumentSet arguments ) raises (MofError); any ref_invoke_by_name ( in OperationName op, in RefArgumentSet arguments ) raises (MofError); }; interface RefAssociation : RefBaseObject { RefLinkSet ref_all_links (); void ref_create_link ( in RefLink new_link ) raises (MofError); boolean ref_link_exists ( in RefLink link ) raises (MofError); boolean ref_remove_link ( in RefLink old_link ) raises (MofError, NotFound); RefCollection ref_linked_objects ( in RefBaseObject end) raises (MofError); }; interface RefFactory : RefBaseObject, ::MOF::EMOF::Reflective::RefFactory { RefBaseObject ref_create_and_init( in RefBaseObject class, in ReflectiveCollection arguments ) raises (MofError); RefBaseObject ref_create ( in RefBaseObject class) raises (MofError); }; }; // Reflective module CCMReflective { interface RefCCMBaseObject; struct RefLink { RefCCMBaseObject firstObject; RefCCMBaseObject secondObject; }; typedef sequence < RefLink > RefLinkSet; interface RefCCMBaseObject : MOF::EMOF::CCMReflective::RefCCMBaseObject { }; interface RefCCMAssociation : RefCCMObject, MOF::EMOF::CCMReflective::RefCCMObject { RefLinkSet ref_all_links (); void ref_create_link ( in RefLink new_link ) raises (MofError); boolean ref_link_exists ( in RefLink link ) raises (MofError); boolean ref_remove_link ( in RefLink old_link ) raises (NotFound); ReflectiveCollection ref_linked_objects ( in RefCCMBaseObject end) raises (MofError); }; interface RefCCMHome : EMOF::CCMReflective::RefCCMHome { RefCCMObject ref_create_and_init ( in RefArgumentSet arguments ) raises (MofError); }; }; // CCMReflective }; // CMOF }; // MOF Actions taken: November 15, 2005: received issue March 8, 2006: closed issue Discussion: End of Annotations:===== MG Issue No: [Temp18] Title: Align reflective argument passing in EMOF to CMOF. Source: Michael Soden, soden@ikv.de Summary: Just as in CMOF, a RefArgument class should be introduced in EMOF in order to handle reflective argument passing the better way. Discussion: Resolution: Place RefArgument in the MOF package an use it for EMOF reflective too. The ReflectiveCollection, ReflectiveSequence and ReflectiveIterator should be used to handle collections of arguments. The statement: This does not conflict with the two <> dependencies from Reflection over CMOFReflection to CMOF, because through the inheritance the merge characteristic is preserved and all elements are available within CMOF, what is demanded in sense of a <>. In section 8.2 on page 71 was deleted because such a <> dependency doesn.t exist anymore. The definition of and corresponding text to the RefArgument interface was moved to the section 8. Complete Reflective IDL was changed to module MOF { struct RefArgument { wstring name; any element; }; typedef sequence < RefArgument > RefArgumentSet; module EMOF { module Reflective { typedef wstring PropertyName; interface RefBaseObject; interface RefFactory; interface RefBaseObject : MOFObject { RefBaseObject get_meta_class (); RefBaseObject get_container (); boolean is_instance_of_type ( in RefBaseObject type, in boolean sub_types ); }; interface RefObject : RefBaseObject { any ref_get ( in Property prop ) raises (MofError, NotSet); void ref_set ( in Property prop, in any new_value ) raises (MofError); boolean ref_is_set ( in Property prop ) raises (MofError); void ref_unset ( in Property prop ) raises (MofError); any ref_get_by_name ( in PropertyName prop ) raises (MofError, NotSet); void ref_set_by_name ( in PropertyName prop, in any new_value ) raises (MofError); boolean ref_is_set_by_name ( in PropertyName prop ) raises (MofError); void ref_unset_by_name ( in PropertyName prop ) raises (MofError); }; interface RefPackage : RefBaseObject { RefFactory ref_factory (); ReflectiveCollection ref_all_of_class(in RefBaseObject class); ReflectiveCollection ref_all_of_type(in RefBaseObject class); }; interface RefFactory : RefBaseObject { RefPackage ref_package (); RefBaseObject ref_create_from_string ( in wstring from ) raises (MofError); wstring ref_convert_to_string ( in RefBaseObject element ) raises (MofError); RefBaseObject ref_create ( in RefBaseObject class ) raises (MofError); RefBaseObject ref_create_and_init ( in RefBaseObject class, RefArgumentSet arguments) raises (MofError); }; }; // Reflective module CCMReflective { typedef wstring Property; interface RefCCMBaseObject : MOFObject { RefCCMBaseObject get_meta_class (); RefCCMBaseObject get_container (); boolean is_instance_of_type ( in RefCCMBaseObject type, in boolean sub_types ); }; interface RefCCMObject : RefCCMBaseObject , Components::CCMObject { any ref_get ( in Property prop ) raises (MofError, NotSet); void ref_set ( in Property prop, in any new_value ) raises (MofError); boolean ref_is_set ( in Property prop ) raises (MofError); void ref_unset ( in Property prop ) raises (MofError); any ref_get_by_name ( in Property prop ) raises (MofError, NotSet); void ref_set_by_name ( in Property prop, in any new_value ) raises (MofError); boolean ref_is_set_by_name ( in Property prop ) raises (MofError); void ref_unset_by_name ( in Property prop ) raises (MofError); }; interface RefCCMHome : Components::CCMHome { RefCCMObject ref_create (); }; }; // CCMReflective }; // EMOF module CMOF { module Reflective { typedef wstring Operation; interface RefBaseObject; struct RefLink { RefBaseObject firstObject; RefBaseObject secondObject; }; typedef sequence < RefLink > RefLinkSet; typedef wstring OperationName interface RefBaseObject : MOF::EMOF::Reflective::RefBaseObject { any ref_invoke ( in Operation op, in RefArgumentSet arguments ) raises (MofError); any ref_invoke_by_name ( in OperationName op, in RefArgumentSet arguments ) raises (MofError); }; interface RefAssociation : RefBaseObject { RefLinkSet ref_all_links (); void ref_create_link ( in RefLink new_link ) raises (MofError); boolean ref_link_exists ( in RefLink link ) raises (MofError); boolean ref_remove_link ( in RefLink old_link ) raises (MofError, NotFound); RefCollection ref_linked_objects ( in RefBaseObject end) raises (MofError); }; interface RefFactory : RefBaseObject, ::MOF::EMOF::Reflective::RefFactory { RefBaseObject ref_create_and_init( in RefBaseObject class, in ReflectiveCollection arguments ) raises (MofError); RefBaseObject ref_create ( in RefBaseObject class) raises (MofError); }; }; // Reflective module CCMReflective { interface RefCCMBaseObject; struct RefLink { RefCCMBaseObject firstObject; RefCCMBaseObject secondObject; }; typedef sequence < RefLink > RefLinkSet; interface RefCCMBaseObject : MOF::EMOF::CCMReflective::RefCCMBaseObject { }; interface RefCCMAssociation : RefCCMObject, MOF::EMOF::CCMReflective::RefCCMObject { RefLinkSet ref_all_links (); void ref_create_link ( in RefLink new_link ) raises (MofError); boolean ref_link_exists ( in RefLink link ) raises (MofError); boolean ref_remove_link ( in RefLink old_link ) raises (NotFound); ReflectiveCollection ref_linked_objects ( in RefCCMBaseObject end) raises (MofError); }; interface RefCCMHome : EMOF::CCMReflective::RefCCMHome { RefCCMObject ref_create_and_init ( in RefArgumentSet arguments ) raises (MofError); }; }; // CCMReflective }; // CMOF }; // MOF Disposition: open