Advertisement
Guest User

Untitled

a guest
Jun 13th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.47 KB | None | 0 0
  1. package at.ac.tuwien.sepm.assignment.groupphase.demeter.dao.ImplementationsDAO;
  2.  
  3. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dao.InterfacesDAO.IStaffDAO;
  4. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dto.Staff;
  5. import at.ac.tuwien.sepm.assignment.groupphase.demeter.dto.StaffSearch;
  6. import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
  7. import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Repository;
  12.  
  13. import java.lang.invoke.MethodHandles;
  14. import java.sql.*;
  15. import java.time.LocalDate;
  16. import java.util.ArrayList;
  17.  
  18. @Repository
  19. public class StaffDAO implements IStaffDAO {
  20.  
  21. private Connection connection;
  22.  
  23. private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
  24. private static final String GET_STAFF_DATA = "SELECT * FROM staff WHERE username = ?";
  25. private static final String GET_ALL_STAFF_QUERY = "SELECT * FROM staff";
  26. private static final String HIRE_STAFF_QUERY = "INSERT INTO staff (name, username, password, svnr, iban, owner, hire_date, fire_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
  27. private static final String UPDATE_STAFF_QUERY_WITH_PW = "UPDATE staff SET name = ?, username = ?, password = ?, svnr = ?, iban = ?, owner = ?, hire_date = ? WHERE id = ?";
  28. private static final String UPDATE_STAFF_QUERY_WITHOUT_PW = "UPDATE staff SET name = ?, username = ?, svnr = ?, iban = ?, owner = ?, hire_date = ? WHERE id = ?";
  29. private static final String FIRE_STAFF_QUERY = "UPDATE staff SET fire_date = ? WHERE id = ?";
  30. private static final String SEARCH_HIRED_STAFF = "SELECT * FROM STAFF WHERE NAME ILIKE ? AND USERNAME ILIKE ? AND HIRE_DATE >= ? AND FIRE_DATE IS ?";
  31. private static final String SEARCH_FIRED_STAFF = "SELECT * FROM STAFF WHERE NAME ILIKE ? AND USERNAME ILIKE ? AND HIRE_DATE >= ? AND FIRE_DATE IS NOT ?";
  32. private static final String SEARCH_STAFF_ALL = "SELECT * FROM STAFF WHERE NAME ILIKE ? AND USERNAME ILIKE ? AND HIRE_DATE >= ?";
  33.  
  34.  
  35. @Autowired
  36. public StaffDAO(JDBCConnectionManager jdbcConnectionManager) throws PersistenceException{
  37. try{
  38. connection = jdbcConnectionManager.getConnection();
  39. } catch (SQLException e){
  40. LOG.error(e.getMessage());
  41. throw new PersistenceException(e);
  42. }
  43. }
  44.  
  45.  
  46. @Override
  47. public Staff getStaff(String username) throws PersistenceException {
  48. LOG.info("Retrieving data from database.");
  49. try {
  50. var getStaffStatement = connection.prepareStatement(GET_STAFF_DATA);
  51.  
  52. getStaffStatement.setString(1, username);
  53. var resultSet = getStaffStatement.executeQuery();
  54. if (resultSet.next()){
  55. var staff = new Staff();
  56. staff.setId(resultSet.getLong(1));
  57. staff.setName(resultSet.getString(2));
  58. staff.setUsername(resultSet.getString(3));
  59. staff.setSvnr(resultSet.getString(5));
  60. staff.setIban(resultSet.getString(6));
  61. staff.setOwner(resultSet.getBoolean(7));
  62. staff.setHireDate(resultSet.getDate(8).toLocalDate());
  63. staff.setFireDate(null);
  64. staff.setStatus(false);
  65. return staff;
  66. }else {
  67. throw new PersistenceException("No user with this username");
  68. }
  69.  
  70. } catch (SQLException e) {
  71. LOG.error(e.getMessage());
  72. throw new PersistenceException(e);
  73. }
  74. }
  75.  
  76. @Override
  77. public ArrayList<Staff> getAllStaff() throws PersistenceException {
  78. ArrayList<Staff> searchResult = new ArrayList<>();
  79. LOG.info("Retrieving all staff from database.");
  80. try {
  81. var getAllStaffStatement = connection.prepareStatement(GET_ALL_STAFF_QUERY);
  82.  
  83. var resultSet = getAllStaffStatement.executeQuery();
  84. while (resultSet.next()){
  85. var staff = new Staff();
  86. setAllStaff(staff, resultSet);
  87. searchResult.add(staff);
  88. }
  89. resultSet.close();
  90. getAllStaffStatement.close();
  91. }catch (SQLException e){
  92. LOG.error(e.getMessage());
  93. throw new PersistenceException(e);
  94. }
  95. return searchResult;
  96. }
  97.  
  98. @Override
  99. public void hire(Staff staffToHire) throws PersistenceException {
  100. try {
  101. LOG.info("Inserting");
  102.  
  103. var hireStaffStatement = connection.prepareStatement(HIRE_STAFF_QUERY);
  104.  
  105. hireStaffStatement.setString(1, staffToHire.getName());
  106. hireStaffStatement.setString(2, staffToHire.getUsername());
  107. hireStaffStatement.setString(3, staffToHire.getPassword());
  108. hireStaffStatement.setString(4, staffToHire.getSvnr());
  109. hireStaffStatement.setString(5, staffToHire.getIban());
  110. hireStaffStatement.setBoolean(6, staffToHire.getOwner());
  111. hireStaffStatement.setDate(7, Date.valueOf(staffToHire.getHireDate()));
  112. hireStaffStatement.setDate(8, staffToHire.getFireDate() == null ? null : Date.valueOf(staffToHire.getFireDate()));
  113. hireStaffStatement.executeUpdate();
  114. LOG.info("Saved successfully");
  115. hireStaffStatement.close();
  116. }catch (SQLException e){
  117. throw new PersistenceException(e);
  118. }
  119. }
  120.  
  121. @Override
  122. public void updateStaff(Staff staffToUpdate) throws PersistenceException {
  123. LOG.info("Updating staff with id = " + staffToUpdate.getId());
  124. try {
  125. PreparedStatement updateStaffStatement;
  126. if (staffToUpdate.getPassword().isEmpty()){
  127. updateStaffStatement = connection.prepareStatement(UPDATE_STAFF_QUERY_WITHOUT_PW);
  128. }else {
  129. updateStaffStatement = connection.prepareStatement(UPDATE_STAFF_QUERY_WITH_PW);
  130. }
  131. var counter = 1;
  132. updateStaffStatement.setString(counter++, staffToUpdate.getName());
  133. updateStaffStatement.setString(counter++, staffToUpdate.getUsername());
  134. if (!staffToUpdate.getPassword().isEmpty()) {
  135. updateStaffStatement.setString(counter++, staffToUpdate.getPassword());
  136. }
  137. updateStaffStatement.setString(counter++, staffToUpdate.getSvnr());
  138. updateStaffStatement.setString(counter++, staffToUpdate.getIban());
  139. updateStaffStatement.setBoolean(counter++, staffToUpdate.getOwner());
  140. updateStaffStatement.setDate(counter++, Date.valueOf(staffToUpdate.getHireDate()));
  141. updateStaffStatement.setLong(counter, staffToUpdate.getId());
  142. updateStaffStatement.executeUpdate();
  143. LOG.info("Update successful");
  144. updateStaffStatement.close();
  145. } catch (SQLException e) {
  146. LOG.error(e.getMessage());
  147. throw new PersistenceException(e);
  148. }
  149. }
  150.  
  151. @Override
  152. public void fire(Staff staffToFire) throws PersistenceException {
  153. LOG.info("Firing staff with id = " + staffToFire.getId());
  154. try {
  155.  
  156. var fireStaffStatement = connection.prepareStatement(FIRE_STAFF_QUERY);
  157.  
  158. fireStaffStatement.setDate(1, Date.valueOf(LocalDate.now()));
  159. fireStaffStatement.setLong(2, staffToFire.getId());
  160. fireStaffStatement.executeUpdate();
  161. LOG.info("Fire successful");
  162. fireStaffStatement.close();
  163. } catch (SQLException e) {
  164. LOG.error(e.getMessage());
  165. throw new PersistenceException(e);
  166. }
  167. }
  168.  
  169. @Override
  170. public ArrayList<Staff> getSearchedStaff(StaffSearch staffSearch) throws PersistenceException {
  171. LOG.info("Retrieving all searched Staff!");
  172. ArrayList<Staff> searchResult = new ArrayList<>();
  173. PreparedStatement getSearchedStaff;
  174. try{
  175.  
  176. if(staffSearch.getStatus().equals("all")){
  177. getSearchedStaff = connection.prepareStatement(SEARCH_STAFF_ALL);
  178. }else if (staffSearch.getStatus().equals("hired")){
  179. getSearchedStaff = connection.prepareStatement(SEARCH_HIRED_STAFF);
  180. }else {
  181. getSearchedStaff = connection.prepareStatement(SEARCH_FIRED_STAFF);
  182. }
  183.  
  184. if(!staffSearch.getName().isEmpty()){
  185. getSearchedStaff.setString(1, "%"+staffSearch.getName()+"%");
  186. }else{
  187. getSearchedStaff.setString(1, "%");
  188. }
  189.  
  190. if(!staffSearch.getUsername().isEmpty()){
  191. getSearchedStaff.setString(2, "%"+staffSearch.getUsername()+"%");
  192. }else{
  193. getSearchedStaff.setString(2, "%");
  194. }
  195.  
  196. if(staffSearch.getHireDate() != null) {
  197. getSearchedStaff.setDate(3, Date.valueOf(staffSearch.getHireDate()));
  198. }else{
  199. getSearchedStaff.setDate(3, Date.valueOf("1000-11-11"));
  200. }
  201.  
  202. switch (staffSearch.getStatus()){
  203. case "hired":
  204. getSearchedStaff.setDate(4, null);
  205. break;
  206. case "fired":
  207. getSearchedStaff.setDate(4, null);
  208. break;
  209. }
  210. var resultSet = getSearchedStaff.executeQuery();
  211. while (resultSet.next()){
  212. var staff = new Staff();
  213. setAllStaff(staff, resultSet);
  214. searchResult.add(staff);
  215. }
  216. resultSet.close();
  217. getSearchedStaff.close();
  218.  
  219. }catch (SQLException e) {
  220. LOG.error(e.getMessage());
  221. throw new PersistenceException(e);
  222. }
  223. return searchResult;
  224. }
  225.  
  226. private void setAllStaff(Staff staff, ResultSet resultSet) throws SQLException {
  227. staff.setId(resultSet.getLong(1));
  228. staff.setName(resultSet.getString(2));
  229. staff.setUsername(resultSet.getString(3));
  230. staff.setSvnr(resultSet.getString(5));
  231. staff.setIban(resultSet.getString(6));
  232. staff.setOwner(resultSet.getBoolean(7));
  233. staff.setHireDate(resultSet.getDate(8).toLocalDate());
  234. staff.setFireDate(resultSet.getDate(9) == null ? null : resultSet.getDate(9).toLocalDate());
  235. staff.setStatus(staff.getFireDate() == null);
  236. }
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement