aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-04-26 17:02:33 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2013-04-26 17:03:07 +0200
commitf293e4b9558877a35a893ea8f0f4dcc037645396 (patch)
tree8b84cfa16353fd2a5f49ec21a5be3e0f74e447d5 /sonar-core
parentcfa28e900d9b52cfca276e03c07e1e3b75c853cf (diff)
downloadsonarqube-f293e4b9558877a35a893ea8f0f4dcc037645396.tar.gz
sonarqube-f293e4b9558877a35a893ea8f0f4dcc037645396.zip
SONAR-3755 move db stuff to org.sonar.core.issue.db
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDao.java (renamed from sonar-core/src/main/java/org/sonar/core/issue/IssueChangeDao.java)2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDto.java (renamed from sonar-core/src/main/java/org/sonar/core/issue/IssueChangeDto.java)2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeMapper.java (renamed from sonar-core/src/main/java/org/sonar/core/issue/IssueChangeMapper.java)2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java (renamed from sonar-core/src/main/java/org/sonar/core/issue/IssueDao.java)18
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java (renamed from sonar-core/src/main/java/org/sonar/core/issue/IssueDto.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/workflow/UnsetClosedAt.java31
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java8
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueChangeMapper.xml (renamed from sonar-core/src/main/resources/org/sonar/core/issue/IssueChangeMapper.xml)2
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml (renamed from sonar-core/src/main/resources/org/sonar/core/issue/IssueMapper.xml)2
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/db/IssueChangeDaoTest.java (renamed from sonar-core/src/test/java/org/sonar/core/issue/IssueChangeDaoTest.java)4
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java (renamed from sonar-core/src/test/java/org/sonar/core/issue/IssueDaoTest.java)4
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java (renamed from sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java)4
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/workflow/UnsetClosedAtTest.java38
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/insert-result.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/insert-result.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/insert.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/insert.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/shared.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/shared.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/insert-result.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/insert-result.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/insert.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/insert.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/shared.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_all.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_component_root.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_date_creation.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_id.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_id.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_ids.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_key.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_query.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_rules.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_ids_and_components_ids.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_issue_ids_and_components_ids.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_open_issues.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_returned_sorted_result.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/update-result.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/update-result.xml)0
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/update.xml (renamed from sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/update.xml)0
34 files changed, 100 insertions, 24 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueChangeDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDao.java
index 1fb26da9d73..44b90236ea9 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/IssueChangeDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDao.java
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.core.issue;
+package org.sonar.core.issue.db;
import org.apache.ibatis.session.SqlSession;
import org.sonar.api.BatchComponent;
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueChangeDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDto.java
index 87eb31ca6d2..db1734c00e3 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/IssueChangeDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDto.java
@@ -17,7 +17,7 @@
* 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.core.issue;
+package org.sonar.core.issue.db;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueChangeMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeMapper.java
index a88ef8da9b3..988c6a41924 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/IssueChangeMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeMapper.java
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.core.issue;
+package org.sonar.core.issue.db;
import java.util.Collection;
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java
index f134f9abaa3..75f055a176d 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/IssueDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.core.issue;
+package org.sonar.core.issue.db;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
@@ -55,7 +55,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
SqlSession session = mybatis.openSession();
try {
// TODO bulk insert
- session.insert("org.sonar.core.issue.IssueMapper.insert", issueDto);
+ session.insert("org.sonar.core.issue.db.IssueMapper.insert", issueDto);
session.commit();
} finally {
MyBatis.closeQuietly(session);
@@ -67,7 +67,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
try {
// TODO bulk update
for (IssueDto issue : issues) {
- session.update("org.sonar.core.issue.IssueMapper.update", issue);
+ session.update("org.sonar.core.issue.db.IssueMapper.update", issue);
}
session.commit();
return this;
@@ -80,7 +80,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
public IssueDto selectById(long id) {
SqlSession session = mybatis.openSession();
try {
- return session.selectOne("org.sonar.core.issue.IssueMapper.selectById", id);
+ return session.selectOne("org.sonar.core.issue.db.IssueMapper.selectById", id);
} finally {
MyBatis.closeQuietly(session);
}
@@ -89,7 +89,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
public IssueDto selectByKey(String key) {
SqlSession session = mybatis.openSession();
try {
- return session.selectOne("org.sonar.core.issue.IssueMapper.selectByKey", key);
+ return session.selectOne("org.sonar.core.issue.db.IssueMapper.selectByKey", key);
} finally {
MyBatis.closeQuietly(session);
}
@@ -99,7 +99,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
public List<IssueDto> selectOpenIssues(Integer componentId) {
SqlSession session = mybatis.openSession();
try {
- return session.selectList("org.sonar.core.issue.IssueMapper.selectOpenIssues", componentId);
+ return session.selectList("org.sonar.core.issue.db.IssueMapper.selectOpenIssues", componentId);
} finally {
MyBatis.closeQuietly(session);
}
@@ -108,7 +108,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
public List<IssueDto> select(IssueQuery query) {
SqlSession session = mybatis.openSession();
try {
- return session.selectList("org.sonar.core.issue.IssueMapper.select", query);
+ return session.selectList("org.sonar.core.issue.db.IssueMapper.select", query);
} finally {
MyBatis.closeQuietly(session);
}
@@ -129,7 +129,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
*/
public List<IssueDto> selectIssueIdsAndComponentsId(IssueQuery query, SqlSession session) {
// TODO support ordering
- return session.selectList("org.sonar.core.issue.IssueMapper.selectIssueIdsAndComponentsId", query);
+ return session.selectList("org.sonar.core.issue.db.IssueMapper.selectIssueIdsAndComponentsId", query);
}
Collection<IssueDto> selectByIds(Collection<Long> ids) {
@@ -147,7 +147,7 @@ public class IssueDao implements BatchComponent, ServerComponent {
}
List <List<Long>> idsPartition = Lists.partition(newArrayList(ids), 1000);
Map<String, List <List<Long>>> params = ImmutableMap.of("ids", idsPartition);
- return session.selectList("org.sonar.core.issue.IssueMapper.selectByIds", params);
+ return session.selectList("org.sonar.core.issue.db.IssueMapper.selectByIds", params);
}
private Map<String, String> getAvalailableSorts() {
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java
index 30f9797b367..4c5385c390b 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/IssueDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java
@@ -17,7 +17,7 @@
* 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.core.issue;
+package org.sonar.core.issue.db;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
@@ -25,6 +25,7 @@ import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.KeyValueFormat;
+import org.sonar.core.issue.DefaultIssue;
import javax.annotation.Nullable;
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java b/sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java
index 0d3ee8c8c7c..cd202c6af7d 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java
@@ -63,7 +63,7 @@ public class IssueWorkflow implements BatchComponent, ServerComponent, Startable
.build())
.transition(Transition.builder(DefaultTransitions.REOPEN)
.from(Issue.STATUS_CLOSED).to(Issue.STATUS_REOPENED)
- .functions(new SetResolution(Issue.RESOLUTION_OPEN))// TODO new UnsetClosedAt
+ .functions(new SetResolution(Issue.RESOLUTION_OPEN), new UnsetClosedAt())
.build())
.transition(Transition.builder(DefaultTransitions.FALSE_POSITIVE)
.from(Issue.STATUS_OPEN).to(Issue.STATUS_RESOLVED)
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/workflow/UnsetClosedAt.java b/sonar-core/src/main/java/org/sonar/core/issue/workflow/UnsetClosedAt.java
new file mode 100644
index 00000000000..87540a123c4
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/issue/workflow/UnsetClosedAt.java
@@ -0,0 +1,31 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 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.core.issue.workflow;
+
+import org.sonar.core.issue.DefaultIssue;
+
+class UnsetClosedAt implements Function {
+
+ @Override
+ public void execute(DefaultIssue issue) {
+ issue.setClosedAt(null);
+ }
+
+}
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java b/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java
index cff914ceede..8c97b86b38c 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/DaoUtils.java
@@ -24,7 +24,7 @@ import org.sonar.core.dashboard.ActiveDashboardDao;
import org.sonar.core.dashboard.DashboardDao;
import org.sonar.core.duplication.DuplicationDao;
import org.sonar.core.graph.jdbc.GraphDao;
-import org.sonar.core.issue.IssueDao;
+import org.sonar.core.issue.db.IssueDao;
import org.sonar.core.measure.MeasureFilterDao;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.purge.PurgeDao;
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
index 40276d0706d..e89aa600365 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
@@ -44,9 +44,9 @@ import org.sonar.core.duplication.DuplicationMapper;
import org.sonar.core.duplication.DuplicationUnitDto;
import org.sonar.core.graph.jdbc.GraphDto;
import org.sonar.core.graph.jdbc.GraphDtoMapper;
-import org.sonar.core.issue.IssueChangeDto;
-import org.sonar.core.issue.IssueChangeMapper;
-import org.sonar.core.issue.IssueDto;
+import org.sonar.core.issue.db.IssueChangeDto;
+import org.sonar.core.issue.db.IssueChangeMapper;
+import org.sonar.core.issue.db.IssueDto;
import org.sonar.core.measure.MeasureFilterDto;
import org.sonar.core.measure.MeasureFilterMapper;
import org.sonar.core.properties.PropertiesMapper;
@@ -133,7 +133,7 @@ public class MyBatis implements BatchComponent, ServerComponent {
SnapshotSourceMapper.class
};
loadMappers(conf, mappers);
- loadMapper(conf, "org.sonar.core.issue.IssueMapper");
+ loadMapper(conf, "org.sonar.core.issue.db.IssueMapper");
loadMapper(conf, "org.sonar.core.user.AuthorizationMapper");
configureLogback(mappers);
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/IssueChangeMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueChangeMapper.xml
index 7d883046bbd..9ed85877273 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/IssueChangeMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueChangeMapper.xml
@@ -22,7 +22,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mappei.dtd">
-<mapper namespace="org.sonar.core.issue.IssueChangeMapper">
+<mapper namespace="org.sonar.core.issue.db.IssueChangeMapper">
<sql id="issueChangeColumns">
i.id,
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/IssueMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
index 15e299742a3..73c8013715e 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/IssueMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
@@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mappei.dtd">
-<mapper namespace="org.sonar.core.issue.IssueMapper">
+<mapper namespace="org.sonar.core.issue.db.IssueMapper">
<sql id="issueColumns">
i.id,
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/IssueChangeDaoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueChangeDaoTest.java
index a46d65cc225..437ec98973a 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/IssueChangeDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueChangeDaoTest.java
@@ -17,10 +17,12 @@
* 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.core.issue;
+package org.sonar.core.issue.db;
import org.junit.Before;
import org.junit.Test;
+import org.sonar.core.issue.db.IssueChangeDao;
+import org.sonar.core.issue.db.IssueChangeDto;
import org.sonar.core.persistence.AbstractDaoTestCase;
import java.util.Collection;
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/IssueDaoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java
index 37dfa625f45..965a8195d1e 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/IssueDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java
@@ -18,13 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.core.issue;
+package org.sonar.core.issue.db;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.issue.IssueQuery;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.DateUtils;
+import org.sonar.core.issue.db.IssueDao;
+import org.sonar.core.issue.db.IssueDto;
import org.sonar.core.persistence.AbstractDaoTestCase;
import java.util.Collection;
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java
index 8adc3718c8e..8600e27ba99 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/IssueDtoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java
@@ -17,13 +17,15 @@
* 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.core.issue;
+package org.sonar.core.issue.db;
import org.apache.commons.lang.time.DateUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.issue.Issue;
+import org.sonar.core.issue.DefaultIssue;
+import org.sonar.core.issue.db.IssueDto;
import java.util.Date;
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/workflow/UnsetClosedAtTest.java b/sonar-core/src/test/java/org/sonar/core/issue/workflow/UnsetClosedAtTest.java
new file mode 100644
index 00000000000..e74f78b9a1d
--- /dev/null
+++ b/sonar-core/src/test/java/org/sonar/core/issue/workflow/UnsetClosedAtTest.java
@@ -0,0 +1,38 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 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.core.issue.workflow;
+
+import org.junit.Test;
+import org.sonar.core.issue.DefaultIssue;
+
+import java.util.Date;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class UnsetClosedAtTest {
+ @Test
+ public void should_remove_date() throws Exception {
+ UnsetClosedAt function = new UnsetClosedAt();
+ DefaultIssue issue = new DefaultIssue().setCreatedAt(new Date()).setCreatedAt(new Date());
+ function.execute(issue);
+ assertThat(issue.closedAt()).isNull();
+ assertThat(issue.createdAt()).isNotNull();
+ }
+}
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/insert-result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/insert-result.xml
index cf0a89b4610..cf0a89b4610 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/insert-result.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/insert-result.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/insert.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/insert.xml
index 871dedcb5e9..871dedcb5e9 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/insert.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/insert.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/shared.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/shared.xml
index e3e9559f8ca..e3e9559f8ca 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueChangeDaoTest/shared.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueChangeDaoTest/shared.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/insert-result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/insert-result.xml
index 5868688a27b..5868688a27b 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/insert-result.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/insert-result.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/insert.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/insert.xml
index 871dedcb5e9..871dedcb5e9 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/insert.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/insert.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/shared.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml
index 6ec982ab3de..6ec982ab3de 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/shared.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/shared.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_all.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml
index 4a27dd7013c..4a27dd7013c 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_all.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_component_root.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml
index e9308bf33ae..e9308bf33ae 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_component_root.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_date_creation.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml
index e4d6cac1cd6..e4d6cac1cd6 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_date_creation.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_id.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_id.xml
index 8c738fe5fc4..8c738fe5fc4 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_id.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_id.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_ids.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml
index 4a27dd7013c..4a27dd7013c 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_ids.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_key.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml
index 11fe9b857b8..11fe9b857b8 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_key.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_query.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml
index 11fe9b857b8..11fe9b857b8 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_query.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_rules.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml
index a1223eafc6e..a1223eafc6e 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_by_rules.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_issue_ids_and_components_ids.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_ids_and_components_ids.xml
index 4a27dd7013c..4a27dd7013c 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_issue_ids_and_components_ids.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_ids_and_components_ids.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_open_issues.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml
index dbf79e29804..dbf79e29804 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_open_issues.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_returned_sorted_result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result.xml
index e77de4125c9..e77de4125c9 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/should_select_returned_sorted_result.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/update-result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/update-result.xml
index 0574a4c9d88..0574a4c9d88 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/update-result.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/update-result.xml
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/update.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/update.xml
index d701d8d68c3..d701d8d68c3 100644
--- a/sonar-core/src/test/resources/org/sonar/core/issue/IssueDaoTest/update.xml
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/update.xml