Advertisement
Alice_Kim

DataBase

Jan 31st, 2020
534
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. package pgdp.net;
  2.  
  3. import java.io.*;
  4. import java.nio.file.Path;
  5. import java.util.*;
  6. import java.util.concurrent.atomic.AtomicLong;
  7.  
  8. public class PinguDatabase {
  9. static Path dataFile = Path.of("db", "penguins.csv");
  10. private static Map<Long, DatingPingu> data = new HashMap<>();
  11. private static AtomicLong newID = null;
  12.  
  13. public boolean add(DatingPingu datingPingu) {
  14. synchronized (data) {
  15. if (!data.containsKey(datingPingu.getId())) {
  16. data.put(datingPingu.getId(), datingPingu);
  17. PinguDatabase pinguDatabase = new PinguDatabase();
  18. pinguDatabase.clearFile();
  19. data.entrySet().stream().forEach(id ->
  20. pinguDatabase.add(id.getValue()));
  21. pinguDatabase.flush();
  22. return true;
  23. }
  24. return false;
  25. }
  26. }
  27.  
  28. public Optional<DatingPingu> lookupById(long id) {
  29. synchronized (data) {
  30. if (id < 0) {
  31. throw new IllegalArgumentException("Id is invalid.");
  32. }
  33. if (data.containsKey(id)) {
  34. Optional<DatingPingu> res = Optional.of(data.get(id));
  35. return res;
  36. }
  37. return Optional.empty();
  38. }
  39. }
  40.  
  41. public List<DatingPingu> findMatchesFor(SeachRequest request) {
  42. synchronized (data) {
  43. List<DatingPingu> penguins = new ArrayList<>();
  44. data.entrySet().stream().forEach(penguin -> {
  45. if (penguin.getValue().getSexualOrientation().equals(request.getSexualOrientation())
  46. && penguin.getValue().getAge() >= request.getMinAge() && penguin.getValue().getAge() <= request.getMaxAge()
  47. && penguin.getValue().getHobbies().stream().anyMatch(hobby -> request.getHobbies().contains(hobby)))
  48. penguins.add(penguin.getValue());
  49. });
  50. return penguins;
  51. }
  52. }
  53.  
  54. public boolean initialize() {
  55. try {
  56. BufferedReader br = new BufferedReader(new FileReader(String.valueOf(dataFile)));
  57. String line = "";
  58. long maxID = 0;
  59. while ((line = br.readLine()) != null) {
  60. if (line.length() == 0) {
  61. continue;
  62. }
  63. DatingPingu datingPingu = DatingPingu.parse(line);
  64. synchronized (data) {
  65. data.putIfAbsent(datingPingu.getId(), datingPingu);
  66. if (maxID < datingPingu.getId()) {
  67. maxID = datingPingu.getId();
  68. }
  69. }
  70. }
  71. newID.addAndGet(maxID + 1);
  72. return true;
  73. } catch (IOException ex) {
  74. return false;
  75. }
  76. }
  77.  
  78. public long getNewId() {
  79. if (newID == null)
  80. return 0;
  81. return newID.getAndIncrement();
  82. }
  83.  
  84. public boolean flush() {
  85. try {
  86. BufferedWriter writer = new BufferedWriter(new FileWriter(String.valueOf(dataFile)));
  87. synchronized (data) {
  88. data.entrySet().stream().forEach(penguin -> {
  89. try {
  90. writer.write(penguin.getValue().toCsvRow());
  91. writer.newLine();
  92. } catch (IOException e) {
  93. e.printStackTrace();
  94. }
  95. });
  96. }
  97. return true;
  98. } catch (IOException ex) {
  99. return false;
  100. }
  101. }
  102.  
  103. public void clear() {
  104. synchronized (data) {
  105. data.clear();
  106. }
  107. }
  108.  
  109. public void delete(Long id) {
  110. synchronized (data) {
  111. if (data.containsKey(id)) {
  112. data.remove(id);
  113. PinguDatabase pinguDatabase = new PinguDatabase();
  114. data.entrySet().stream().forEach(penguin -> {
  115. pinguDatabase.add(penguin.getValue());
  116. });
  117. pinguDatabase.flush();
  118. }
  119. }
  120. }
  121.  
  122. public boolean clearFile() {
  123. try {
  124. PrintWriter writer = new PrintWriter(String.valueOf(dataFile));
  125. writer.print("");
  126. writer.close();
  127. return true;
  128. } catch (IOException e) {
  129. System.err.println(e.getMessage());
  130. }
  131. return false;
  132. }
  133.  
  134. // TODO
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement