package gw.solr.request uses gw.solr.mapper.IResultHolder uses gw.solr.utils.PLSolrUtils uses gw.xml.XmlElement uses gw.xsd.config.solr_search_config.ResultField uses org.apache.solr.common.SolrDocument uses java.util.HashMap @ReadOnly class ResultHolderImpl implements IResultHolder { var _fieldMap = new HashMap() construct(doc : XmlElement) { for(child in doc.$Children) { var name = child.getAttributeValue("name") if(name != null && name.length() > 0) { _fieldMap.put(name, child) } } } construct(solrDoc : SolrDocument) { for(entry in solrDoc.entrySet()) { var key = entry.Key if(key?.HasContent) { _fieldMap.put(key, entry.Value) } } } override reified function lookup( rf : ResultField ) : T { var value = lookupImpl( rf ) return value typeis T ? value : null } private function lookupImpl( rf : ResultField ) : Object { var value : Object = _fieldMap.get(rf.Name) if(value typeis XmlElement) { value = convertXmlElement( value ) _fieldMap.put(rf.Name, value) } return value } private function convertXmlElement( elem : XmlElement ) : Object { var result : Object = null if(!PLSolrUtils.isType(elem, "arr") && !PLSolrUtils.isType(elem, "lst")) { result = elem.$Text } else { result = elem.getChildren("str").map( \ child -> child.$Text ) } return result } }