package gw.api.util uses gw.document.SimpleSymbolProvider uses java.util.Map uses java.util.HashMap class SymbolTableUtil { private construct() { } static function populateSymbolProviderFromBeans(bean: Object) : SimpleSymbolProvider { return new gw.document.GosuCaseInsensitiveBackwardsCompatibleSymbolProvider(populateMapFromBeans(bean)) } static function populateMapFromBeans(bean: Object) : Map { var type = typeof(bean) return expandBeans( { type.RelativeName.toLowerCase() -> bean}) } static function expandBeans(beans : Map) : Map { var rtn = new HashMap() var activity = beans.get(Activity.Type.RelativeName.toLowerCase()) var account = beans.get(Account.Type.RelativeName.toLowerCase()) var job = beans.get(Job.Type.RelativeName.toLowerCase()) var policyperiod = beans.get(PolicyPeriod.Type.RelativeName.toLowerCase()) if (policyperiod == null) { policyperiod = beans.get("pp") } var policy = beans.get(Policy.Type.RelativeName.toLowerCase()) rtn.putAll( beans ) // Get policyperiod, job, account, and policy symbols for templates using the activity entity if (activity typeis Activity) { if (policyperiod == null and activity.PolicyPeriod != null) { policyperiod = activity.PolicyPeriod rtn.put("policyperiod", policyperiod) } else if (job == null and activity.Job != null) { job = activity.Job rtn.put("job", job) } else if (policy == null and activity.Policy != null) { policy = activity.Policy rtn.put("policy", policy) } else if (account == null and activity.Account != null) { account = activity.Account rtn.put("account", account) } } // Get job symbol for templates using the policyperiod entity if (policyperiod typeis PolicyPeriod) { if (job == null and policyperiod.Job != null) { job = policyperiod.Job rtn.put("job", job) } } // Get policy symbol for templates using the job entity if (job typeis Job) { if (policy == null and job.Policy != null) { policy = job.Policy rtn.put("policy", policy) } var subtype = job.Subtype.IntrinsicType.RelativeName.toLowerCase() if (beans.get( subtype) != null ) { rtn.put( subtype, job ) } } else { for (var symName in {"submission", "renewal", "policychange", "rewrite", "audit", "reinstatement", "issuance", "cancellation"}) { var bean = beans.get(symName) if (bean != null) { job = bean rtn.put("job", job) break } } } // Get account symbol for templates using the policy entity if (policy typeis Policy) { if (account == null and policy.Account != null) { account = policy.Account rtn.put("account", account) } } return rtn } //the symbol table on output will have account // //may have activity // //may have policy // //if it had a policy it may have job and specific job type // //if it had a job it may have policyperiod }