]> source.dussan.org Git - sonarqube.git/commitdiff
fix layout of core widgets
authorsimonbrandhof <simon.brandhof@gmail.com>
Fri, 5 Nov 2010 17:40:59 +0000 (17:40 +0000)
committersimonbrandhof <simon.brandhof@gmail.com>
Fri, 5 Nov 2010 17:40:59 +0000 (17:40 +0000)
18 files changed:
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/ComplexityWidget.java [new file with mode: 0644]
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/DefaultExtendedAnalysisWidget.java [deleted file]
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/DefaultStaticAnalysisWidget.java [deleted file]
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/SizeWidget.java [new file with mode: 0644]
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/_extended_analysis.html.erb [deleted file]
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/_static_analysis.html.erb [deleted file]
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/code_coverage.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/comments_duplications.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/complexity.html.erb [new file with mode: 0644]
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/rules.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/size.html.erb [new file with mode: 0644]
plugins/sonar-design-plugin/src/main/java/org/sonar/plugins/design/ui/widgets/FileDesignWidget.java
plugins/sonar-design-plugin/src/main/java/org/sonar/plugins/design/ui/widgets/PackageDesignWidget.java
plugins/sonar-design-plugin/src/main/resources/org/sonar/plugins/design/ui/widgets/file_design.html.erb
plugins/sonar-design-plugin/src/main/resources/org/sonar/plugins/design/ui/widgets/package_design.html.erb
sonar-server/src/main/webapp/WEB-INF/db/migrate/151_create_dashboards.rb
tests/integration/tests/src/it/selenium/i18n/french-france.html

