use of com.cubrid.common.ui.cubrid.table.importhandler.ImportFileDescription in project cubrid-manager by CUBRID.
the class ImportFromXlsRunnable method doRun.
/* (non-Javadoc)
* @see com.cubrid.common.ui.cubrid.table.dialog.imp.progress.AbsImportDataThread#doRun()
*/
@Override
protected void doRun() throws Exception {
// FIXME move this logic to core module
if (pStmt == null) {
handleEvent(new ImportDataFailedEvent(tableName, tableConfig.getLineCount(), tableConfig.getInsertDML(), "Invalid parameters."));
return;
}
String fileName = tableConfig.getFilePath();
boolean isFirstRowAsColumn = tableConfig.isFirstRowAsColumn();
File parentFile;
File file = new File(fileName);
if (file.exists()) {
parentFile = file.getParentFile();
} else {
parentFile = null;
}
int start = 0;
if (isFirstRowAsColumn) {
start = 1;
}
try {
XLSImportFileHandler fileHandler = (XLSImportFileHandler) ImportFileHandlerFactory.getHandler(fileName, importConfig);
Sheet[] sheets = fileHandler.getSheets();
ImportFileDescription fileDesc = getFileDescription(fileHandler);
int currentRow = 0;
List<ImportRowData> rowList = new ArrayList<ImportRowData>();
for (int sheetNum = 0; sheetNum < sheets.length; sheetNum++) {
int rows = fileDesc.getItemsNumberOfSheets().get(sheetNum);
Sheet sheet = sheets[sheetNum];
String[] rowContent = null;
String[] patterns = null;
ImportRowData rowData = null;
String content = null;
String pattern = null;
for (int i = start; i < rows; i++) {
boolean isSuccess = true;
try {
int columns = sheet.getColumns();
for (int j = 0; j < columns; j++) {
rowContent = new String[columns];
patterns = new String[columns];
Cell[] cells = sheet.getRow(i);
for (int k = 0; k < cells.length; k++) {
Cell cell = cells[k];
content = null;
pattern = null;
if (cell == null) {
content = null;
} else if (cell instanceof EmptyCell) {
content = null;
} else {
content = cell.getContents();
CellFormat format = cell.getCellFormat();
if (format != null && format.getFormat() != null) {
pattern = format.getFormat().getFormatString();
}
}
rowContent[k] = content;
patterns[k] = pattern;
}
}
/*Process the row data*/
rowData = processRowData(rowContent, patterns, currentRow, parentFile);
pStmt.addBatch();
rowList.add(rowData);
currentRow++;
/*Process commit*/
if (rowList.size() >= importConfig.getCommitLine()) {
commit(rowList);
}
if (isCanceled) {
return;
}
} catch (SQLException ex) {
isSuccess = false;
LOGGER.debug(ex.getMessage());
} catch (StopPerformException ex) {
isSuccess = false;
handleEvent(new ImportDataTableFailedEvent(tableName));
LOGGER.debug("Stop import by user setting.");
break;
} catch (OutOfMemoryError error) {
throw new RuntimeException(error);
} finally {
if (!isSuccess) {
rowData.setStatus(ImportStatus.STATUS_COMMIT_FAILED);
writeErrorLog(rowData);
}
}
}
}
if (rowList.size() > 0) {
commit(rowList);
}
} catch (BiffException ex) {
throw new RuntimeException(ex);
} catch (IOException ex) {
throw new RuntimeException(ex);
} catch (Exception ex) {
throw new RuntimeException(ex);
} catch (OutOfMemoryError error) {
throw new RuntimeException(error);
}
}
use of com.cubrid.common.ui.cubrid.table.importhandler.ImportFileDescription in project cubrid-manager by CUBRID.
the class CSVImportFileHandler method getSourceFileInfo.
/**
* Get the source file information
*
* @return ImportFileDescription
* @throws Exception in process.
*/
public ImportFileDescription getSourceFileInfo() throws Exception {
// FIXME move this logic to core module
final List<String> colsList = new ArrayList<String>();
final List<Integer> itemsNumberOfSheets = new ArrayList<Integer>();
final ImportFileDescription importFileDescription = new ImportFileDescription(0, 1, colsList);
importFileDescription.setItemsNumberOfSheets(itemsNumberOfSheets);
IRunnableWithProgress runnable = new IRunnableWithProgress() {
public void run(final IProgressMonitor monitor) {
monitor.beginTask("", IProgressMonitor.UNKNOWN);
int totalRowCount = 0;
CSVReader csvReader = null;
try {
if (fileCharset == null || fileCharset.trim().length() == 0) {
csvReader = new CSVReader(new FileReader(fileName));
} else {
csvReader = new CSVReader(new InputStreamReader(new FileInputStream(fileName), fileCharset));
}
String[] cvsRow = csvReader.readNext();
if (cvsRow != null) {
totalRowCount++;
for (String title : cvsRow) {
colsList.add(title);
}
}
while (!monitor.isCanceled() && csvReader.readNext() != null) {
totalRowCount++;
}
itemsNumberOfSheets.add(Integer.valueOf(totalRowCount));
if (monitor.isCanceled()) {
throw new InterruptedException();
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
throw new RuntimeException(e);
} finally {
importFileDescription.setTotalCount(totalRowCount);
importFileDescription.setFirstRowCols(colsList);
importFileDescription.setItemsNumberOfSheets(itemsNumberOfSheets);
closeFile(csvReader);
monitor.done();
}
}
};
PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable);
return importFileDescription;
}
use of com.cubrid.common.ui.cubrid.table.importhandler.ImportFileDescription in project cubrid-manager by CUBRID.
the class TxtImportFileHandler method getSourceFileInfo.
/**
* Get the source file information
*
* @return ImportFileDescription
* @throws Exception in process.
*/
public ImportFileDescription getSourceFileInfo() throws Exception {
// FIXME move this logic to core module
final List<String> colsList = new ArrayList<String>();
final List<Integer> itemsNumberOfSheets = new ArrayList<Integer>();
final ImportFileDescription importFileDescription = new ImportFileDescription(0, 1, colsList);
importFileDescription.setItemsNumberOfSheets(itemsNumberOfSheets);
IRunnableWithProgress runnable = new IRunnableWithProgress() {
public void run(final IProgressMonitor monitor) {
monitor.beginTask("", IProgressMonitor.UNKNOWN);
int totalRowCount = 0;
TxtReader txtReader = null;
try {
if (fileCharset == null || fileCharset.trim().length() == 0) {
txtReader = new TxtReader(new FileReader(fileName), separator, rowSeparator);
} else {
txtReader = new TxtReader(new InputStreamReader(new FileInputStream(fileName), fileCharset), separator, rowSeparator);
}
String[] txtRow = txtReader.readNextRow();
if (txtRow != null) {
totalRowCount++;
for (String title : txtRow) {
colsList.add(title);
}
}
while (!monitor.isCanceled() && txtReader.readNextRow() != null) {
totalRowCount++;
}
itemsNumberOfSheets.add(Integer.valueOf(totalRowCount));
if (monitor.isCanceled()) {
throw new InterruptedException();
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
throw new RuntimeException(e);
} finally {
importFileDescription.setTotalCount(totalRowCount);
importFileDescription.setFirstRowCols(colsList);
importFileDescription.setItemsNumberOfSheets(itemsNumberOfSheets);
closeFile(txtReader);
monitor.done();
}
}
};
PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable);
return importFileDescription;
}
use of com.cubrid.common.ui.cubrid.table.importhandler.ImportFileDescription in project cubrid-manager by CUBRID.
the class XLSXImportFileHandler method getSourceFileInfo.
/**
* Get the source file information
*
* @return ImportFileDescription
* @throws InvocationTargetException Exception in process
* @throws InterruptedException The exception
*/
public ImportFileDescription getSourceFileInfo() throws InvocationTargetException, InterruptedException {
// FIXME move this logic to core module
synchronized (this) {
if (importFileDescription == null) {
final XlsxRowNumberHandler xlsxRowNumberHandler = new XlsxRowNumberHandler(fileName);
IRunnableWithProgress runnable = new IRunnableWithProgress() {
public void run(final IProgressMonitor monitor) {
monitor.beginTask("", IProgressMonitor.UNKNOWN);
Thread thread = new //$NON-NLS-1$
Thread(//$NON-NLS-1$
"Monitoring cancel") {
public void run() {
while (monitor != null && !monitor.isCanceled() && !xlsxRowNumberHandler.isEnd()) {
try {
sleep(100);
} catch (InterruptedException e) {
LOGGER.error(e.getMessage(), e);
}
}
if (monitor != null && monitor.isCanceled()) {
xlsxRowNumberHandler.setCancel(true);
monitor.done();
}
}
};
thread.start();
xlsxRowNumberHandler.process();
monitor.done();
}
};
PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable);
List<Integer> itemsNumberOfSheets = null;
int totalRowCount = 0;
List<String> colsLst = xlsxRowNumberHandler.getHeadInfo();
if (xlsxRowNumberHandler.isCancel()) {
throw new InterruptedException();
} else {
totalRowCount = xlsxRowNumberHandler.getNumberOfAllRow();
itemsNumberOfSheets = xlsxRowNumberHandler.getItemsNumberOfSheets();
}
int sheetNum = 0;
if (itemsNumberOfSheets != null) {
sheetNum = itemsNumberOfSheets.size();
}
importFileDescription = new ImportFileDescription(totalRowCount, sheetNum, colsLst);
importFileDescription.setItemsNumberOfSheets(itemsNumberOfSheets);
}
return importFileDescription;
}
}
Aggregations