/******************************************************************************* * 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.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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.Messages; import com.hangum.tadpole.importexport.core.utils.SQLQueryUtil; import com.hangum.tadpole.mongodb.core.query.MongoDBQuery; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** * query를 몽고디비로 임포트합니다. * * @author hangum * */ public class QueryToMongoDBImport extends DBImport { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(QueryToMongoDBImport.class); private String colName; private String userQuery; private boolean isExistOnDelete; public QueryToMongoDBImport(UserDBDAO sourceUserDB, UserDBDAO targetUserDB, String colName, String userQuery, boolean isExistOnDelete) { super(sourceUserDB, targetUserDB); this.colName = colName; this.userQuery = userQuery; this.isExistOnDelete = isExistOnDelete; } /** * table import */ public Job workTableImport() { if("".equals(userQuery.trim())) { //$NON-NLS-1$ MessageDialog.openInformation(null, CommonMessages.get().Confirm, Messages.get().QueryToMongoDBImport_2); return null; } if("".equals(colName.trim())) { MessageDialog.openInformation(null, CommonMessages.get().Confirm, Messages.get().QueryToMongoDBImport_5); return null; } // job Job job = new Job("Execute data Import.") { //$NON-NLS-1$ @Override public IStatus run(IProgressMonitor monitor) { monitor.beginTask("Start import....", IProgressMonitor.UNKNOWN); //$NON-NLS-1$ try { monitor.subTask(userQuery + " table importing..."); //$NON-NLS-1$ if(isExistOnDelete) MongoDBQuery.existOnDelete(getTargetUserDB(), colName); insertMongoDB(); } catch(Exception e) { logger.error("press ok button", e); //$NON-NLS-1$ 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() throws Exception { SQLQueryUtil qu = new SQLQueryUtil(getSourceUserDB(), userQuery); while(qu.hasNext()) { qu.nextQuery(); Map<Integer, String> mapCNameToIndex = qu.getMapColumns(); List<HashMap<Integer, Object>> listTableData = qu.getTableDataList(); // row 단위 List<DBObject> listDBObject = new ArrayList<DBObject>(); for (int i=0; i<listTableData.size(); i++) { HashMap<Integer, Object> resultMap = listTableData.get(i); DBObject insertObject = new BasicDBObject(); // column 단위 for(int j=0; j<mapCNameToIndex.size(); j++) { // BigDecimal is not support mongodb if(resultMap.get(j) instanceof java.math.BigDecimal) { BigDecimal db = (BigDecimal)resultMap.get(j); insertObject.put(mapCNameToIndex.get(j), db.longValue()); } else { insertObject.put(mapCNameToIndex.get(j), resultMap.get(j)); } } listDBObject.add(insertObject); } // end for MongoDBQuery.insertDocument(getTargetUserDB(), colName, listDBObject); } } }