package com.github.mongorest.client; import java.util.List; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.GenericType; import com.sun.jersey.api.client.ClientResponse.Status; public class MongoRestServiceProxyImpl implements MongoRestServiceProxy { private Logger logger = LoggerFactory.getLogger(MongoRestServiceProxyImpl.class); // Note: inject-able using Spring private String serviceUri = "http://localhost:9002/api/mongo"; private String serviceUser = "admin"; private String servicePassword = "r3$tfuLM0ng0"; @Override public String createDatabase(com.github.mongorest.to.request.Database database) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases"; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, database); String location = null; if (response.getStatus() == Status.CREATED.getStatusCode()) { location = response.getLocation().toString(); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return location; } @Override public com.github.mongorest.to.response.Database findDatabase(String dbName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); com.github.mongorest.to.response.Database database = null; if (response.getStatus() == Status.OK.getStatusCode()) { database = response.getEntity(com.github.mongorest.to.response.Database.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return database; } @Override public com.github.mongorest.to.response.Database updateDatabase(com.github.mongorest.to.request.Database database) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + database.getName(); ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .put(ClientResponse.class, database); com.github.mongorest.to.response.Database updatedDatabase = null; if (response.getStatus() == Status.OK.getStatusCode() || response.getStatus() == Status.CREATED.getStatusCode()) { updatedDatabase = response.getEntity(com.github.mongorest.to.response.Database.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return updatedDatabase; } @Override public boolean deleteDatabase(String dbName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public List<com.github.mongorest.to.response.Database> findDatabases() { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases"; return clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Database>>() { }); } @Override public boolean deleteDatabases() { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases"; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public String createCollection(String dbName, com.github.mongorest.to.request.Collection collection) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections"; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); String location = null; if (response.getStatus() == Status.CREATED.getStatusCode()) { location = response.getLocation().toString(); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return location; } @Override public com.github.mongorest.to.response.Collection findCollection(String dbName, String collName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); com.github.mongorest.to.response.Collection collection = null; if (response.getStatus() == Status.OK.getStatusCode()) { collection = response.getEntity(com.github.mongorest.to.response.Collection.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return collection; } @Override public com.github.mongorest.to.response.Collection updateCollection(String dbName, com.github.mongorest.to.request.Collection collection) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collection.getName(); ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .put(ClientResponse.class, collection); com.github.mongorest.to.response.Collection updatedCollection = null; if (response.getStatus() == Status.OK.getStatusCode() || response.getStatus() == Status.CREATED.getStatusCode()) { updatedCollection = response.getEntity(com.github.mongorest.to.response.Collection.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return updatedCollection; } @Override public boolean deleteCollection(String dbName, String collName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public List<com.github.mongorest.to.response.Collection> findCollections(String dbName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections"; return clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Collection>>() { }); } @Override public boolean deleteCollections(String dbName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections"; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public String createIndex(String dbName, String collName, com.github.mongorest.to.request.Index index) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/indexes"; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index); String location = null; if (response.getStatus() == Status.CREATED.getStatusCode()) { location = response.getLocation().toString(); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return location; } @Override public com.github.mongorest.to.response.Index findIndex(String dbName, String collName, String indexName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/indexes/" + indexName; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); com.github.mongorest.to.response.Index index = null; if (response.getStatus() == Status.OK.getStatusCode()) { index = response.getEntity(com.github.mongorest.to.response.Index.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return index; } @Override public boolean deleteIndex(String dbName, String collName, String indexName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/indexes/" + indexName; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public List<com.github.mongorest.to.response.Index> findIndexes(String dbName, String collName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/indexes"; return clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Index>>() { }); } @Override public boolean deleteIndexes(String dbName, String collName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/indexes"; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public String createDocument(String dbName, String collName, com.github.mongorest.to.request.Document document) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/documents"; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); String location = null; if (response.getStatus() == Status.CREATED.getStatusCode()) { location = response.getLocation().toString(); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return location; } @Override public com.github.mongorest.to.response.Document findDocument(String dbName, String collName, String docId) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/documents/" + docId; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); com.github.mongorest.to.response.Document document = null; if (response.getStatus() == Status.OK.getStatusCode()) { document = response.getEntity(com.github.mongorest.to.response.Document.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return document; } @Override public com.github.mongorest.to.response.Document updateDocument(String dbName, String collName, com.github.mongorest.to.request.Document document) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/documents/" + document.getDocId(); ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .put(ClientResponse.class, document); com.github.mongorest.to.response.Document updatedDocument = null; if (response.getStatus() == Status.OK.getStatusCode() || response.getStatus() == Status.CREATED.getStatusCode()) { updatedDocument = response.getEntity(com.github.mongorest.to.response.Document.class); } else { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return updatedDocument; } @Override public boolean deleteDocument(String dbName, String collName, String docId) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/documents/" + docId; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public List<com.github.mongorest.to.response.Document> findDocuments(String dbName, String collName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/documents"; return clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Document>>() { }); } @Override public boolean deleteDocuments(String dbName, String collName) { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/databases/" + dbName + "/collections/" + collName + "/documents"; ClientResponse response = clientHandle.resource(uri).delete(ClientResponse.class); boolean deleted = response.getStatus() == Status.OK.getStatusCode(); if (!deleted) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return deleted; } @Override public boolean ping() { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/ping"; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); boolean alive = response.getStatus() == Status.OK.getStatusCode(); if (!alive) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return alive; } @Override public boolean shutdown() { Client clientHandle = MongoServiceConnection.getClientHandle(serviceUser, servicePassword, 0, 0); String uri = serviceUri + "/shutdown"; ClientResponse response = clientHandle.resource(uri).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); boolean shutdown = response.getStatus() == Status.OK.getStatusCode(); if (!shutdown) { logger.error("uri=" + uri + ", status=" + response.getStatus()); } return shutdown; } @Override public void setServiceUser(String serviceUser) { this.serviceUser = serviceUser; } @Override public void setServicePassword(String servicePassword) { this.servicePassword = servicePassword; } @Override public void setServiceUri(String serviceUri) { this.serviceUri = serviceUri; } }