package fi.otavanopisto.muikku.plugins.search; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.logging.Logger; import javax.ejb.Stateless; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject; import fi.otavanopisto.muikku.plugins.seeker.SeekerResult; import fi.otavanopisto.muikku.plugins.seeker.SeekerResultParser; import fi.otavanopisto.muikku.search.SearchResult; @Stateless public class SearchResultProcessor { @Inject private Logger logger; @Inject @Any private Instance<SeekerResultParser> seekerResultParsers; public List<SeekerResult> process(SearchResult result){ if (result.getResults().size() > 0) { List<SeekerResult> seekerResults = new ArrayList<SeekerResult>(); for(Map<String, Object> entry : result.getResults()){ if(!entry.containsKey("indexType")){ logger.warning("Skipping search result without type!"); continue; } SeekerResultParser parser = getParser((String)entry.get("indexType")); if(parser == null){ logger.warning("No parser found for indexed type: "+entry.get("indexType")+", skipping entry."); continue; } SeekerResult parsedResult = parser.parse(entry); if (parsedResult != null) seekerResults.add(parsedResult); } return seekerResults; } return null; } private SeekerResultParser getParser(String indexType){ Iterator<SeekerResultParser> i = seekerResultParsers.iterator(); while (i.hasNext()) { SeekerResultParser parser = i.next(); if(indexType.equals(parser.getIndexType())){ return parser; } } return null; } }