]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2701 Adjustments on TimeMachine widget
authorFabrice Bellingard <bellingard@gmail.com>
Fri, 26 Aug 2011 10:01:17 +0000 (12:01 +0200)
committerFabrice Bellingard <bellingard@gmail.com>
Fri, 26 Aug 2011 10:01:17 +0000 (12:01 +0200)
- Display only latest snapshot if number_of_versions set to 1
- Fix bug and actually always display oldest snapshot of the selected
  time frame
- Improve CSS rendering
- Do not display last column if no sparkline
- Do not display metric domain if selected metrics all belong to the
  same domain (= if there's only one domain to display)

plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/time_machine.html.erb
sonar-server/src/main/webapp/WEB-INF/app/models/snapshot.rb
sonar-server/src/main/webapp/stylesheets/style.css

index e1d0aee470fa03e9d36216732d67791604ecf21d..5ebeab3724f3dc993c66d2ac79a4c760aa0e355a 100644 (file)
     end
   end
   
+  domains = []
+  rows.select{|row| row.metric.val_type != Metric::VALUE_TYPE_DISTRIB}.each do |row|
+    domains << row.domain
+  end
+  display_domains = domains.uniq.size > 1
+  
   rows.sort!
 %>
 
@@ -70,7 +76,9 @@
             <% end %>
           </th>
       <% end %>
+      <% if displaySparkLine %>
       <th> </th>
+      <% end %>
   </tr>
   </thead>
 
     <%
       previous_domain=''
       rows.select{|row| row.metric.val_type != Metric::VALUE_TYPE_DISTRIB}.each do |row|
-        if previous_domain != row.domain 
+        if display_domains && previous_domain != row.domain 
     %>
     <tr>
-      <td class="title" colspan="<%= snapshots.size + 2 -%>"><%= row.domain %></td>
+      <td class="title" colspan="<%= snapshots.size + (displaySparkLine ? 2 : 1) -%>"><%= row.domain %></td>
     </tr>
     <% 
         end
     %>
       <td align="right" width="1%" nowrap="nowrap"><%= format_measure(measure, :skip_span_id => true) %></td>
     <% end %>
-      <td>
     <%
       sparkline_url=row.sparkline_url
       if displaySparkLine && sparkline_url
     %>
+      <td width="1%" >
         <%= image_tag(sparkline_url) %>
-    <% end %>
       </td>
+    <% end %>
     </tr>
     <% end %>
   </tbody>
index bc1d8d5e9ce33a9b2445303cec222b1290cbc10e..c50e5e54f40610f611094ef74eb3ea6edfc62e63 100644 (file)
@@ -69,23 +69,35 @@ class Snapshot < ActiveRecord::Base
   end
   
   def self.for_timemachine_widget(resource, number_of_versions, options={})
-    conditions = ["events.category=? AND events.resource_id=?", "Version", resource.id]
+    snapshot_conditions = ["snapshots.project_id=? AND snapshots.status=? AND snapshots.scope=? AND snapshots.qualifier=?", resource.id, STATUS_PROCESSED, resource.scope, resource.qualifier]
+    event_conditions = ["events.category=? AND events.resource_id=?", "Version", resource.id]
     if (options[:from])
-      conditions[0] += " AND events.event_date>=?"
-      conditions << options[:from]
+      snapshot_conditions[0] += " AND snapshots.created_at>=?"
+      snapshot_conditions << options[:from]
+      event_conditions[0] += " AND events.event_date>=?"
+      event_conditions << options[:from]
     end
     
-    events = Event.find(:all, :conditions => conditions, :order => 'events.event_date ASC')
-    events_to_display = events
-    if number_of_versions < events.size
-      events_to_display = [events.first] + events[events.size-number_of_versions+1 .. events.size-1]
+    if number_of_versions == 1
+      # Display only the latest snapshot
+      last_snapshot = Snapshot.find(:last, :conditions => snapshot_conditions, :order => 'snapshots.created_at ASC')
+      return [last_snapshot]
     end
+    
+    # Look for 1rst snapshot of the period
+    first_snapshot=Snapshot.find(:first, :conditions => snapshot_conditions, :order => 'snapshots.created_at ASC')
+    
+    # Look for the number_of_versions-1 last events to display
+    events_to_display = Event.find(:all, :conditions => event_conditions, :order => 'events.event_date ASC').last(number_of_versions-1)
+    
+    # And retrieve the wanted snapshots corresponding to the events
     sids = []
     events_to_display.each() do |event|
-      sids << event.snapshot_id
-    end
+      sids << event.snapshot_id unless event.snapshot_id == first_snapshot.id
+    end    
+    last_snapshots=Snapshot.find(:all, :conditions => ["snapshots.id IN (?)", sids], :include => 'events', :order => 'snapshots.created_at ASC')
     
-    snapshots=Snapshot.find(:all, :conditions => ["snapshots.id IN (?)", sids], :include => 'events', :order => 'snapshots.created_at ASC')
+    return [first_snapshot] + last_snapshots
   end
 
   def last?
index 00f2bfb027fd7cfba8475f490aa4fab13ab1b0bf..df92e7de87516604d8765a17590eaa57f9855abf 100644 (file)
@@ -1793,11 +1793,12 @@ table.matrix tbody td.title {
 }
 
 div.widget-matrix {
- overflow:auto;
 overflow:auto;
 }
 
 table.widget-matrix {
   font-size: 12px;
+  margin: 1px; 
 }
 
 table.widget-matrix thead {
@@ -1820,7 +1821,7 @@ table.widget-matrix tbody td.title {
 table.widget-matrix tbody td {
   border: 1px solid #ddd;
   margin: 0;
-  padding: 1px 0 1px 10px;
+  padding: 1px 2px 1px 10px;
 }