package com.tyndalehouse.step.jsp; import com.google.inject.Injector; import com.tyndalehouse.step.core.models.search.*; import com.tyndalehouse.step.rest.controllers.SearchController; import java.util.List; /** * A helper utils for outputting search entries * * @author chrisburrell */ public class PassageSearchRequest { private final SearchController search; public PassageSearchRequest(final Injector injector) { search = injector.getInstance(SearchController.class); } public String getOutput(String querySyntax, String context, String pageNumber, String pageSize) { StringBuilder output = new StringBuilder(32000); // final SearchResult results = search.search(querySyntax, "false", context, pageNumber, pageSize); // final List<SearchEntry> searchEntries = results.getResults(); // for (SearchEntry entry : searchEntries) { // appendSearchEntry(output, entry); // } return output.toString(); } private void appendSearchEntry(final StringBuilder output, final SearchEntry entry) { if (entry instanceof SubjectHeadingSearchEntry) { final SubjectHeadingSearchEntry subjectHeadingSearchEntry = (SubjectHeadingSearchEntry) entry; final SearchResult headingsSearch = subjectHeadingSearchEntry.getHeadingsSearch(); final List<SearchEntry> passageResults = headingsSearch.getResults(); for (SearchEntry passageEntry : passageResults) { appendSearchEntry(output, passageEntry); } } else if (entry instanceof ExpandableSubjectHeadingEntry) { final ExpandableSubjectHeadingEntry expandableSubjectHeadingEntry = (ExpandableSubjectHeadingEntry) entry; output.append("<a href='#!__/0/subject/1/50/s++="); output.append(expandableSubjectHeadingEntry.getHeading()); output.append(" "); output.append(expandableSubjectHeadingEntry.getRoot()); output.append(" "); output.append(expandableSubjectHeadingEntry.getSeeAlso()); output.append(" in (ESV)/0/ESV/NONE'"); output.append(">"); output.append(expandableSubjectHeadingEntry.getHeading()); output.append(", "); output.append(expandableSubjectHeadingEntry.getRoot()); output.append(", "); output.append(expandableSubjectHeadingEntry.getSeeAlso()); output.append("</a>"); } else if (entry instanceof VerseSearchEntry) { VerseSearchEntry vse = (VerseSearchEntry) entry; appendHeader(output, 5, vse.getKey(), vse.getPreview()); } else if (entry instanceof KeyedSearchResultSearchEntry) { KeyedSearchResultSearchEntry ksrse = (KeyedSearchResultSearchEntry) entry; appendHeader(output, 5, ksrse.getKey()); final List<KeyedVerseContent> verseContent = ksrse.getVerseContent(); for (KeyedVerseContent kvc : verseContent) { appendHeader(output, 6, kvc.getContentKey(), kvc.getPreview()); } } } /** * Appends a single header * * @param output the output to be appended to * @param level the level of the heading * @param headerText the text in the heading tag */ private void appendHeader(final StringBuilder output, final int level, final String headerText) { appendHeader(output, level, headerText, ""); } /** * Appends a single header with some content inside * * @param output the output to be appended to * @param level the level of the heading * @param headerText the text in the heading tag * @param content the content to be appended after the header */ private void appendHeader(final StringBuilder output, final int level, final String headerText, final String content) { output.append("<h"); output.append(level); output.append('>'); output.append(headerText); output.append("</h"); output.append(level); output.append('>'); output.append(content); } }