/src/main/java/stream/vispar/server/core/MongoDBConnector.java

https://github.com/deermichel/pse-server · Java · 158 lines · 108 code · 21 blank · 29 comment · 3 complexity · 73c99c5e971cf781126c853305478a7d MD5 · raw file

  1. package stream.vispar.server.core;
  2. import java.util.Collection;
  3. import java.util.HashSet;
  4. import java.util.Objects;
  5. import org.bson.Document;
  6. import com.mongodb.MongoClient;
  7. import com.mongodb.MongoClientURI;
  8. import com.mongodb.MongoException;
  9. import com.mongodb.client.MongoDatabase;
  10. import stream.vispar.jsonconverter.IJsonConverter;
  11. import stream.vispar.jsonconverter.exceptions.JsonParseException;
  12. import stream.vispar.jsonconverter.exceptions.JsonSyntaxException;
  13. import stream.vispar.jsonconverter.gson.GsonConverter;
  14. import stream.vispar.jsonconverter.types.IJsonElement;
  15. import stream.vispar.server.localization.LocalizedString;
  16. /**
  17. * Database connector implementation for MongoDB.
  18. *
  19. * @author Micha Hanselmann
  20. */
  21. public class MongoDBConnector implements IDatabaseConnector {
  22. /**
  23. * Server instance the connector belongs to.
  24. */
  25. private final ServerInstance instance;
  26. /**
  27. * Url of the MongoDB database.
  28. */
  29. private final MongoClientURI url;
  30. /**
  31. * MongoDB connection driver.
  32. */
  33. private MongoClient client;
  34. /**
  35. * MongoDB database.
  36. */
  37. private MongoDatabase database;
  38. /**
  39. * Json converter.
  40. */
  41. private final IJsonConverter jsonConv;
  42. /**
  43. * Constructs a new {@link MongoDBConnector}.
  44. *
  45. * @param instance
  46. * the {@link ServerInstance} the connector belongs to.
  47. * @param url
  48. * the url of the MongoDB database to connect to.
  49. */
  50. public MongoDBConnector(ServerInstance instance, String url) {
  51. this.instance = Objects.requireNonNull(instance);
  52. this.url = new MongoClientURI("mongodb://" + Objects.requireNonNull(url));
  53. this.jsonConv = new GsonConverter();
  54. }
  55. @Override
  56. public void connect() {
  57. client = new MongoClient(url);
  58. database = client.getDatabase("vispar");
  59. // try to connect (else stop server)
  60. try {
  61. client.getAddress();
  62. instance.getLogger().log(
  63. String.format(instance.getLocalizer().get(LocalizedString.CONNECTED_TO_DATABASE),
  64. url));
  65. } catch (MongoException e) {
  66. instance.getLogger().logError(
  67. String.format(instance.getLocalizer().get(LocalizedString.CANNOT_CONNECT_DATABASE),
  68. e.toString()));
  69. instance.stop();
  70. System.exit(1);
  71. }
  72. }
  73. @Override
  74. public void disconnect() {
  75. client.close();
  76. }
  77. @Override
  78. public void createCollection(String name) {
  79. database.createCollection(Objects.requireNonNull(name));
  80. }
  81. @Override
  82. public void dropCollection(String name) {
  83. database.getCollection(Objects.requireNonNull(name)).drop();
  84. }
  85. @Override
  86. public IJsonElement insert(String collection, IJsonElement data) {
  87. Document doc = Document.parse(data.toString());
  88. database.getCollection(collection).insertOne(doc);
  89. try {
  90. return jsonConv.fromString(doc.toJson());
  91. } catch (JsonParseException | JsonSyntaxException e) {
  92. instance.getLogger().logError(e.toString());
  93. }
  94. return null;
  95. }
  96. @Override
  97. public IJsonElement find(String collection, String key, String value) {
  98. Document doc = database.getCollection(collection).find(new Document(key, value)).first();
  99. if (doc == null) {
  100. return null;
  101. }
  102. try {
  103. return jsonConv.fromString(doc.toJson());
  104. } catch (JsonParseException | JsonSyntaxException e) {
  105. instance.getLogger().logError(e.toString());
  106. }
  107. return null;
  108. }
  109. @Override
  110. public Collection<IJsonElement> getAll(String collection) {
  111. HashSet<IJsonElement> result = new HashSet<>();
  112. try {
  113. for (Document doc : database.getCollection(collection).find()) {
  114. result.add(jsonConv.fromString(doc.toJson()));
  115. }
  116. return result;
  117. } catch (JsonParseException | JsonSyntaxException e) {
  118. instance.getLogger().logError(e.toString());
  119. }
  120. return null;
  121. }
  122. @Override
  123. public IJsonElement update(String collection, String key, String value, IJsonElement data) {
  124. Document doc = Document.parse(data.toString());
  125. database.getCollection(collection).replaceOne(new Document(key, value), doc);
  126. try {
  127. return jsonConv.fromString(doc.toJson());
  128. } catch (JsonParseException | JsonSyntaxException e) {
  129. instance.getLogger().logError(e.toString());
  130. }
  131. return null;
  132. }
  133. @Override
  134. public void delete(String collection, String key, String value) {
  135. database.getCollection(collection).deleteOne(new Document(key, value));
  136. }
  137. }