package Ġmain . java . com . t ms dur ham . dialogflow . sample Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . t ms dur ham . dialogflow . Dialog flow Request Ċ import Ġcom . t ms dur ham . dialogflow . Dialog flow Response Ċ import Ġcom . t ms dur ham . actions .* Ċ import Ġcom . t ms dur ham . actions . actions . Action Request Ċ import Ġcom . t ms dur ham . actions . actions . Action Response Ċ import Ġjava . util . logging . Logger Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse ĊĊ Ċ /** Ċ Ġ* ĠGson Ġ& ĠServlet ĠAction Ġfor ĠDialog flow Ċ Ġ* ĠInt ention ally Ġnot Ġin Ġsdk Ġmodule Ġso Ġgson Ġ& Ġservlet Ġare Ġnot Ġa Ġdependency Ġof Ġthe ĠSDK . Ċ Ġ*/ Ċ class ĠDialog flow Action ( req : ĠHttpServletRequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp : ĠHttpServletResponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson : ĠGson , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Sending : Ġ(( Dialog flow Response , ĠString ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġapp : ĠDialog flow App ĊĊĠĠĠ Ġ// needed Ġfor Ġ 2 Ġarg Ġconstructor Ġfrom ĠJava ĊĠĠĠ Ġconstructor ( req : ĠHttpServletRequest , Ġresp : ĠHttpServletResponse ) Ġ: Ġthis ( req , Ġresp , ĠGson ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Str Ġ= Ġconvert Stream ToString ( req . inputStream ) ĊĠĠĠĠĠĠĠ ĠLogger . get Anonymous Logger (). info ( json Str ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġgson . fromJson < Dialog flow Request >( json Str , ĠDialog flow Request :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġresp . header Names . associate Ġ{ Ġit Ġto Ġresp . getHeader ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġapp Ġ= ĠDialog flow App ( Request Wrapper ( body Ġ= Ġrequest , Ġheaders Ġ= Ġheaders ), ĠResponse Wrapper ( send Action Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Str Ġ= Ġgson . toJson ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp . add Header ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Sending ?. invoke ( this . body Ġ?: ĠDialog flow Response (), Ġbody Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( body Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . contentType Ġ= Ġ" application / json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . character Encoding Ġ= Ġ" UTF - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . writer . write ( body Str ) ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconvert Stream ToString ( input : Ġjava . io . InputStream ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġjava . util . Scanner ( input ). use Delimiter ("\\ A ") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( s . hasNext ()) Ġs . next () Ġelse Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Request ( handler : ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp . handle Request ( handler ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGson Ġ& ĠServlet ĠAction Ġfor ĠActions ĠSDK Ġ( direct Ġintegration ) Ċ Ġ* ĠInt ention ally Ġnot Ġin Ġsdk Ġmodule Ġso Ġgson Ġ& Ġservlet Ġare Ġnot Ġa Ġdependency Ġof Ġthe ĠSDK . Ċ Ġ*/ Ċ class ĠActions Sdk Action ( req : ĠHttpServletRequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp : ĠHttpServletResponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson : ĠGson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( Order Update :: class . java , ĠOrder Update Type Adapter ( Gson ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson With Null s : ĠGson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. serialize Null s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Sending : Ġ(( Action Response , ĠString ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġapp : ĠActions Sdk App ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Str Ġ= Ġconvert Stream ToString ( req . inputStream ) ĊĠĠĠĠĠĠĠ ĠLogger . get Anonymous Logger (). info ( json Str ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġgson . fromJson < Action Request >( json Str , ĠAction Request :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġresp . header Names . associate Ġ{ Ġit Ġto Ġresp . getHeader ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġapp Ġ= ĠActions Sdk App ( Request Wrapper ( body Ġ= Ġrequest , Ġheaders Ġ= Ġheaders ), ĠResponse Wrapper ( send Action Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Str Ġ= Ġgson . toJson ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp . add Header ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Sending ?. invoke ( this . body Ġ?: ĠAction Response (), Ġbody Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug ( body Str ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . contentType Ġ= Ġ" application / json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . character Encoding Ġ= Ġ" UTF - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp . writer . write ( body Str ) ĊĠĠĠĠĠĠĠ Ġ}), Ġserializer Ġ= Ġobject Ġ: ĠSerializer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġserialize ( obj : ĠT ) Ġ= Ġgson With Null s . toJson ( obj ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġdeserialize ( str : ĠString , Ġclazz : ĠClass < T >) Ġ= Ġgson With Null s . fromJson ( str , Ġclazz ) ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconvert Stream ToString ( input : Ġjava . io . InputStream ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġjava . util . Scanner ( input ). use Delimiter ("\\ A ") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( s . hasNext ()) Ġs . next () Ġelse Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Request ( handler : ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp . handle Request ( handler ) ĊĠĠĠ Ġ} Ċ }