index f599ea64c8f6267a0f6d4a7cc61c7790b9e4dba8..6e082c1c692e1f7ccefdb8c1bfc827c3732b5572 100644 (file)
@@ -149,9 +149,9 @@ public class CorePlugin implements Plugin {
     extensions.add(CodeCoverageWidget.class);
     extensions.add(CommentsDuplicationsWidget.class);
     extensions.add(DescriptionWidget.class);
-    extensions.add(DefaultExtendedAnalysisWidget.class);
+    extensions.add(ComplexityWidget.class);
     extensions.add(RulesWidget.class);
-    extensions.add(DefaultStaticAnalysisWidget.class);
+    extensions.add(SizeWidget.class);
     extensions.add(EventsWidget.class);
     extensions.add(CustomMeasuresWidget.class);
 
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/ComplexityWidget.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/ComplexityWidget.java
new file mode 100644 (file)
index 0000000..90dba68
--- /dev/null
@@ -0,0 +1,40 @@
+/*\r
+ * Sonar, open source software quality management tool.\r
+ * Copyright (C) 2009 SonarSource SA\r
+ * mailto:contact AT sonarsource DOT com\r
+ *\r
+ * Sonar is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or (at your option) any later version.\r
+ *\r
+ * Sonar is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with Sonar; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02\r
+ */\r
+package org.sonar.plugins.core.widgets;\r
+\r
+import org.sonar.api.web.AbstractRubyTemplate;\r
+import org.sonar.api.web.Description;\r
+import org.sonar.api.web.RubyRailsWidget;\r
+\r
+@Description("Reports on complexity, average complexity and complexity distribution.")\r
+public class ComplexityWidget extends AbstractRubyTemplate implements RubyRailsWidget {\r
+  public String getId() {\r
+    return "complexity";\r
+  }\r
+\r
+  public String getTitle() {\r
+    return "Complexity";\r
+  }\r
+\r
+  @Override\r
+  protected String getTemplatePath() {\r
+    return "/org/sonar/plugins/core/widgets/complexity.html.erb";\r
+  }\r
+}
\ No newline at end of file
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/DefaultExtendedAnalysisWidget.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/DefaultExtendedAnalysisWidget.java
deleted file mode 100644 (file)
index 509f51c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*\r
- * Sonar, open source software quality management tool.\r
- * Copyright (C) 2009 SonarSource SA\r
- * mailto:contact AT sonarsource DOT com\r
- *\r
- * Sonar is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU Lesser General Public\r
- * License as published by the Free Software Foundation; either\r
- * version 3 of the License, or (at your option) any later version.\r
- *\r
- * Sonar is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- * Lesser General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Lesser General Public\r
- * License along with Sonar; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02\r
- */\r
-package org.sonar.plugins.core.widgets;\r
-\r
-import org.sonar.api.web.AbstractRubyTemplate;\r
-import org.sonar.api.web.Description;\r
-import org.sonar.api.web.RubyRailsWidget;\r
-\r
-@Description("Reports on complexity, average complexity and complexity distribution.")\r
-public class DefaultExtendedAnalysisWidget extends AbstractRubyTemplate implements RubyRailsWidget {\r
-  public String getId() {\r
-    return "extended_analysis";\r
-  }\r
-\r
-  public String getTitle() {\r
-    return "Complexity";\r
-  }\r
-\r
-  @Override\r
-  protected String getTemplatePath() {\r
-    return "/org/sonar/plugins/core/widgets/_extended_analysis.html.erb";\r
-  }\r
-}
\ No newline at end of file
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/DefaultStaticAnalysisWidget.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/DefaultStaticAnalysisWidget.java
deleted file mode 100644 (file)
index 69ddfc6..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*\r
- * Sonar, open source software quality management tool.\r
- * Copyright (C) 2009 SonarSource SA\r
- * mailto:contact AT sonarsource DOT com\r
- *\r
- * Sonar is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU Lesser General Public\r
- * License as published by the Free Software Foundation; either\r
- * version 3 of the License, or (at your option) any later version.\r
- *\r
- * Sonar is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- * Lesser General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Lesser General Public\r
- * License along with Sonar; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02\r
- */\r
-package org.sonar.plugins.core.widgets;\r
-\r
-import org.sonar.api.web.AbstractRubyTemplate;\r
-import org.sonar.api.web.Description;\r
-import org.sonar.api.web.RubyRailsWidget;\r
-\r
-@Description("Reports general metrics on the size of the project.")\r
-public class DefaultStaticAnalysisWidget extends AbstractRubyTemplate implements RubyRailsWidget {\r
-  public String getId() {\r
-    return "static_analysis";\r
-  }\r
-\r
-  public String getTitle() {\r
-    return "Size metrics";\r
-  }\r
-\r
-  @Override\r
-  protected String getTemplatePath() {\r
-    return "/org/sonar/plugins/core/widgets/_static_analysis.html.erb";\r
-  }\r
-}\r
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/SizeWidget.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/SizeWidget.java
new file mode 100644 (file)
index 0000000..3c6a5c4
--- /dev/null
@@ -0,0 +1,40 @@
+/*\r
+ * Sonar, open source software quality management tool.\r
+ * Copyright (C) 2009 SonarSource SA\r
+ * mailto:contact AT sonarsource DOT com\r
+ *\r
+ * Sonar is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 3 of the License, or (at your option) any later version.\r
+ *\r
+ * Sonar is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with Sonar; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02\r
+ */\r
+package org.sonar.plugins.core.widgets;\r
+\r
+import org.sonar.api.web.AbstractRubyTemplate;\r
+import org.sonar.api.web.Description;\r
+import org.sonar.api.web.RubyRailsWidget;\r
+\r
+@Description("Reports general metrics on the size of the project.")\r
+public class SizeWidget extends AbstractRubyTemplate implements RubyRailsWidget {\r
+  public String getId() {\r
+    return "size";\r
+  }\r
+\r
+  public String getTitle() {\r
+    return "Size metrics";\r
+  }\r
+\r
+  @Override\r
+  protected String getTemplatePath() {\r
+    return "/org/sonar/plugins/core/widgets/size.html.erb";\r
+  }\r
+}\r
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/_extended_analysis.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/_extended_analysis.html.erb
deleted file mode 100644 (file)
index 86c1eec..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-
-<%
- file_complexity=measure('file_complexity')
- function_complexity=measure('function_complexity')
- class_complexity=measure('class_complexity')
- paragraph_complexity=measure('paragraph_complexity')
-
- if file_complexity || function_complexity || class_complexity || paragraph_complexity
-complexity=measure('complexity')
-%>
-<div class="dashbox" >
- <h3>Complexity</h3>
- <% if function_complexity %>
-   <p>
-     <span class="big"><%= format_measure(function_complexity, :suffix => '', :url => url_for_drilldown(function_complexity)) -%> <%= tendency_icon(function_complexity, false) -%></span>/ method
-   </p>
- <% end %>
- <% if paragraph_complexity %>
-   <p>
-      <span class="big"><%= format_measure(paragraph_complexity, :suffix => '', :url => url_for_drilldown(paragraph_complexity)) -%> <%= tendency_icon(paragraph_complexity, false) -%></span>/ paragraph
-   </p>
- <% end %>
- <% if class_complexity %>
-   <p>
-     <span class="big"><%= format_measure(class_complexity, :suffix => '', :url => url_for_drilldown(class_complexity)) -%> <%= tendency_icon(class_complexity, false) -%></span>/ class
-   </p>
- <% end %>
- <% if file_complexity %>
-   <p>
-      <span class="big"><%= format_measure(file_complexity, :suffix => '', :url => url_for_drilldown(file_complexity)) -%> <%= tendency_icon(file_complexity, false) -%></span>/ file
-   </p>
- <% end %>
- <% if complexity %>
- <p>
-   Total: <%= format_measure(complexity, :url => url_for_drilldown(complexity)) -%> <%= tendency_icon(complexity) -%>
- </p>
- <% end %>
-</div>
-
-
-<%
- function_distribution=measure('function_complexity_distribution')
- paragraph_distribution=measure('paragraph_complexity_distribution')
- class_distribution=measure('class_complexity_distribution')
- file_distribution=measure('file_complexity_distribution')
- distributions=[function_distribution,paragraph_distribution,class_distribution,file_distribution].compact
- selected_distribution=nil
- if distributions.size>0
-   selected_distribution=distributions.first
- end
- if selected_distribution
-%>
-<div class="dashbox" id="cmp_charts" style="float:right">
- <script type='text/javascript'>
-   //<![CDATA[
-   function selectComplexity(metric) {
-     $$('#cmp_charts .chart').each(function(chart) {
-       chart.hide();
-     });
-     $('chart_' + metric).show();
-   }
- </script>
- <style>
-   #cmp_charts form {
-  font-size: 93%;padding-left: 30px;
-   }
-#cmp_charts form label {
-  padding-right: 5px;
-   }
- </style>
- <% distributions.each do |distribution_measure| %>
-   <%= render :partial => 'project/widgets/complexity_chart', :locals => { :metric => distribution_measure.metric.key, :title => distribution_measure.metric.description, :visible => (selected_distribution==distribution_measure) } %>
- <% end %>
-
- <form>
- <%
- count_dist=0
- if function_distribution
-   count_dist+=1
- %>
-<input type="radio" name="cmp_dist" value="function_complexity_distribution" id="cmp_dist_function_complexity_distribution" onClick="selectComplexity('function_complexity_distribution');" <%= 'checked' if function_distribution==selected_distribution -%>></input> <label for="cmp_dist_function_complexity_distribution">Methods</label>
-<%
-end
-if paragraph_distribution
-  count_dist+=1
-%>
-<input type="radio" name="cmp_dist" value="paragraph_complexity_distribution" id="cmp_dist_paragraph_complexity_distribution" onClick="selectComplexity('paragraph_complexity_distribution');" <%= 'checked' if paragraph_distribution==selected_distribution -%>></input> <label for="cmp_dist_paragraph_complexity_distribution">Paragraphs</label><%= '<br/>' if count_dist==2 %>
-<%
-end
-if class_distribution
-  count_dist+=1
-%>
-<input type="radio" name="cmp_dist" value="class_complexity_distribution" id="cmp_dist_class_complexity_distribution" onClick="selectComplexity('class_complexity_distribution');" <%= 'checked' if class_distribution==selected_distribution -%>></input> <label for="cmp_dist_class_complexity_distribution">Classes</label><%= '<br/>' if count_dist==2 %>
-<%
-end
-if file_distribution
-   count_dist+=1
-%>
-<input type="radio" name="cmp_dist" value="file_complexity_distribution" id="cmp_dist_file_complexity_distribution" onClick="selectComplexity('file_complexity_distribution');" <%= 'checked' if file_distribution==selected_distribution -%>></input> <label for="cmp_dist_file_complexity_distribution">Files</label>
-<% end %>
-
- </form>
-
-</div>
-<% end %>
-
-<div class="clear"></div>
-<% end %>
-
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/_static_analysis.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/_static_analysis.html.erb
deleted file mode 100644 (file)
index f8baf7a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<%
-if measure('lines') || measure('ncloc')
-  files=measure('files')
-  statements=measure('statements')
-%>
-<table width="100%">
-       <tr>
-               <td valign="top" width="48%" nowrap>
-                       <div class="dashbox">
-                     <h3>Lines of code</h3>
-                           <% if measure('ncloc') %>
-                             <p><span class="big">
-                             <%= format_measure('ncloc', :suffix => '', :url => url_for_drilldown('ncloc')) -%> <%= tendency_icon('ncloc', false) -%></span></p>
-                             <%
-                               generated_ncloc=measure('generated_ncloc')
-                               if generated_ncloc && generated_ncloc.value>0
-                             %>
-                             <p>+<%= format_measure(generated_ncloc, :suffix => ' generated', :url => url_for_drilldown(generated_ncloc)) -%> <%= tendency_icon(generated_ncloc) -%></p>
-                             <% end %>
-                             <p><%= format_measure('lines', :suffix => ' lines', :url => url_for_drilldown('lines')) -%> <%= tendency_icon('lines') -%></p>
-                           <% else%>
-                             <p><span class="big"><%= format_measure('lines', :suffix => '', :url => url_for_drilldown('lines')) -%> <%= tendency_icon('lines', false) -%></span></p>
-                           <% end %>
-                           <%
-                             generated_lines=measure('generated_lines')
-                             if generated_lines && generated_lines.value>0
-                           %>
-                             <p>incl. <%= format_measure(generated_lines, :suffix => ' generated', :url => url_for_drilldown(generated_lines)) -%> <%= tendency_icon(generated_lines) -%></p>
-                           <% end %>
-                           <% if statements %>
-          <p>
-          <%= format_measure(statements, :suffix => ' statements', :url => url_for_drilldown(statements)) -%> <%= tendency_icon(statements) -%>
-          </p>
-          <% end %>
-                           <% if files && measure('classes') %>
-                             <p><%= format_measure(files, :suffix => ' files', :url => url_for_drilldown(files)) -%> <%= tendency_icon(files) -%></p>
-                           <% end %>
-                   </div>
-               </td>
-               <td width="10"> </td>
-               <td valign="top">
-                       <div class="dashbox">
-                         <% if measure('classes') %>
-                       <h3>Classes</h3>
-                       <p><span class="big"><%= format_measure('classes', :url => url_for_drilldown('classes')) -%> <%= tendency_icon('classes') -%></span></p>
-                           <p><%= format_measure('packages', :suffix => ' packages', :url => url_for_drilldown('packages')) -%> <%= tendency_icon('packages') -%></p>
-                     <% else %>
-                       <h3>Files</h3>
-                       <p><span class="big"><%= format_measure('files', :url => url_for_drilldown('files')) -%> <%= tendency_icon('files') -%></span></p>
-                           <p><%= format_measure('directories', :suffix => ' directories', :url => url_for_drilldown('directories')) -%> <%= tendency_icon('directories') -%></p>
-                     <% end %>
-                     <p><%= format_measure('functions', :suffix => ' methods', :url => url_for_drilldown('functions')) -%> <%= tendency_icon('functions') -%></p>
-                     <% if (measure('accessors')) %>
-                       <p><%= format_measure('accessors', :prefix => '+', :suffix => ' accessors', :url => url_for_drilldown('accessors')) -%> <%= tendency_icon('accessors') -%></p>
-                     <% end %>
-                     <% if measure('paragraphs') %>
-                             <p><%= format_measure('paragraphs', :suffix => ' paragraphs', :url => url_for_drilldown('paragraphs')) -%> <%= tendency_icon('paragraphs') -%></p>
-                           <% end %>
-                   </div>
-               </td>
-       </tr>
-</table>
-<% end %>
\ No newline at end of file
index 422c131f96bc562310696e7fb1c7292ad6365fd7..53f08f4d8496075a2c0033cbf229225bbfe80427 100644 (file)
@@ -2,29 +2,30 @@
 code_coverage_measure=measure(Metric::COVERAGE)
 tests_measure=measure(Metric::TESTS)
 if code_coverage_measure || tests_measure %>
