package com.ourownjava.endeca.presentation;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.endeca.navigation.DimValIdList;
import com.endeca.navigation.ENEConnection;
import com.endeca.navigation.ENEQuery;
import com.endeca.navigation.ENEQueryException;
import com.endeca.navigation.ERecSearch;
import com.endeca.navigation.ERecSearchList;
import com.endeca.navigation.ESearchDYMSuggestion;
import com.endeca.navigation.ESearchReport;
import com.endeca.navigation.HttpENEConnection;
import com.endeca.navigation.Navigation;
/**
* How to extract did you mean tokens from Navigation Query Result.
*
* @author ourownjava.com
*
*/
@SuppressWarnings({ "unchecked" })
public class NavigationQueryDidYouMean {
private static final String MDEX_HOST = "localhost";
private static final Integer MDEX_PORT = 15000;
/**
* This method shall fire the given query against the MDEX.
*
* @param eneQuery
* @return
* @throws ENEQueryException
*/
public Navigation serach(final String searchString) throws ENEQueryException{
return createConnection().query(createKeywordQuery(searchString)).getNavigation();
}
/**
* Get the did you mean suggestions from the navigation search result.
*
* @return
*/
public List<String> getDidYouMeanTokens(final Navigation navigation){
final List<String> tokens = new ArrayList<String>();
final Map<String, List<ESearchReport>> searchReportMap = navigation.getESearchReportsComplete();
for(String key : searchReportMap.keySet()){
final List<ESearchReport> searchReports = searchReportMap.get(key);
for(final ESearchReport searchReport : searchReports){
final List<ESearchDYMSuggestion> eSearchDYMSuggestions = searchReport.getDYMSuggestions();
for(ESearchDYMSuggestion eSearchDYMSuggestion : eSearchDYMSuggestions){
tokens.add(eSearchDYMSuggestion.getTerms());
}
}
}
return tokens;
}
/**
* This method shall create an ENEQuery.
*
* @param searchString
* @return
*/
private static ENEQuery createKeywordQuery(final String searchString) {
final ENEQuery query = new ENEQuery();
query.setNavERecSearchDidYouMean(true);
final DimValIdList dimValIdList = new DimValIdList("0");
query.setNavDescriptors(dimValIdList);
final ERecSearchList searches = new ERecSearchList();
final ERecSearch eRecSearch = new ERecSearch("All", searchString);
searches.add(eRecSearch);
query.setNavERecSearches(searches);
return query;
}
/**
* @return
*/
private static ENEConnection createConnection() {
return new HttpENEConnection(MDEX_HOST, MDEX_PORT);
}
}