indexing description: "Represents a module class advertisement" license: "MIT license (see ../license.txt)" author: "Beat Strasser " date: "$Date$" revision: "$Revision$" class P2P_MODULE_CLASS_ADVERTISEMENT inherit P2P_ADVERTISEMENT redefine document, validate end create make, make_from_element, parse_from_string feature {NONE} -- Initialization make (a_class_id: like class_id) is -- Create new module class advertisement require Id_valid: a_class_id /= Void do initialize set_class_id (a_class_id) is_valid := True ensure Id_set: class_id.is_equal (a_class_id) end feature -- Access class_id: P2P_MODULE_CLASS_ID name: STRING description: STRING index_elements: DS_LIST [TUPLE [STRING, STRING]] is -- Indexable elements do if name /= Void then create {DS_ARRAYED_LIST [TUPLE [STRING, STRING]]} Result.make (2) Result.put_last ([element_name, name]) else create {DS_ARRAYED_LIST [TUPLE [STRING, STRING]]} Result.make (1) end Result.put_last ([element_class_id, class_id.out]) end unique_id: STRING is -- Unique id do Result := class_id.out_short end match (an_element_name, an_element_value: STRING): BOOLEAN is -- Is given element's value equal with `an_element_value'? do if element_class_id.is_equal (an_element_name) then Result := does_element_match (class_id, an_element_value) elseif element_name.is_equal (an_element_name) then Result := does_element_match (name, an_element_value) elseif element_description.is_equal (an_element_name) then Result := does_element_match (description, an_element_value) end end feature -- Element change set_class_id (a_class_id: like class_id) is -- Set new class id require Id_valid: a_class_id /= Void do class_id := a_class_id renew_document ensure Id_set: class_id.is_equal (a_class_id) end set_name (a_name: like name) is -- Set new name require Name_valid: a_name /= Void do name := a_name renew_document ensure Name_set: name.is_equal (a_name) end set_description (a_description: like description) is -- Set new description require Description_valid: a_description /= Void do description := a_description renew_document ensure Description_set: description.is_equal (a_description) end feature -- Output document: P2P_XML_DOCUMENT is -- Create XML document local cached: BOOLEAN do cached := cached_document /= Void -- create document Result := Precursor if not cached then -- element MCID Result.create_root_child_element (element_class_id, Result.namespace_empty) Result.create_content (Result.last_element, class_id.out) -- element Name if name /= Void then Result.create_root_child_element (element_name, Result.namespace_empty) Result.create_content (Result.last_element, name) end -- element Desc if description /= Void then Result.create_root_child_element (element_description, Result.namespace_empty) Result.create_content (Result.last_element, description) end end end feature {NONE} -- Implementation Element_class_id: STRING is "MCID" Element_name: STRING is "Name" Element_description: STRING is "Desc" Type_class_id: STRING is "jxta:JXTAID" Type_name: STRING is "xs:string" Type_description: STRING is "xs:string" root_element_name: STRING is "MCA" element_handler (element: XM_ELEMENT) is -- Handle root child element of parsed advertisement do if element_class_id.is_equal (element.name) then create class_id.make_from_urn (element_text (element)) if not class_id.is_valid then class_id := Void end elseif element_name.is_equal (element.name) then name := trimmed (element.text) elseif element_description.is_equal (element.name) then description := trimmed (element.text) end end validate is -- Validate advertisement and set `is_valid' do is_valid := is_valid and class_id /= Void end end