package com.cse10.analyzer;
/**
* Created by sampath on 1/26/15.
*/
import com.cse10.database.HibernateUtil;
import com.google.gson.Gson;
import com.mongodb.*;
import java.net.UnknownHostException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;
import com.mongodb.util.JSON;
import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import static java.util.concurrent.TimeUnit.SECONDS;
public class Uploader{
MongoClient mongoClient;
String dbName;
public Uploader(String user, String password, String dbName, String host, String port){
this.dbName = dbName;
MongoCredential credential = MongoCredential.createMongoCRCredential(user, dbName, password.toCharArray());
try {
ServerAddress address = new ServerAddress(host,Integer.parseInt(port));
mongoClient = new MongoClient(address, Arrays.asList(credential));
//mongoClient = new MongoClient(address);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
/*
* upload data to remort database
*/
public void upload(String sqlTable, String mongoCollection){
//remove existing data
DB db = mongoClient.getDB(dbName);
DBCollection collection = db.getCollection(mongoCollection);
BasicDBObject mQuery = new BasicDBObject();
collection.remove(mQuery);
//get the results from local database
Session session = HibernateUtil.getSessionFactory().openSession();
String sql = "SELECT * FROM "+sqlTable;
SQLQuery sQuery = session.createSQLQuery(sql);
sQuery.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List results = sQuery.list();
session.close();
//upload data to remote database
DBObject obj = new BasicDBList();
BulkWriteOperation builder = collection.initializeOrderedBulkOperation();
for (int i=0; i<results.size(); i++){
String json = new Gson().toJson(results.get(i));
DBObject dbObject = (DBObject) JSON.parse(json);
builder.insert(dbObject);
}
BulkWriteResult result = builder.execute();
System.out.println("updating "+sqlTable+" to the collection "+ mongoCollection +" completed");
}
}