/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC . Ċ Ġ* Ċ Ġ* ĠThis Ġcode Ġmay Ġonly Ġbe Ġused Ġunder Ġthe ĠBSD Ġstyle Ġlicense Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / LICENSE . txt Ċ Ġ* Ċ Ġ* ĠCode Ġdistributed Ġby ĠGoogle Ġas Ġpart Ġof Ġthis Ġproject Ġis Ġalso Ġsubject Ġto Ġan Ġadditional ĠIP Ġrights Ċ Ġ* Ġgrant Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / PAT ENTS . txt Ċ Ġ*/ Ċ package Ġar cs . core . entity Ċ Ċ import Ġar cs . core . data . Schema Ċ import Ġar cs . core . storage . Reference Ġas ĠStorage Reference Ċ import Ġar cs . core . storage . keys . Foreign Storage Key Ċ Ċ /** Ċ Ġ* ĠInterface Ġused Ġto Ġcheck Ġthe Ġvalidity Ġof Ġexternal Ġreferences . ĠChecks Ġare Ġassociated Ġwith Ġa Ċ Ġ* Ġnamespace , Ġrepresented Ġby Ġan Ġempty ĠArc s Ġschema . ĠA Ġgiven Ġid Ġin Ġthis Ġnamespace Ġcan Ġbe Ġchecked Ġfor Ċ Ġ* Ġexternal Ġvalidity . Ċ Ġ*/ Ċ interface ĠForeign Reference Checker Ġ{ ĊĠĠĠ Ġfun Ġcheck ( namespace : ĠSchema , Ġvalue : ĠString ): ĠBoolean Ċ } Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof ĠForeign Reference Checker , Ġbased Ġon Ġthe Ġprovided Ġmap Ġof Ġchecks . Ċ Ġ*/ Ċ class ĠForeign Reference Checker Impl ( ĊĠĠĠ Ġprivate Ġval Ġvalidity Checks : ĠMap < Schema , Ġ( String ) Ġ-> ĠBoolean > Ċ ) Ġ: ĠForeign Reference Checker Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidity Checks . keys . forEach Ġ{ Ġcheck No Fields ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠChecks Ġthe Ġgiven Ġvalue Ġusing Ġthe Ġchecker Ġfor Ġthe Ġgiven Ġnamespace . ĊĠĠĠ Ġoverride Ġfun Ġcheck ( namespace : ĠSchema , Ġvalue : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( validity Checks [ namespace ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Foreign Ġtype Ġnot Ġregistered : Ġ$ namespace ." ĊĠĠĠĠĠĠĠ Ġ}. invoke ( value ) ĊĊĠĠĠ Ġprivate Ġfun Ġcheck No Fields ( schema : ĠSchema ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( schema . fields . sing letons . isEmpty () Ġ&& Ġschema . fields . collections . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġempty Ġschemas Ġcan Ġbe Ġused Ġfor Ġforeign Ġreferences ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġforeign Ġ[ Reference ] Ġof Ġtype Ġ[ T ] Ġwith Ġthe Ġgiven Ġ[ id ]. ĠIt Ġdoes Ġnot Ġcheck Ġfor Ġvalidity Ġof Ċ Ġ* Ġthat Ġ[ id ]. Ċ Ġ* Ċ Ġ* ĠNote : Ġthis Ġis Ġa Ġtemporary Ġmethod , Ġthis Ġfunctionality Ġwill Ġbe Ġpart Ġof Ġthe ĠEntity Handle Ġwhen Ġwe Ċ Ġ* Ġhave Ġone Ġand Ġit Ġis Ġused Ġto Ġcreate Ġreferences . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠEntity > Ġforeign Reference ( spec : ĠEntity Spec < T >, Ġid : ĠString ): ĠReference < T > Ġ{ ĊĠĠĠ Ġreturn ĠReference ( ĊĠĠĠĠĠĠĠ Ġspec , ĊĠĠĠĠĠĠĠ ĠStorage Reference ( id , Ġstorage Key Ġ= ĠForeign Storage Key ( spec . SCHEMA ), Ġversion Ġ= Ġnull ) ĊĠĠĠ Ġ) Ċ } Ċ