diff options
author | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-07-24 10:09:48 +0200 |
---|---|---|
committer | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-07-24 10:09:48 +0200 |
commit | 5edbce381be268c40e7ea907274d68147a24a717 (patch) | |
tree | e7c2073627f900e99ba7b4297714e1e091754fd6 /sonar-server | |
parent | cbf3d9e2720d0a05a9c5f334f74df90e8b777618 (diff) | |
download | sonarqube-5edbce381be268c40e7ea907274d68147a24a717.tar.gz sonarqube-5edbce381be268c40e7ea907274d68147a24a717.zip |
SONAR-3392 Disable paging when searching for components to which a permission template should be applied
Diffstat (limited to 'sonar-server')
6 files changed, 36 insertions, 16 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/component/ComponentQuery.java b/sonar-server/src/main/java/org/sonar/server/component/ComponentQuery.java index 32bcb356557..387963227e7 100644 --- a/sonar-server/src/main/java/org/sonar/server/component/ComponentQuery.java +++ b/sonar-server/src/main/java/org/sonar/server/component/ComponentQuery.java @@ -37,6 +37,7 @@ public class ComponentQuery { public static final int DEFAULT_PAGE_INDEX = 1; public static final int DEFAULT_PAGE_SIZE = 100; + public static final int NO_PAGINATION = -1; public static final String SORT_BY_NAME = "NAME"; public static final Set<String> SORTS = ImmutableSet.of(SORT_BY_NAME); diff --git a/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java b/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java index 6bd4e9291de..ac199cbb23b 100644 --- a/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java +++ b/sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java @@ -57,11 +57,16 @@ public class DefaultComponentFinder { // 2. Sort components Collection<? extends Component> sortedComponents = new ComponentsFinderSort(foundComponents, query).sort(); - // 3. Apply pagination - Paging paging = Paging.create(query.pageSize(), query.pageIndex(), foundComponents.size()); - Collection<? extends Component> pagedComponents = pagedComponents(sortedComponents, paging); + if(ComponentQuery.NO_PAGINATION == query.pageSize()) { + return new DefaultComponentQueryResult(sortedComponents).setQuery(query); + } else { + // 3. Apply pagination + Paging paging = Paging.create(query.pageSize(), query.pageIndex(), foundComponents.size()); + Collection<? extends Component> pagedComponents = pagedComponents(sortedComponents, paging); + + return new DefaultComponentQueryResult(pagedComponents).setPaging(paging).setQuery(query); + } - return new DefaultComponentQueryResult(pagedComponents).setPaging(paging).setQuery(query); } finally { LOG.debug("ComponentQuery execution time : {} ms", System.currentTimeMillis() - start); } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/roles_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/roles_controller.rb index d49b116980f..3b68aac03b5 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/roles_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/roles_controller.rb @@ -21,7 +21,6 @@ class RolesController < ApplicationController helper RolesHelper SECTION=Navigation::SECTION_CONFIGURATION - BULK_LIMIT=500 before_filter :admin_required verify :method => :post, :only => [:set_users, :set_groups], :redirect_to => {:action => 'global'} @@ -84,19 +83,17 @@ class RolesController < ApplicationController @permission_templates = Internal.permission_templates.selectAllPermissionTemplates().sort_by {|t| t.name.downcase}.collect {|pt| [pt.name, pt.key]} params['qualifiers'] ||= 'TRK' - params['pageSize'] = 500 + params['pageSize'] = -1 query_result = Internal.component_api.find(params) components = query_result.components().to_a - total_results_count = query_result.paging.total.to_i @projects_ids = components.collect{|component| component.getId()} @qualifier = params[:qualifiers] render :partial => 'apply_template_form', :locals => {:project_name => components.size == 1 ? components[0].name : nil, - :empty => @projects_ids.nil? || @projects_ids.size == 0, - :overflow => total_results_count > BULK_LIMIT} + :empty => @projects_ids.nil? || @projects_ids.size == 0} end # POST /roles/apply_template?criteria diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/roles/_apply_template_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/roles/_apply_template_form.html.erb index c8796ae10eb..58e2a63cbb6 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/roles/_apply_template_form.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/roles/_apply_template_form.html.erb @@ -1,5 +1,5 @@ <form id="apply-template-form" method="post" action="<%= ApplicationController.root_context -%>/roles/apply_template"> - <% unless @projects_ids.nil? %> + <% unless empty %> <input type="hidden" name="components" id="apply-template-components" value="<%= @projects_ids.join(',') %>"/> <% end %> <fieldset> @@ -17,11 +17,6 @@ <img src="<%= ApplicationController.root_context -%>/images/information.png" style="vertical-align: text-bottom"/> <%= message 'projects_role.no_projects' -%> </div> - <% elsif overflow %> - <div class="info"> - <img src="<%= ApplicationController.root_context -%>/images/information.png" style="vertical-align: text-bottom"/> - <%= message 'projects_role.exceeds_projects_limit_xxx', :params => RolesController::BULK_LIMIT -%> - </div> <% else %> <div class="modal-field"> <%= label_tag 'template_key', 'Permission Template' %> @@ -33,7 +28,7 @@ <% end %> </div> <div class="modal-foot"> - <% unless empty || overflow %> + <% unless empty %> <span id="apply-template-loading-image" class="loading-image hidden"><%= image_tag 'loading.gif' %></span> <input type="submit" value="<%= message('apply') -%>" id="apply-template-submit" class="apply-template" onclick="return displayLoadingImage()" /> <% end %> diff --git a/sonar-server/src/test/java/org/sonar/server/component/ComponentQueryTest.java b/sonar-server/src/test/java/org/sonar/server/component/ComponentQueryTest.java index f3dfdd8164a..44953b04d4a 100644 --- a/sonar-server/src/test/java/org/sonar/server/component/ComponentQueryTest.java +++ b/sonar-server/src/test/java/org/sonar/server/component/ComponentQueryTest.java @@ -78,4 +78,10 @@ public class ComponentQueryTest { assertThat(query.pageIndex()).isEqualTo(ComponentQuery.DEFAULT_PAGE_INDEX); } + @Test + public void should_build_non_paginated_query() throws Exception { + ComponentQuery query = ComponentQuery.builder().pageSize(ComponentQuery.NO_PAGINATION).build(); + assertThat(query.pageSize()).isEqualTo(ComponentQuery.NO_PAGINATION); + assertThat(query.pageIndex()).isEqualTo(ComponentQuery.DEFAULT_PAGE_INDEX); + } } diff --git a/sonar-server/src/test/java/org/sonar/server/component/DefaultComponentFinderTest.java b/sonar-server/src/test/java/org/sonar/server/component/DefaultComponentFinderTest.java index 9aa014331a5..d94bb819c01 100644 --- a/sonar-server/src/test/java/org/sonar/server/component/DefaultComponentFinderTest.java +++ b/sonar-server/src/test/java/org/sonar/server/component/DefaultComponentFinderTest.java @@ -115,6 +115,22 @@ public class DefaultComponentFinderTest { assertThat(results.paging().total()).isEqualTo(3); } + @Test + public void should_skip_pagination() throws Exception { + ComponentQuery query = ComponentQuery.builder().pageSize(ComponentQuery.NO_PAGINATION) + .pageIndex(ComponentQuery.DEFAULT_PAGE_INDEX).build(); + + when(dao.selectComponentsByQualifiers(anyCollection())).thenReturn(newArrayList( + createProject("org.codehaus.sonar", "Sonar"), + createProject("org.apache.tika:tika", "Apache Tika"), + createProject("org.picocontainer:picocontainer-parent", "PicoContainer Parent") + )); + + DefaultComponentQueryResult results = finder.find(query); + assertThat(results.paging()).isNull(); + assertThat(results.components().size()).isEqualTo(3); + } + private Component createProject(String key, String name){ return new Project(key, null, name); } |