提交 67827c7e 编写于 作者: O Oliver Gondža

Introduce View.getAllItems()

上级 bdea18f5
......@@ -61,7 +61,7 @@ public class ListJobsCommand extends CLICommand {
View view = h.getView(name);
if (view != null) {
jobs = getViewItems(view);
jobs = view.getAllItems();
}
// If no view was found, try with an item group.
else {
......@@ -91,20 +91,4 @@ public class ListJobsCommand extends CLICommand {
return 0;
}
private Collection<TopLevelItem> getViewItems(View view) {
final Collection<TopLevelItem> jobs = new LinkedHashSet<TopLevelItem>(
view.getItems()
);
if (view instanceof ViewGroup) {
for(View subview: ((ViewGroup) view).getViews()) {
jobs.addAll(getViewItems(subview));
}
}
return jobs;
}
}
......@@ -93,6 +93,7 @@ import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -176,6 +177,27 @@ public abstract class View extends AbstractModelObject implements AccessControll
@Exported(name="jobs")
public abstract Collection<TopLevelItem> getItems();
/**
* Gets all the items recursively contained in this collection in a read-only view.
* @since 1.520
*/
public Collection<TopLevelItem> getAllItems() {
final Collection<TopLevelItem> items = new LinkedHashSet<TopLevelItem>(
getItems()
);
if (this instanceof ViewGroup) {
for(final View view: ((ViewGroup) this).getViews()) {
items.addAll(view.getAllItems());
}
}
return Collections.unmodifiableCollection(items);
}
/**
* Gets the {@link TopLevelItem} of the given name.
*/
......
......@@ -9,6 +9,7 @@ import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import hudson.model.TopLevelItem;
import hudson.model.ViewGroup;
import hudson.model.ViewTest.CompositeView;
import hudson.model.View;
import java.io.ByteArrayOutputStream;
......@@ -84,7 +85,7 @@ public class ListJobsCommandTest {
job("some-job"), job("some-other-job")
);
final View customView = mock(View.class);
final View customView = view();
when(customView.getItems()).thenReturn(viewJobs);
when(jenkins.getView("CustomView")).thenReturn(customView);
......@@ -98,8 +99,9 @@ public class ListJobsCommandTest {
public void getJobsRecursivelyFromViewGroup() throws Exception {
final CompositeView rootView = mock(CompositeView.class);
final View leftView = mock(View.class);
final View rightView = mock(View.class);
when(rootView.getAllItems()).thenCallRealMethod();
final View leftView = view();
final View rightView = view();
final TopLevelItem rootJob = job("rootJob");
final TopLevelItem leftJob = job("leftJob");
......@@ -118,6 +120,15 @@ public class ListJobsCommandTest {
assertThat(stdout, listsJobs("rootJob", "leftJob", "rightJob", "sharedJob"));
}
private View view() {
final View view = mock(View.class);
when(view.getAllItems()).thenCallRealMethod();
return view;
}
private TopLevelItem job(final String name) {
final TopLevelItem item = mock(TopLevelItem.class);
......@@ -173,11 +184,4 @@ public class ListJobsCommandTest {
}
};
}
private abstract static class CompositeView extends View implements ViewGroup {
protected CompositeView(String name) {
super(name);
}
}
}
......@@ -5,6 +5,7 @@ import hudson.search.SearchIndexBuilder;
import hudson.search.SearchItem;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
......@@ -65,4 +66,45 @@ public class ViewTest {
Assert.assertEquals(actual.getSearchName(), item2.getDisplayName());
Assert.assertEquals(actual.getSearchUrl(), item2.getSearchUrl());
}
/*
* Get all items recursively when View implements ViewGroup at the same time
*/
@Test
public void getAllItems() throws Exception {
final CompositeView rootView = Mockito.mock(CompositeView.class);
final View leftView = Mockito.mock(View.class);
final View rightView = Mockito.mock(View.class);
Mockito.when(rootView.getAllItems()).thenCallRealMethod();
Mockito.when(leftView.getAllItems()).thenCallRealMethod();
Mockito.when(rightView.getAllItems()).thenCallRealMethod();
final TopLevelItem rootJob = Mockito.mock(TopLevelItem.class);
final TopLevelItem leftJob = Mockito.mock(TopLevelItem.class);
final TopLevelItem rightJob = Mockito.mock(TopLevelItem.class);
final TopLevelItem sharedJob = Mockito.mock(TopLevelItem.class);
Mockito.when(rootJob.getDisplayName()).thenReturn("rootJob");
Mockito.when(leftJob.getDisplayName()).thenReturn("leftJob");
Mockito.when(rightJob.getDisplayName()).thenReturn("rightJob");
Mockito.when(sharedJob.getDisplayName()).thenReturn("sharedJob");
Mockito.when(rootView.getViews()).thenReturn(Arrays.asList(leftView, rightView));
Mockito.when(rootView.getItems()).thenReturn(Arrays.asList(rootJob, sharedJob));
Mockito.when(leftView.getItems()).thenReturn(Arrays.asList(leftJob, sharedJob));
Mockito.when(rightView.getItems()).thenReturn(Arrays.asList(rightJob));
final TopLevelItem[] expected = new TopLevelItem[] {rootJob, sharedJob, leftJob, rightJob};
Assert.assertArrayEquals(expected, rootView.getAllItems().toArray());
}
public static abstract class CompositeView extends View implements ViewGroup {
protected CompositeView(final String name) {
super(name);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册