]> source.dussan.org Git - sonarqube.git/commitdiff
Improve display of resource viewers on projects and directories.
authorsimonbrandhof <simon.brandhof@gmail.com>
Thu, 28 Apr 2011 14:09:26 +0000 (16:09 +0200)
committersimonbrandhof <simon.brandhof@gmail.com>
Thu, 28 Apr 2011 14:10:39 +0000 (16:10 +0200)
SONAR-2338 Unable to drilldown by dependency metrics from sub-project

SONAR-2201 Display project violations

sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
sonar-server/src/main/java/org/sonar/server/ui/ViewProxy.java
sonar-server/src/main/java/org/sonar/server/ui/Views.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/drilldown_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/helpers/drilldown_helper.rb
sonar-server/src/main/webapp/WEB-INF/app/models/drilldown.rb
sonar-server/src/main/webapp/WEB-INF/app/views/drilldown/_footer.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/drilldown/_header.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/drilldown/measures.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/resource/_tabs.html.erb

index 972017928b34129f64e29b36b8d1a52daff74360..7fae7b28124d483845737da67631773abeaa4f9c 100644 (file)
@@ -24,7 +24,6 @@ import org.picocontainer.PicoContainer;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.Plugins;
 import org.sonar.api.Property;
-import org.sonar.api.ServerComponent;
 import org.sonar.api.profiles.ProfileExporter;
 import org.sonar.api.profiles.ProfileImporter;
 import org.sonar.api.resources.Language;
@@ -155,6 +154,10 @@ public final class JRubyFacade {
     return getContainer().getComponent(Views.class).getPages(NavigationSection.RESOURCE_TAB, scope, qualifier, language);
   }
 
+  public List<ViewProxy<Page>> getResourceTabsForMetric(String scope, String qualifier, String language, String metric) {
+    return getContainer().getComponent(Views.class).getPagesForMetric(NavigationSection.RESOURCE_TAB, scope, qualifier, language, metric);
+  }
+
   public ViewProxy<Page> getPage(String id) {
     return getContainer().getComponent(Views.class).getPage(id);
   }
index c00437ac9dce6a796fefa9fa57b0cdbaf90ec538..badeb5f78ec4b73ecc5359b2e46a7f7997537205 100644 (file)
@@ -158,6 +158,10 @@ public class ViewProxy<V extends View> implements Comparable<ViewProxy> {
     return defaultForMetrics;
   }
 
+  public boolean supportsMetric(String metricKey) {
+    return ArrayUtils.contains(defaultForMetrics, metricKey);
+  }
+
   public boolean isWidget() {
     return isWidget;
   }
index d1bf0e9c80d64452a57b417773e25aea249d9376..dc776684a144e2f7dce2d9c1bb7b92cf44df615f 100644 (file)
@@ -79,6 +79,16 @@ public class Views implements ServerComponent {
     return result;
   }
 
+  public List<ViewProxy<Page>> getPagesForMetric(String section, String resourceScope, String resourceQualifier, String resourceLanguage, String metric) {
+    List<ViewProxy<Page>> result = Lists.newArrayList();
+    for (ViewProxy<Page> proxy : pages) {
+      if (accept(proxy, section, resourceScope, resourceQualifier, resourceLanguage) && proxy.supportsMetric(metric)) {
+        result.add(proxy);
+      }
+    }
+    return result;
+  }
+
   public ViewProxy<Widget> getWidget(String id) {
     return widgetsPerId.get(id);
   }
index 90a2cce018b4d29e7dcdf16ce0148462064a86a5..a64ef97622f7f07b91372c36dca51b75df212703 100644 (file)
@@ -62,6 +62,8 @@ class DrilldownController < ApplicationController
     if @highlighted_resource.nil? && @drilldown.columns.empty?
       @highlighted_resource=@project
     end
+
+    @display_viewers=display_metric_viewers?(@highlighted_resource||@project, @highlighted_metric.key)
   end
 
   def violations
@@ -111,9 +113,11 @@ class DrilldownController < ApplicationController
     if @highlighted_resource.nil? && @drilldown.columns.empty?
       @highlighted_resource=@project
     end
+
+    @display_viewers=display_violation_viewers?(@snapshot)
   end
 
-  protected
+  private
 
   def init_project
     project_key = params[:id]
@@ -151,4 +155,20 @@ class DrilldownController < ApplicationController
     hash
   end
 
+  def display_metric_viewers?(resource,metric_key)
+    return true if resource.file?
+    java_facade.getResourceTabsForMetric(resource.scope, resource.qualifier, resource.language, metric_key).each do |tab|
+      tab.getUserRoles().each do |role|
+        if has_role?(role, resource)
+          return true
+        end
+      end
+    end
+    false
+  end
+
+  def display_violation_viewers?(snapshot)
+    return true if snapshot.file?
+    snapshot.violations.size>0
+  end
 end
index 400d4af088615873077f7e53e606e94ba2074b79..103934e9e49b3a54eb305d1cd3c30638945ba707 100644 (file)
@@ -19,5 +19,4 @@
  #
 module DrilldownHelper
 
-
 end
