Added specific webapi handler classes for root, user, access token, ... Added new queries to user profile api. Reviewed filter setup depending on the mode (site, admin, webapi).
176 lines
5.1 KiB
Plaintext
176 lines
5.1 KiB
Plaintext
note
|
|
description: "Summary description for JSON {JSON_WEBAPI_RESPONSE}."
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
class
|
|
JSON_WEBAPI_RESPONSE
|
|
|
|
inherit
|
|
HM_WEBAPI_RESPONSE
|
|
redefine
|
|
initialize
|
|
end
|
|
|
|
create
|
|
make
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
initialize
|
|
do
|
|
Precursor
|
|
create resource.make_empty
|
|
end
|
|
|
|
feature -- Access
|
|
|
|
resource: JSON_OBJECT
|
|
|
|
feature -- Element change
|
|
|
|
add_self (a_href: READABLE_STRING_8)
|
|
do
|
|
add_string_field ("self", a_href)
|
|
end
|
|
|
|
feature -- Fields
|
|
|
|
-- add_field (a_name: READABLE_STRING_GENERAL; a_value: detachable ANY)
|
|
-- do
|
|
-- resource.put (new_resource_item (a_value), a_name)
|
|
-- end
|
|
|
|
add_string_field (a_name: READABLE_STRING_GENERAL; a_value: READABLE_STRING_GENERAL)
|
|
do
|
|
resource.put_string (a_value, a_name)
|
|
end
|
|
|
|
add_boolean_field (a_name: READABLE_STRING_GENERAL; a_value: BOOLEAN)
|
|
do
|
|
resource.put_boolean (a_value, a_name)
|
|
end
|
|
|
|
add_integer_64_field (a_name: READABLE_STRING_GENERAL; a_value: INTEGER_64)
|
|
do
|
|
resource.put_integer (a_value, a_name)
|
|
end
|
|
|
|
add_natural_64_field (a_name: READABLE_STRING_GENERAL; a_value: NATURAL_64)
|
|
do
|
|
resource.put_natural (a_value, a_name)
|
|
end
|
|
|
|
add_real_64_field (a_name: READABLE_STRING_GENERAL; a_value: REAL_64)
|
|
do
|
|
resource.put_real (a_value, a_name)
|
|
end
|
|
|
|
add_iterator_field (a_name: READABLE_STRING_GENERAL; a_value: ITERABLE [detachable ANY])
|
|
do
|
|
resource.put (new_resource_item (a_value), a_name)
|
|
end
|
|
|
|
add_table_iterator_field (a_name: READABLE_STRING_GENERAL; a_value: TABLE_ITERABLE [detachable ANY, READABLE_STRING_GENERAL])
|
|
do
|
|
resource.put (new_resource_item (a_value), a_name)
|
|
end
|
|
|
|
feature -- Links
|
|
|
|
add_link (rel: READABLE_STRING_8; a_attname: READABLE_STRING_8 ; a_att_href: READABLE_STRING_8)
|
|
local
|
|
lnks: JSON_OBJECT
|
|
lnk: JSON_OBJECT
|
|
do
|
|
if attached {JSON_OBJECT} resource.item ("links") as j_links then
|
|
lnks := j_links
|
|
else
|
|
create lnks.make_with_capacity (1)
|
|
end
|
|
create lnk.make_with_capacity (2)
|
|
lnk.put_string (a_attname, "name")
|
|
lnk.put_string (a_att_href, "href")
|
|
lnks.put (lnk, rel)
|
|
end
|
|
|
|
feature -- Execution
|
|
|
|
execute
|
|
local
|
|
m: WSF_PAGE_RESPONSE
|
|
do
|
|
create m.make_with_body (resource.representation)
|
|
m.header.put_content_type ("application/json")
|
|
response.send (m)
|
|
end
|
|
|
|
feature {NONE} -- Implementation factory
|
|
|
|
new_resource_item (a_value: detachable ANY): JSON_VALUE
|
|
local
|
|
l_serializer: JSON_REFLECTOR_SERIALIZER
|
|
ctx: JSON_SERIALIZER_CONTEXT
|
|
do
|
|
create {JSON_NULL} Result
|
|
|
|
create l_serializer
|
|
create ctx
|
|
ctx.set_default_serializer (l_serializer)
|
|
ctx.set_is_type_name_included (False)
|
|
ctx.register_serializer (create {TABLE_ITERABLE_JSON_SERIALIZER [detachable ANY, READABLE_STRING_GENERAL]}, {TABLE_ITERABLE [detachable ANY, READABLE_STRING_GENERAL]})
|
|
ctx.register_serializer (create {ITERABLE_JSON_SERIALIZER [detachable ANY]}, {ITERABLE [detachable ANY]})
|
|
Result := l_serializer.to_json (a_value, ctx)
|
|
-- if a_value = Void then
|
|
-- create {JSON_NULL} Result
|
|
-- elseif attached {READABLE_STRING_GENERAL} a_value as s then
|
|
-- create {JSON_STRING} Result.make_from_string_general (s)
|
|
-- elseif attached {BOOLEAN} a_value as b then
|
|
-- create {JSON_BOOLEAN} Result.make (b)
|
|
-- elseif attached {NUMERIC} a_value as num then
|
|
---- if attached {INTEGER_64} num as i64 then
|
|
---- add_integer_64_field (a_name, i64)
|
|
---- elseif attached {INTEGER_32} num as i32 then
|
|
---- add_integer_64_field (a_name, i32.as_integer_64)
|
|
---- elseif attached {INTEGER_16} num as i16 then
|
|
---- add_integer_64_field (a_name, i16.as_integer_64)
|
|
---- elseif attached {INTEGER_8} num as i8 then
|
|
---- add_integer_64_field (a_name, i8.as_integer_64)
|
|
---- elseif attached {NATURAL_64} num as n64 then
|
|
---- add_natural_64_field (a_name, n64)
|
|
---- elseif attached {NATURAL_32} num as n32 then
|
|
---- add_natural_64_field (a_name, n32.as_natural_64)
|
|
---- elseif attached {NATURAL_16} num as n16 then
|
|
---- add_natural_64_field (a_name, n16.as_natural_64)
|
|
---- elseif attached {NATURAL_8} num as n8 then
|
|
---- add_natural_64_field (a_name, n8.as_natural_64)
|
|
---- elseif attached {REAL_64} num as r64 then
|
|
---- add_real_64_field (a_name, r64)
|
|
---- elseif attached {REAL_32} num as r32 then
|
|
---- add_real_64_field (a_name, r32.to_double
|
|
---- else
|
|
---- check is_basic_numeric_type: False end
|
|
---- add_string_field (a_name, num.out)
|
|
---- end
|
|
-- elseif attached {CHARACTER_8} a_value as ch8 then
|
|
---- add_string_field (a_name, ch8.out)
|
|
-- elseif attached {CHARACTER_32} a_value as ch32 then
|
|
---- add_string_field (a_name, ch32.out)
|
|
-- elseif attached {POINTER} a_value as ptr then
|
|
---- add_string_field (a_name, ptr.out)
|
|
-- elseif attached {ITERABLE [detachable ANY]} a_value as arr then
|
|
---- add_iterator_field (a_name, arr)
|
|
-- elseif attached {TABLE_ITERABLE [detachable ANY, READABLE_STRING_GENERAL]} a_value as tb then
|
|
---- add_table_iterator_field (a_name, tb)
|
|
-- else
|
|
-- check is_supported_type: False end
|
|
-- end
|
|
end
|
|
|
|
invariant
|
|
|
|
note
|
|
copyright: "2011-2017, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
|
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
|
end
|