Issue 9170: Editorial issue(s) (mof2idl-ftf) Source: Fraunhofer FOKUS (Mr. Michael Soden, soden@ikv.de soden@fokus.fraunhofer.de) Nature: Uncategorized Issue Severity: Summary: The grammatical errors in the document should be corrected. Also review comments were taken into account and can now be deleted from the final document. Resolution: Revised Text: Resolution: The following were deleted Review comment from Pete Rivett: "Parameters for the factory operation may be optional" - Right, only if the Data Type (or a supertype) contains attributes (that are not derived), then these parameters exist. Review question from Dave Frankel: "IDL for CHome: why don't the last two factory operations have parameters for a_attrib and b_attrib?" Answer: The parameter of copy_from is of type CCommon, which can either be a concrete valuetype of type CState with a_attrib, b_attrib, and c_attrib as members or a reference of (component-) type C, also allowing access to all inherited attributes. Another suggestion for a more advanced query-interface would be to reuse the concept of EJB to define finders. The idea is to supply query-requests as parameters in kind of EJB internal QueryLanguage (EJB QL) like style. Thus, simply one operation is defined that directly supports "words" of a query language (in opposite to EJB, where only predefined queries are possible). An example for OCL would look like: <AbstractSetIterator> ocl_query ( in string query_expression, in boolean result_as_value ); Thus, a client is able to specify OCL expressions for an explicit search via any combination of characteristics of the instances. For example, a query string like self.name = 'HardToImplement' returns an iterator to all instances with an attribute called name set to 'HardToImplement'. For the definition of the mapping rules themselves, we derive one combined model from the MOF 2.0 model and the CCM metamodel. Based on this combined model, we define the mapping rules using OCL. The methodology is covered by section 5. (from section 7) Collections are mapped to abstract iterator interfaces as described in the following subsections. Mapping to abstract interfaces If a type (a data type or a classifier) appears as a property or an operation parameter with the upper value of the multiplicity being greater than 1, for this type is an abstract interface created. If the collection kind is Bag/Set/List/UList, this interface is defined by: abstract interface <type of collection><collection kind>Iterator : MOF::IteratorBase { <type of collection> get_value () raises (MofError); void insert_value ( in <type of collection> value ) raises (MofError); void modify_value ( in <type of collection> value ) raises (MofError); <type of collection><collection kind>Iterator next_one() raises (MofError); <type of collection><collection kind>Iterator previous_one() raises (MofError); <type of collection><collection kind>Iterator begin() raises (MofError); <type of collection><collection kind>Iterator end() raises (MofError); boolean is_empty() raises (MofError); }; <type of collection><collection kind>Iterator::get_value Parameters (none) Semantics Returns the value of the element in the collection pointed to by this iterator. If this iterator is equivalent with the result of <type of collection><collection kind>Iterator::end(), a MofError exception is raised. Returns Value of the element in the collection pointed to by this iterator. Exception MofError is raised if the iterator points to the last element in the list. <type of collection><collection kind>Iterator::insert_value Parameters <type of collection> value Semantics Inserts the value in the parameter value into the collection. If the collection is ordered, the value is being inserted before the element this iterator points to, e.g., a call to next_one after a call to insert shall return the element the iterator points to before the insert_value operation. If the iterator points to the result of <type of collection><collection kind>Iterator::end(), the value is being added at the end of the collection. If the iterator points to <type of collection><collection kind>Iterator::begin(), the value is being inserted at the beginning of the collection. Returns (none) Exception MofError is raised if the collection this iterator points to is read-only or if an insertion of a value will increase the size of the collection to a value greater than upper bound - lower bound of the collection. MofError is also being raised, if the collection is unique and the element that shall be inserted is already existing in the collection. <type of collection><collection kind>Iterator::modify_value Parameters <type of collection> value Semantics Sets the value of the collection to the one given in parameter value. Returns (none) Exception MofError is raised if the collection this iteratator points to is read-only or the iterator points to the end of the collection. MofError is also being raised, if the collection is unique and the element that shall be inserted is already existing in the collection. <type of collection><collection kind>Iterator::next_one Parameters (none) Semantics Returns an iterator to the element following the element pointed to by this iterator. If the element pointed to by this iterator is the last element in a collection, an iterator is being returned equivalent to the result of <type of collection><collection kind>Iterator::end(). The same holds if the operation is called at an iterator equivalent to the result of <type of collection><collection kind>Iterator::end(). Returns <type of collection><collection kind>Iterator Exception (none) <type of collection><collection kind>Iterator::previous_one Parameters (none) Semantics Returns an iterator to the element preceding the element pointed to by this iterator. If the element pointed to by this iterator is the first element in a collection, an iterator is being returned equivalent to the result of <type of collection><collection kind>Iterator::begin(). The same holds if the operation is called at an iterator equivalent to the result of <type of collection><collection kind>Iterator::begin(). Returns <type of collection><collection kind>Iterator Exception (none) <type of collection><collection kind>Iterator::begin Parameters (none) Semantics Returns an iterator pointing to the begin of the collection. If the one is equivalent with the result of <type of collection><collection kind>Iterator::end(), the collection is empty. Returns <type of collection><collection kind>Iterator Exception (none) <type of collection><collection kind>Iterator::end Parameters (none) Semantics Returns an iterator pointing to the end of the collection. If the one is equivalent with the result of <type of collection><collection kind>Iterator::begin(), the collection is empty. Returns <type of collection><collection kind>Iterator Exception (none) <type of collection><collection kind>Iterator::is_empty Parameters (none) Semantics Returns true if the collection the iterator points to is empty, false otherwise. Returns boolean Exception (none) Mapping to concrete valuetypes and interfaces Beside the derivation of an abstract interface for collections, a concrete valuetype is being created to enable the access by value semantics for collections. This valuetype implements all operations specified by the abstract interface it supports and provides a factory operation to construct a value based on a specific collection given as parameter to the factory operation. valuetype <type of collection><collection kind>AsValue supports <type of collection><collection kind>Iterator { private <type of collection><collection kind> value; factory create ( in <type of collection><collection kind> initializer ); }; To allow access to the elements of a collection by reference, an interface is being produced that inherits from the abstract interface created for a collection. This interface inherits all operations defined by the abstract interface and extends them by an operation as_value. This operation returns the iterator as valuetype, pointing to the same element in the collection. interface <type of collection><collection kind>AsReference : <type of collection><collection kind>Iterator { <type of collection><collection kind>AsValue as_value() raises (MofError); }; from section 8.1.1 RefFactory The CMOF RefFactory inherits from CMOF::Reflective::RefBaseObject and EMOF::Reflective::RefFactory. It provides an enhanced operation for object creation. RefFactory::ref_create_object Parameters RefBaseObject class : determinates the type of object that is being created. ArgumentSetIterator arguments : iterator of a name/value pairs list, which represents the properties of the object, identified by the name of the RefArguments that also supply their initial values. Semantics Creates an instance of the supplied object like the operation EMOF::Reflective::RefFactory::ref_create. But with the difference, that it is possible to supply initial values for the properties of the instance. If there is no argument supplied for one of the objects properties, the property is set according to the operation EMOF::Reflective::RefFactory::ref_create_from_string. Returns RefBaseObject : the new instance with the initialized properties. Exception Raises a MofError with error_code ILLEGAL_ARGUMENT_VIOLATION, if the one of the supplied arguments is not member of the object or the object to create the instance of is not contained in the linked package. RefFactory::objects_of_type Parameters RefBaseObject class : type of objects to search for. boolean include_subtypes : whether to perform a search over all subtypes of the supplied type, or not. Semantics This operation provides the opportunity to request all existing instances of a specified type. And if the flag include_subtype is set to true, all existing subtypes are included in the returned collection. If the supplied type has the abstract flag set to true and include_subtypes = false, an empty collection will be returned. Returns RefBaseObjectSetIterator : iterator of a RefBaseObjectSet, which contains the requested objects. Exception Raises a MofError exception with error_code ILLEGAL_ARGUMENT_VIOLATION, if the supplied type is not contained within the linked package. Section 7.5.7 was deleted From section 7.6.3, <association_name>::linked_objects_<end_name> The linked_objects operation replaces the former add_*-operations of MOF1.4 with the comfortable iterator interface. From section 7.6.3, <association_name>::create_link_in_<association_name> Another way of inserting links is to use the iterator returned by the linked_objects_* operations. From section 6.3.1.4 Mapping of Attributes and Operations Moreover, we do not distinguish navigable association ends and attributes of type class (cp. to UML2 Infrastructure and see discussion in 5.2.11 and Navigability and owned Properties) From 6.3.3 Moreover, the submitters prefer the CCM mapping approach From 6.4.1.9 Since the Reflective API overloads thin model interfaces with in most cases unneeded functionality, the proposed mapping drops the Reflective interface inheritance of MOF1.4. Instead, From section 7.1 However, we truly believe that an FTF is able to align and refine the mapping for extents/ URIExtents with upcoming issues within the finalization process. From section 6.3.3.2 It should be noted, that inheritance of classes is realized by the inheritance of the derived abstract interfaces (cp. 8.2.7) and additionally via the instance interfaces. In section 7.4, from exceptions idl const string NOT_CHANGEABLE_VIOLATION = "org.omg.mof:reflective.not_changeable"; const string NOT_PUBLIC_VIOLATION = "org.omg.mof:reflective.not_public"; const string WRONG_SCOPE_VIOLATION = "org.omg.mof:reflective.wrong_scope"; The following were added: (in Section Separation of MOF and services) This specification separates the mapping of core MOF2.0 concepts from those of services. Although Reflection is available in MOF2.0 Core, it is considered in the mapping as a standard service. Non standard services can be plugged into the mapping through MOF Tags. In section 6.3.1.8 In this mapping, a verify operation has been provided in the MOFObject interface, to which OCL expresssions can be passed (see Section , "Globals," on page13, " Error! Reference source not found.," on page Error! Bookmark not defined.13). In section 6.2.2 Furthermore, the repository needs to provide the means of obtaining an empty reflective collection or sequence to use when creating new objects that have attributes with multiplicity upper bound > 1. This may be provided in an initial interface to the repository. interface MofRepositoryRoot { ReflectiveCollection create_collection(boolean is_ordered); // Possibly further "root" operations for // accessing repository capabilities }; The is_ordered boolean parameter indicates whether a ReflectiveCollection (FALSE) or ReflectiveSequence (TRUE) should be created. In section 6.4 Due to the fact that CMOF is constructed through package merge of the EMOF package, EMOF mapping rules are also applicable for CMOF. Thus, this section will mostly refer to these mapping rules and only introduce those specific to CMOF. In section 7.3 MOFObject::verify Parameters wstring ocl_expr: an OCL expression defining the constraint. Semantics Check the constraint defined by the passed OCL expression. Returns true, if the check was successfull, false otherwise. Exception MofError with code OCL_EXPRESSION_VIOLATION is raised if the OCL expression cannot be evaluated. In section 7.4, exceptions idl const string CLASS_CAST_VIOLATION = "org.omg.mof:structural.class_cast"; const string OCL_EXPRESSION_VIOLATION = "org.omg.mof:structural.ocl_expression"; in section 7.5.2.2 <class_name>Home::all_of_type_<class name> Parameters in <boolean> : flag stating whether to return objects as value (TRUE) or as reference (FALSE). Semantics Operation to query all component instances managed by this home. It includes all subcomponent instances. Corresponds to the all_of_type_* operation in MOF 1.4. Returns Component instances managed by this home, including all subcomponents. Exception (none). <class_name>Home::all_of_class_<class name> Parameters in <boolean> : flag stating whether to return objects as value (TRUE) or as reference (FALSE). Semantics Operation to query all component instances managed by this home. It does not includes subcomponent instances. Corresponds to the all_of_class_* operation in MOF 1.4. Returns Component instances managed by this home. Exception (none). In section 8.2.1.1 RefBaseObject::ref_invoke_by_name Parameters OperationName operation : name of the operation to invoke. RefArgumentSet arguments : a collection of name/value pairs of type RefArgument, which represents the arguments of the operation through the name of the RefArguments and their value. Semantics Same as for ref_invoke. Returns Same as for ref_invoke. Exception Same as for ref_invoke. In section 8.3.1.2 RefPackage The CMOF RefPackage inherits from CMOF::Reflective::RefBaseObject and EMOF::Reflective::RefPackage and provides an operation to retrieves associations in the package. RefPackage::ref_association Parameters RefBaseObject association : the association type to retrieve. Semantics This operation provides the opportunity to request the association object designated by association. Returns RefAssociation : the found association. Exception Raises a MofError exception with error_code ILLEGAL_ARGUMENT_VIOLATION, if the supplied association type is not contained within the package. RefAssociation::ref_linked_objects Parameters RefBaseObject end : the object, whose linked object are to be returned. Semantics Retrieves the objects that are linked with end in this association. The semantic is the same as the corresponding operation derived for the non reflective interfaces. Returns ReflectiveCollection : the collection of objects linked to end. Exception Raises MofError with code ILLEGAL_ARGUMENT_VIOLATION if end is not an object that can take part in the association. The following were modified: In section 8.1.1 RefFactory::ref_create_from_string wstring from : name of the class to create an instance of. The format of the string is according to the ref_convert_to_string operation. modified o wstring from : name of the class to create an instance of. The format of the string is defined in section 9.2 of [6]. in section 7.3 MOFObject::delete Note, that references to the object are not removed automatically. This may result in so called dangling-references which still refer to this object. It is up to a client to restore the repository into a valid state. modified to Note that references to the object are only removed automatically if the object participates in an association. In all other cases, this may result in so called dangling-references which still refer to this object. It is up to a client to restore the repository into a valid state. In Rule (34) This interface is identical to that from section 5.8.3 of the MOF1.4 specification and contains the same operations. modified to This interface contains one operation named concatenate ( "create_", format_2 ( <package identifier> )) with return type of the package interface created by Rule (35). in section 7.1 , paragraph on services and repository root reference As in MOF1.4, the specification of an initial interface for a repository implementing derived IDL may be included in the specification for the purposes of accessing configuration information of service support. modified to This specification defines an initial interface for a repository implementing derived IDL for the purposes of accessing configuration information of service support. In section 8.3.2 modified In CMOF this interface is enhanced with the create method that provides simultaneous initialization of the component's properties as defined in the CMOF::Reflective::RefFactory. RefComponent create ( in ArgumentSetIterator arguments ); Through the selected return type of RefComponent it is ensured that the reflective API conforms to the CCM domain by using homes to create instances of a component type. to In EMOF this interface is enhanced with the create method that provides simultaneous initialization of the component's properties as defined in the EMOF::Reflective::RefFactory. RefCCMObject ref_create_and_init ( in RefArgumentSet arguments ); In section 8.3.1 Modified The CCM reflective framework defines the RefCCMBaseObject as image of RefBaseObject in the EMOF Base-IDL mapping. To The CMOF::Reflective::RefBaseObject is a specialization of EMOF::Reflective::RefBaseObject. and modified As in the Base-IDL mapping the CMOF reflective framework extends this interface with the opportunity for reflective invocation of methods. RefCCMBaseObjectBagIterator ref_invoke ( in Operation operation, in ArgumentSetIterator arguments ); For this method an iterator is defined as follow: typedef sequence < RefCCMBaseObject > RefCCMBaseObjectSet; interface RefCCMBaseObjectSetIterator : IteratorBase; to In IDL an operation name is expressed is expressed with the following typedef: typedef wstring OperationName; RefBaseObject::ref_invoke Parameters Operation operation : name of the operation to invoke. RefArgumentSet arguments : a collection of name/value pairs of type RefArgument, which represents the arguments of the operation through the name of the RefArguments and their value. Semantics Calls the method specified by its name. This RefArgumentSet includes parameters of the operation identified with their name and providing their value within RefArgument. If an argument of the operation is not passed within the list, the default value is taken - if not present a nil reference is supplied instead. If the invoked operation raises any exception, it will also be listed in the returned collection, but not raised. Returns any : an Any value which contains all return values of the invoked method. Exception A MofError with error_code ILLEGAL_ARGUMENT_VIOLATION is raised, if the argument list contains at least one argument that does not fit to the arguments of the method to invoke. The same error is thrown, when the element contains no such operation. In section 7.5.3, operation <class name>::set_<prop_name> modified If an error occurs on update, MofError is raised. This may result due to a constraint violation or in terms of merging. to If an error occurs on update, MofError is raised. This may result due to a constraint violation or in terms of merging. WRONG_TYPE_VIOLATION is set if prop_type is not the expected one according to redefinition. In section 7.5.3, operation <class_name>::<operation_name> modified MofError is included in the raise clause. If the Operation specifies raisedExceptions, the elements thrown are included using the element_in_error member of the MofError exception. to In addition to the elements specified in raisedExceptions, MofError is included in the raise clause. The user implementation will set the MofError code appropriately. In section 7.5.3, operation <association_name>::all_<association_name>_links modified LinkSetIterator to iterate over all links of the association. to <association_name>LinkSet containing all links of the association. and modified MofError is raised if an error occurs. To MofError with an appropriate code is raised if an error occurred. In section 7.5.3, operation <data_type_name>::equals modified MofError is raised if compare fails or parameter is a nil reference. to MofError is raised with code NIL_OBJECT_VIOLATION if parameter is a nil reference. In section 8.1.1, operation RefObject::ref_get, sematinc modified When the property's multiplicity has an upper bound = 1, then the value of the property is returned. When the upper bound is > 1 an iterator (see Rule (3)) to a collection is returned, which is typed with the type of the property. The returned collection is a Bag, if the prop is neither unique nor ordered. Set, if the prop is unique but not ordered. List, if the prop is ordered but not unique. UList, if the prop is ordered and unique. to When the property's multiplicity has an upper bound = 1, then the value of the property is returned. When the upper bound is > 1 a ReflectiveCollection or ReflectiveSequence is returned (depending on orderedness, see also section 9.1 in [6]). and modified A MofError with the error_code ILLEGAL_ARGUMENT_VIOLATION is thrown, if there is no property within the element, which has the same name as the supplied one. To A MofError with the error_code ILLEGAL_ARGUMENT_VIOLATION is thrown, if the supplied property is not within the element. In section 7.5.4 modified An instance of the Operation class is mapped into the abstract interface that is derived for its owning class (see also CMOF::Operation for exceptional cases to the following): to An instance of the Operation class is mapped into the abstract interface that is derived for its owning class: Section 7.5 EMOF compliance is achieved by using only instances of classes of the MOF::EMOF package. The following subsections provide the CCM mapping for these elements specified (for a discussion and explanations refer to chapter 8). For a more formal specification refer to the OCL constraints in the convenience document [13]. modified to EMOF compliance is achieved by using only instances of classes of the MOF::EMOF package. The following subsections provide the CCM mapping for these elements specified. Section 1 (Scope) modified to This specification defines the MOF 2.0 to CORBA IDL mapping. The mapping rules are based on the MOF2.0 Core document ptc/04-10-15 [6]. The set of mapping rules is outlined in section 6 and defined in detail in section 7. This mapping reuses the concepts of CCM as much as possible aiming at the generation of highly performant, highly scalable, and reliable repositories, which are automatically deployable. The submitters believe that this specification benefits from the gained experiences during several years in developing and using metadata repositories and CORBA technology. In section 6.2.13, Since the Reflective API overloads thin model interfaces with in most cases unneeded functionality, the proposed mapping drops the Reflective interface inheritance of MOF1.4. Instead, Reflection is regarded as MOF Service (orthogonal to any meta-model) and thus mapped as described in Section 6.3.6 , "Support for the Reflection Service," on page30. was changed to Reflection is regarded as MOF Service (orthogonal to any meta-model) and thus mapped as described in Section .10, " Error! Reference source not found. and Section .10, " Error! Reference source not found.," . Section 6.2.4 was modified to All operations to get access to attributes with multiplicity upper > 1, will use either the ReflectiveCollection or ReflectiveSequence interfaces as return type (depending on orderedness). Internally the ReflectiveCollections or ReflectiveSequences hold a collection of objects (by reference or value). It is intended to reuse this collection pattern every time an instance of class MultiplicityElement is derived, so that clients simply can get an iterator instance and iterate over the collection. Although the word "Reflective" appears in the collection and iterator interface names, they are not used used only together with the reflection service. An example is given in Section .3, " Error! Reference source not found.," on page Error! Bookmark not defined.22. In section 6.1 The approach targets at an improvement of the current mapping… was modified to The approach targets an improvement of the MOF1.4 mapping… Because MOF2 is adopted, but not yet finalized, this specification refers to the MOF2.0 Core submission document (ad/ 03-04-07) [8] and to issues discussed in the FTF. became Because MOF2 is adopted, but not yet finalized, this specification refers to [6] and issues discussed in the FTF. Because the Core submission defines… became Because the Core submission defines… …profile for the normal; (Base-) IDL. became profile for the normal (Base-) IDL. …style of the present MOF1.4 mapping became style of the MOF1.4 mapping In section 6.2.2 To provide a common base interface for every derived MOF model element, we introduce an (abstract) base interface for having fundamental operations such as delete and is_equal available. became To provide a common base interface for every derived MOF model element, we introduce an (abstract) base interface equivalent to Object in MOF2.0 Core. Rule (30) modified from Furthermore, every derived home interface also supports the reflective interface CCMReflective::RefCCMHome (contained in the EMOF or CMOF modules respectively). to Furthermore, every derived home interface is a specialization of the reflective interface EMOF::CCMReflective::RefCCMHome. Rule (36) modified from Furthermore, an interface with name concatenate ( format_1 ( <package identifier> ), "Query" ) is derived (referred to as the package's Query Interface). This interface contains operations for querying a model's elements contained by the package. Additionally, the package instance interface is enhanced with a readonly attribute with type of the query interface. To Furthermore, an interface with name concatenate ( format_1 ( <package identifier> ), "Query" ) is derived (referred to as the package's Query Interface). This interface contains operations for querying a model's elements contained by the package. Additionally, the package instance interface is enhanced with a readonly attribute with type of the query interface and name concatenate ( format_2 ( <package identifier> ), "_query" ). In section 6.3.3.2 In the MOF 1.4 IDL mapping, class proxy interfaces are generated, that are used to create class's instances. In this specification, we drop the class proxy interface and generate the creation operation(s) for instances into the package interface that is derived according to Rule (47). Rule(34) If the class in the model is not abstract, a factory operation to create instances without parameters with the name concatenate ( "create_", format_2 ( <class identifier> ) ) is generated. Additionally, a copy_from and a create_and_init is operation is derived analogous to Rule (35) and Rule (36). was changed to In the MOF 1.4 IDL mapping, class proxy interfaces are generated, that are used to create and query class's instances. In this specification, we drop the class proxy interface and generate the creation operation(s) for instances into the package interface that is derived according to Rule (35). The query operations are located in the package query interface. Rule (23) If the class in the model is not abstract, a factory operation to create instances without parameters with the name concatenate ( "create_", format_2 ( <class identifier> ) ) is generated. Additionally, a copy_from and a create_and_init operation is derived analogous to Rule (24) and Rule (25). Moreover, the package query interface generated by rule Rule (36) has two operations named concatenate ( "all_of_type_", format_2 ( <class identifier> ) ) and concatenate ( "all_of_class_", format_2 ( <class identifier> ) ) analogous to those of Rule (33). in section 6.4.5, rule 54 was changed from If an association is mapped to IDL, an interface with identifier format_1 ( <assocation_name> ) is generated inheriting from the abstract interface derived in Rule (24). to If an association is mapped to IDL, an interface with identifier concatenate (format_1 ( <assocation_name> ), "Concrete" ) is generated inheriting from the abstract interface derived in Rule (46). Moreover, the query interface generated for this association's package according to Rule (35) is extended to contain an operation named format_2 ( <assocation_name> ). The return type is the abstract interface derived for the association according to Rule (46). In section 7.3, MOFObject::ref_get_mof_id MofError is raised if the object in the repository is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::equals MofError is raised if the object in the repository is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::set_value_depth MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::get_value_depth MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::set_call_semantic MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::get_call_semantic MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.6.3, <association_name>::linked_objects_<end_name> Filters the link-set along the parameter instance and returns an iterator to all linked elements of this instance. The linked_objects operation replaces the former add_*-operations of MOF1.4 with the comfortable iterator interface. Changed to Filters the link-set along the parameter instance and returns the linked object (if this end has multiplicity of 1) or collection of all linked objects (if this end has multiplicity upper bound > 1) to the passed object. In section 5.3.1 (separation of mof and service mapp Actions taken: November 15, 2005: received issue March 8, 2006: closed issue Discussion: End of Annotations:===== MG Issue No: [Temp23] Title: Correct spelling and grammatical errors and remove review comments as well as other paragraphs that do no longer hold. Source: Michael Soden, soden@ikv.de Summary: The grammatical errors in the document should be corrected. Also review comments were taken into account and can now be deleted from the final document. Discussion: Resolution: The following were deleted Review comment from Pete Rivett: .Parameters for the factory operation may be optional. - Right, only if the Data Type (or a supertype) contains attributes (that are not derived), then these parameters exist. Review question from Dave Frankel: .IDL for CHome: why don.t the last two factory operations have parameters for a_attrib and b_attrib?. Answer: The parameter of copy_from is of type CCommon, which can either be a concrete valuetype of type CState with a_attrib, b_attrib, and c_attrib as members or a reference of (component-) type C, also allowing access to all inherited attributes. Another suggestion for a more advanced query-interface would be to reuse the concept of EJB to define finders. The idea is to supply query-requests as parameters in kind of EJB internal QueryLanguage (EJB QL) like style. Thus, simply one operation is defined that directly supports "words" of a query language (in opposite to EJB, where only predefined queries are possible). An example for OCL would look like: ocl_query ( in string query_expression, in boolean result_as_value ); Thus, a client is able to specify OCL expressions for an explicit search via any combination of characteristics of the instances. For example, a query string like self.name = 'HardToImplement' returns an iterator to all instances with an attribute called name set to 'HardToImplement'. For the definition of the mapping rules themselves, we derive one combined model from the MOF 2.0 model and the CCM metamodel. Based on this combined model, we define the mapping rules using OCL. The methodology is covered by section 5. (from section 7) Collections are mapped to abstract iterator interfaces as described in the following subsections. Mapping to abstract interfaces If a type (a data type or a classifier) appears as a property or an operation parameter with the upper value of the multiplicity being greater than 1, for this type is an abstract interface created. If the collection kind is Bag/Set/List/UList, this interface is defined by: abstract interface Iterator : MOF::IteratorBase { get_value () raises (MofError); void insert_value ( in value ) raises (MofError); void modify_value ( in value ) raises (MofError); Iterator next_one() raises (MofError); Iterator previous_one() raises (MofError); Iterator begin() raises (MofError); Iterator end() raises (MofError); boolean is_empty() raises (MofError); }; Iterator::get_value Parameters (none) Semantics Returns the value of the element in the collection pointed to by this iterator. If this iterator is equivalent with the result of Iterator::end(), a MofError exception is raised. Returns Value of the element in the collection pointed to by this iterator. Exception MofError is raised if the iterator points to the last element in the list. Iterator::insert_value Parameters value Semantics Inserts the value in the parameter value into the collection. If the collection is ordered, the value is being inserted before the element this iterator points to, e.g., a call to next_one after a call to insert shall return the element the iterator points to before the insert_value operation. If the iterator points to the result of Iterator::end(), the value is being added at the end of the collection. If the iterator points to Iterator::begin(), the value is being inserted at the beginning of the collection. Returns (none) Exception MofError is raised if the collection this iterator points to is read-only or if an insertion of a value will increase the size of the collection to a value greater than upper bound . lower bound of the collection. MofError is also being raised, if the collection is unique and the element that shall be inserted is already existing in the collection. Iterator::modify_value Parameters value Semantics Sets the value of the collection to the one given in parameter value. Returns (none) Exception MofError is raised if the collection this iteratator points to is read-only or the iterator points to the end of the collection. MofError is also being raised, if the collection is unique and the element that shall be inserted is already existing in the collection. Iterator::next_one Parameters (none) Semantics Returns an iterator to the element following the element pointed to by this iterator. If the element pointed to by this iterator is the last element in a collection, an iterator is being returned equivalent to the result of Iterator::end(). The same holds if the operation is called at an iterator equivalent to the result of Iterator::end(). Returns Iterator Exception (none) Iterator::previous_one Parameters (none) Semantics Returns an iterator to the element preceding the element pointed to by this iterator. If the element pointed to by this iterator is the first element in a collection, an iterator is being returned equivalent to the result of Iterator::begin(). The same holds if the operation is called at an iterator equivalent to the result of Iterator::begin(). Returns Iterator Exception (none) Iterator::begin Parameters (none) Semantics Returns an iterator pointing to the begin of the collection. If the one is equivalent with the result of Iterator::end(), the collection is empty. Returns Iterator Exception (none) Iterator::end Parameters (none) Semantics Returns an iterator pointing to the end of the collection. If the one is equivalent with the result of Iterator::begin(), the collection is empty. Returns Iterator Exception (none) Iterator::is_empty Parameters (none) Semantics Returns true if the collection the iterator points to is empty, false otherwise. Returns boolean Exception (none) Mapping to concrete valuetypes and interfaces Beside the derivation of an abstract interface for collections, a concrete valuetype is being created to enable the access by value semantics for collections. This valuetype implements all operations specified by the abstract interface it supports and provides a factory operation to construct a value based on a specific collection given as parameter to the factory operation. valuetype AsValue supports Iterator { private value; factory create ( in initializer ); }; To allow access to the elements of a collection by reference, an interface is being produced that inherits from the abstract interface created for a collection. This interface inherits all operations defined by the abstract interface and extends them by an operation as_value. This operation returns the iterator as valuetype, pointing to the same element in the collection. interface AsReference : Iterator { AsValue as_value() raises (MofError); }; from section 8.1.1 RefFactory The CMOF RefFactory inherits from CMOF::Reflective::RefBaseObject and EMOF::Reflective::RefFactory. It provides an enhanced operation for object creation. RefFactory::ref_create_object Parameters RefBaseObject class : determinates the type of object that is being created. ArgumentSetIterator arguments : iterator of a name/value pairs list, which represents the properties of the object, identified by the name of the RefArguments that also supply their initial values. Semantics Creates an instance of the supplied object like the operation EMOF::Reflective::RefFactory::ref_create. But with the difference, that it is possible to supply initial values for the properties of the instance. If there is no argument supplied for one of the objects properties, the property is set according to the operation EMOF::Reflective::RefFactory::ref_create_from_string. Returns RefBaseObject : the new instance with the initialized properties. Exception Raises a MofError with error_code ILLEGAL_ARGUMENT_VIOLATION, if the one of the supplied arguments is not member of the object or the object to create the instance of is not contained in the linked package. RefFactory::objects_of_type Parameters RefBaseObject class : type of objects to search for. boolean include_subtypes : whether to perform a search over all subtypes of the supplied type, or not. Semantics This operation provides the opportunity to request all existing instances of a specified type. And if the flag include_subtype is set to true, all existing subtypes are included in the returned collection. If the supplied type has the abstract flag set to true and include_subtypes = false, an empty collection will be returned. Returns RefBaseObjectSetIterator : iterator of a RefBaseObjectSet, which contains the requested objects. Exception Raises a MofError exception with error_code ILLEGAL_ARGUMENT_VIOLATION, if the supplied type is not contained within the linked package. Section 7.5.7 was deleted From section 7.6.3, ::linked_objects_ The linked_objects operation replaces the former add_*-operations of MOF1.4 with the comfortable iterator interface. From section 7.6.3, ::create_link_in_ Another way of inserting links is to use the iterator returned by the linked_objects_* operations. From section 6.3.1.4 Mapping of Attributes and Operations Moreover, we do not distinguish navigable association ends and attributes of type class (cp. to UML2 Infrastructure and see discussion in 5.2.11 and Navigability and owned Properties) From 6.3.3 Moreover, the submitters prefer the CCM mapping approach From 6.4.1.9 Since the Reflective API overloads thin model interfaces with in most cases unneeded functionality, the proposed mapping drops the Reflective interface inheritance of MOF1.4. Instead, From section 7.1 However, we truly believe that an FTF is able to align and refine the mapping for extents/ URIExtents with upcoming issues within the finalization process. From section 6.3.3.2 It should be noted, that inheritance of classes is realized by the inheritance of the derived abstract interfaces (cp. 8.2.7) and additionally via the instance interfaces. In section 7.4, from exceptions idl const string NOT_CHANGEABLE_VIOLATION = "org.omg.mof:reflective.not_changeable"; const string NOT_PUBLIC_VIOLATION = "org.omg.mof:reflective.not_public"; const string WRONG_SCOPE_VIOLATION = "org.omg.mof:reflective.wrong_scope"; The following were added: (in Section Separation of MOF and services) This specification separates the mapping of core MOF2.0 concepts from those of services. Although Reflection is available in MOF2.0 Core, it is considered in the mapping as a standard service. Non standard services can be plugged into the mapping through MOF Tags. In section 6.3.1.8 In this mapping, a verify operation has been provided in the MOFObject interface, to which OCL expresssions can be passed (see Section , .Globals,. on page13, . Error! Reference source not found.,. on page Error! Bookmark not defined.13). In section 6.2.2 Furthermore, the repository needs to provide the means of obtaining an empty reflective collection or sequence to use when creating new objects that have attributes with multiplicity upper bound > 1. This may be provided in an initial interface to the repository. interface MofRepositoryRoot { ReflectiveCollection create_collection(boolean is_ordered); // Possibly further .root. operations for // accessing repository capabilities }; The is_ordered boolean parameter indicates whether a ReflectiveCollection (FALSE) or ReflectiveSequence (TRUE) should be created. In section 6.4 Due to the fact that CMOF is constructed through package merge of the EMOF package, EMOF mapping rules are also applicable for CMOF. Thus, this section will mostly refer to these mapping rules and only introduce those specific to CMOF. In section 7.3 MOFObject::verify Parameters wstring ocl_expr: an OCL expression defining the constraint. Semantics Check the constraint defined by the passed OCL expression. Returns true, if the check was successfull, false otherwise. Exception MofError with code OCL_EXPRESSION_VIOLATION is raised if the OCL expression cannot be evaluated. In section 7.4, exceptions idl const string CLASS_CAST_VIOLATION = "org.omg.mof:structural.class_cast"; const string OCL_EXPRESSION_VIOLATION = "org.omg.mof:structural.ocl_expression"; in section 7.5.2.2 Home::all_of_type_ Parameters in : flag stating whether to return objects as value (TRUE) or as reference (FALSE). Semantics Operation to query all component instances managed by this home. It includes all subcomponent instances. Corresponds to the all_of_type_* operation in MOF 1.4. Returns Component instances managed by this home, including all subcomponents. Exception (none). Home::all_of_class_ Parameters in : flag stating whether to return objects as value (TRUE) or as reference (FALSE). Semantics Operation to query all component instances managed by this home. It does not includes subcomponent instances. Corresponds to the all_of_class_* operation in MOF 1.4. Returns Component instances managed by this home. Exception (none). In section 8.2.1.1 RefBaseObject::ref_invoke_by_name Parameters OperationName operation : name of the operation to invoke. RefArgumentSet arguments : a collection of name/value pairs of type RefArgument, which represents the arguments of the operation through the name of the RefArguments and their value. Semantics Same as for ref_invoke. Returns Same as for ref_invoke. Exception Same as for ref_invoke. In section 8.3.1.2 RefPackage The CMOF RefPackage inherits from CMOF::Reflective::RefBaseObject and EMOF::Reflective::RefPackage and provides an operation to retrieves associations in the package. RefPackage::ref_association Parameters RefBaseObject association : the association type to retrieve. Semantics This operation provides the opportunity to request the association object designated by association. Returns RefAssociation : the found association. Exception Raises a MofError exception with error_code ILLEGAL_ARGUMENT_VIOLATION, if the supplied association type is not contained within the package. RefAssociation::ref_linked_objects Parameters RefBaseObject end : the object, whose linked object are to be returned. Semantics Retrieves the objects that are linked with end in this association. The semantic is the same as the corresponding operation derived for the non reflective interfaces. Returns ReflectiveCollection : the collection of objects linked to end. Exception Raises MofError with code ILLEGAL_ARGUMENT_VIOLATION if end is not an object that can take part in the association. The following were modified: In section 8.1.1 RefFactory::ref_create_from_string wstring from : name of the class to create an instance of. The format of the string is according to the ref_convert_to_string operation. modified o wstring from : name of the class to create an instance of. The format of the string is defined in section 9.2 of [6]. in section 7.3 MOFObject::delete Note, that references to the object are not removed automatically. This may result in so called dangling-references which still refer to this object. It is up to a client to restore the repository into a valid state. modified to Note that references to the object are only removed automatically if the object participates in an association. In all other cases, this may result in so called dangling-references which still refer to this object. It is up to a client to restore the repository into a valid state. In Rule (34) This interface is identical to that from section 5.8.3 of the MOF1.4 specification and contains the same operations. modified to This interface contains one operation named concatenate ( .create_., format_2 ( )) with return type of the package interface created by Rule (35). in section 7.1 , paragraph on services and repository root reference As in MOF1.4, the specification of an initial interface for a repository implementing derived IDL may be included in the specification for the purposes of accessing configuration information of service support. modified to This specification defines an initial interface for a repository implementing derived IDL for the purposes of accessing configuration information of service support. In section 8.3.2 modified In CMOF this interface is enhanced with the create method that provides simultaneous initialization of the component.s properties as defined in the CMOF::Reflective::RefFactory. RefComponent create ( in ArgumentSetIterator arguments ); Through the selected return type of RefComponent it is ensured that the reflective API conforms to the CCM domain by using homes to create instances of a component type. to In EMOF this interface is enhanced with the create method that provides simultaneous initialization of the component.s properties as defined in the EMOF::Reflective::RefFactory. RefCCMObject ref_create_and_init ( in RefArgumentSet arguments ); In section 8.3.1 Modified The CCM reflective framework defines the RefCCMBaseObject as image of RefBaseObject in the EMOF Base-IDL mapping. To The CMOF::Reflective::RefBaseObject is a specialization of EMOF::Reflective::RefBaseObject. and modified As in the Base-IDL mapping the CMOF reflective framework extends this interface with the opportunity for reflective invocation of methods. RefCCMBaseObjectBagIterator ref_invoke ( in Operation operation, in ArgumentSetIterator arguments ); For this method an iterator is defined as follow: typedef sequence < RefCCMBaseObject > RefCCMBaseObjectSet; interface RefCCMBaseObjectSetIterator : IteratorBase; to In IDL an operation name is expressed is expressed with the following typedef: typedef wstring OperationName; RefBaseObject::ref_invoke Parameters Operation operation : name of the operation to invoke. RefArgumentSet arguments : a collection of name/value pairs of type RefArgument, which represents the arguments of the operation through the name of the RefArguments and their value. Semantics Calls the method specified by its name. This RefArgumentSet includes parameters of the operation identified with their name and providing their value within RefArgument. If an argument of the operation is not passed within the list, the default value is taken . if not present a nil reference is supplied instead. If the invoked operation raises any exception, it will also be listed in the returned collection, but not raised. Returns any : an Any value which contains all return values of the invoked method. Exception A MofError with error_code ILLEGAL_ARGUMENT_VIOLATION is raised, if the argument list contains at least one argument that does not fit to the arguments of the method to invoke. The same error is thrown, when the element contains no such operation. In section 7.5.3, operation ::set_ modified If an error occurs on update, MofError is raised. This may result due to a constraint violation or in terms of merging. to If an error occurs on update, MofError is raised. This may result due to a constraint violation or in terms of merging. WRONG_TYPE_VIOLATION is set if prop_type is not the expected one according to redefinition. In section 7.5.3, operation :: modified MofError is included in the raise clause. If the Operation specifies raisedExceptions, the elements thrown are included using the element_in_error member of the MofError exception. to In addition to the elements specified in raisedExceptions, MofError is included in the raise clause. The user implementation will set the MofError code appropriately. In section 7.5.3, operation ::all__links modified LinkSetIterator to iterate over all links of the association. to LinkSet containing all links of the association. and modified MofError is raised if an error occurs. To MofError with an appropriate code is raised if an error occurred. In section 7.5.3, operation ::equals modified MofError is raised if compare fails or parameter is a nil reference. to MofError is raised with code NIL_OBJECT_VIOLATION if parameter is a nil reference. In section 8.1.1, operation RefObject::ref_get, sematinc modified When the property.s multiplicity has an upper bound = 1, then the value of the property is returned. When the upper bound is > 1 an iterator (see Rule (3)) to a collection is returned, which is typed with the type of the property. The returned collection is a Bag, if the prop is neither unique nor ordered. Set, if the prop is unique but not ordered. List, if the prop is ordered but not unique. UList, if the prop is ordered and unique. to When the property.s multiplicity has an upper bound = 1, then the value of the property is returned. When the upper bound is > 1 a ReflectiveCollection or ReflectiveSequence is returned (depending on orderedness, see also section 9.1 in [6]). and modified A MofError with the error_code ILLEGAL_ARGUMENT_VIOLATION is thrown, if there is no property within the element, which has the same name as the supplied one. To A MofError with the error_code ILLEGAL_ARGUMENT_VIOLATION is thrown, if the supplied property is not within the element. In section 7.5.4 modified An instance of the Operation class is mapped into the abstract interface that is derived for its owning class (see also CMOF::Operation for exceptional cases to the following): to An instance of the Operation class is mapped into the abstract interface that is derived for its owning class: Section 7.5 EMOF compliance is achieved by using only instances of classes of the MOF::EMOF package. The following subsections provide the CCM mapping for these elements specified (for a discussion and explanations refer to chapter 8). For a more formal specification refer to the OCL constraints in the convenience document [13]. modified to EMOF compliance is achieved by using only instances of classes of the MOF::EMOF package. The following subsections provide the CCM mapping for these elements specified. Section 1 (Scope) modified to This specification defines the MOF 2.0 to CORBA IDL mapping. The mapping rules are based on the MOF2.0 Core document ptc/04-10-15 [6]. The set of mapping rules is outlined in section 6 and defined in detail in section 7. This mapping reuses the concepts of CCM as much as possible aiming at the generation of highly performant, highly scalable, and reliable repositories, which are automatically deployable. The submitters believe that this specification benefits from the gained experiences during several years in developing and using metadata repositories and CORBA technology. In section 6.2.13, Since the Reflective API overloads thin model interfaces with in most cases unneeded functionality, the proposed mapping drops the Reflective interface inheritance of MOF1.4. Instead, Reflection is regarded as MOF Service (orthogonal to any meta-model) and thus mapped as described in Section 6.3.6 , .Support for the Reflection Service,. on page30. was changed to Reflection is regarded as MOF Service (orthogonal to any meta-model) and thus mapped as described in Section .10, . Error! Reference source not found. and Section .10, . Error! Reference source not found.,. . Section 6.2.4 was modified to All operations to get access to attributes with multiplicity upper > 1, will use either the ReflectiveCollection or ReflectiveSequence interfaces as return type (depending on orderedness). Internally the ReflectiveCollections or ReflectiveSequences hold a collection of objects (by reference or value). It is intended to reuse this collection pattern every time an instance of class MultiplicityElement is derived, so that clients simply can get an iterator instance and iterate over the collection. Although the word .Reflective. appears in the collection and iterator interface names, they are not used used only together with the reflection service. An example is given in Section .3, . Error! Reference source not found.,. on page Error! Bookmark not defined.22. In section 6.1 The approach targets at an improvement of the current mapping. was modified to The approach targets an improvement of the MOF1.4 mapping. Because MOF2 is adopted, but not yet finalized, this specification refers to the MOF2.0 Core submission document (ad/ 03-04-07) [8] and to issues discussed in the FTF. became Because MOF2 is adopted, but not yet finalized, this specification refers to [6] and issues discussed in the FTF. Because the Core submission defines. became Because the Core submission defines. .profile for the normal; (Base-) IDL. became profile for the normal (Base-) IDL. .style of the present MOF1.4 mapping became style of the MOF1.4 mapping In section 6.2.2 To provide a common base interface for every derived MOF model element, we introduce an (abstract) base interface for having fundamental operations such as delete and is_equal available. became To provide a common base interface for every derived MOF model element, we introduce an (abstract) base interface equivalent to Object in MOF2.0 Core. Rule (30) modified from Furthermore, every derived home interface also supports the reflective interface CCMReflective::RefCCMHome (contained in the EMOF or CMOF modules respectively). to Furthermore, every derived home interface is a specialization of the reflective interface EMOF::CCMReflective::RefCCMHome. Rule (36) modified from Furthermore, an interface with name concatenate ( format_1 ( ), "Query" ) is derived (referred to as the package.s Query Interface). This interface contains operations for querying a model.s elements contained by the package. Additionally, the package instance interface is enhanced with a readonly attribute with type of the query interface. To Furthermore, an interface with name concatenate ( format_1 ( ), .Query. ) is derived (referred to as the package.s Query Interface). This interface contains operations for querying a model.s elements contained by the package. Additionally, the package instance interface is enhanced with a readonly attribute with type of the query interface and name concatenate ( format_2 ( ), ._query. ). In section 6.3.3.2 In the MOF 1.4 IDL mapping, class proxy interfaces are generated, that are used to create class.s instances. In this specification, we drop the class proxy interface and generate the creation operation(s) for instances into the package interface that is derived according to Rule (47). Rule(34) If the class in the model is not abstract, a factory operation to create instances without parameters with the name concatenate ( "create_", format_2 ( ) ) is generated. Additionally, a copy_from and a create_and_init is operation is derived analogous to Rule (35) and Rule (36). was changed to In the MOF 1.4 IDL mapping, class proxy interfaces are generated, that are used to create and query class.s instances. In this specification, we drop the class proxy interface and generate the creation operation(s) for instances into the package interface that is derived according to Rule (35). The query operations are located in the package query interface. Rule (23) If the class in the model is not abstract, a factory operation to create instances without parameters with the name concatenate ( "create_", format_2 ( ) ) is generated. Additionally, a copy_from and a create_and_init operation is derived analogous to Rule (24) and Rule (25). Moreover, the package query interface generated by rule Rule (36) has two operations named concatenate ( "all_of_type_", format_2 ( ) ) and concatenate ( "all_of_class_", format_2 ( ) ) analogous to those of Rule (33). in section 6.4.5, rule 54 was changed from If an association is mapped to IDL, an interface with identifier format_1 ( ) is generated inheriting from the abstract interface derived in Rule (24). to If an association is mapped to IDL, an interface with identifier concatenate (format_1 ( ), .Concrete. ) is generated inheriting from the abstract interface derived in Rule (46). Moreover, the query interface generated for this association.s package according to Rule (35) is extended to contain an operation named format_2 ( ). The return type is the abstract interface derived for the association according to Rule (46). In section 7.3, MOFObject::ref_get_mof_id MofError is raised if the object in the repository is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::equals MofError is raised if the object in the repository is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::set_value_depth MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::get_value_depth MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::set_call_semantic MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.3, MOFObject::get_call_semantic MofError is raised if the object is not available. was modified to MofError with code INVALID_OBJECT_VIOLATION is raised if the object in the repository is not available. In section 7.6.3, ::linked_objects_ Filters the link-set along the parameter instance and returns an iterator to all linked elements of this instance. The linked_objects operation replaces the former add_*-operations of MOF1.4 with the comfortable iterator interface. Changed to Filters the link-set along the parameter instance and returns the linked object (if this end has multiplicity of 1) or collection of all linked objects (if this end has multiplicity upper bound > 1) to the passed object. In section 5.3.1 (separation of mof and service mapping) As mentioned earlier, the approach divides the MOF 2.0 IDL mapping into two separate mappings: one for the core package and several others for what are called the MOF Services, supposing that the MOF package consists of the MOF Model as is (a subpackage called MOF Model contained by the MOF package) and less or more other packages, which are logically orthogonal concepts (utilities), providing services for the MOF Model and which are itself modeled by concepts from the core. modified to This specification separates the mapping of core MOF2.0 concepts from those of services. Although Reflection is available in MOF2.0 Core, it is considered in the mapping as a standard service. Non standard services can be plugged into the mapping through MOF Tags. Disposition: open