提交 2971bce8 编写于 作者: V Vincent Latombe

Improved search to search within ItemGroups by looking at all items

contained in Jenkins instead of only direct members.

SuggestedItem has been modified to display more information about the
hierarchy of items where results are stored.
上级 f0192091
......@@ -25,9 +25,9 @@
package hudson.search;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import hudson.Util;
import hudson.util.EditDistance;
import java.io.IOException;
import java.util.AbstractList;
import java.util.ArrayList;
......@@ -39,6 +39,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import org.kohsuke.stapler.Ancestor;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
......@@ -340,7 +341,7 @@ public class Search {
items.clear();
m.find(index,token,items);
for (SearchItem si : items) {
paths[w].add(new SuggestedItem(si));
paths[w].add(SuggestedItem.build(si));
LOGGER.log(Level.FINE, "found search item: {0}", si.getSearchName());
}
w++;
......
......@@ -23,6 +23,9 @@
*/
package hudson.search;
import hudson.model.Item;
import hudson.model.ItemGroup;
/**
* One item of a search result.
*
......@@ -75,6 +78,29 @@ public class SuggestedItem {
getUrl(buf);
return buf.toString();
}
private static SuggestedItem build(Item top) {
ItemGroup<? extends Item> parent = top.getParent();
if (parent instanceof Item) {
Item parentItem = (Item)parent;
return new SuggestedItem(build(parentItem), top);
}
return new SuggestedItem(top);
}
/**
* Given a SearchItem, builds a SuggestedItem hierarchy by looking up parent items (if applicable).
* This allows search results for items not contained within the same ItemGroup to be distinguished.
* @param si
* @return
* @since XXX
*/
public static SuggestedItem build(SearchItem si) {
if (si instanceof Item) {
return build((Item)si);
}
return new SuggestedItem(si);
}
private void getUrl(StringBuilder buf) {
if(parent!=null) {
......
......@@ -1821,8 +1821,8 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro
.add("manage")
.add("log")
.add(new CollectionSearchIndex<TopLevelItem>() {
protected SearchItem get(String key) { return getItem(key); }
protected Collection<TopLevelItem> all() { return getItems(); }
protected SearchItem get(String key) { return getItemByFullName(key, TopLevelItem.class); }
protected Collection<TopLevelItem> all() { return getAllItems(TopLevelItem.class); }
})
.add(getPrimaryView().makeSearchIndex())
.add(new CollectionSearchIndex() {// for computers
......
......@@ -43,6 +43,7 @@ import org.junit.Test;
import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.JenkinsRule.WebClient;
import org.jvnet.hudson.test.MockFolder;
import com.gargoylesoftware.htmlunit.AlertHandler;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
......@@ -256,6 +257,17 @@ public class SearchTest {
assertTrue(suggest(j.jenkins.getSearchIndex(),"foo").contains(p));
}
@Test
public void testSearchWithinFolders() throws Exception {
MockFolder folder1 = j.createFolder("folder1");
FreeStyleProject p1 = folder1.createProject(FreeStyleProject.class, "myjob");
MockFolder folder2 = j.createFolder("folder2");
FreeStyleProject p2 = folder2.createProject(FreeStyleProject.class, "myjob");
List<SearchItem> suggest = suggest(j.jenkins.getSearchIndex(), "myjob");
assertTrue(suggest.contains(p1));
assertTrue(suggest.contains(p2));
}
private List<SearchItem> suggest(SearchIndex index, String term) {
List<SearchItem> result = new ArrayList<SearchItem>();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册