/naplo-persist/src/main/java/com/zotyo/photos/dao/PhotoDAOImpl.java

https://github.com/zgorbe/BabaNaplo · Java · 150 lines · 124 code · 24 blank · 2 comment · 9 complexity · 3369cf8f7b8657f43998a3833a0062aa MD5 · raw file

  1. package com.zotyo.photos.dao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.data.domain.Sort;
  7. import org.springframework.data.domain.Sort.Direction;
  8. import org.springframework.data.mongodb.core.MongoTemplate;
  9. import org.springframework.data.mongodb.core.query.Criteria;
  10. import org.springframework.data.mongodb.core.query.Query;
  11. import org.springframework.data.mongodb.core.query.Update;
  12. import org.springframework.stereotype.Repository;
  13. import static org.springframework.data.mongodb.core.query.Criteria.*;
  14. import com.zotyo.photos.pojo.Photo;
  15. import com.zotyo.photos.pojo.PhotoData;
  16. import com.zotyo.photos.util.PhotoDataEnum;
  17. @Repository
  18. @Qualifier("PhotoDAO")
  19. public class PhotoDAOImpl implements PhotoDAO {
  20. @Autowired
  21. private MongoTemplate mongoTemplate;
  22. @Override
  23. public void save(Photo photo, PhotoData photoData) {
  24. mongoTemplate.insert(photoData);
  25. String data_id = photoData.getId();
  26. photo.setDataId(data_id);
  27. mongoTemplate.insert(photo);
  28. }
  29. @Override
  30. public void deleteByFilename(String filename) {
  31. Photo photo = mongoTemplate.findAndRemove(new Query(where("filename").is(filename)), Photo.class);
  32. if (photo != null) {
  33. String data_id = photo.getDataId();
  34. mongoTemplate.findAndRemove(new Query(where("id").is(data_id)), PhotoData.class);
  35. }
  36. }
  37. @Override
  38. public void update(Photo photo) {
  39. // TODO Auto-generated method stub
  40. //mongoTemplate.updateFirst(new Query(where("filename").is(photo.getFilename())), Update.update("keywords", photo.getKeywords()), Photo.class);
  41. }
  42. @Override
  43. public List<Photo> findByCategory(String category) {
  44. Query query = new Query(where("category").is(category));
  45. query.with(new Sort(Direction.DESC, "createdate"));
  46. List<Photo> photos = mongoTemplate.find(query, Photo.class);
  47. return photos;
  48. }
  49. @Override
  50. public List<Photo> findLatestsByCategory(String category, int count) {
  51. Query query = new Query(where("category").is(category));
  52. query.limit(count).with(new Sort(Direction.DESC, "createdate"));
  53. List<Photo> photos = mongoTemplate.find(query, Photo.class);
  54. return photos;
  55. }
  56. @Override
  57. public List<PhotoData> getAllThumbsByCategory(String category) {
  58. Query query = new Query(where("category").is(category));
  59. query.with(new Sort(Direction.DESC, "createdate"));
  60. List<Photo> photos = mongoTemplate.find(query, Photo.class);
  61. List<String> data_ids = new ArrayList<String>();
  62. for (Photo p : photos) {
  63. data_ids.add(p.getDataId());
  64. }
  65. Query dataQuery = new Query();
  66. dataQuery.fields().include("thumbdata");
  67. dataQuery.addCriteria(where("id").in(data_ids));
  68. List<PhotoData> thumbs = mongoTemplate.find(dataQuery, PhotoData.class);
  69. return thumbs;
  70. }
  71. @Override
  72. public List<Photo> findAll() {
  73. List<Photo> photos = mongoTemplate.findAll(Photo.class);
  74. return photos;
  75. }
  76. @Override
  77. public Photo findByFilename(String filename) {
  78. Photo photo = mongoTemplate.findOne(new Query(where("filename").is(filename)), Photo.class);
  79. return photo;
  80. }
  81. @Override
  82. public PhotoData getDataByFilename(String filename, PhotoDataEnum dataFlag) {
  83. Photo photo = mongoTemplate.findOne(new Query(where("filename").is(filename)), Photo.class);
  84. if (photo == null) return null;
  85. String data_id = photo.getDataId();
  86. Query dataQuery = new Query();
  87. switch (dataFlag) {
  88. case THUMB_ONLY:
  89. dataQuery.fields().include("thumbdata");
  90. break;
  91. case PICTURE_ONLY:
  92. dataQuery.fields().include("data");
  93. break;
  94. default:
  95. break;
  96. }
  97. dataQuery.addCriteria(where("id").is(data_id));
  98. PhotoData photoData = mongoTemplate.findOne(dataQuery, PhotoData.class);
  99. return photoData;
  100. }
  101. @Override
  102. public List<Photo> searchPhotos(String searchTerm) {
  103. List<Photo> photos = mongoTemplate.find(new Query(where("keywords").is(searchTerm)), Photo.class);
  104. return photos;
  105. }
  106. @Override
  107. public List<String> searchKeywords(String term) {
  108. List<String> keywords = new ArrayList<String>();
  109. Query query = new Query(where("keywords").regex("^"+term));
  110. query.fields().include("keywords");
  111. List<Photo> photos = mongoTemplate.find(query, Photo.class);
  112. for (Photo p : photos) {
  113. List<String> k = p.getKeywords();
  114. for (String s : k) {
  115. if (s.startsWith(term)) {
  116. keywords.add(s);
  117. }
  118. }
  119. }
  120. return keywords;
  121. }
  122. @Override
  123. public long count() {
  124. return mongoTemplate.count(new Query(), Photo.class);
  125. }
  126. }