diff --git a/src/main/java/fr/plil/sio/persistence/api/Group.java b/src/main/java/fr/plil/sio/persistence/api/Group.java index 0cb77fa..c0c3f22 100644 --- a/src/main/java/fr/plil/sio/persistence/api/Group.java +++ b/src/main/java/fr/plil/sio/persistence/api/Group.java @@ -2,26 +2,35 @@ package fr.plil.sio.persistence.api; import java.util.LinkedList; import java.util.List; +import javax.persistence.*; /** * A group is unique by its name (no two groups with the same name or the same ID can exist in the database). * A group contains a list of rights unique by their ID (no two groups with the same ID can exist in the database). */ +@Entity +@Table (name = "GROUP_T") public class Group { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "GROUP_ID") private Long id; + @Column(name = "GROUP_NAME") private String name; /** * Users in the group. */ + @OneToMany(mappedBy ="group", cascade = CascadeType.REMOVE) private List users = new LinkedList<>(); /** * List of rights. The list CANNOT contains duplicate rights. */ + @OneToMany(mappedBy="parent", cascade = CascadeType.REMOVE) private List rights = new LinkedList<>(); public List getRights() { diff --git a/src/main/java/fr/plil/sio/persistence/api/Right.java b/src/main/java/fr/plil/sio/persistence/api/Right.java index 6929203..8e831ae 100644 --- a/src/main/java/fr/plil/sio/persistence/api/Right.java +++ b/src/main/java/fr/plil/sio/persistence/api/Right.java @@ -2,6 +2,7 @@ package fr.plil.sio.persistence.api; import java.util.LinkedList; import java.util.List; +import javax.persistence.*; /** * A right is unique by itd ID, i.e. it can exist two rights with the same name in the database. @@ -9,16 +10,25 @@ import java.util.List; * A right can have zero, one or more siblings. */ +@Entity +@Table (name = "RIGHT_T") public class Right { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "RIGHT_ID") private Long id; + @Column(name = "RIGHT_NAME") private String name; /// the parent right + @ManyToOne + @JoinColumn(name = "PARENT") private Right parent; /// the sibling right(s), eventually empty + @OneToMany(mappedBy="parent", cascade = CascadeType.REMOVE) private List siblings = new LinkedList<>(); public List getSiblings() { diff --git a/src/main/java/fr/plil/sio/persistence/api/User.java b/src/main/java/fr/plil/sio/persistence/api/User.java index 7b075cc..d99801a 100644 --- a/src/main/java/fr/plil/sio/persistence/api/User.java +++ b/src/main/java/fr/plil/sio/persistence/api/User.java @@ -1,16 +1,33 @@ package fr.plil.sio.persistence.api; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + /** * An user MUST have a group in the database. * An user is unique by it name, i.e. database cannot contain two user with the same name or the same ID. */ +@Entity +@Table (name = "USER_T") public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "USER_ID") private Long id; + @Column(name = "USER_NAME") private String name; + @ManyToOne(optional = false) + @JoinColumn(name = "GROUP_ID") private Group group; public Long getId() { diff --git a/src/main/java/fr/plil/sio/persistence/jpa/GroupServiceJpa.java b/src/main/java/fr/plil/sio/persistence/jpa/GroupServiceJpa.java index 3302278..282d6ad 100644 --- a/src/main/java/fr/plil/sio/persistence/jpa/GroupServiceJpa.java +++ b/src/main/java/fr/plil/sio/persistence/jpa/GroupServiceJpa.java @@ -3,6 +3,8 @@ package fr.plil.sio.persistence.jpa; import fr.plil.sio.persistence.api.Group; import fr.plil.sio.persistence.api.GroupService; import fr.plil.sio.persistence.api.Right; +import java.util.ArrayList; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -11,7 +13,13 @@ public class GroupServiceJpa implements GroupService { @Autowired private GroupRepository groupRepository; - + + @Autowired + private RightRepository rightRepository; + + @Autowired + private UserRepository userRepository; + @Override public Group create(String name) { if (name == null) { @@ -23,13 +31,27 @@ public class GroupServiceJpa implements GroupService { } group = new Group(); group.setName(name); + groupRepository.save(group); + return group; } @Override public boolean delete(String name) { - throw new IllegalStateException("not implemented !"); + if (name == null) { + throw new IllegalArgumentException("name cannot be null"); + } + + Group group = findByName(name); + + if(group==null){ + return false; + } + + groupRepository.delete(group.getId()); + + return true; } @Override @@ -42,11 +64,51 @@ public class GroupServiceJpa implements GroupService { @Override public boolean addRight(String groupName, Right right) { - return false; + if(groupName==null){ + throw new IllegalArgumentException("groupname cannot be null"); + } + if(right == null){ + throw new IllegalArgumentException("right cannot be null"); + } + + Group group = groupRepository.findByName(groupName); + + if (group == null) { + throw new IllegalArgumentException("group cannot be null"); + } + + List list = group.getRights(); + if(list.contains(right)){ + return false; + } + assert list != null; + list.add(right); + group.setRights(list); + + return true; } @Override public boolean removeRight(String groupName, Right right) { - return false; + if(groupName==null){ + throw new IllegalArgumentException("Groupname cannot be null"); + } + if(right==null){ + throw new IllegalArgumentException("right cannot be null"); + } + if(rightRepository.findByName(right.getName()).size()==0){ + throw new IllegalArgumentException("right not in database"); + } + Group group = groupRepository.findByName(groupName); + + if (group == null) { + throw new IllegalArgumentException("group cannot be null"); + } + + List list = group.getRights(); + list.remove(right); + group.setRights(list); + + return true; } } diff --git a/src/main/java/fr/plil/sio/persistence/jpa/RightRepository.java b/src/main/java/fr/plil/sio/persistence/jpa/RightRepository.java new file mode 100644 index 0000000..73ac925 --- /dev/null +++ b/src/main/java/fr/plil/sio/persistence/jpa/RightRepository.java @@ -0,0 +1,13 @@ +package fr.plil.sio.persistence.jpa; + +import fr.plil.sio.persistence.api.Right; +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RightRepository extends JpaRepository { + + List findByName(String name); + + Right findById(Long id); + +} diff --git a/src/main/java/fr/plil/sio/persistence/jpa/RightServiceJpa.java b/src/main/java/fr/plil/sio/persistence/jpa/RightServiceJpa.java index 6b0f6d4..d5e2a6b 100644 --- a/src/main/java/fr/plil/sio/persistence/jpa/RightServiceJpa.java +++ b/src/main/java/fr/plil/sio/persistence/jpa/RightServiceJpa.java @@ -5,31 +5,78 @@ import fr.plil.sio.persistence.api.RightService; import org.springframework.stereotype.Service; import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; @Service public class RightServiceJpa implements RightService { + + @Autowired + private RightRepository rightRepository; + @Override public Right create(String name) { - return null; + if(name==null){ + throw new IllegalArgumentException("name cannot be null"); + } + Right right = new Right(); + right.setName(name); + + rightRepository.save(right); + + return right; } @Override public Right create(String name, Right parent) { - return null; + if(name==null){ + throw new IllegalArgumentException("name cannot be null"); + } + if(parent==null){ + throw new IllegalArgumentException("parent cannot be null"); + } + + Right right = new Right(); + right.setName(name); + if(rightRepository.findByName(parent.getName()).size()==0){ + throw new IllegalArgumentException("parent cannot be null"); + } + + right.setParent(parent); + + rightRepository.save(right); + + parent.getSiblings().add(right); + + return right; } @Override public boolean delete(Right right) { - return false; + if(right==null){ + throw new IllegalArgumentException("right cannot be null"); + } + if(rightRepository.findByName(right.getName()).size()==0){ + throw new IllegalArgumentException("right not in database"); + } + + rightRepository.delete(right.getId()); + + return true; } @Override public List findByName(String name) { - return null; + if(name==null){ + throw new IllegalArgumentException("name cannot be null"); + } + return rightRepository.findByName(name); } @Override public Right findOne(Long id) { - return null; + if(id==null){ + throw new IllegalArgumentException("name cannot be null"); + } + return rightRepository.findById(id); } } diff --git a/src/main/java/fr/plil/sio/persistence/jpa/UserRepository.java b/src/main/java/fr/plil/sio/persistence/jpa/UserRepository.java new file mode 100644 index 0000000..549dc95 --- /dev/null +++ b/src/main/java/fr/plil/sio/persistence/jpa/UserRepository.java @@ -0,0 +1,9 @@ +package fr.plil.sio.persistence.jpa; + +import fr.plil.sio.persistence.api.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + + User findByName(String name); +} diff --git a/src/test/java/fr/plil/sio/persistence/jpa/GroupServiceTest.java b/src/test/java/fr/plil/sio/persistence/jpa/GroupServiceTest.java index 0b36a8e..6cf1215 100644 --- a/src/test/java/fr/plil/sio/persistence/jpa/GroupServiceTest.java +++ b/src/test/java/fr/plil/sio/persistence/jpa/GroupServiceTest.java @@ -1,6 +1,7 @@ package fr.plil.sio.persistence.jpa; import fr.plil.sio.persistence.api.*; +import javax.transaction.Transactional; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,6 +13,7 @@ import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest +@Transactional public class GroupServiceTest { @Autowired diff --git a/src/test/java/fr/plil/sio/persistence/jpa/UserServiceTest.java b/src/test/java/fr/plil/sio/persistence/jpa/UserServiceTest.java index 55d79f8..c0f9532 100644 --- a/src/test/java/fr/plil/sio/persistence/jpa/UserServiceTest.java +++ b/src/test/java/fr/plil/sio/persistence/jpa/UserServiceTest.java @@ -1,6 +1,7 @@ package fr.plil.sio.persistence.jpa; import fr.plil.sio.persistence.api.*; +import javax.transaction.Transactional; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,6 +13,7 @@ import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest +@Transactional public class UserServiceTest { @Autowired -- libgit2 0.21.2