note description: "Summary description for {SEARCH_PACKAGE_HANDLER}." author: "" date: "$Date$" revision: "$Revision$" class SEARCH_PACKAGE_HANDLER inherit WSF_URI_TEMPLATE_HANDLER IRON_NODE_HANDLER rename set_iron as make end WSF_SELF_DOCUMENTED_HANDLER create make feature -- Execution execute (req: WSF_REQUEST; res: WSF_RESPONSE) do if req.is_get_request_method then if has_iron_version (req) then handle_search_package (req, res) else res.send (create {WSF_REDIRECTION_RESPONSE}.make (iron.page (Void, "/"))) end else res.send (create {WSF_METHOD_NOT_ALLOWED_RESPONSE}.make (req)) end end handle_search_package (req: WSF_REQUEST; res: WSF_RESPONSE) local s: detachable STRING lst: detachable LIST [IRON_NODE_VERSION_PACKAGE] html_vis: HTML_IRON_NODE_ITERATOR html: IRON_NODE_HTML_RESPONSE l_title: detachable READABLE_STRING_32 l_found_count: INTEGER l_total_count: INTEGER kmp: KMP_WILD do html := new_response_message (req) if attached {WSF_STRING} req.query_parameter ("name") as l_searched_name and then not l_searched_name.is_empty then l_title := {STRING_32} "Search for name=%"" + l_searched_name.value + "%"" lst := iron.database.version_packages (iron_version (req), 1, 0) if lst /= Void then l_total_count := lst.count create kmp.make_empty kmp.disable_case_sensitive kmp.set_pattern (l_searched_name.value) from lst.start until lst.after loop if attached lst.item.name as l_name then kmp.set_text (l_name) -- if l_name.is_case_insensitive_equal_general (l_searched_name.value) then if kmp.pattern_matches then lst.forth else lst.remove end else lst.remove end end l_found_count := lst.count end elseif attached {WSF_STRING} req.query_parameter ("query") as l_search_query and then not l_search_query.is_empty then html.add_parameter (l_search_query.value, "search_query_text") html.add_parameter (iron.database.version_package_criteria_factory.description, "search_query_description") html.add_parameter (iron.database.version_package_criteria_factory.short_description, "search_query_short_description") l_title := {STRING_32} "Search for query=%"" + l_search_query.value + "%"" l_total_count := iron.database.version_packages_count (iron_version (req)) lst := iron.database.query_version_packages (l_search_query.value, iron_version (req), 1, 0) l_found_count := lst.count else lst := iron.database.version_packages (iron_version (req), 1, 0) if lst /= Void then l_total_count := lst.count l_found_count := lst.count end end create s.make_empty if lst /= Void then create html_vis.make (s, req, iron, iron_version (req)) html_vis.set_user (current_user (req)) html_vis.visit_package_version_iterable (lst) end -- Create new package if l_title /= Void then html.set_title (html.html_encoded_string (l_title)) else html.set_title ("All packages (version " + iron_version (req).value + ")") end s.append ("