/*
* Copyright 2014-2016 CyberVision, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaaproject.kaa.server.common.nosql.mongo.dao;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.WriteConcern;
import com.mongodb.util.JSON;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MongoDataLoader {
public static final String DATA_FILE = "mongo.data";
public static final String COLLECTION_NAME_LINE = "#";
private static final Logger LOG = LoggerFactory.getLogger(MongoDataLoader.class);
private static DBCollection currentCollection = null;
public static void loadData() throws IOException {
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(DATA_FILE);
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String jsonLine = "";
while ((jsonLine = reader.readLine()) != null) {
if (StringUtils.isNotBlank(jsonLine)) {
String currentLine = jsonLine.trim();
if (jsonLine.startsWith(COLLECTION_NAME_LINE)) {
setCollectionFromName(currentLine);
} else {
currentCollection.insert((DBObject) JSON.parse(jsonLine), WriteConcern.ACKNOWLEDGED);
}
}
}
input.close();
LOG.info("Load data finished.");
}
private static void setCollectionFromName(String line) {
int idx = line.indexOf(COLLECTION_NAME_LINE);
if (idx != -1) {
String collectionName = line.substring(++idx, line.length()).trim();
if (StringUtils.isNotEmpty(collectionName)) {
LOG.info("Loading data into " + collectionName + " collection");
currentCollection = MongoDBTestRunner.getDB().getCollectionFromString(collectionName);
} else {
new RuntimeException("Incorrect collection name:" + collectionName
+ ". Please write collection name in correct format: # collectionName");
}
} else {
throw new RuntimeException("Incorrect format of data file. Please write collection name in correct format: # collectionName");
}
}
public static void clearDBData() {
DB db = MongoDBTestRunner.getDB();
if (db != null) {
db.dropDatabase();
}
}
}