-<div class="yui-g">
-  <div class="yui-u first">
-<div class="dashbox">
-  <p class="title">Code coverage</p>
-  <p><span class="big"><%= format_measure(code_coverage_measure, :suffix => '', :url => url_for_drilldown(Metric::COVERAGE), :default => '-') %> <%= tendency_icon(code_coverage_measure, false) %></span></p>
-  <% line_coverage=measure(Metric::LINE_COVERAGE)
-    if line_coverage %>
-    <p><%= format_measure(line_coverage, :suffix => ' line coverage', :url => url_for_drilldown(Metric::UNCOVERED_LINES, :highlight =>  Metric::LINE_COVERAGE)) %> <%= tendency_icon(line_coverage) %></p>
-  <% end %>
-  <% branch_coverage=measure(Metric::BRANCH_COVERAGE)
-    if branch_coverage %>
-    <p><%= format_measure(branch_coverage, :suffix => ' branch coverage', :url => url_for_drilldown(Metric::UNCOVERED_CONDITIONS, :highlight =>  Metric::BRANCH_COVERAGE)) %> <%= tendency_icon(branch_coverage) %></p>
-  <% end %>
-  <p><%= format_measure(tests_measure, :suffix => ' tests', :url => url_for_drilldown(Metric::TESTS)) %> <%= tendency_icon(tests_measure) %></p>
-  <% skipped_measure=measure(Metric::SKIPPED_TESTS)
-     if skipped_measure && skipped_measure.value>0
-  %>
-  <p>+<%= format_measure(skipped_measure, :suffix => ' skipped', :url => url_for_drilldown(Metric::SKIPPED_TESTS)) %> <%= tendency_icon(skipped_measure) %></p>
-  <% end %>
-  <p><%= format_measure(Metric::TEST_EXECUTION_TIME, :suffix => '', :url => url_for_drilldown(Metric::TEST_EXECUTION_TIME)) %> <%= tendency_icon(measure(Metric::TEST_EXECUTION_TIME)) %></p>
-</div>
-</div>
-<div class="yui-u">
+<table width="100%">
+       <tr>
+               <td valign="top" width="50%" nowrap>
+      <div class="dashbox">
+        <p class="title">Code coverage</p>
+        <p><span class="big"><%= format_measure(code_coverage_measure, :suffix => '', :url => url_for_drilldown(Metric::COVERAGE), :default => '-') %> <%= tendency_icon(code_coverage_measure, false) %></span></p>
+        <% line_coverage=measure(Metric::LINE_COVERAGE)
+          if line_coverage %>
+          <p><%= format_measure(line_coverage, :suffix => ' line coverage', :url => url_for_drilldown(Metric::UNCOVERED_LINES, :highlight =>  Metric::LINE_COVERAGE)) %> <%= tendency_icon(line_coverage) %></p>
+        <% end %>
+        <% branch_coverage=measure(Metric::BRANCH_COVERAGE)
+          if branch_coverage %>
+          <p><%= format_measure(branch_coverage, :suffix => ' branch coverage', :url => url_for_drilldown(Metric::UNCOVERED_CONDITIONS, :highlight =>  Metric::BRANCH_COVERAGE)) %> <%= tendency_icon(branch_coverage) %></p>
+        <% end %>
+        <p><%= format_measure(tests_measure, :suffix => ' tests', :url => url_for_drilldown(Metric::TESTS)) %> <%= tendency_icon(tests_measure) %></p>
+        <% skipped_measure=measure(Metric::SKIPPED_TESTS)
+           if skipped_measure && skipped_measure.value>0
+        %>
+        <p>+<%= format_measure(skipped_measure, :suffix => ' skipped', :url => url_for_drilldown(Metric::SKIPPED_TESTS)) %> <%= tendency_icon(skipped_measure) %></p>
+        <% end %>
+        <p><%= format_measure(Metric::TEST_EXECUTION_TIME, :suffix => '', :url => url_for_drilldown(Metric::TEST_EXECUTION_TIME)) %> <%= tendency_icon(measure(Metric::TEST_EXECUTION_TIME)) %></p>
+      </div>
+    </td>
+    <td valign="top" width="50%" nowrap>
   <%
   success_percentage=measure(Metric::TEST_SUCCESS_DENSITY)
   if success_percentage
