package Ġes . at ru j illo . mj ml . service . auth Ċ Ċ import Ġjava . net . URI Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠFactory Ġclass Ġthat Ġreturns Ġa Ġinstance Ġof ĠM j ml Auth . Ċ Ġ* ĠThis Ġfactory Ġimplements Ġthe ĠStep ĠPattern Ġthat Ġallows Ġus Ġto Ġcreate Ċ Ġ* Ġall Ġtypes Ġsubclasses Ġof ĠM j ml Auth Ġin Ġan Ġorder ly Ġand Ġclear Ġmanner . Ċ Ġ* Ċ Ġ* ĠM j ml Auth Ġtypes Ġcan Ġbe : Ċ Ġ* Ġ@ see ĠSystem Environment Mj ml Auth Ċ Ġ* Ġ@ see ĠProperties Mj ml Auth Ċ Ġ* Ġ@ see ĠMemory Mj ml Auth Ċ Ġ* Ċ Ġ* Ġ@ example Ċ Ġ* Ċ Ġ* Ġ ĠM j ml Auth Ġproperty Auth Conf Ġ= ĠM j ml Auth Factory . builder () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Properties Credential () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. properties ( properties File ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. mj ml Key Names ( app Prop Key , Ġsecret Prop Key ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (); Ċ Ġ* Ċ Ġ* Ġ@ return ĠM j ml Auth Ċ Ġ* Ġ@ author ĠAr nal do ĠTr uj illo Ċ Ġ*/ Ċ class ĠM j ml Auth Factory Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitial Ġbuild Ġstep ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠChoose Type Step Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFirst Ġstep Ġto Ġconfigure Ġa Ġ{@ link ĠSystem Environment Mj ml Auth } ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠNext Ġenvironment Ġauth Ġstep ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwith Environment Credentials (): ĠEnv Auth Step ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFirst Ġstep Ġto Ġconfigure Ġa Ġ{@ link ĠMemory Mj ml Auth } ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠNext Ġin Ġmemory Ġauth Ġstep ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwith Memory Credentials (): ĠMemory Auth Step ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFirst Ġstep Ġto Ġconfigure Ġa Ġ{@ link ĠProperties Mj ml Auth } ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠNext Ġfile Ġproperties Ġauth Ġstep ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwith Properties Credential (): ĠProperties Auth Step ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStep Ġwhere Ġwe Ġhave Ġto Ġset Ġm j ml Ġcredentials Ġdirectly Ġin Ġmemory ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠMemory Auth Step Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġm j ml Ġcredentials Ġin Ġmemory ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġm j ml AppId ĠM j ml ĠApi Ġapplication Id ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġm j ml SecretKey ĠM j ml ĠApi Ġsecret Ġkey ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġm j ml Credentials ( mj ml AppId : ĠString , Ġm j ml SecretKey : ĠString ): ĠBuild Step ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStep Ġwhere Ġwe Ġhave Ġto Ġset Ġthe Ġproperties Ġfiles Ġwhere ĊĠĠĠĠ Ġ* Ġframework Ġgoing Ġto Ġfind Ġm j ml Ġapi Ġcredentials ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠProperties ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠProperties Auth Step Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġproperties Ġfile Ġwhere Ġsearch Ġm j ml Ġcredentials ĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġproperties ( properties : ĠProperties ): ĠEnv Auth Step ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStep Ġwhere Ġwe Ġhave Ġto Ġset Ġthe Ġkey Ġnames Ġto Ġobt ains Ġcredentials Ġfrom ĠSystem Ġenvironments . ĊĠĠĠĠ Ġ* ĠApply Ġtoo Ġto Ġproperties Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠEnv Auth Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġcredentials Ġkey Ġnames ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġm j ml Key Names ( mj ml AppId KeyName : ĠString , Ġm j ml SecretKey Name : ĠString ): ĠBuild Step ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinal Ġstep Ġto Ġget Ġthe Ġ{@ link ĠM j ml Auth } Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠBuild Step Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe ĠM j ml Auth Ġinstance Ġwhen Ġconfiguration Ġis Ġfinished ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠM j ml Auth ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠChange Ġthe Ġdefault ĠM J ML ĠApi Ġendpoint ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġchange Endpoint ( endpoint : ĠURI ): ĠBuild Step ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġenum Ġclass ĠAuth Type Ġ{ ĠMEM ORY , ĠPROPER TIES , ĠENV Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInit Ġmethod Ġto Ġcreate Ġthe ĠM j ml Auth Ġinstance ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠBuilder ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġbuilder (): ĠChoose Type Step Ġ= ĠBuilder () ĊĊĠĠĠĠĠĠĠ Ġclass ĠBuilder Ġ: ĠChoose Type Step , ĠMemory Auth Step , ĠProperties Auth Step , ĠEnv Auth Step , ĠBuild Step Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth Type : ĠAuth Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm j ml AppId : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġm j ml SecretKey : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar ĠappId KeyName : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġsecret KeyName : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġproperties : ĠProperties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġendpoint : ĠURI Ġ= ĠURI . create (" https :// api . mj ml . io / v 1 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwith Environment Credentials (): ĠEnv Auth Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Type Ġ= ĠAuth Type . ENV ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwith Memory Credentials (): ĠMemory Auth Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Type Ġ= ĠAuth Type . MEMORY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwith Properties Credential (): ĠProperties Auth Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Type Ġ= ĠAuth Type . PROPERTIES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġm j ml Credentials ( mj ml AppId : ĠString , Ġm j ml SecretKey : ĠString ): ĠBuild Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . mj ml AppId Ġ= Ġm j ml AppId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . mj ml SecretKey Ġ= Ġm j ml SecretKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġproperties ( properties : ĠProperties ): ĠEnv Auth Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . properties Ġ= Ġproperties ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġm j ml Key Names ( mj ml AppId KeyName : ĠString , Ġm j ml SecretKey Name : ĠString ): ĠBuild Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . appId KeyName Ġ= Ġm j ml AppId KeyName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . secret KeyName Ġ= Ġm j ml SecretKey Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild (): ĠM j ml Auth Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( auth Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . MEMORY Ġ-> ĠMemory Mj ml Auth ( mj ml AppId , Ġm j ml SecretKey , Ġendpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . PROPERTIES Ġ-> ĠProperties Mj ml Auth ( properties , ĠappId KeyName , Ġsecret KeyName , Ġendpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . ENV Ġ-> ĠSystem Environment Mj ml Auth ( appId KeyName , Ġsecret KeyName , Ġendpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchange Endpoint ( endpoint : ĠURI ): ĠBuild Step Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . endpoint Ġ= Ġendpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }