json.prop("configured", widget.getConfigured());
json.prop("componentId", widget.getResourceId());
json.name("props").beginArray();
- for (WidgetPropertyDto prop : propertiesByWidget.get(widget.getKey())) {
+ for (WidgetPropertyDto prop : propertiesByWidget.get(widget.getId())) {
json.beginObject();
json.prop("key", prop.getPropertyKey());
json.prop("val", prop.getTextValue());
DbSession session = dbClient.openSession(false);
try {
- if (dbClient.loadedTemplateDao().countByTypeAndKey(LoadedTemplateDto.ONE_SHOT_TASK_TYPE, TASK_KEY) != 0) {
+ if (dbClient.loadedTemplateDao().countByTypeAndKey(LoadedTemplateDto.ONE_SHOT_TASK_TYPE, TASK_KEY, session) != 0) {
// Already done
return;
}
for (WidgetDto widget : dbClient.widgetDao().findAll(session)) {
String widgetKey = widget.getWidgetKey();
if (filterByWidgetKey.keySet().contains(widgetKey)) {
+ updatedWidgetIds.add(widget.getId());
newWidgetProperties.add(createFilterProperty(filterByWidgetKey.get(widgetKey), widget));
newWidgetProperties.add(createDistributionAxisProperty(distributionAxisByWidgetKey.get(widgetKey), widget));
updateWidget(session, widget);
- updatedWidgetIds.add(widget.getId());
}
}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.server.dashboard.db;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.sonar.core.dashboard.WidgetDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.DbTester;
+import org.sonar.core.persistence.MyBatis;
+import org.sonar.test.DbTests;
+
+import java.util.Collection;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Category(DbTests.class)
+public class WidgetDaoTest {
+
+ WidgetDao dao;
+
+ @Rule
+ public DbTester dbTester = new DbTester();
+
+ private DbSession session;
+
+ @Before
+ public void setUp() throws Exception {
+ dao = new WidgetDao(dbTester.myBatis());
+ session = dbTester.myBatis().openSession(false);
+ }
+
+ @After
+ public void tearDown() {
+ MyBatis.closeQuietly(session);
+ }
+
+ @Test
+ public void should_select_all() throws Exception {
+ dbTester.prepareDbUnit(this.getClass(), "before.xml");
+ session.commit();
+
+ Collection<WidgetDto> widgets = dao.findAll(session);
+ assertThat(widgets).hasSize(5);
+ for (WidgetDto widget : widgets) {
+ assertThat(widget.getId()).isNotNull();
+ assertThat(widget.getName()).isNotNull();
+ assertThat(widget.getDescription()).isNotNull();
+ }
+ }
+}
--- /dev/null
+<dataset>
+
+ <widgets id="1" dashboard_id="1" widget_key="polop" name="Polop" description="Palap"
+ column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+ <widgets id="2" dashboard_id="1" widget_key="false_positive_reviews" name="Polop" description="Palap"
+ column_index="1" row_index="2" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+ <widgets id="3" dashboard_id="1" widget_key="my_reviews" name="Polop" description="Palap"
+ column_index="1" row_index="3" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+ <widgets id="4" dashboard_id="1" widget_key="reviews_per_developer" name="Polop" description="Palap"
+ column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+ <widgets id="5" dashboard_id="1" widget_key="unresolved_issues_statuses" name="Polop" description="Palap"
+ column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+
+</dataset>
<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]"/>
+ column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
<widget_properties id="1" widget_id="1" kee="palap" text_value="pulup"/>
<!-- 'False Positive Issues' - replaced by project_issue_filter w/ 'False Positive and Won't Fix Issues' filter -->
<widgets id="2" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
- column_index="1" row_index="2" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+ column_index="1" row_index="2" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
<!-- filter = 'False Positive and Won't Fix Issues' -->
<widget_properties id="3" widget_id="2" kee="filter" text_value="2"/>
<!-- 'My Unresolved Issues' - replaced by project_issue_filter w/ 'My Unresolved Issues' filter -->
<widgets id="3" dashboard_id="1" widget_key="project_issue_filter" name="[null]" description="[null]"
- column_index="1" row_index="3" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
+ column_index="1" row_index="3" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
<!-- filter = 'My Unresolved Issues' -->
<widget_properties id="5" widget_id="3" kee="filter" text_value="3"/>
<!-- '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]"/>
+ column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[null]"/>
<!-- filter = 'Unresolved Issues' -->
<widget_properties id="7" widget_id="4" kee="filter" text_value="1"/>
<!-- '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]"
- column_index="1" row_index="5" configured="true" created_at="[null]" updated_at="2003-03-23 01:23:45" resource_id="[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' -->
<widget_properties id="9" widget_id="5" kee="filter" text_value="1"/>
<!-- 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]"/>
+ column_index="1" row_index="1" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
<widget_properties id="1" widget_id="1" kee="palap" text_value="pulup"/>
<!-- 'False Positive Issues' - replaced by project_issue_filter w/ 'False Positive and Won't Fix Issues' filter -->
<widgets id="2" dashboard_id="1" widget_key="false_positive_reviews" name="[null]" description="[null]"
- column_index="1" row_index="2" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+ column_index="1" row_index="2" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
<!-- 'My Unresolved Issues' - replaced by project_issue_filter w/ 'My Unresolved Issues' filter -->
<widgets id="3" dashboard_id="1" widget_key="my_reviews" name="[null]" description="[null]"
- column_index="1" row_index="3" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+ column_index="1" row_index="3" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
<!-- config for 'My Unresolved Issues' - will be deleted -->
<widget_properties id="2" widget_id="3" kee="numberOfLines" text_value="20"/>
<!-- '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]"/>
+ column_index="1" row_index="4" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
<!-- '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]"
- column_index="1" row_index="5" configured="true" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
+ column_index="1" row_index="5" configured="[true]" created_at="[null]" updated_at="[null]" resource_id="[null]"/>
</dataset>
return this;
}
- public Long getKey() {
- return id;
- }
-
public WidgetDto setCreatedAt(Date datetime) {
this.createdAt = datetime;
return this;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
-import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.Collection;
public interface WidgetMapper {
- String COLUMNS = "id, dashboard_id as \"dashboardId\", widget_key as \"widgetKey\", name, description, " +
- "column_index as \"columnIndex\", row_index as \"rowIndex\", configured, created_at as \"createdAt\", " +
- "updated_at as \"updatedAt\", resource_id as \"resourceId\"";
-
@Insert("insert into widgets (dashboard_id, widget_key, name, description, column_index, " +
" row_index, configured, created_at, updated_at, resource_id)" +
" values (#{dashboardId,jdbcType=INTEGER}, #{widgetKey,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, " +
@Options(keyColumn = "id", useGeneratedKeys = true, keyProperty = "id")
void insert(WidgetDto widgetDto);
- @Select("select " + COLUMNS + " from widgets where id=#{id}")
WidgetDto selectById(long widgetId);
- @Select("select " + COLUMNS + " from widgets where dashboard_id=#{id}")
Collection<WidgetDto> selectByDashboard(long dashboardKey);
- @Select("select " + COLUMNS + " from widgets")
Collection<WidgetDto> selectAll();
@Update("UPDATE widgets SET " +
"updated_at=#{updatedAt,jdbcType=TIMESTAMP}, " +
"resource_id=#{resourceId,jdbcType=INTEGER} " +
"WHERE id=#{id}")
+ @Options(useGeneratedKeys = false)
void update(WidgetDto item);
}
<mapper namespace="org.sonar.core.dashboard.WidgetMapper">
+ <sql id="selectColumns">
+ w.id as "id",
+ w.dashboard_id as "dashboardId",
+ w.widget_key as "widgetKey",
+ w.name as "name",
+ w.description as "description",
+ w.column_index as "columnIndex",
+ w.row_index as "rowIndex",
+ w.configured as "configured",
+ w.created_at as "createdAt",
+ w.updated_at as "updatedAt",
+ w.resource_id as "resourceId"
+ </sql>
+
+ <select id="selectById" parameterType="Integer" resultType="Widget">
+ select <include refid="selectColumns"/> from widgets w where w.id=#{id}
+ </select>
+
+ <select id="selectByDashboard" parameterType="Integer" resultType="Widget">
+ select <include refid="selectColumns"/> from widgets w where w.dashboard_id=#{id}
+ </select>
+
+ <select id="selectAll" resultType="Widget">
+ select <include refid="selectColumns"/> from widgets w
+ </select>
+
</mapper>