indexing description: "Release add message." author: "Peter Wyss " date: "$Date$" revision: "$Revision$" class O_RELEASE_ADD_MESSAGE inherit O_SESSION_MESSAGE rename make as make_session redefine make_from_generic, arguments end O_RELEASE_CONSTANTS undefine out end create make create {O_MESSAGE_FACTORY} make_from_generic feature {NONE} -- Initialization make (a_session: like session; a_project_id: like project_id; a_name: like name; a_description: like description; a_version: like version; a_files: like files) is -- Create. require a_session_ok: a_session /= Void and then not a_session.is_empty a_project_ok: a_project_id > 0 a_name_ok: a_name /= Void and then not a_name.is_empty a_description_ok: a_description /= Void and then not a_description.is_empty a_version_ok: a_version /= Void and then not a_version.is_empty a_files_ok: a_files /= Void and then not a_files.is_empty do make_session (a_session) project_id := a_project_id name := a_name description := a_description version := a_version files := a_files ensure project_set: project_id = a_project_id name_set: name = a_name description_set: description = a_description version_set: version = a_version files_set: files = a_files end make_from_generic (a_msg: O_GENERIC_MESSAGE) is -- Create from a generic message. local l_args: HASH_TABLE [STRING, STRING] i: INTEGER l_tuple: TUPLE[name: STRING; platform: STRING] l_elements: LIST[STRING] do Precursor (a_msg) l_args := a_msg.arguments project_id := l_args.item (project_argument).to_integer name := l_args.item (name_argument) description := l_args.item (description_argument) version := l_args.item (version_argument) from i := 1 create files.make (l_args.count - 5) until i > l_args.count - 5 loop l_elements := l_args.item (files_argument + i.out).split ('%N') check l_elements_count_correct: l_elements.count = 2 end create l_tuple l_tuple.name := l_elements.i_th (1) l_tuple.platform := l_elements.i_th (2) files.force (l_tuple) i := i + 1 end end feature -- Access namespace: STRING is -- Namespace of the message type. once Result := release_namespace end type: STRING is -- Type of the message. once Result := release_add_type end project_id: INTEGER -- id of the project name: STRING -- Name of the release description: STRING -- Description of the release version: STRING -- Version of the release files: ARRAYED_LIST [TUPLE [name: STRING; platform: STRING]] -- List of files with [name, platform] arguments: HASH_TABLE [STRING, STRING] is -- Named arguments. local i: INTEGER do Result := Precursor Result.force (project_id.out, project_argument) Result.force (name, name_argument) Result.force (description, description_argument) Result.force (version, version_argument) from files.start i := 1 until files.after loop Result.force (files.item.name + "%N" + files.item.platform, files_argument + i.out) files.forth i := i + 1 end end feature {NONE} -- Implementation project_argument: STRING is "project_id" name_argument: STRING is "name" description_argument: STRING is "description" version_argument: STRING is "version" files_argument: STRING is "files" invariant name_ok: name /= Void and then not name.is_empty end