diff --git a/src/main/java/fr/plil/sio/persistence/jdbc/GroupServiceJdbc.java b/src/main/java/fr/plil/sio/persistence/jdbc/GroupServiceJdbc.java index d9affc8..582fc7c 100644 --- a/src/main/java/fr/plil/sio/persistence/jdbc/GroupServiceJdbc.java +++ b/src/main/java/fr/plil/sio/persistence/jdbc/GroupServiceJdbc.java @@ -64,17 +64,18 @@ public class GroupServiceJdbc implements GroupService { throw new IllegalArgumentException("group cannot be null"); } - group.setName(groupName); - List list = group.getRights(); + Group g = groupRepository.findByName(groupName); + List list = g.getRights(); list.add(right); - group.setRights(list); +// g.setRights(list); + return true; } @Override public boolean removeRight(String groupName, Right right) { if(right==null){ - throw new IllegalArgumentException("name cannot be null"); + throw new IllegalArgumentException("right cannot be null"); } Group group = groupRepository.findByName(groupName); if (group != null) { @@ -82,4 +83,9 @@ public class GroupServiceJdbc implements GroupService { } return true; } + + public List getListRight(String groupName){ + Group g = groupRepository.findByName(groupName); + return g.getRights(); + } } diff --git a/src/main/java/fr/plil/sio/persistence/jdbc/RightRepository.java b/src/main/java/fr/plil/sio/persistence/jdbc/RightRepository.java index e01a10d..a2a849b 100644 --- a/src/main/java/fr/plil/sio/persistence/jdbc/RightRepository.java +++ b/src/main/java/fr/plil/sio/persistence/jdbc/RightRepository.java @@ -5,13 +5,16 @@ */ package fr.plil.sio.persistence.jdbc; +import java.util.List; import fr.plil.sio.persistence.api.Right; public interface RightRepository { - Right findByName(String name); + List findByName(String name); - void delete(Long id); + Right findOne(Long id); + + boolean delete(Long id); - void save(Right right); + void save(Right right, int parentId); } diff --git a/src/main/java/fr/plil/sio/persistence/jdbc/RightRepositoryJdbc.java b/src/main/java/fr/plil/sio/persistence/jdbc/RightRepositoryJdbc.java index 3df47e0..f763316 100644 --- a/src/main/java/fr/plil/sio/persistence/jdbc/RightRepositoryJdbc.java +++ b/src/main/java/fr/plil/sio/persistence/jdbc/RightRepositoryJdbc.java @@ -5,6 +5,8 @@ */ package fr.plil.sio.persistence.jdbc; +import java.util.List; +import java.util.ArrayList; import fr.plil.sio.persistence.api.Group; import java.sql.ResultSet; import java.sql.SQLException; @@ -14,12 +16,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import fr.plil.sio.persistence.api.Right; +import org.springframework.stereotype.Repository; -/** - * - * @author rvangrev - */ -public class RightRepositoryJdbc implements RightRepository{ +@Repository +public class RightRepositoryJdbc implements RightRepository { + + + private GroupRepository groupRepository; + private RightRepository rightRepository; private static final Logger logger = LoggerFactory.getLogger(GroupRepository.class); @@ -27,22 +31,56 @@ public class RightRepositoryJdbc implements RightRepository{ private DataSource dataSource; @Override - public Right findByName(String name) { + public List findByName(String name) { Statement stmt = null; ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); - rs = stmt.executeQuery("SELECT * FROM GROUP_T WHERE NAME_C = \'" + name + "\'"); - if (rs.next()) { + rs = stmt.executeQuery("SELECT * FROM RIGHT_T WHERE NAME_R = \'" + name + "\'"); + ArrayList list = new ArrayList(); + while (rs.next()) { logger.debug("found group " + name); -// Group group = new Group(); -// group.setId(rs.getLong("GROUP_ID")); -// group.setName(rs.getString("NAME_C")); -// return group; - } else { - logger.debug("not found " + name); - return null; + Right right = new Right(); + right.setId(rs.getLong("RIGHT_ID")); + right.setName(rs.getString("NAME_R")); + if(right!=null){ + list.add(right); + } + } + return list; + } catch (SQLException e) { + throw new UnsupportedOperationException("sql exception", e); + } finally { + try { + if (rs != null) { + rs.close(); + } + if (stmt != null) { + stmt.close(); + } + } catch (SQLException e) { + throw new UnsupportedOperationException("sql exception during close", e); + } + } + } + + @Override + public Right findOne(Long id){ + Statement stmt = null; + ResultSet rs = null; + try { + stmt = dataSource.getConnection().createStatement(); + rs = stmt.executeQuery("SELECT * FROM RIGHT_T WHERE RIGHT_ID = \'" + id + "\' LIMIT 1"); + + if (rs.next()) { + logger.debug("found id " + id); + Right right = new Right(); + right.setId(rs.getLong("RIGHT_ID")); + right.setName(rs.getString("NAME_R")); + return right; + } + } catch (SQLException e) { throw new UnsupportedOperationException("sql exception", e); } finally { @@ -62,14 +100,15 @@ public class RightRepositoryJdbc implements RightRepository{ } @Override - public void save(Right right) { + public void save(Right right, int parentId) { Statement stmt = null; ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); - - stmt.executeUpdate("INSERT INTO GROUP_T (NAME_C, PARENT) VALUES (\'" + right.getName() + "\', \'" + right.getParent().getId() + "\')", + + stmt.executeUpdate("INSERT INTO RIGHT_T (NAME_R, PARENT_ID) VALUES (\'" + right.getName() + "\', "+ parentId +")", Statement.RETURN_GENERATED_KEYS); + rs = stmt.getGeneratedKeys(); if (rs.next()) { right.setId(rs.getLong(1)); @@ -94,15 +133,18 @@ public class RightRepositoryJdbc implements RightRepository{ } @Override - public void delete(Long id) { + public boolean delete(Long id) { Statement stmt = null; ResultSet rs = null; if(id==null){ - throw new IllegalArgumentException(); + return false; + } + if(findOne(id)==null){ + return false; } try { stmt = dataSource.getConnection().createStatement(); - stmt.execute("DELETE FROM RIGHT_T WHERE RIGHT_ID = " + id); + stmt.execute("DELETE FROM RIGHT_T WHERE RIGHT_ID = \'" + id + "\' OR PARENT_ID = " + id + ""); } catch (SQLException e) { throw new UnsupportedOperationException("sql exception", e); } finally { @@ -117,5 +159,6 @@ public class RightRepositoryJdbc implements RightRepository{ throw new UnsupportedOperationException("sql exception during close", e); } } + return true; } } diff --git a/src/main/java/fr/plil/sio/persistence/jdbc/RightServiceJdbc.java b/src/main/java/fr/plil/sio/persistence/jdbc/RightServiceJdbc.java index 9430cb6..1147c34 100644 --- a/src/main/java/fr/plil/sio/persistence/jdbc/RightServiceJdbc.java +++ b/src/main/java/fr/plil/sio/persistence/jdbc/RightServiceJdbc.java @@ -3,6 +3,7 @@ package fr.plil.sio.persistence.jdbc; import fr.plil.sio.persistence.api.Right; import fr.plil.sio.persistence.api.RightService; import org.springframework.stereotype.Service; +import java.lang.Math; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -11,7 +12,6 @@ import org.springframework.beans.factory.annotation.Autowired; public class RightServiceJdbc implements RightService { @Autowired - private GroupRepository groupRepository; private RightRepository rightRepository; @Override @@ -21,25 +21,28 @@ public class RightServiceJdbc implements RightService { } Right right = new Right(); right.setName(name); - if(right==null){ - throw new IllegalArgumentException("name cannot be null"); - } - rightRepository.save(right); + rightRepository.save(right, 0); + return right; } @Override public Right create(String name, Right parent) { - if(name==null || parent.getId()==null){ + if(name==null){ throw new IllegalArgumentException("name cannot be null"); } + if(parent==null){ + throw new IllegalArgumentException("parent cannot be null"); + } + if (parent.getId()==null){ + throw new IllegalArgumentException("parent id cannot be null"); + } + Right right = new Right(); right.setName(name); right.setParent(parent); - if(right==null){ - throw new IllegalArgumentException("name cannot be null"); - } - rightRepository.save(right); + int parentID = Math.toIntExact(parent.getId()); + rightRepository.save(right, parentID); return right; } @@ -49,13 +52,15 @@ public class RightServiceJdbc implements RightService { throw new IllegalArgumentException("name cannot be null"); } - rightRepository.delete(right.getId()); - return true; + return rightRepository.delete(right.getId()); } @Override public List findByName(String name) { - throw new IllegalStateException("not implemented !"); + if(name==null){ + throw new IllegalArgumentException("name cannot be null"); + } + return rightRepository.findByName(name); } @Override @@ -63,8 +68,7 @@ public class RightServiceJdbc implements RightService { if(id==null){ throw new IllegalArgumentException("name cannot be null"); } - else{ - return null; - } + return rightRepository.findOne(id); + } } diff --git a/src/main/java/fr/plil/sio/persistence/jdbc/UserRepositoryJdbc.java b/src/main/java/fr/plil/sio/persistence/jdbc/UserRepositoryJdbc.java index c9741a0..f87ab3c 100644 --- a/src/main/java/fr/plil/sio/persistence/jdbc/UserRepositoryJdbc.java +++ b/src/main/java/fr/plil/sio/persistence/jdbc/UserRepositoryJdbc.java @@ -22,6 +22,9 @@ public class UserRepositoryJdbc implements UserRepository{ private static final Logger logger = LoggerFactory.getLogger(GroupRepository.class); @Autowired + private GroupRepository groupRepository; + + @Autowired private DataSource dataSource; @Override @@ -30,15 +33,13 @@ public class UserRepositoryJdbc implements UserRepository{ ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); - rs = stmt.executeQuery("SELECT U.USER_ID, U.NAME_U, U.GROUP_U, G.NAME_C FROM USER_T U JOIN GROUP_T G ON U.GROUP_U=G.GROUP_ID WHERE NAME_U = \'" + name + "\' "); + rs = stmt.executeQuery("SELECT USER_ID, NAME_U, U.GROUP_ID, NAME_C FROM USER_T U JOIN GROUP_T G ON U.GROUP_ID=G.GROUP_ID"); if (rs.next()) { logger.debug("found group " + name); User user = new User(); - user.setId(rs.getLong("T.USER_ID")); - user.setName(rs.getString("T.NAME_U")); -// Group group = new Group(); -// group = g.findByName(rs.getString("G.NAME_C")); -// user.setGroup(group); + user.setId(rs.getLong("USER_ID")); + user.setName(rs.getString("NAME_U")); + user.setGroup(groupRepository.findByName("NAME_C")); return user; } else { logger.debug("not found " + name); @@ -67,7 +68,12 @@ public class UserRepositoryJdbc implements UserRepository{ ResultSet rs = null; try { stmt = dataSource.getConnection().createStatement(); - stmt.executeUpdate("INSERT INTO USER_T (NAME_U, GROUP_U) VALUES (\'" + user.getName() + "\', \'" + group.getId() + "\')", + + int groupid=0; + if(group!=null){ + groupid = Math.toIntExact(group.getId()); + } + stmt.executeUpdate("INSERT INTO USER_T (NAME_U, GROUP_ID) VALUES (\'" + user.getName() + "\', " + groupid + ")", Statement.RETURN_GENERATED_KEYS); rs = stmt.getGeneratedKeys(); if (rs.next()) { diff --git a/src/main/java/fr/plil/sio/persistence/jdbc/UserServiceJdbc.java b/src/main/java/fr/plil/sio/persistence/jdbc/UserServiceJdbc.java index f5be8c1..342ee04 100644 --- a/src/main/java/fr/plil/sio/persistence/jdbc/UserServiceJdbc.java +++ b/src/main/java/fr/plil/sio/persistence/jdbc/UserServiceJdbc.java @@ -12,6 +12,8 @@ public class UserServiceJdbc implements UserService { @Autowired private UserRepository userRepository; + + @Autowired private GroupRepository groupRepository; @Override @@ -21,13 +23,17 @@ public class UserServiceJdbc implements UserService { } User user = userRepository.findByName(name); if(user!=null){ - throw new IllegalStateException("a user with the same name already exists"); + throw new IllegalArgumentException("a user with the same name already exists"); } user = new User(); user.setName(name); Group group = new Group(); - group.setName(groupName); -// Group group = groupRepository.findByName(groupName); + group = groupRepository.findByName(groupName); + if(group!=null) + user.setGroup(group); + else{ + throw new IllegalArgumentException("group trouve avec le find by name null"); + } userRepository.save(user, group); return user; } @@ -35,7 +41,7 @@ public class UserServiceJdbc implements UserService { @Override public boolean delete(String name) { if(name == null){ - throw new IllegalStateException("not implemented !"); + throw new IllegalArgumentException("name cannot be null"); } User user = findByName(name); if(user==null){ @@ -55,9 +61,12 @@ public class UserServiceJdbc implements UserService { @Override public boolean isUserHasRight(String userName, Right right) { - if(right==null){ + if(userName==null){ throw new IllegalArgumentException("name cannot be null"); } + if(right==null){ + throw new IllegalArgumentException("right cannot be null"); + } else{ return false; } diff --git a/src/test/java/fr/plil/sio/persistence/jdbc/AbstractServiceSupport.java b/src/test/java/fr/plil/sio/persistence/jdbc/AbstractServiceSupport.java index 58450dc..9bcdb32 100644 --- a/src/test/java/fr/plil/sio/persistence/jdbc/AbstractServiceSupport.java +++ b/src/test/java/fr/plil/sio/persistence/jdbc/AbstractServiceSupport.java @@ -15,15 +15,18 @@ public abstract class AbstractServiceSupport { "NAME_C VARCHAR(50) UNIQUE NOT NULL, PRIMARY KEY(GROUP_ID))"; private static final String create_table_right = "CREATE TABLE RIGHT_T (RIGHT_ID INT NOT NULL AUTO_INCREMENT, " + - "NAME_R VARCHAR(50) UNIQUE NOT NULL, PARENT INT, PRIMARY KEY(RIGHT_ID))"; + "NAME_R VARCHAR(50) NOT NULL, PARENT_ID INT, PRIMARY KEY(RIGHT_ID))"; private static final String create_table_user = "CREATE TABLE USER_T (USER_ID INT NOT NULL AUTO_INCREMENT, " + - "NAME_U VARCHAR(50) UNIQUE NOT NULL, GROUP_U INT, PRIMARY KEY(USER_ID), " + - "FOREIGN KEY(GROUP_U) REFERENCES GROUP_T(GROUP_ID))"; + "NAME_U VARCHAR(50) UNIQUE NOT NULL, GROUP_ID INT, PRIMARY KEY(USER_ID))"; + + private static final String create_table_link = "CREATE TABLE LINK_T (RIGHT_ID INT NOT NULL, GROUP_ID INT NOT NULL, " + + "PRIMARY KEY(RIGHT_ID, GROUP_ID))"; private static final String drop_table_group = "DROP TABLE GROUP_T"; private static final String drop_table_right = "DROP TABLE RIGHT_T"; private static final String drop_table_user = "DROP TABLE USER_T"; + private static final String drop_table_link = "DROP TABLE LINK_T"; @Autowired private DataSource dataSource; @@ -38,6 +41,7 @@ public abstract class AbstractServiceSupport { stmt.executeUpdate(create_table_group); stmt.executeUpdate(create_table_right); stmt.executeUpdate(create_table_user); + stmt.executeUpdate(create_table_link); closeConnection(); } @@ -47,6 +51,7 @@ public abstract class AbstractServiceSupport { stmt.executeUpdate(drop_table_group); stmt.executeUpdate(drop_table_right); stmt.executeUpdate(drop_table_user); + stmt.executeUpdate(drop_table_link); closeConnection(); } diff --git a/src/test/java/fr/plil/sio/persistence/jdbc/RightServiceTest.java b/src/test/java/fr/plil/sio/persistence/jdbc/RightServiceTest.java index 2d5395d..caae705 100644 --- a/src/test/java/fr/plil/sio/persistence/jdbc/RightServiceTest.java +++ b/src/test/java/fr/plil/sio/persistence/jdbc/RightServiceTest.java @@ -119,7 +119,7 @@ public class RightServiceTest extends AbstractServiceSupport { assertNull(rightService.findOne(153463167809232L)); } - @Test(expected = IllegalArgumentException.class) + @Test(expected = IllegalArgumentException.class) public void testFindOneFailsIfIdNull() { rightService.findOne(null); } diff --git a/src/test/java/fr/plil/sio/persistence/jdbc/UserServiceTest.java b/src/test/java/fr/plil/sio/persistence/jdbc/UserServiceTest.java index fd40661..228f74f 100644 --- a/src/test/java/fr/plil/sio/persistence/jdbc/UserServiceTest.java +++ b/src/test/java/fr/plil/sio/persistence/jdbc/UserServiceTest.java @@ -27,10 +27,10 @@ public class UserServiceTest extends AbstractServiceSupport { public void before() { groupService.create("group"); userService.create("user", "group"); -// Right right = rightService.create("parent"); -// rightService.create("sibling", right); -// groupService.addRight("group", right); -// rightService.create("not-for-me"); + Right right = rightService.create("parent"); + rightService.create("sibling", right); + groupService.addRight("group", right); + rightService.create("not-for-me"); } @Test @@ -70,6 +70,7 @@ public class UserServiceTest extends AbstractServiceSupport { @Test public void testDeleteUserIfNotFound() { + userService.delete("user"); assertFalse(userService.delete("user")); } diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 1e0b967..43dd97d 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -2,4 +2,5 @@ logging.level.org.springframework=INFO logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate=INFO spring.datasource.url=jdbc:h2:mem:persistence;TRACE_LEVEL_FILE=4; -spring.datasource.maxActive=300 \ No newline at end of file +#spring.datasource.maxActive=300 +spring.datasource.tomcat.max-active=500 \ No newline at end of file -- libgit2 0.21.2