]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6236 Use correct replacement widget for non-project related widgets
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Thu, 19 Mar 2015 11:30:42 +0000 (12:30 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Thu, 19 Mar 2015 11:30:42 +0000 (12:30 +0100)
server/sonar-server/src/main/java/org/sonar/server/startup/RenameIssueWidgets.java
server/sonar-server/src/test/java/org/sonar/server/startup/RenameIssueWidgetsTest.java
server/sonar-server/src/test/resources/org/sonar/server/startup/RenameIssueWidgetsTest/after.xml
server/sonar-server/src/test/resources/org/sonar/server/startup/RenameIssueWidgetsTest/before.xml

index 389788e39296429791138ea3ad3759f5ecf77321..5ae53e4f8475a0a9086650a5b48f9ab313a1b43f 100644 (file)
@@ -24,6 +24,7 @@ import com.google.common.collect.Lists;
 import org.picocontainer.Startable;
 import org.sonar.api.utils.System2;
 import org.sonar.api.utils.log.Loggers;
+import org.sonar.core.dashboard.DashboardDto;
 import org.sonar.core.dashboard.WidgetDto;
 import org.sonar.core.dashboard.WidgetPropertyDto;
 import org.sonar.core.issue.db.IssueFilterDto;
@@ -45,6 +46,7 @@ public class RenameIssueWidgets implements Startable {
   private static final String WIDGET_UNRESOLVED_BY_DEVELOPER = "reviews_per_developer";
   private static final String WIDGET_UNRESOLVED_BY_STATUS = "unresolved_issues_statuses";
 
+  private static final String WIDGET_ISSUE_FILTER = "issue_filter";
   private static final String WIDGET_PROJECT_ISSUE_FILTER = "project_issue_filter";
 
   private static final String FILTER_PROPERTY = "filter";
@@ -137,11 +139,18 @@ public class RenameIssueWidgets implements Startable {
 
   private void updateWidget(DbSession session, WidgetDto widget) {
     dbClient.widgetDao().update(session,
-      widget.setWidgetKey(WIDGET_PROJECT_ISSUE_FILTER)
+      widget.setWidgetKey(getReplacementWidgetKey(session, widget))
         .setUpdatedAt(system.newDate())
         .setConfigured(true));
   }
 
+  private String getReplacementWidgetKey(DbSession session, WidgetDto widget) {
+    DashboardDto dashboard = dbClient.dashboardDao().getNullableByKey(session, widget.getDashboardId());
+    boolean isOnGlobalDashboard = dashboard != null && dashboard.getGlobal();
+
+    return isOnGlobalDashboard && widget.getResourceId() == null ? WIDGET_ISSUE_FILTER : WIDGET_PROJECT_ISSUE_FILTER;
+  }
+
   @Override
   public void stop() {
     // do nothing
index 5e79b405e343978dd35472fba5a4a9441e920dd0..2f3f0ee7612ca5e67f0df2d4a0b2fe95a5bf2c67 100644 (file)
@@ -27,6 +27,7 @@ import org.sonar.api.utils.System2;
 import org.sonar.core.issue.db.IssueFilterDao;
 import org.sonar.core.persistence.DbTester;
 import org.sonar.core.template.LoadedTemplateDao;
+import org.sonar.server.dashboard.db.DashboardDao;
 import org.sonar.server.dashboard.db.WidgetDao;
 import org.sonar.server.dashboard.db.WidgetPropertyDao;
 import org.sonar.server.db.DbClient;
@@ -73,7 +74,8 @@ public class RenameIssueWidgetsTest {
         new WidgetDao(dbTester.myBatis()),
         new WidgetPropertyDao(dbTester.myBatis()),
         new IssueFilterDao(dbTester.myBatis()),
-        new LoadedTemplateDao(dbTester.myBatis())
+        new LoadedTemplateDao(dbTester.myBatis()),
+        new DashboardDao(system2)
       ),
       system2,
       null);
index 712f1304dea75558943f5e3e4c84f41698a43845..d97feacbf3fddf7d38c6067fcd9d36782874e6e9 100644 (file)
       updated_at="2011-04-25 01:15:00" />
 
 
+  <dashboards
+    id="1"
+    user_id="[null]"
+    name="[null]"
+    description="[null]"
+    column_layout="[null]"
+    shared="[true]"
+    is_global="[false]"
+    created_at="[null]"
+    updated_at="[null]"
+  />
+
+  <dashboards
+    id="2"
+    user_id="[null]"
+    name="[null]"
+    description="[null]"
+    column_layout="[null]"
+    shared="[true]"
+    is_global="[true]"
+    created_at="[null]"
+    updated_at="[null]"
+  />
+
+
   <widgets id="1" dashboard_id="1" widget_key="polop" name="[null]" description="[null]"
      column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
@@ -57,9 +82,9 @@
   <widget_properties id="6" widget_id="3" kee="distributionAxis" text_value="severities"/>
 
 
-  <!-- 'Unresolved Issues Per Developer' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
-  <widgets id="4" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
-     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+  <!-- 'Unresolved Issues Per Developer' - on a global dashboard, replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
+  <widgets id="4" dashboard_id="2" widget_key="project_issue_filter" name="[null]" description="[null]"
+     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="12345"/>
 
   <!-- filter = 'Unresolved Issues' -->
   <widget_properties id="7" widget_id="4" kee="filter" text_value="1"/>
@@ -67,8 +92,8 @@
   <widget_properties id="8" widget_id="4" kee="distributionAxis" text_value="assignees"/>
 
 
-  <!-- 'Unresolved Issues Per Status' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
-  <widgets id="5" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
+  <!-- 'Unresolved Issues Per Status' - on a global dashboard without resource_id, replaced by issue_filter w/ 'Unresolved Issues' filter -->
+  <widgets id="5" dashboard_id="2" widget_key="issue_filter" name="[null]" description="[null]"
      column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
 
   <!-- filter = 'Unresolved Issues' -->
index 0f3250d3ded534f82c7ccc30ef202da954d5030a..65644a5dd54db10606754da4cd554242ddb64e01 100644 (file)
       updated_at="2011-04-25 01:15:00" />
 
 
+  <dashboards
+    id="1"
+    user_id="[null]"
+    name="[null]"
+    description="[null]"
+    column_layout="[null]"
+    shared="[true]"
+    is_global="[false]"
+    created_at="[null]"
+    updated_at="[null]"
+  />
+
+  <dashboards
+    id="2"
+    user_id="[null]"
+    name="[null]"
+    description="[null]"
+    column_layout="[null]"
+    shared="[true]"
+    is_global="[true]"
+    created_at="[null]"
+    updated_at="[null]"
+  />
+
+
   <!-- Will not be modified -->
   <widgets id="1" dashboard_id="1" widget_key="polop" name="[null]" description="[null]"
      column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
 
 
   <!-- 'Unresolved Issues Per Developer' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
-  <widgets id="4" dashboard_id="1" widget_key="reviews_per_developer" name="[null]" description="[null]"
-     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+  <widgets id="4" dashboard_id="2" widget_key="reviews_per_developer" name="[null]" description="[null]"
+     column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="12345"/>
 
 
-  <!-- 'Unresolved Issues Per Status' - replaced by project_issue_filter w/ 'Unresolved Issues' filter -->
-  <widgets id="5" dashboard_id="1" widget_key="unresolved_issues_statuses" name="[null]" description="[null]"
+  <!-- 'Unresolved Issues Per Status' - on a global dashboard without resource_id, replaced by issue_filter w/ 'Unresolved Issues' filter -->
+  <widgets id="5" dashboard_id="2" widget_key="unresolved_issues_statuses" name="[null]" description="[null]"
      column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>