@@ -40,6 +41,7 @@ if code_coverage_measure || tests_measure %>
       </p>
   </div>
   <% end %>
-</div>
-</div>
+</td>
+</tr>
+</table>
 <% end %>
index 28f28552123bf3e70ea627de0776b3bbc0391e1e..078822eb55698ea52093c5531af6fa206e2c537d 100644 (file)
@@ -1,7 +1,7 @@
 <% if measure(Metric::LINES) || measure(Metric::NCLOC) %>
 <table width="100%">
        <tr>
-               <td valign="top" width="48%" nowrap>
+               <td valign="top" width="50%" nowrap>
                        <% if (measure(Metric::COMMENT_LINES)) %>
                    <div class="dashbox">
                      <h3>Comments</h3>
@@ -19,8 +19,7 @@
                    </div>
                    <% end %>
                </td>
-               <td width="10"> </td>
-               <td valign="top">
+               <td valign="top" width="50%" nowrap>
                    <% if (measure(Metric::DUPLICATED_LINES_DENSITY)) %>
                    <div class="dashbox">
                      <h3>Duplications</h3>
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/complexity.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/complexity.html.erb
new file mode 100644 (file)
index 0000000..43bc568
--- /dev/null
@@ -0,0 +1,116 @@
+
+<%
+ file_complexity=measure('file_complexity')
+ function_complexity=measure('function_complexity')
+ class_complexity=measure('class_complexity')
+ paragraph_complexity=measure('paragraph_complexity')
+
+ if file_complexity || function_complexity || class_complexity || paragraph_complexity
+complexity=measure('complexity')
+%>
+<table class="width100">
+  <tbody>
+    <tr>
+      <td valign="top" width="50%">
+        <div class="dashbox" >
+         <h3>Complexity</h3>
+         <% if function_complexity %>
+           <p>
+             <span class="big"><%= format_measure(function_complexity, :suffix => '', :url => url_for_drilldown(function_complexity)) -%> <%= tendency_icon(function_complexity, false) -%></span>/ method
+           </p>
+         <% end %>
+         <% if paragraph_complexity %>
+           <p>
+              <span class="big"><%= format_measure(paragraph_complexity, :suffix => '', :url => url_for_drilldown(paragraph_complexity)) -%> <%= tendency_icon(paragraph_complexity, false) -%></span>/ paragraph
+           </p>
+         <% end %>
+         <% if class_complexity %>
+           <p>
+             <span class="big"><%= format_measure(class_complexity, :suffix => '', :url => url_for_drilldown(class_complexity)) -%> <%= tendency_icon(class_complexity, false) -%></span>/ class
+           </p>
+         <% end %>
+         <% if file_complexity %>
+           <p>
+              <span class="big"><%= format_measure(file_complexity, :suffix => '', :url => url_for_drilldown(file_complexity)) -%> <%= tendency_icon(file_complexity, false) -%></span>/ file
+           </p>
+         <% end %>
+         <% if complexity %>
+         <p>
+           Total: <%= format_measure(complexity, :url => url_for_drilldown(complexity)) -%> <%= tendency_icon(complexity) -%>
+         </p>
+         <% end %>
+        </div>
+      </td>
+      <td valign="top" width="50%" nowrap>
+<%
+ function_distribution=measure('function_complexity_distribution')
+ paragraph_distribution=measure('paragraph_complexity_distribution')
+ class_distribution=measure('class_complexity_distribution')
+ file_distribution=measure('file_complexity_distribution')
+ distributions=[function_distribution,paragraph_distribution,class_distribution,file_distribution].compact
+ selected_distribution=nil
+ if distributions.size>0
+   selected_distribution=distributions.first
+ end
+ if selected_distribution
+%>
+<div class="dashbox" id="cmp_charts">
+ <script type='text/javascript'>
+   //<![CDATA[
+   function selectComplexity(metric) {
+     $$('#cmp_charts .chart').each(function(chart) {
+       chart.hide();
+     });
+     $('chart_' + metric).show();
+   }
+ </script>
+ <style>
+   #cmp_charts form {
+  font-size: 93%;padding-left: 30px;
+   }
+#cmp_charts form label {
+  padding-right: 5px;
+   }
+ </style>
+ <% distributions.each do |distribution_measure| %>
+   <%= render :partial => 'project/widgets/complexity_chart', :locals => { :metric => distribution_measure.metric.key, :title => distribution_measure.metric.description, :visible => (selected_distribution==distribution_measure) } %>
+ <% end %>
+
+ <form>
+ <%
+ count_dist=0
+ if function_distribution
+   count_dist+=1
+ %>
+<input type="radio" name="cmp_dist" value="function_complexity_distribution" id="cmp_dist_function_complexity_distribution" onClick="selectComplexity('function_complexity_distribution');" <%= 'checked' if function_distribution==selected_distribution -%>></input> <label for="cmp_dist_function_complexity_distribution">Methods</label>
+<%
+end
+if paragraph_distribution
+  count_dist+=1
+%>
+<input type="radio" name="cmp_dist" value="paragraph_complexity_distribution" id="cmp_dist_paragraph_complexity_distribution" onClick="selectComplexity('paragraph_complexity_distribution');" <%= 'checked' if paragraph_distribution==selected_distribution -%>></input> <label for="cmp_dist_paragraph_complexity_distribution">Paragraphs</label><%= '<br/>' if count_dist==2 %>
+<%
+end
+if class_distribution
+  count_dist+=1
+%>
+<input type="radio" name="cmp_dist" value="class_complexity_distribution" id="cmp_dist_class_complexity_distribution" onClick="selectComplexity('class_complexity_distribution');" <%= 'checked' if class_distribution==selected_distribution -%>></input> <label for="cmp_dist_class_complexity_distribution">Classes</label><%= '<br/>' if count_dist==2 %>
+<%
+end
+if file_distribution
+   count_dist+=1
+%>
+<input type="radio" name="cmp_dist" value="file_complexity_distribution" id="cmp_dist_file_complexity_distribution" onClick="selectComplexity('file_complexity_distribution');" <%= 'checked' if file_distribution==selected_distribution -%>></input> <label for="cmp_dist_file_complexity_distribution">Files</label>
+<% end %>
+
+ </form>
+
+</div>
+<% end %>
+  </td>
+  </tr>
+  </tbody>
+ </table>
+<div class="clear"></div>
+<% end %>
+
index dbcad0d1d5c371e2054e12e35ffa6f47001005de..84b09712b3573cd821cfc73d767dacac709e6cb4 100644 (file)
@@ -1,8 +1,7 @@
 <% if measure(Metric::LINES) %>
