package sk.stuba.fiit.perconik.activity.serializers.search;
import java.util.List;
import java.util.Set;
import org.eclipse.search.ui.ISearchResult;
import org.eclipse.search.ui.text.AbstractTextSearchResult;
import org.eclipse.search.ui.text.IFileMatchAdapter;
import org.eclipse.search.ui.text.MatchFilter;
import sk.stuba.fiit.perconik.activity.serializers.resource.FileSerializer;
import sk.stuba.fiit.perconik.data.content.Content;
import sk.stuba.fiit.perconik.data.content.StructuredContent;
import static java.util.Arrays.asList;
import static com.google.common.collect.Lists.newArrayListWithExpectedSize;
import static sk.stuba.fiit.perconik.activity.serializers.Serializations.describeObject;
import static sk.stuba.fiit.perconik.activity.serializers.Serializations.identifyObject;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
public final class SearchResultSerializer extends AbstractSearchResultSerializer<ISearchResult> {
public SearchResultSerializer(final Option ... options) {
super(options);
}
public SearchResultSerializer(final Iterable<Option> options) {
super(options);
}
static void putSearchResult(final StructuredContent content, final ISearchResult result, final Set<Option> options) {
content.put(key("label"), result.getLabel());
content.put(key("tooltip"), result.getTooltip());
if (options.contains(StandardOption.TREE)) {
content.put(key("query"), identifyObject(result.getQuery()));
}
if (result instanceof AbstractTextSearchResult) {
AbstractTextSearchResult text = (AbstractTextSearchResult) result;
MatchFilter[] applicable = text.getAllMatchFilters();
if (applicable != null) {
content.put(key("filters", "applicable"), new MatchFilterSerializer(options).serialize(asList(applicable)));
}
MatchFilter[] active = text.getActiveMatchFilters();
if (active != null) {
content.put(key("filters", "active"), new MatchFilterSerializer(options).serialize(asList(active)));
}
IFileMatchAdapter adapter = text.getFileMatchAdapter();
List<Content> elements = newArrayListWithExpectedSize(128);
for (Object element: text.getElements()) {
StructuredContent elementContent = describeObject(element);
elementContent.put(key("matches"), new MatchSerializer(options).serialize(asList(text.getMatches(element))));
if (adapter != null) {
elementContent.put(key("file"), new FileSerializer(options).serialize(adapter.getFile(element)));
}
elements.add(elementContent);
}
content.put(key("elements"), elements);
}
}
}