aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core/src
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@gmail.com>2013-06-18 18:54:40 +0200
committerJulien Lancelot <julien.lancelot@gmail.com>2013-06-18 18:54:40 +0200
commit63deafdb8bac4e0f907397094f4855167d3dd1e5 (patch)
tree32e1393d880b0aadb82a95c4c73adc26731db5dd /sonar-core/src
parent076dc17e1f50c4b9c31759d4640ab24472a43469 (diff)
downloadsonarqube-63deafdb8bac4e0f907397094f4855167d3dd1e5.tar.gz
sonarqube-63deafdb8bac4e0f907397094f4855167d3dd1e5.zip
SONAR-4394 Provide ability to share issue filters
Diffstat (limited to 'sonar-core/src')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDao.java9
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDto.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteDao.java14
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteMapper.java4
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterMapper.java2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/user/AuthorizationDao.java16
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterFavouriteMapper.xml4
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterMapper.xml9
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/user/AuthorizationMapper.xml11
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterDaoTest.java8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest.java9
-rw-r--r--sonar-core/src/test/java/org/sonar/core/user/AuthorizationDaoTest.java10
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest/should_delete_by_issue_filter_id-result.xml9
-rw-r--r--sonar-core/src/test/resources/org/sonar/core/user/AuthorizationDaoTest/should_return_global_permissions.xml13
14 files changed, 112 insertions, 8 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDao.java
index d74fafd02ae..b4ffcaeb880 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDao.java
@@ -80,6 +80,15 @@ public class IssueFilterDao implements BatchComponent, ServerComponent {
}
}
+ public List<IssueFilterDto> selectSharedForUser(String user) {
+ SqlSession session = mybatis.openSession();
+ try {
+ return getMapper(session).selectSharedForUser(user);
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
public void insert(IssueFilterDto filter) {
SqlSession session = mybatis.openSession();
try {
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDto.java
index ac366e66a1f..5a831c285fa 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDto.java
@@ -33,7 +33,7 @@ public class IssueFilterDto {
private Long id;
private String name;
private String userLogin;
- private Boolean shared;
+ private boolean shared;
private String description;
private String data;
private Date createdAt;
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteDao.java
index 2f692c1b967..17e2b17b1de 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteDao.java
@@ -64,10 +64,20 @@ public class IssueFilterFavouriteDao implements BatchComponent, ServerComponent
}
}
- public void delete(Long id) {
+ public void delete(Long issueFilterFavouriteId) {
SqlSession session = mybatis.openSession();
try {
- getMapper(session).delete(id);
+ getMapper(session).delete(issueFilterFavouriteId);
+ session.commit();
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ public void deleteByIssueFilterId(Long issueFilterId) {
+ SqlSession session = mybatis.openSession();
+ try {
+ getMapper(session).deleteByIssueFilterId(issueFilterId);
session.commit();
} finally {
MyBatis.closeQuietly(session);
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteMapper.java
index 03986f82118..d11fc9d1ca1 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteMapper.java
@@ -36,5 +36,7 @@ public interface IssueFilterFavouriteMapper {
void insert(IssueFilterFavouriteDto filterFavourite);
- void delete(Long id);
+ void delete(Long issueFilterFavouriteId);
+
+ void deleteByIssueFilterId(Long issueFilterId);
}
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterMapper.java
index f07316f07a1..53cf2b936eb 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterMapper.java
@@ -41,6 +41,8 @@ public interface IssueFilterMapper {
List<IssueFilterDto> selectByUserWithOnlyFavoriteFilters(String user);
+ List<IssueFilterDto> selectSharedForUser(String user);
+
void insert(IssueFilterDto filter);
void update(IssueFilterDto filter);
diff --git a/sonar-core/src/main/java/org/sonar/core/user/AuthorizationDao.java b/sonar-core/src/main/java/org/sonar/core/user/AuthorizationDao.java
index 90f0fcefb69..7a826417df0 100644
--- a/sonar-core/src/main/java/org/sonar/core/user/AuthorizationDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/user/AuthorizationDao.java
@@ -27,10 +27,7 @@ import org.sonar.core.persistence.MyBatis;
import javax.annotation.Nullable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import static com.google.common.collect.Maps.newHashMap;
@@ -92,4 +89,15 @@ public class AuthorizationDao implements ServerComponent {
return session.selectList(sql, params);
}
+
+ public List<String> selectGlobalPermissions(String userLogin){
+ SqlSession session = mybatis.openSession();
+ try {
+ Map<String, Object> params = newHashMap();
+ params.put("userLogin", userLogin);
+ return session.selectList("selectGlobalPermissions", params);
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
}
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterFavouriteMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterFavouriteMapper.xml
index 3c8d2db4718..80c36ec8c09 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterFavouriteMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterFavouriteMapper.xml
@@ -46,4 +46,8 @@
delete from issue_filter_favourites where id=#{id}
</delete>
+ <delete id="deleteByIssueFilterId" parameterType="int">
+ delete from issue_filter_favourites where issue_filter_id=#{issueFilterId}
+ </delete>
+
</mapper>
diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterMapper.xml
index 2d62e89af3d..a31b00273c5 100644
--- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueFilterMapper.xml
@@ -52,6 +52,15 @@
</where>
</select>
+ <select id="selectSharedForUser" parameterType="String" resultType="IssueFilter">
+ select <include refid="issueFilterColumns"/>
+ from issue_filters filters
+ <where>
+ filters.shared=${_true}
+ and filters.user_login&lt;&gt;#{user}
+ </where>
+ </select>
+
<insert id="insert" parameterType="IssueFilter" useGeneratedKeys="true" keyProperty="id">
INSERT INTO issue_filters (name, user_login, shared, description, data, created_at, updated_at)
VALUES (#{name}, #{userLogin}, #{shared}, #{description}, #{data}, #{createdAt}, #{updatedAt})
diff --git a/sonar-core/src/main/resources/org/sonar/core/user/AuthorizationMapper.xml b/sonar-core/src/main/resources/org/sonar/core/user/AuthorizationMapper.xml
index 88677e1dd94..c872b7274ac 100644
--- a/sonar-core/src/main/resources/org/sonar/core/user/AuthorizationMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/user/AuthorizationMapper.xml
@@ -67,4 +67,15 @@
</choose>
</sql>
+ <select id="selectGlobalPermissions" parameterType="map" resultType="String">
+ SELECT gr.role
+ FROM group_roles gr
+ inner join groups_users gu on gu.group_id=gr.id
+ inner join users u on u.id=gu.user_id
+ <where>
+ u.login=#{userLogin}
+ and gr.resource_id is null
+ </where>
+ </select>
+
</mapper>
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterDaoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterDaoTest.java
index 514a7b29d7c..dd832ecf550 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterDaoTest.java
@@ -82,6 +82,14 @@ public class IssueFilterDaoTest extends AbstractDaoTestCase {
}
@Test
+ public void should_select_shared() {
+ setupData("shared");
+
+ assertThat(dao.selectSharedForUser("michael")).hasSize(1);
+ assertThat(dao.selectSharedForUser("stephane")).isEmpty();
+ }
+
+ @Test
public void should_insert() {
setupData("shared");
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest.java
index 4cdaa9de69e..c41e1ab52a9 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest.java
@@ -83,4 +83,13 @@ public class IssueFilterFavouriteDaoTest extends AbstractDaoTestCase {
checkTables("should_delete", new String[]{"created_at"}, "issue_filter_favourites");
}
+ @Test
+ public void should_delete_by_issue_filter_id() {
+ setupData("shared");
+
+ dao.deleteByIssueFilterId(10l);
+
+ checkTables("should_delete_by_issue_filter_id", new String[]{"created_at"}, "issue_filter_favourites");
+ }
+
}
diff --git a/sonar-core/src/test/java/org/sonar/core/user/AuthorizationDaoTest.java b/sonar-core/src/test/java/org/sonar/core/user/AuthorizationDaoTest.java
index 42746971ac1..df198a60280 100644
--- a/sonar-core/src/test/java/org/sonar/core/user/AuthorizationDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/user/AuthorizationDaoTest.java
@@ -150,4 +150,14 @@ public class AuthorizationDaoTest extends AbstractDaoTestCase {
rootProjectIds = authorization.selectAuthorizedRootProjectsIds(null, "admin");
assertThat(rootProjectIds).isEmpty();
}
+
+ @Test
+ public void should_return_global_permissions() {
+ setupData("should_return_global_permissions");
+
+ AuthorizationDao authorization = new AuthorizationDao(getMyBatis());
+ assertThat(authorization.selectGlobalPermissions("john")).containsOnly("user", "admin");
+ assertThat(authorization.selectGlobalPermissions("arthur")).containsOnly("user");
+ assertThat(authorization.selectGlobalPermissions("none")).isEmpty();
+ }
}
diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest/should_delete_by_issue_filter_id-result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest/should_delete_by_issue_filter_id-result.xml
new file mode 100644
index 00000000000..e1df29f80cb
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest/should_delete_by_issue_filter_id-result.xml
@@ -0,0 +1,9 @@
+<dataset>
+
+ <issue_filter_favourites
+ id="2"
+ user_login="stephane"
+ issue_filter_id="11"
+ created_at="2013-06-10"/>
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/user/AuthorizationDaoTest/should_return_global_permissions.xml b/sonar-core/src/test/resources/org/sonar/core/user/AuthorizationDaoTest/should_return_global_permissions.xml
new file mode 100644
index 00000000000..863d395048f
--- /dev/null
+++ b/sonar-core/src/test/resources/org/sonar/core/user/AuthorizationDaoTest/should_return_global_permissions.xml
@@ -0,0 +1,13 @@
+<dataset>
+
+ <users id="1" login="john" />
+ <users id="2" login="arthur" />
+
+ <groups_users user_id="1" group_id="200"/>
+ <groups_users user_id="1" group_id="201"/>
+ <groups_users user_id="2" group_id="200"/>
+
+ <group_roles id="200" group_id="200" resource_id="[null]" role="user"/>
+ <group_roles id="201" group_id="200" resource_id="[null]" role="admin"/>
+
+</dataset>