aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-07-24 10:09:48 +0200
committerJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-07-24 10:09:48 +0200
commit5edbce381be268c40e7ea907274d68147a24a717 (patch)
treee7c2073627f900e99ba7b4297714e1e091754fd6 /sonar-server
parentcbf3d9e2720d0a05a9c5f334f74df90e8b777618 (diff)
downloadsonarqube-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')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/component/ComponentQuery.java1
-rw-r--r--sonar-server/src/main/java/org/sonar/server/component/DefaultComponentFinder.java13
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/roles_controller.rb7
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/roles/_apply_template_form.html.erb9
-rw-r--r--sonar-server/src/test/java/org/sonar/server/component/ComponentQueryTest.java6
-rw-r--r--sonar-server/src/test/java/org/sonar/server/component/DefaultComponentFinderTest.java16
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);
}