/*******************************************************************************
* Copyright (c) 2013 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.mongodb.core.composite.result;
import java.util.List;
import org.apache.log4j.Logger;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.mongodb.core.query.MongoDBQuery;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
/**
* mongodb query util
*
* @author hangum
*/
public class MongoDBQueryUtil {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(MongoDBQueryUtil.class);
private int DATA_COUNT = 1000;
private UserDBDAO userDB;
private String requestQuery;
private List<DBObject> listDBOject;
/** 처음한번은 반듯이 동작해야 하므로 */
private boolean isFirst = true;
private int startPoint = 0;
private int nextPoint = -1;
public MongoDBQueryUtil(UserDBDAO userDB, String requestQuery) {
this.userDB = userDB;
this.requestQuery = requestQuery;
}
public boolean nextQuery() throws Exception {
startPoint = nextPoint+1;
nextPoint = nextPoint + DATA_COUNT;
runSQLSelect();
return hasNext();
}
/**
* 테이블에 쿼리를 실행합니다.
*/
private void runSQLSelect() throws Exception {
DBCollection dbCollection = MongoDBQuery.findCollection(userDB, requestQuery);
DBCursor dbCursor = dbCollection.find().skip(startPoint).limit(DATA_COUNT);
listDBOject = dbCursor.toArray();
}
public boolean hasNext() {
if(isFirst) {
isFirst = false;
} else {
if(listDBOject.size() < DATA_COUNT) return false;
}
return true;
}
public List<DBObject> getCollectionDataList() {
return listDBOject;
}
}