package com.tyndalehouse.step.core.service.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
import com.tyndalehouse.step.core.data.EntityDoc;
import com.tyndalehouse.step.core.data.EntityIndexReader;
import com.tyndalehouse.step.core.data.EntityManager;
import com.tyndalehouse.step.core.models.LexiconSuggestion;
import com.tyndalehouse.step.core.models.search.SuggestionType;
import com.tyndalehouse.step.core.service.LexiconDefinitionService;
/**
* @author chrisburrell
*/
public class LexiconDefinitionServiceImpl implements LexiconDefinitionService {
private final EntityIndexReader definitions;
/**
* @param entityManager the entity manager
*/
@Inject
public LexiconDefinitionServiceImpl(final EntityManager entityManager) {
this.definitions = entityManager.getReader("definition");
}
@Override
public Map<String, LexiconSuggestion> lookup(final Set<String> strongNumbers) {
final Map<String, LexiconSuggestion> results = new HashMap<String, LexiconSuggestion>(
strongNumbers.size() * 2);
// exit early if no strong numbers
if (strongNumbers.size() == 0) {
return results;
}
final StringBuilder query = new StringBuilder(strongNumbers.size() * 7);
for (final String strong : strongNumbers) {
query.append(strong);
query.append(' ');
}
final EntityDoc[] lexiconDefitions = this.definitions.searchSingleColumn("strongNumber",
query.toString());
for (final EntityDoc lexiconDefinition : lexiconDefitions) {
final String strongNumber = lexiconDefinition.get("strongNumber");
final LexiconSuggestion suggestion = getLexiconSuggestion(lexiconDefinition, strongNumber);
results.put(strongNumber, suggestion);
}
return results;
}
@Override
public LexiconSuggestion lookup(final String strongNumber) {
final EntityDoc[] lexiconDefinitions = this.definitions.searchSingleColumn("strongNumber",
strongNumber.toString());
if(lexiconDefinitions == null || lexiconDefinitions.length == 0) {
return null;
}
return getLexiconSuggestion(lexiconDefinitions[0], strongNumber);
}
/**
* Converts the entity documents to its lexicon suggestion
* @param lexiconDefinition the lexicon definition
* @param strongNumber the strong number
* @return the lexicon suggestion with transliteration, gloss, etc.
*/
private LexiconSuggestion getLexiconSuggestion(final EntityDoc lexiconDefinition, final String strongNumber) {
final LexiconSuggestion suggestion = new LexiconSuggestion();
suggestion.setGloss(lexiconDefinition.get("stepGloss"));
suggestion.setMatchingForm(lexiconDefinition.get("accentedUnicode"));
suggestion.setStepTransliteration(lexiconDefinition.get("stepTransliteration"));
suggestion.setStrongNumber(strongNumber);
return suggestion;
}
}