package org.lysty.ui;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeSet;
import org.lysty.dao.Song;
import sas.samples.CompletionService;
/**
* Auto complete service. maintains a map of fields vs current values for each
* of those fields.
*
* @author NuwanSam
*
*/
public class AutoCompletionService implements CompletionService<String> {
private String currentField;
private Map<String, TreeSet<String>> map;
public void setValueMap(Map<String, TreeSet<String>> valueMap) {
this.map = valueMap;
}
public void addValueToMap(String field, String value) {
TreeSet<String> set = map.get(field);
if (set == null) {
set = new TreeSet<String>();
}
set.add(value);
map.put(field, set);
}
public void setCurrentField(String cField) {
this.currentField = cField;
}
@Override
public String autoComplete(String str) {
str = str.toLowerCase();
if (str.length() < 4)
return null;
TreeSet<String> set = map.get(currentField);
if (set == null)
return null;
String suggest = set.ceiling(str);
if (suggest.startsWith(str))
return suggest;
return null;
}
public void createMapFromSongList(List<Song> allSongs) {
map = new HashMap<String, TreeSet<String>>();
Map<String, String> attribMap;
Iterator<Entry<String, String>> it;
Entry<String, String> entry;
TreeSet<String> valueSet;
for (Song song : allSongs) {
attribMap = song.getAttributes();
it = attribMap.entrySet().iterator();
while (it.hasNext()) {
entry = it.next();
valueSet = map.get(entry.getKey());
if (valueSet == null) {
valueSet = new TreeSet<String>();
}
valueSet.add(entry.getValue().trim().toLowerCase());
map.put(entry.getKey(), valueSet);
}
}
}
}