note
	description: "[
		Represent search request metadata
		URL: search template used for the current results.
		Queries: current, next and previous page.
		Context
		Search infromation
		Items: array of actual search results.
	]"
	date: "$Date: 2015-10-08 07:51:29 -0300 (ju., 08 oct. 2015) $"
	revision: "$Revision: 97966 $"

class
	GCSE_RESPONSE

	--! TODO
	--! All suppport for for url, context and search information.

feature -- Access

	current_page: detachable GCSE_PAGE
		-- Metadata describing the query for the current set of results.
		--		This role is always present in the response.	
		--		It is always an array with just one element.

	next_page: detachable GCSE_PAGE
		-- Metadata describing the query to use for the next page of results.
		-- 		This role is not present if the current results are the last page. Note: This API returns up to the first 100 results only.
		--		When present, it is always a array with just one element.

	previous_page: detachable GCSE_PAGE
		-- Metadata describing the query to use for the previous page of results.
		--		Not present if the current results are the first page.
		--		When present, it is always a array with just one element.

	items: detachable LIST [GCSE_PAGE_ITEM]
			-- Contains the actual search results. The search results include the URL, title and text snippets that describe the result.

feature -- Change Element

	set_current_page (a_page: GCSE_PAGE)
			-- Set `current_page' with `a_page'.
		do
			current_page := a_page
		ensure
			current_page_set: current_page = a_page
		end

	set_next_page (a_page: GCSE_PAGE)
			-- Set `next_page' with `a_page'.
		do
			next_page := a_page
		ensure
			next_page_set: next_page = a_page
		end

	set_previous_page (a_page: GCSE_PAGE)
			-- Set `previous_page' with `a_page'.
		do
			previous_page := a_page
		ensure
			previous_page_set: previous_page = a_page
		end

	add_item (a_item: GCSE_PAGE_ITEM)
			-- Add item `a_item' to the list of items.
		local
			l_items: like items
		do
			l_items := items
			if l_items = Void then
				create {ARRAYED_LIST[GCSE_PAGE_ITEM]}l_items.make (10)
				items := l_items
			end
			l_items.force (a_item)
		end


feature -- Acess: HTTP Response

	status: INTEGER
		-- HTTP status code.

	status_message: detachable READABLE_STRING_8
		--  associated textual phrase for the response status.

feature -- Change Element: HTTP Response

	set_status (a_status: like status)
			-- Set `status' with `a_status'.
		do
			status := a_status
		ensure
			status_set: status = a_status
		end

	set_status_nessage (a_message: like status_message)
			-- Set `status_message' with `a_message'.
		do
			status_message := a_message
		ensure
			status_message_set: status_message = a_message
		end

;note
	copyright: "2011-2015 Javier Velilla, Jocelyn Fiat, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
			Eiffel Software
			5949 Hollister Ave., Goleta, CA 93117 USA
			Telephone 805-685-1006, Fax 805-685-6869
			Website http://www.eiffel.com
			Customer support http://support.eiffel.com
		]"
end
