Commit af60b9d25d73c459e8d93727b5890947b5371796
merge updates from prof
Showing
12 changed files
with
49 additions
and
28 deletions
Show diff stats
.gitignore
pom.xml
1 | -<project xmlns="http://maven.apache.org/POM/4.0.0" | |
2 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
1 | +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
2 | + xmlns="http://maven.apache.org/POM/4.0.0" | |
3 | 3 | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 |
4 | 4 | http://maven.apache.org/maven-v4_0_0.xsd"> |
5 | 5 | <modelVersion>4.0.0</modelVersion> |
... | ... | @@ -11,7 +11,7 @@ |
11 | 11 | <parent> |
12 | 12 | <groupId>org.springframework.boot</groupId> |
13 | 13 | <artifactId>spring-boot-starter-parent</artifactId> |
14 | - <version>1.3.6.RELEASE</version> | |
14 | + <version>1.4.0.RELEASE</version> | |
15 | 15 | </parent> |
16 | 16 | |
17 | 17 | <dependencies> |
... | ... | @@ -22,6 +22,7 @@ |
22 | 22 | <dependency> |
23 | 23 | <groupId>com.h2database</groupId> |
24 | 24 | <artifactId>h2</artifactId> |
25 | + <scope>runtime</scope> | |
25 | 26 | </dependency> |
26 | 27 | <dependency> |
27 | 28 | <groupId>org.springframework.boot</groupId> | ... | ... |
src/main/java/fr/plil/sio/persistence/jdbc/JdbcApplication.java renamed to src/main/java/fr/plil/sio/persistence/JdbcApplication.java
src/main/java/fr/plil/sio/persistence/api/Group.java
... | ... | @@ -2,9 +2,11 @@ package fr.plil.sio.persistence.api; |
2 | 2 | |
3 | 3 | import java.util.LinkedList; |
4 | 4 | import java.util.List; |
5 | -import java.util.Set; | |
6 | -import java.util.TreeSet; | |
7 | 5 | |
6 | +/** | |
7 | + * A group is unique by its name (no two groups with the same name or the same ID can exist in the database). | |
8 | + * A group contains a list of rights unique by their ID (no two groups with the same ID can exist in the database). | |
9 | + */ | |
8 | 10 | public class Group { |
9 | 11 | |
10 | 12 | private Long id; |
... | ... | @@ -14,7 +16,7 @@ public class Group { |
14 | 16 | /** |
15 | 17 | * Users in the group. |
16 | 18 | */ |
17 | - private Set<User> users = new TreeSet<>(); | |
19 | + private List<User> users = new LinkedList<>(); | |
18 | 20 | |
19 | 21 | /** |
20 | 22 | * List of rights. The list CANNOT contains duplicate rights. |
... | ... | @@ -45,11 +47,11 @@ public class Group { |
45 | 47 | this.name = name; |
46 | 48 | } |
47 | 49 | |
48 | - public Set<User> getUsers() { | |
50 | + public List<User> getUsers() { | |
49 | 51 | return users; |
50 | 52 | } |
51 | 53 | |
52 | - public void setUsers(Set<User> users) { | |
54 | + public void setUsers(List<User> users) { | |
53 | 55 | this.users = users; |
54 | 56 | } |
55 | 57 | } | ... | ... |
src/main/java/fr/plil/sio/persistence/api/GroupService.java
... | ... | @@ -4,7 +4,7 @@ public interface GroupService { |
4 | 4 | |
5 | 5 | /** |
6 | 6 | * Create a group with a specific name in the database. |
7 | - * There is no two groups with the same name in the database. | |
7 | + * There is no two groups with the same name or the same ID in the database. | |
8 | 8 | * |
9 | 9 | * @param name the name of the group |
10 | 10 | * @return an instance of the group |
... | ... | @@ -23,7 +23,8 @@ public interface GroupService { |
23 | 23 | boolean delete(String name); |
24 | 24 | |
25 | 25 | /** |
26 | - * Find a group in the database based on its name. | |
26 | + * Find a group in the database based on its name. Only references at one level are loaded (i.e. the users | |
27 | + * who belong to the group). | |
27 | 28 | * |
28 | 29 | * @param name the name of the group to search for. |
29 | 30 | * @return an instance of the group if found, else null. |
... | ... | @@ -32,7 +33,7 @@ public interface GroupService { |
32 | 33 | Group findByName(String name); |
33 | 34 | |
34 | 35 | /** |
35 | - * Add a right in the group. Right is inserted at the end of rights list of the group. | |
36 | + * Add a right in the group. | |
36 | 37 | * |
37 | 38 | * @param groupName the name of the group. |
38 | 39 | * @param right the right to add | ... | ... |
src/main/java/fr/plil/sio/persistence/api/Right.java
1 | 1 | package fr.plil.sio.persistence.api; |
2 | 2 | |
3 | -import java.util.HashSet; | |
4 | -import java.util.Set; | |
5 | - | |
3 | +import java.util.LinkedList; | |
4 | +import java.util.List; | |
5 | + | |
6 | +/** | |
7 | + * A right is unique by itd ID, i.e. it can exist two rights with the same name in the database. | |
8 | + * A right may have a parent, null else. | |
9 | + * A right can have zero, one or more siblings. | |
10 | + */ | |
6 | 11 | public class Right { |
7 | 12 | |
8 | 13 | private Long id; |
9 | 14 | |
10 | 15 | private String name; |
11 | 16 | |
12 | - /// the parent group | |
17 | + /// the parent right | |
13 | 18 | private Right parent; |
14 | 19 | |
15 | - /// the sibling group(s), eventually empty | |
16 | - private Set<Right> siblings = new HashSet<>(); | |
20 | + /// the sibling right(s), eventually empty | |
21 | + private List<Right> siblings = new LinkedList<>(); | |
17 | 22 | |
18 | - public Set<Right> getSiblings() { | |
23 | + public List<Right> getSiblings() { | |
19 | 24 | return siblings; |
20 | 25 | } |
21 | 26 | |
22 | - public void setSiblings(Set<Right> siblings) { | |
27 | + public void setSiblings(List<Right> siblings) { | |
23 | 28 | this.siblings = siblings; |
24 | 29 | } |
25 | 30 | ... | ... |
src/main/java/fr/plil/sio/persistence/api/RightService.java
... | ... | @@ -16,6 +16,8 @@ public interface RightService { |
16 | 16 | /** |
17 | 17 | * Create a sibling right attached to a parent right with a specific name in the database. |
18 | 18 | * It is possible that two rights has the same name. |
19 | + * Return only the right with the parent in the field parent. | |
20 | + * | |
19 | 21 | * |
20 | 22 | * @param name the name of the right |
21 | 23 | * @param parent the parent right |
... | ... | @@ -34,6 +36,7 @@ public interface RightService { |
34 | 36 | |
35 | 37 | /** |
36 | 38 | * Find a list of rights in the database based on their name. |
39 | + * All dependencies at one-level are loaded, i.e for each right returned the parent and sibling are present. | |
37 | 40 | * |
38 | 41 | * @param name the name of the rights to search for. |
39 | 42 | * @return A list of rights, eventually empty. |
... | ... | @@ -43,6 +46,7 @@ public interface RightService { |
43 | 46 | |
44 | 47 | /** |
45 | 48 | * Find a right in the database based on its id. |
49 | + * All dependencies at one-level are loaded, i.e the parent and sibling are present. | |
46 | 50 | * |
47 | 51 | * @param id the name of the right to search for. |
48 | 52 | * @return an instance of the right if found, else null. | ... | ... |
src/main/java/fr/plil/sio/persistence/api/User.java
src/test/java/fr/plil/sio/persistence/jdbc/GroupServiceTest.java
... | ... | @@ -5,13 +5,13 @@ import org.junit.Before; |
5 | 5 | import org.junit.Test; |
6 | 6 | import org.junit.runner.RunWith; |
7 | 7 | import org.springframework.beans.factory.annotation.Autowired; |
8 | -import org.springframework.boot.test.SpringApplicationConfiguration; | |
8 | +import org.springframework.boot.test.context.SpringBootTest; | |
9 | 9 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
10 | 10 | |
11 | 11 | import static org.junit.Assert.*; |
12 | 12 | |
13 | 13 | @RunWith(SpringJUnit4ClassRunner.class) |
14 | -@SpringApplicationConfiguration(classes = JdbcApplication.class) | |
14 | +@SpringBootTest | |
15 | 15 | public class GroupServiceTest extends AbstractServiceSupport { |
16 | 16 | |
17 | 17 | @Autowired | ... | ... |
src/test/java/fr/plil/sio/persistence/jdbc/RightServiceTest.java
... | ... | @@ -5,13 +5,13 @@ import fr.plil.sio.persistence.api.RightService; |
5 | 5 | import org.junit.Test; |
6 | 6 | import org.junit.runner.RunWith; |
7 | 7 | import org.springframework.beans.factory.annotation.Autowired; |
8 | -import org.springframework.boot.test.SpringApplicationConfiguration; | |
8 | +import org.springframework.boot.test.context.SpringBootTest; | |
9 | 9 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
10 | 10 | |
11 | 11 | import static org.junit.Assert.*; |
12 | 12 | |
13 | 13 | @RunWith(SpringJUnit4ClassRunner.class) |
14 | -@SpringApplicationConfiguration(classes = JdbcApplication.class) | |
14 | +@SpringBootTest | |
15 | 15 | public class RightServiceTest extends AbstractServiceSupport { |
16 | 16 | |
17 | 17 | @Autowired | ... | ... |
src/test/java/fr/plil/sio/persistence/jdbc/UserServiceTest.java
... | ... | @@ -5,13 +5,13 @@ import org.junit.Before; |
5 | 5 | import org.junit.Test; |
6 | 6 | import org.junit.runner.RunWith; |
7 | 7 | import org.springframework.beans.factory.annotation.Autowired; |
8 | -import org.springframework.boot.test.SpringApplicationConfiguration; | |
8 | +import org.springframework.boot.test.context.SpringBootTest; | |
9 | 9 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
10 | 10 | |
11 | 11 | import static org.junit.Assert.*; |
12 | 12 | |
13 | 13 | @RunWith(SpringJUnit4ClassRunner.class) |
14 | -@SpringApplicationConfiguration(classes = JdbcApplication.class) | |
14 | +@SpringBootTest | |
15 | 15 | public class UserServiceTest extends AbstractServiceSupport { |
16 | 16 | |
17 | 17 | @Autowired |
... | ... | @@ -87,16 +87,19 @@ public class UserServiceTest extends AbstractServiceSupport { |
87 | 87 | assertNull(userService.findByName(null)); |
88 | 88 | } |
89 | 89 | |
90 | + @Test | |
90 | 91 | public void testIsUserHasExactRight() { |
91 | 92 | Right right = rightService.findByName("parent").get(0); |
92 | 93 | assertTrue(userService.isUserHasRight("user", right)); |
93 | 94 | } |
94 | 95 | |
96 | + @Test | |
95 | 97 | public void testIsUserHasRightByParents() { |
96 | 98 | Right right = rightService.findByName("sibling").get(0); |
97 | 99 | assertTrue(userService.isUserHasRight("user", right)); |
98 | 100 | } |
99 | 101 | |
102 | + @Test | |
100 | 103 | public void testIsUserHasNotTheExactRight() { |
101 | 104 | Right right = rightService.findByName("not-for-me").get(0); |
102 | 105 | assertFalse(userService.isUserHasRight("user", right)); | ... | ... |
src/test/resources/application.properties
1 | 1 | logging.level.org.springframework=INFO |
2 | 2 | logging.level.org.hibernate.SQL=DEBUG |
3 | 3 | logging.level.org.hibernate=INFO |
4 | -spring.datasource.url=jdbc:h2:mem:persistence;TRACE_LEVEL_FILE=4 | |
5 | 4 | \ No newline at end of file |
5 | +spring.datasource.url=jdbc:h2:mem:persistence;TRACE_LEVEL_FILE=4; | |
6 | +spring.datasource.maxActive=300 | |
6 | 7 | \ No newline at end of file | ... | ... |