package org.limewire.ui.swing.search;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import org.limewire.core.api.FilePropertyKey;
import org.limewire.core.api.search.SearchCategory;
import org.limewire.ui.swing.util.FilePropertyKeyUtils;
import org.limewire.ui.swing.util.I18n;
import org.limewire.util.StringUtils;
/**
* A search query with field-specific data that will be used for an advanced
* search.
*/
class SmartQuery {
private final Map<FilePropertyKey, String> queryData;
private final List<FilePropertyKey> queryKeys;
private final SearchCategory searchCategory;
/**
* Constructs a SmartQuery for the specified search category.
*/
public SmartQuery(SearchCategory searchCategory) {
this.searchCategory = searchCategory;
this.queryData = new EnumMap<FilePropertyKey, String>(FilePropertyKey.class);
this.queryKeys = new ArrayList<FilePropertyKey>();
}
/**
* Adds the specified property key and value to the query. The method
* returns the SmartQuery instance to permit method chaining.
*/
public SmartQuery addData(FilePropertyKey key, String data) {
if (!StringUtils.isEmpty(data)) {
queryData.put(key, data);
queryKeys.add(key);
}
return this;
}
/**
* Returns a map containing the query values.
*/
public Map<FilePropertyKey, String> getQueryData() {
return queryData;
}
/**
* Returns the display text for the query.
*/
@Override
public String toString() {
if (queryKeys.size() == 1) {
FilePropertyKey key = queryKeys.get(0);
String name = FilePropertyKeyUtils.getUntraslatedDisplayName(key, searchCategory);
// {0}: property key, {1}: property value
return I18n.tr("{0} is \"{1}\"", name, queryData.get(key));
} else if (queryKeys.size() == 2) {
FilePropertyKey key1 = queryKeys.get(0);
FilePropertyKey key2 = queryKeys.get(1);
String name1 = FilePropertyKeyUtils.getUntraslatedDisplayName(key1, searchCategory);
String name2 = FilePropertyKeyUtils.getUntraslatedDisplayName(key2, searchCategory);
// {0}: property key, {1}: property value, {2}: property key, {3}: property value
return I18n.tr("{0} \"{1}\" - {2} \"{3}\"", name1, queryData.get(key1),
name2, queryData.get(key2));
} else if (queryKeys.size() > 2) {
FilePropertyKey key1 = queryKeys.get(0);
FilePropertyKey key2 = queryKeys.get(1);
FilePropertyKey key3 = queryKeys.get(2);
String name1 = FilePropertyKeyUtils.getUntraslatedDisplayName(key1, searchCategory);
String name2 = FilePropertyKeyUtils.getUntraslatedDisplayName(key2, searchCategory);
String name3 = FilePropertyKeyUtils.getUntraslatedDisplayName(key3, searchCategory);
// {0}: property key, {1}: property value
// {2}: property key, {3}: property value
// {4}: property key, {5}: property value
return I18n.tr("{0} \"{1}\" - {2} \"{3}\" - {4} \"{5}\"", name1, queryData.get(key1),
name2, queryData.get(key2), name3, queryData.get(key3));
} else {
return "";
}
}
}