/src/main/java/com/github/dansmithy/sanjuan/dao/SequenceMongoIdGenerator.java

https://github.com/dansmithy/sanjuan · Java · 44 lines · 33 code · 11 blank · 0 comment · 3 complexity · 35659e27ecd9ca4619bd229b7efc0d94 MD5 · raw file

  1. package com.github.dansmithy.sanjuan.dao;
  2. import javax.inject.Inject;
  3. import javax.inject.Named;
  4. import org.springframework.data.mongodb.core.MongoTemplate;
  5. import org.springframework.data.mongodb.core.query.Criteria;
  6. import org.springframework.data.mongodb.core.query.Query;
  7. import org.springframework.data.mongodb.core.query.Update;
  8. import com.mongodb.DBObject;
  9. @Named
  10. public class SequenceMongoIdGenerator implements MongoIdGenerator {
  11. private final MongoTemplate mongoTemplate;
  12. @Inject
  13. public SequenceMongoIdGenerator(MongoTemplate mongoTemplate) {
  14. this.mongoTemplate = mongoTemplate;
  15. }
  16. @Override
  17. public Long getNextLongId(String type) {
  18. Update update = new Update().inc("seq", 1);
  19. DBObject idObject = mongoTemplate.getCollection("seq").findAndModify(createSimpleQuery("_id", type).getQueryObject(), update.getUpdateObject());
  20. if (idObject == null) {
  21. createFirstLong(type);
  22. return getNextLongId(type);
  23. } else {
  24. return (Long)idObject.get("seq");
  25. }
  26. }
  27. private void createFirstLong(String type) {
  28. mongoTemplate.insert(new MongoSequence(type, new Long(1)));
  29. }
  30. private static <T> Query createSimpleQuery(String propName, T value) {
  31. return new Query(Criteria.where(propName).is(value));
  32. }
  33. }