-<div id="widget_rules">
        <table width="100%">
                <tr>
-                 <td valign="top">
+                 <td valign="top" width="50%">
                                <div class="dashbox">
                                    <h3>Rules compliance</h3>
                                    <div class="big">
@@ -51,8 +50,7 @@
                                    </div>
                                  </div>
                </td>
-               <td width="10"> </td>
-               <td valign="top">
+               <td valign="top" width="50%" nowrap>
                          <div class="dashbox">
                            <h3>Violations</h3>
                            <div class="big">
            </td>
          </tr>
     </table>
-
-</div>
 <% end %>
\ No newline at end of file
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/size.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/size.html.erb
new file mode 100644 (file)
index 0000000..f8baf7a
--- /dev/null
@@ -0,0 +1,63 @@
+<%
+if measure('lines') || measure('ncloc')
+  files=measure('files')
+  statements=measure('statements')
+%>
+<table width="100%">
+       <tr>
+               <td valign="top" width="48%" nowrap>
+                       <div class="dashbox">
+                     <h3>Lines of code</h3>
+                           <% if measure('ncloc') %>
+                             <p><span class="big">
+                             <%= format_measure('ncloc', :suffix => '', :url => url_for_drilldown('ncloc')) -%> <%= tendency_icon('ncloc', false) -%></span></p>
+                             <%
+                               generated_ncloc=measure('generated_ncloc')
+                               if generated_ncloc && generated_ncloc.value>0
+                             %>
+                             <p>+<%= format_measure(generated_ncloc, :suffix => ' generated', :url => url_for_drilldown(generated_ncloc)) -%> <%= tendency_icon(generated_ncloc) -%></p>
+                             <% end %>
+                             <p><%= format_measure('lines', :suffix => ' lines', :url => url_for_drilldown('lines')) -%> <%= tendency_icon('lines') -%></p>
+                           <% else%>
+                             <p><span class="big"><%= format_measure('lines', :suffix => '', :url => url_for_drilldown('lines')) -%> <%= tendency_icon('lines', false) -%></span></p>
+                           <% end %>
+                           <%
+                             generated_lines=measure('generated_lines')
+                             if generated_lines && generated_lines.value>0
+                           %>
+                             <p>incl. <%= format_measure(generated_lines, :suffix => ' generated', :url => url_for_drilldown(generated_lines)) -%> <%= tendency_icon(generated_lines) -%></p>
+                           <% end %>
+                           <% if statements %>
+          <p>
+          <%= format_measure(statements, :suffix => ' statements', :url => url_for_drilldown(statements)) -%> <%= tendency_icon(statements) -%>
+          </p>
+          <% end %>
+                           <% if files && measure('classes') %>
+                             <p><%= format_measure(files, :suffix => ' files', :url => url_for_drilldown(files)) -%> <%= tendency_icon(files) -%></p>
+                           <% end %>
+                   </div>
+               </td>
+               <td width="10"> </td>
+               <td valign="top">
+                       <div class="dashbox">
+                         <% if measure('classes') %>
+                       <h3>Classes</h3>
+                       <p><span class="big"><%= format_measure('classes', :url => url_for_drilldown('classes')) -%> <%= tendency_icon('classes') -%></span></p>
+                           <p><%= format_measure('packages', :suffix => ' packages', :url => url_for_drilldown('packages')) -%> <%= tendency_icon('packages') -%></p>
+                     <% else %>
+                       <h3>Files</h3>
+                       <p><span class="big"><%= format_measure('files', :url => url_for_drilldown('files')) -%> <%= tendency_icon('files') -%></span></p>
+                           <p><%= format_measure('directories', :suffix => ' directories', :url => url_for_drilldown('directories')) -%> <%= tendency_icon('directories') -%></p>
+                     <% end %>
+                     <p><%= format_measure('functions', :suffix => ' methods', :url => url_for_drilldown('functions')) -%> <%= tendency_icon('functions') -%></p>
+                     <% if (measure('accessors')) %>
+                       <p><%= format_measure('accessors', :prefix => '+', :suffix => ' accessors', :url => url_for_drilldown('accessors')) -%> <%= tendency_icon('accessors') -%></p>
+                     <% end %>
+                     <% if measure('paragraphs') %>
+                             <p><%= format_measure('paragraphs', :suffix => ' paragraphs', :url => url_for_drilldown('paragraphs')) -%> <%= tendency_icon('paragraphs') -%></p>
+                           <% end %>
+                   </div>
+               </td>
+       </tr>
+</table>
+<% end %>
\ No newline at end of file
index c4009c9dd7bb1825b7e5a26933ce21c5cb126eea..06643cad19189d5b2009d2b4c00008299bb2bba2 100644 (file)
@@ -26,7 +26,7 @@ import org.sonar.api.web.*;
 @Description("Reports on files dependency cycles and tangle index.")
 public final class FileDesignWidget extends AbstractRubyTemplate implements RubyRailsWidget {
   public String getId() {
-    return "file-design";
+    return "file_design";
   }
 
   public String getTitle() {
index be27d6a71302a2b27570cc90c6f1466730c82f32..6c9ba0d1346b2fd3c65f7d4caac927aeffcae5a7 100644 (file)
@@ -26,7 +26,7 @@ import org.sonar.api.web.*;
 @Description("Reports on package dependency cycles and tangle index.")
 public final class PackageDesignWidget extends AbstractRubyTemplate implements RubyRailsWidget {
   public String getId() {
-    return "package-design";
+    return "package_design";
   }
 
   public String getTitle() {
index 70041753975c44cefbcfc412af6a3f694b66b5b5..e91e9857a9f06678503800641bd89aefea7f4e7c 100644 (file)
@@ -7,7 +7,7 @@
 <table width="100%">
   <tbody>
     <tr>
-      <td valign="top">
+      <td valign="top" width="50%">
         <div class="dashbox">
           <p class="title">File tangle index</p>
           <p><span class="big"><%= format_measure(file_tangle_index, :suffix => '', :default => '-', :url => url_for_drilldown('file_tangle_index')) %> <%= tendency_icon(file_tangle_index, false) %></span></p>
@@ -16,7 +16,7 @@
           <% end %>
         </div>
       </td>
-      <td valign="top">
+      <td valign="top" width="50%">
         <% if file_feedback_edges %>
         <div class="dashbox">
           <p class="title">Suspect file dependencies</p>
index 59136259ee14b3273f6ce9f0d9d00351519a54fd..3904ba97befb5fbe75a57618b2f3b45b4a02c463 100644 (file)
@@ -11,7 +11,7 @@
         package_feedback_edges=measure('package_feedback_edges')
         package_tangles=measure('package_tangles')
     %>
-      <td valign="top">
+      <td valign="top" width="50%">
         <div class="dashbox">
           <p class="title">Package tangle index</p>
           <p><span class="big"><%= format_measure(package_tangle_index, :suffix => '', :default => '-', :url => url_for_drilldown('package_tangle_index')) %> <%= tendency_icon(package_tangle_index, false) %></span></p>
@@ -20,7 +20,7 @@
           <% end %>
         </div>
       </td>
-      <td valign="top">
+      <td valign="top" width="50%">
         <% if package_feedback_edges || package_tangles %>
         <div class="dashbox">
           <p class="title">Dependencies to cut</p>
index 0ec89239ecf6a81f96b2e00a29fe30db002ffaaa..f1c3fcbe8f6782ef592df54a794fa7a06cff63a6 100755 (executable)
@@ -66,17 +66,17 @@ class CreateDashboards < ActiveRecord::Migration
 
   def self.create_dashboard
     dashboard=::Dashboard.new(:name => 'Dashboard', :shared => true, :description => 'Default dashboard', :column_layout => Dashboard::DEFAULT_LAYOUT)
-    dashboard.widgets.build(:widget_key => 'static_analysis', :name => 'Static analysis', :column_index => 1, :row_index => 1, :configured => true)
+    dashboard.widgets.build(:widget_key => 'size', :name => 'Size metrics', :column_index => 1, :row_index => 1, :configured => true)
     dashboard.widgets.build(:widget_key => 'comments_duplications', :name => 'Comments duplications', :column_index => 1, :row_index => 2, :configured => true)
-    dashboard.widgets.build(:widget_key => 'extended_analysis', :name => 'Extended analysis', :column_index => 1, :row_index => 3, :configured => true)
+    dashboard.widgets.build(:widget_key => 'complexity', :name => 'Complexity', :column_index => 1, :row_index => 3, :configured => true)
     dashboard.widgets.build(:widget_key => 'code_coverage', :name => 'Code coverage', :column_index => 1, :row_index => 4, :configured => true)
     dashboard.widgets.build(:widget_key => 'events', :name => 'Events', :column_index => 1, :row_index => 5, :configured => true)
     dashboard.widgets.build(:widget_key => 'description', :name => 'Description', :column_index => 1, :row_index => 6, :configured => true)
     dashboard.widgets.build(:widget_key => 'rules', :name => 'Rules', :column_index => 2, :row_index => 1, :configured => true)
     dashboard.widgets.build(:widget_key => 'alerts', :name => 'Alerts', :column_index => 2, :row_index => 2, :configured => true)
     dashboard.widgets.build(:widget_key => 'custom_measures', :name => 'Custom measures', :column_index => 2, :row_index => 3, :configured => true)
-    dashboard.widgets.build(:widget_key => 'file-design', :name => 'File design', :column_index => 2, :row_index => 4, :configured => true)
-    dashboard.widgets.build(:widget_key => 'package-design', :name => 'Package design', :column_index => 2, :row_index => 5, :configured => true)
+    dashboard.widgets.build(:widget_key => 'file_design', :name => 'File design', :column_index => 2, :row_index => 4, :configured => true)
+    dashboard.widgets.build(:widget_key => 'package_design', :name => 'Package design', :column_index => 2, :row_index => 5, :configured => true)
     dashboard.widgets.build(:widget_key => 'ckjm', :name => 'CKJM', :column_index => 2, :row_index => 6, :configured => true)
 
     dashboard.save
index 100c3949b9ad759b507356a8635ab92a5859ea18..39531c083d22099a1125830a5ea38a13c4a487a0 100644 (file)
@@ -12,7 +12,7 @@
 </thead><tbody>
 <tr>
        <td>open</td>
-       <td>/dashboard/index/org.sonar.tests:reference&amp;locale=fr-FR</td>
+       <td>/dashboard/index/org.sonar.tests:reference?locale=fr-FR</td>
        <td></td>
 </tr>
 <tr>