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;
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";
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
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;
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);
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]"/>
<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"/>
<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' -->
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]"/>