From 63deafdb8bac4e0f907397094f4855167d3dd1e5 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Tue, 18 Jun 2013 18:54:40 +0200 Subject: SONAR-4394 Provide ability to share issue filters --- .../java/org/sonar/core/issue/db/IssueFilterDao.java | 9 +++++++++ .../java/org/sonar/core/issue/db/IssueFilterDto.java | 2 +- .../org/sonar/core/issue/db/IssueFilterFavouriteDao.java | 14 ++++++++++++-- .../sonar/core/issue/db/IssueFilterFavouriteMapper.java | 4 +++- .../java/org/sonar/core/issue/db/IssueFilterMapper.java | 2 ++ .../main/java/org/sonar/core/user/AuthorizationDao.java | 16 ++++++++++++---- .../sonar/core/issue/db/IssueFilterFavouriteMapper.xml | 4 ++++ .../org/sonar/core/issue/db/IssueFilterMapper.xml | 9 +++++++++ .../org/sonar/core/user/AuthorizationMapper.xml | 11 +++++++++++ .../java/org/sonar/core/issue/db/IssueFilterDaoTest.java | 8 ++++++++ .../sonar/core/issue/db/IssueFilterFavouriteDaoTest.java | 9 +++++++++ .../java/org/sonar/core/user/AuthorizationDaoTest.java | 10 ++++++++++ .../should_delete_by_issue_filter_id-result.xml | 9 +++++++++ .../should_return_global_permissions.xml | 13 +++++++++++++ 14 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 sonar-core/src/test/resources/org/sonar/core/issue/db/IssueFilterFavouriteDaoTest/should_delete_by_issue_filter_id-result.xml create mode 100644 sonar-core/src/test/resources/org/sonar/core/user/AuthorizationDaoTest/should_return_global_permissions.xml (limited to 'sonar-core/src') 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 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 selectByUserWithOnlyFavoriteFilters(String user); + List 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 selectGlobalPermissions(String userLogin){ + SqlSession session = mybatis.openSession(); + try { + Map 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 from issue_filter_favourites where issue_filter_id=#{issueFilterId} + + 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 @@ + + 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 @@ + + 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 @@ -81,6 +81,14 @@ public class IssueFilterDaoTest extends AbstractDaoTestCase { assertThat(issueFilterDto.getId()).isEqualTo(2L); } + @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 @@ + + + + + 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 @@ + + + + + + + + + + + + + -- cgit v1.2.3