/** * */ package org.ariadne_eu.metadata.resultsformat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import net.sourceforge.minor.lucene.core.searcher.IndexSearchDelegate; import org.apache.log4j.Logger; import org.apache.lucene.document.Document; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import de.fit.cam.ranking.ServiceProvider; import de.fit.cam.ranking.domain.RankedLom; import de.fit.cam.ranking.service.RankingService; /** * @author gonzalo * */ public class ResultDelegateRLomImpl implements IndexSearchDelegate { private static Logger log = Logger.getLogger(ResultDelegateRLomImpl.class); private int start; private int max; public ResultDelegateRLomImpl(int start, int max) { this.start = start; this.max = max; } public String result(TopDocs topDocs, org.apache.lucene.search.IndexSearcher searcher) throws Exception { Document doc; HashMap<String, Integer> lRank = new HashMap<String, Integer>(); RankingService rankingService = ServiceProvider.getRankingService(); List<RankedLom> loms = new ArrayList<RankedLom>(); ScoreDoc[] hits = topDocs.scoreDocs; for (int i = start-1; i < topDocs.totalHits && (max < 0 || i < start-1+max); i++) { doc = searcher.doc(hits[i].doc); loms.add(new RankedLom(doc.get("key"),hits[i].score)); lRank.put(doc.get("key"), i); } List<RankedLom> results = rankingService.getLomRanking(loms, 0.5); //build the resultset StringBuilder sBuild = new StringBuilder(); sBuild.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<results cardinality=\""+topDocs.totalHits+"\">\n"); for (RankedLom rankedLom : results) { sBuild.append((searcher.doc(hits[(Integer)lRank.get(rankedLom.getId())].doc)).get("md")); log.debug(rankedLom.getId()+":"+rankedLom.getRankingValue()); } sBuild.append("</results>"); return sBuild.toString(); } }