/******************************************************************************* * 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.importexport.core.utils.mongodb; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.importexport.Activator; import com.hangum.tadpole.importexport.core.editors.mongodb.composite.ModTableDAO; import com.hangum.tadpole.importexport.core.utils.MongoDBQueryUtil; import com.hangum.tadpole.mongodb.core.query.MongoDBQuery; import com.mongodb.DBObject; /** * mongodb collection을 mongodb로 넘깁니다. * * @author hangum * */ public class MongoDBCollectionToMongodBImport extends DBImport { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(MongoDBCollectionToMongodBImport.class); private List<ModTableDAO> listModeTable; /** * * @param sourceUserDB * @param targetUserDB * @param listModeTable */ public MongoDBCollectionToMongodBImport(UserDBDAO sourceUserDB, UserDBDAO targetUserDB, List<ModTableDAO> listModeTable) { super(sourceUserDB, targetUserDB); this.listModeTable = listModeTable; } @Override /** * table import */ public Job workTableImport() { if(0 == listModeTable.size()) { MessageDialog.openInformation(null, CommonMessages.get().Confirm, "Please select table"); return null; } // job Job job = new Job("Execute data Import.") { @Override public IStatus run(IProgressMonitor monitor) { monitor.beginTask("Start import....", IProgressMonitor.UNKNOWN); try { for (ModTableDAO modTableDAO : listModeTable) { monitor.subTask(modTableDAO.getName() + " importing..."); // collection is exist on delete. String strNewColName = modTableDAO.getReName().trim().equals("")?modTableDAO.getName():modTableDAO.getReName(); if(modTableDAO.isExistOnDelete()) MongoDBQuery.existOnDelete(getSourceUserDB(), modTableDAO.getName()); // insert insertMongoDB(modTableDAO, strNewColName); } } catch(Exception e) { logger.error("press ok button", e); return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); //$NON-NLS-1$ } finally { monitor.done(); } return Status.OK_STATUS; } }; return job; } /** * 데이터를 입력합니다. * * @param modTableDAO * @param userDBDAO * @throws Exception */ private void insertMongoDB(ModTableDAO modTableDAO, String strNewColName) throws Exception { String workTable = modTableDAO.getName(); if(logger.isDebugEnabled()) logger.debug("[work collection]" + workTable); MongoDBQueryUtil qu = new MongoDBQueryUtil(getSourceUserDB(), workTable); while(qu.hasNext()) { qu.nextQuery(); // row 단위 List<DBObject> listDBObject = qu.getCollectionDataList(); if(logger.isDebugEnabled()) logger.debug("[work table]" + strNewColName + " size is " + listDBObject.size()); MongoDBQuery.insertDocument(getTargetUserDB(), strNewColName, listDBObject); } } }