\ No newline at end of file
index 33108f61b8cbf24efa6548023db4ab887e32c7e2..62148d4e8bd40e0aa6ed3a5ac105b9d7dfd9d3d9 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
 #
 class Drilldown
-  attr_reader :snapshot, :columns, :metric
+  attr_reader :snapshot, :columns, :metric, :resource
 
   def initialize(resource, metric, selected_resource_ids, options={})
+    @resource=resource
     @snapshot=Snapshot.find(:first, :conditions => {:islast => true, :project_id => resource.id}, :include => [:project])
     @metric=metric
     @columns=[]
index 435c2c679526245358f11d7c20b162252291e929..a2e095d50783bb6b85943e0e3304ad4d673687de 100644 (file)
@@ -1,7 +1,11 @@
 <div id="resource_container"> </div>
 
-<% if @drilldown.highlighted_resource %>
+<% if @display_viewers %>
 <script>
-  d(<%= @drilldown.highlighted_resource.id -%>);
+  <% if @drilldown.highlighted_resource %>
+    d(<%= @drilldown.highlighted_resource.id -%>, true);
+  <% else %>
+    d(<%= @drilldown.resource.id -%>, false);
+  <% end %>
 </script>
-<% end %>
\ No newline at end of file
+<% end %>
index f8556da363655eba587626d52e1ad24bc937fb60..f9b9324567974bff3dfa9fe1b3d9c44287103b3d 100644 (file)
@@ -3,17 +3,23 @@
 
 <script>
   /* display resource */
-  function d(resourceId) {
+  function d(resourceId, display_title) {
     var loading = new Image();
     loading.src = "<%= ApplicationController.root_context-%>/images/loading.gif";
     $('resource_container').update(loading);
-    new Ajax.Updater('resource_container', '<%= ApplicationController.root_context-%>/resource/index/' + resourceId + '?metric=<%= @metric.id if @metric -%>&rule=<%= @rule ? @rule.id : params[:priority] -%>&period=<%= @period -%>', {asynchronous:true, evalScripts:true});
+    if (display_title==undefined) {
+      display_title=true;
+    }
+    new Ajax.Updater('resource_container', '<%= ApplicationController.root_context-%>/resource/index/' + resourceId + '?metric=<%= @metric.id if @metric -%>&rule=<%= @rule ? @rule.id : params[:priority] -%>&period=<%= @period -%>&display_title=' + display_title, {asynchronous:true, evalScripts:true});
     return false;
   }
 
-  function loadAjaxTab(resourceId, tab) {
+  function loadAjaxTab(resourceId, tab, display_title) {
     $('resource-loading').show();
-    new Ajax.Updater('resource_container', '<%= ApplicationController.root_context-%>/resource/index/' + resourceId + '?tab=' + tab, {asynchronous:true, evalScripts:true});
+    if (display_title==undefined) {
+      display_title=true;
+    }
+    new Ajax.Updater('resource_container', '<%= ApplicationController.root_context-%>/resource/index/' + resourceId + '?tab=' + tab + '&display_title=' + display_title, {asynchronous:true, evalScripts:true});
     return false;
   }
 
index dccb0e81d9d9ab99a955acc48350634b496c796b..e6f5d625eb5a125f5e450a0ef22828919fa7e2f4 100644 (file)
@@ -1,7 +1,5 @@
 <%= render :partial => 'header' -%>
 
-
-
 <% if params[:period] && @snapshot.project_snapshot.periods? %>
 <div id="snapshot_title" class="page_title">
   <h4>
@@ -21,9 +19,6 @@
 </div>
 <% end %>
 
-
-
-
 <div class="dashbox">
   <% if @characteristic %>
     <h3><%= @highlighted_metric.short_name -%> / <%= h(@characteristic.name(true)) -%></h3>
index 37b30e047e575046e1e6d30ad49e5b6fed9857e3..3374fc037fc2beef0d390a9149e6ea11690354b1 100644 (file)
@@ -1,10 +1,11 @@
-<style>
-
-</style>
-
+<%
+   display_title=(params[:display_title]!='false')
+   if display_title
+%>
 <div id="source_title">
   <span class="h1"><%= qualifier_icon(@resource) -%> <%= @resource.long_name -%></span>
 </div>
+<% end %>
 
 <div id="source_tabs">
   <ul class="tablinks">
@@ -22,7 +23,7 @@
   <ul class="tabs" >
   <% if request.xhr? %>
     <% @extensions.each do |extension| %>
-      <li><a href="#" onclick="loadAjaxTab('<%= @resource.id -%>','<%= extension.getId() -%>')" class="<%= 'selected' if @extension && @extension.getId()==extension.getId() -%>"><%= extension.getTitle() -%></a></li>
+      <li><a href="#" onclick="loadAjaxTab('<%= @resource.id -%>','<%= extension.getId() -%>',<%= display_title -%>)" class="<%= 'selected' if @extension && @extension.getId()==extension.getId() -%>"><%= extension.getTitle() -%></a></li>
     <% end %>
   <% else %>
     <script>function loadTab(url) {$('resource-loading').show();document.location.href=url;return false;}</script>