note
	description: "[
			Abstraction to represent a URI link in the CMS system.
		]"
	date: "$Date: 2015-02-09 22:29:56 +0100 (lun., 09 févr. 2015) $"
	revision: "$Revision: 96596 $"

deferred class
	CMS_LINK

inherit
	REFACTORING_HELPER
		undefine
			is_equal
		end

	DEBUG_OUTPUT
		undefine
			is_equal
		end

	ITERABLE [CMS_LINK]
		undefine
			is_equal
		end

	COMPARABLE

feature -- Access	

	title: READABLE_STRING_32
			-- Associated title.

	location: READABLE_STRING_8
			-- Associated url location.

	weight: INTEGER
			-- Optional weight used for order.

feature -- Comparison

	is_less alias "<" (other: like Current): BOOLEAN
			-- Is current object less than `other'?
		do
			if weight = other.weight then
				Result := title < other.title
			else
				Result := weight < other.weight
			end
		end

feature -- Status report

	is_active: BOOLEAN
			-- Is current link active?
			-- i.e: related to requested url.
		deferred
		end

	is_expanded: BOOLEAN
			-- Is expanded and visually expanded?
		deferred
		end

	is_collapsed: BOOLEAN
			-- Is expanded, but visually collapsed?
		deferred
		ensure
			Result implies is_expandable
		end

	is_expandable: BOOLEAN
			-- Is expandable?	
		deferred
		end

	has_children: BOOLEAN
			-- Has sub link?
		deferred
		end

feature -- Security

	is_forbidden: BOOLEAN
			-- Is Current link forbidden?
			-- Current link could be disabled for current CMS user.
		deferred
		end

feature -- Element change

	set_weight (a_weight: INTEGER)
			-- Set `weight' to `a_weight'.
		do
			weight := a_weight
		ensure
			weight_set: weight = a_weight
		end

feature -- Query

	parent: detachable CMS_LINK
			-- Optional parent link.

	children: detachable LIST [CMS_LINK]
			-- Optional children links.
			-- Useful to have a non flat menu.
		deferred
		end

feature -- Access

	new_cursor: ITERATION_CURSOR [CMS_LINK]
			-- Fresh cursor associated with current structure
		do
			if attached children as lst then
				Result := lst.new_cursor
			else
				Result := (create {ARRAYED_LIST [CMS_LINK]}.make (0)).new_cursor
			end
		end

feature -- Status report

	debug_output: STRING_32
			-- String that should be displayed in debugger to represent `Current'.
		do
			create Result.make_from_string (title)
			Result.append_string_general (" -> ")
			Result.append_string_general (location)
			Result.append_string_general (" [")
			Result.append_integer (weight)
			Result.append_string_general ("]")
		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)"
end
