import org.apache.ibatis.session.SqlSession;
import org.sonar.core.persistence.MyBatis;
+import java.util.Date;
import java.util.List;
public class ResourceDao {
try {
for (ResourceDto resource : resources) {
if (resource.getId() == null) {
+ resource.setDate(new Date());
mapper.insert(resource);
} else {
mapper.update(resource);
*/
package org.sonar.core.resource;
+import java.util.Date;
+
public final class ResourceDto {
private Long id;
private Long copyResourceId;
private Long personId;
private Long profileId;
+ private Date date;
public Long getId() {
return id;
this.profileId = profileId;
return this;
}
+
+ public Date getDate() {
+ return date;// NOSONAR May expose internal representation by returning reference to mutable object
+ }
+
+ public ResourceDto setDate(Date date) {
+ this.date = date;// NOSONAR May expose internal representation by incorporating reference to mutable object
+ return this;
+ }
}
<result property="copyResourceId" column="copy_resource_id"/>
<result property="personId" column="person_id"/>
<result property="profileId" column="profile_id"/>
+ <result property="date" column="created_at"/>
</resultMap>
<select id="selectResources" parameterType="map" resultMap="resourceResultMap">
<insert id="insert" parameterType="Resource" useGeneratedKeys="true" keyProperty="id">
insert into projects
- (name, long_name, description, scope, qualifier, kee, language, root_id, copy_resource_id, person_id, profile_id, enabled)
+ (name, long_name, description, scope, qualifier, kee, language, root_id, copy_resource_id, person_id, profile_id, enabled, created_at)
values (
#{name}, #{longName}, #{description}, #{scope}, #{qualifier},
#{key}, #{language}, #{rootId}, #{copyResourceId},
- #{personId}, #{profileId}, #{enabled}
+ #{personId}, #{profileId}, #{enabled}, #{date}
)
</insert>
select projects_seq.NEXTVAL from DUAL
</selectKey>
insert into projects
- (id, name, long_name, description, scope, qualifier, kee, language, root_id, copy_resource_id, person_id, profile_id, enabled)
+ (id, name, long_name, description, scope, qualifier, kee, language, root_id, copy_resource_id, person_id, profile_id, enabled, created_at)
values (
#{id}, #{name}, #{longName}, #{description}, #{scope}, #{qualifier},
#{key}, #{language}, #{rootId}, #{copyResourceId},
- #{personId}, #{profileId}, #{enabled}
+ #{personId}, #{profileId}, #{enabled}, #{date}
)
</insert>
public void getResources_filter_by_qualifier() {
setupData("fixture");
- List<ResourceDto> resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[]{"TRK", "BRC"}));
+ List<ResourceDto> resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[] {"TRK", "BRC"}));
assertThat(resources).onProperty("qualifier").containsOnly("TRK", "BRC");
- resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[]{"XXX"}));
+ resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[] {"XXX"}));
assertThat(resources).isEmpty();
- resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[]{}));
+ resources = dao.getResources(ResourceQuery.create().setQualifiers(new String[] {}));
assertThat(resources).hasSize(4);
}
public void getResourceIds_filter_by_qualifier() {
setupData("fixture");
- List<Long> ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[]{"TRK", "BRC"}));
+ List<Long> ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"TRK", "BRC"}));
assertThat(ids).containsOnly(1L, 2L);
- ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[]{"XXX"}));
+ ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"XXX"}));
assertThat(ids).isEmpty();
- ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[]{}));
+ ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {}));
assertThat(ids).hasSize(4);
}
setupData("insert");
ResourceDto file1 = new ResourceDto()
- .setKey("org.struts:struts:org.struts.Action").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
- .setLanguage("java").setName("Action").setLongName("org.struts.Action");
+ .setKey("org.struts:struts:org.struts.Action").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
+ .setLanguage("java").setName("Action").setLongName("org.struts.Action");
ResourceDto file2 = new ResourceDto()
- .setKey("org.struts:struts:org.struts.Filter").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
- .setLanguage("java").setName("Filter").setLongName("org.struts.Filter");
+ .setKey("org.struts:struts:org.struts.Filter").setScope(Scopes.FILE).setQualifier(Qualifiers.FILE)
+ .setLanguage("java").setName("Filter").setLongName("org.struts.Filter");
dao.insertOrUpdate(file1, file2);
assertThat(file1.getId()).isNotNull();
assertThat(file2.getId()).isNotNull();
- checkTables("insert", "projects");
+ checkTables("insert", new String[] {"created_at"}, "projects");
+
+ // SONAR-3636 : created_at must be fed when inserting a new entry in the 'projects' table
+ ResourceDto fileLoadedFromDB = dao.getResource(file1.getId());
+ assertThat(fileLoadedFromDB.getDate()).isNotNull();
}
}
-