/* * RESTHeart - the Web API for MongoDB * Copyright (C) SoftInstigate Srl * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.restheart.db; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.util.JSONParseException; import java.util.ArrayList; import java.util.List; import org.bson.BsonDocument; import org.bson.BsonString; import org.restheart.handlers.IllegalQueryParamenterException; /** * * @author Maurizio Turatti {@literal <maurizio@softinstigate.com>} */ public interface Database { BsonDocument METADATA_QUERY = new BsonDocument("_id", new BsonString("_properties")); /** * * @param dbName * @param collectionName * @param requestEtag * @param checkEtag * @return HTTP status code */ OperationResult deleteCollection( String dbName, String collectionName, String requestEtag, boolean checkEtag); /** * * @param dbName * @param requestEtag * @param checkEtag * @return HTTP status code */ OperationResult deleteDatabase( String dbName, String requestEtag, boolean checkEtag); /** * @param dbName * @return true if DB dbName exists * */ boolean doesDbExist(String dbName); /** * @param dbName * @param collName * @return true if exists the collection collName exists in DB dbName * */ boolean doesCollectionExist( String dbName, String collName); /** * * @param dbName * @param collectionName * @return A Collection */ DBCollection getCollectionLegacy( String dbName, String collectionName); /** * * @param dbName * @param collectionName * @return A Collection */ MongoCollection<BsonDocument> getCollection( String dbName, String collectionName); /** * * @param collection * @param page * @param pagesize * @param sortBy * @param filter * @param keys * @param cursorAllocationPolicy * @return Collection Data as ArrayList of BsonDocument */ ArrayList<BsonDocument> getCollectionData( MongoCollection<BsonDocument> collection, int page, int pagesize, BsonDocument sortBy, BsonDocument filter, BsonDocument keys, CursorPool.EAGER_CURSOR_ALLOCATION_POLICY cursorAllocationPolicy); /** * * @param dbName * @param collectionName * @return Collection properties */ BsonDocument getCollectionProperties( String dbName, String collectionName); /** * * @param collection * @param filters * @return the number of documents in the given collection (taking into * account the filters in case) */ long getCollectionSize( final MongoCollection<BsonDocument> collection, BsonDocument filters); /** * * @param dbName * @return the Mongo DB */ DB getDBLegacy(String dbName); /** * * @param dbName * @return the MongoDatabase */ MongoDatabase getDatabase(String dbName); /** * @param collections the collection names * @return the number of collections in this db * */ long getDBSize(List<String> collections); /** * @param dbName * @param collections the collections list as got from getCollectionNames() * @param page * @param pagesize * @return the db data * @throws org.restheart.handlers.IllegalQueryParamenterException * */ List<BsonDocument> getDatabaseData( String dbName, List<String> collections, int page, int pagesize) throws IllegalQueryParamenterException; /** * * @return A List of database names */ List<String> getDatabaseNames(); /** * * @param dbName * @return A List of collection names */ List<String> getCollectionNames(String dbName); /** * @param dbName * @return the db props * */ BsonDocument getDatabaseProperties(String dbName); /** * * @param dbName * @param collectionName * @param content * @param requestEtag * @param updating * @param patching * @param checkEtag * @return */ OperationResult upsertCollection( String dbName, String collectionName, BsonDocument content, String requestEtag, boolean updating, boolean patching, boolean checkEtag); /** * * @param dbName * @param content * @param requestEtag * @param updating * @param patching * @param checkEtag * @return */ OperationResult upsertDB( String dbName, BsonDocument content, String requestEtag, boolean updating, boolean patching, boolean checkEtag); /** * * @param dbName * @param collection * @param indexId * @return the operation result */ int deleteIndex( String dbName, String collection, String indexId); /** * * @param dbName * @param collectionName * @return A List of indexes for collectionName in dbName */ List<BsonDocument> getCollectionIndexes( String dbName, String collectionName); /** * * @param dbName * @param collection * @param keys * @param options */ void createIndex( String dbName, String collection, BsonDocument keys, BsonDocument options); /** * Returs the FindIterable of the collection applying sorting, filtering and * projection. * * @param collection the mongodb MongoCollection<BsonDocument> object * @param sortBy the Deque collection of fields to use for sorting (prepend * field name with - for descending sorting) * @param filters the filters to apply. it is a Deque collection of mongodb * query conditions. * @param keys * @return * @throws JSONParseException */ FindIterable<BsonDocument> getFindIterable( MongoCollection<BsonDocument> collection, BsonDocument sortBy, BsonDocument filters, BsonDocument keys) throws JSONParseException; }