/** * 设置是否添加到记忆库 * * @param selectedRowIds * @param state "yes" or "no"; */ public void changeSendToTmState(List<String> selectedRowIds, String state) { IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory(); try { operationHistory.execute( new SendTOTmOperation( "send-to-tm", xliffEditor.getTable(), selectedRowIds, xliffEditor.getXLFHandler(), state), null, null); } catch (ExecutionException e) { LOGGER.error("", e); MessageDialog.openError( xliffEditor.getSite().getShell(), Messages.getString("utils.NattableUtil.msgTitle2"), e.getMessage()); e.printStackTrace(); } }
/** 合并文本段 ; */ public void mergeSegment() { XLFHandler handler = xliffEditor.getXLFHandler(); List<String> lstRowId = xliffEditor.getSelectedRowIds(); List<String> lstAllRowId = xliffEditor.getXLFHandler().getAllRowIds(); Shell shell = xliffEditor.getSite().getShell(); if (lstRowId.size() < 2) { MessageDialog.openInformation( shell, Messages.getString("utils.NattableUtil.mergeSegment.msgTitle"), Messages.getString("utils.NattableUtil.mergeSegment.msg1")); return; } Collections.sort(lstRowId, new SortRowIdComparator()); Collections.sort(lstAllRowId, new SortRowIdComparator()); String rowId1 = lstRowId.get(0); String fileName = RowIdUtil.getFileNameByRowId(rowId1); if (fileName == null) { return; } if (handler.isLocked(rowId1)) { MessageDialog.openInformation( shell, Messages.getString("utils.NattableUtil.mergeSegment.msgTitle"), Messages.getString("utils.NattableUtil.mergeSegment.msg3")); return; } for (int i = 1; i < lstRowId.size(); i++) { String rowId = lstRowId.get(i); if (handler.isLocked(rowId)) { MessageDialog.openInformation( shell, Messages.getString("utils.NattableUtil.mergeSegment.msgTitle"), Messages.getString("utils.NattableUtil.mergeSegment.msg3")); return; } String fileName2 = RowIdUtil.getFileNameByRowId(rowId); // 数组集合必须在一个文件中才能合并 if (fileName2 == null || !fileName.equals(fileName2)) { MessageDialog.openInformation( shell, Messages.getString("utils.NattableUtil.mergeSegment.msgTitle"), Messages.getString("utils.NattableUtil.mergeSegment.msg4")); return; } // 判断所选文本段是否连续 String strCurTuId = RowIdUtil.getTUIdByRowId(rowId); String strPreTuId = RowIdUtil.getTUIdByRowId(lstRowId.get(i - 1)); if (strCurTuId == null || strPreTuId == null) { return; } if ((lstAllRowId.indexOf(rowId) - lstAllRowId.indexOf(lstRowId.get(i - 1))) != 1) { MessageDialog.openInformation( shell, Messages.getString("utils.NattableUtil.mergeSegment.msgTitle"), Messages.getString("utils.NattableUtil.mergeSegment.msg5")); return; } else { String curOriginal = RowIdUtil.getOriginalByRowId(rowId); String preOriginal = RowIdUtil.getOriginalByRowId(lstRowId.get(i - 1)); if (!curOriginal.equals(preOriginal)) { MessageDialog.openInformation( shell, Messages.getString("utils.NattableUtil.mergeSegment.msgTitle"), Messages.getString("utils.NattableUtil.mergeSegment.msg5")); return; } } } // Bug #2373:选择全部文本段合并后,无显示内容 if (lstRowId.size() == xliffEditor.getXLFHandler().getRowIds().size()) { xliffEditor.jumpToRow(0); } MergeSegmentOperation mergeOper = new MergeSegmentOperation("merge segment", xliffEditor, handler, lstRowId); IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory(); try { operationHistory.execute(mergeOper, null, null); } catch (Exception e) { LOGGER.error("", e); } }
/** * 添加选中文本段到记忆库 * * @param modelBean 数据库元数据 * @return boolean true : 完成入库 false 不完成入库 */ public boolean addSelectSegmentToTM() { List<String> selectedRowIds = xliffEditor.getSelectedRowIds(); if (selectedRowIds.size() == 0) { return false; } final Map<String, List<String>> tmpGroup = RowIdUtil.groupRowIdByFileName(selectedRowIds); boolean hasEmpty = false; XLFHandler handler = xliffEditor.getXLFHandler(); for (Entry<String, List<String>> entry : tmpGroup.entrySet()) { // 目标文本为空不添加到记忆库 List<String> rowIds = entry.getValue(); int size = rowIds.size(); handler.removeNullTgtContentRowId(rowIds); if (rowIds.size() != size) { hasEmpty = true; } handler.removeLockedRowIds(rowIds); } // 入库前进行品质检查 --robert final AutomaticQATrigger auto = new AutomaticQATrigger(xliffEditor.getXLFHandler()); int i = 0; for (Entry<String, List<String>> entry : tmpGroup.entrySet()) { List<String> rowIdList = tmpGroup.get(entry.getKey()); for (Iterator<String> it = rowIdList.iterator(); it.hasNext(); ) { String rowId = it.next(); String result = auto.beginAutoQa(true, rowId, i == 0 ? true : false); if (result == null) { return false; } if (result.length() > 1) { boolean respons = MessageDialog.openConfirm( xliffEditor.getTable().getShell(), Messages.getString("utils.NattableUtil.msgTitle3"), result); // 若选择ok,则继续操作 if (!respons) { it.remove(); selectedRowIds.remove(rowId); } } i++; } } if (selectedRowIds.size() <= 0) { return false; } String message = null; if (hasEmpty) { message = Messages.getString("utils.NattableUtil.msg1"); } if (message != null) { if (!MessageDialog.openConfirm( xliffEditor.getTable().getShell(), Messages.getString("utils.NattableUtil.msgTitle"), message)) { return false; } } final ArrayList<String> lstRowId = new ArrayList<String>(); final IProject project = ((FileEditorInput) (xliffEditor.getEditorInput())).getFile().getProject(); this.importer.setProject(project); final int contextSize = importer.getContextSize(); // IRunnableWithProgress runnable = new IRunnableWithProgress() { // public void run(IProgressMonitor monitor) throws InvocationTargetException, // InterruptedException { BusyIndicator.showWhile( xliffEditor.getSite().getShell().getDisplay(), new Runnable() { public void run() { // monitor.setTaskName(Messages.getString("utils.NattableUtil.task5")); // monitor.beginTask(Messages.getString("utils.NattableUtil.task5"), 2); if (!CommonFunction.checkEdition("L")) { if (!importer.checkImporter() && ProjectConfigerFactory.getProjectConfiger(project).getDefaultTMDb() != null) { final boolean[] state = new boolean[] {true}; Display.getDefault() .syncExec( new Runnable() { public void run() { state[0] = MessageDialog.openConfirm( Display.getDefault().getActiveShell(), Messages.getString("utils.NattableUtil.msgTitle2"), Messages.getString("utils.NattableUtil.msg.cantConnDefaultDb")); } }); if (!state[0]) { return; } } } for (Entry<String, List<String>> entry : tmpGroup.entrySet()) { List<String> rowIdList = tmpGroup.get(entry.getKey()); if (importer.checkImporter()) { String systemUser = Activator.getDefault() .getPreferenceStore() .getString(IPreferenceConstants.SYSTEM_USER); StringBuffer fileContent = xliffEditor .getXLFHandler() .generateTMXFileContent( systemUser, rowIdList, xliffEditor.getSrcColumnName(), xliffEditor.getTgtColumnName(), /*new SubProgressMonitor(monitor, 1)*/ null, contextSize, project); // if (monitor.isCanceled()) { // monitor.setTaskName(Messages.getString("utils.NattableUtil.task6")); // throw new OperationCanceledException(); // } if (fileContent != null) { int state = -1; try { state = importer.executeImport( fileContent.toString(), xliffEditor.getSrcColumnName(), /*monitor*/ null); } catch (ImportException e) { final String msg = e.getMessage(); Display.getDefault() .syncExec( new Runnable() { public void run() { MessageDialog.openInformation( Display.getDefault().getActiveShell(), Messages.getString("utils.NattableUtil.msgTitle"), msg); } }); return; } if (state == ITmImporter.IMPORT_STATE_FAILED) { Display.getDefault() .syncExec( new Runnable() { public void run() { MessageDialog.openInformation( xliffEditor.getTable().getShell(), Messages.getString("utils.NattableUtil.msgTitle"), Messages.getString("utils.NattableUtil.msg6")); } }); return; } else if (state == ITmImporter.IMPORT_STATE_NODB) { Display.getDefault() .syncExec( new Runnable() { public void run() { MessageDialog.openInformation( xliffEditor.getTable().getShell(), Messages.getString("utils.NattableUtil.msgTitle"), Messages.getString("utils.NattableUtil.msg7")); } }); } } } // Bug #2306:文本段添加不入库标记后不能改变为完成翻译状态 lstRowId.addAll(rowIdList); } Display.getDefault() .asyncExec( new Runnable() { public void run() { changeTgtState(lstRowId, "translated"); // xliffEditor.updateStatusLine(); } }); // monitor.done(); } }); // try { // new ProgressMonitorDialog(xliffEditor.getTable().getShell()).run(true, true, runnable); // } catch (InvocationTargetException e) { // e.printStackTrace(); // } catch (InterruptedException e) { // e.printStackTrace(); // } return true; }
/** * 批准或取消批准文本段 * * @param selectedRowIds1 选中行的rowId集合 * @param approve true:批准;false:取消批准; */ public void approveTransUnits(boolean isJumpNext) { List<String> selectedRowIds = xliffEditor.getSelectedRowIds(); if (selectedRowIds.size() == 0) { return; } final Map<String, List<String>> tmpGroup = RowIdUtil.groupRowIdByFileName(selectedRowIds); boolean hasEmpty = false; XLFHandler handler = xliffEditor.getXLFHandler(); for (Entry<String, List<String>> entry : tmpGroup.entrySet()) { // 目标文本为空不能执行批准,将要跳过 List<String> rowIds = entry.getValue(); int size = rowIds.size(); handler.removeNullTgtContentRowId(rowIds); if (rowIds.size() != size) { hasEmpty = true; } handler.removeLockedRowIds(rowIds); } // 入库前进行品质检查 --robert int i = 0; final AutomaticQATrigger auto = new AutomaticQATrigger(xliffEditor.getXLFHandler()); for (Entry<String, List<String>> entry : tmpGroup.entrySet()) { List<String> rowIdList = tmpGroup.get(entry.getKey()); for (Iterator<String> it = rowIdList.iterator(); it.hasNext(); ) { String rowId = it.next(); String result = auto.beginAutoQa(false, rowId, i == 0 ? true : false); if (result == null) { return; } if (result.length() > 1) { boolean respons = MessageDialog.openConfirm( xliffEditor.getSite().getShell(), Messages.getString("translation.ApproveSegmentHandler.msgTitle"), result); // 若选择ok,则继续操作 if (!respons) { it.remove(); selectedRowIds.remove(rowId); } } i++; } } String message = null; if (hasEmpty) { message = Messages.getString("utils.NattableUtil.msg1"); } if (message != null) { if (!MessageDialog.openConfirm( xliffEditor.getTable().getShell(), Messages.getString("utils.NattableUtil.msgTitle"), message)) { return; } } if (selectedRowIds.size() == 0) { return; } HsMultiActiveCellEditor.commit(true); // 将选中的文本段添加记忆库,在生成TMX的过程中会过滤掉标记不添加到记忆库的文本段 final IProject project = ((FileEditorInput) (xliffEditor.getEditorInput())).getFile().getProject(); this.importer.setProject(project); final int contextSize = importer.getContextSize(); BusyIndicator.showWhile( xliffEditor.getSite().getShell().getDisplay(), new Runnable() { public void run() { // monitor.beginTask(Messages.getString("utils.NattableUtil.task1"), 8); if (!CommonFunction.checkEdition("L")) { if (!importer.checkImporter() && ProjectConfigerFactory.getProjectConfiger(project).getDefaultTMDb() != null) { final boolean[] state = new boolean[] {true}; Display.getDefault() .syncExec( new Runnable() { public void run() { state[0] = MessageDialog.openConfirm( Display.getDefault().getActiveShell(), Messages.getString("utils.NattableUtil.msgTitle2"), Messages.getString("utils.NattableUtil.msg.cantConnDefaultDb")); } }); if (!state[0]) { return; } } } final List<String> addToTmResultRowIds = new ArrayList<String>(); for (Entry<String, List<String>> entry : tmpGroup.entrySet()) { List<String> rowIdList = tmpGroup.get(entry.getKey()); if (importer.checkImporter()) { String systemUser = Activator.getDefault() .getPreferenceStore() .getString(IPreferenceConstants.SYSTEM_USER); StringBuffer fileContent = xliffEditor .getXLFHandler() .generateTMXFileContent( systemUser, rowIdList, xliffEditor.getSrcColumnName(), xliffEditor.getTgtColumnName(), /*new SubProgressMonitor(monitor, 3)*/ null, contextSize, project); // if (monitor.isCanceled()) { // return; // } if (fileContent != null) { int state = -1; try { state = importer.executeImport( fileContent.toString(), xliffEditor.getSrcColumnName(), /*monitor*/ null); } catch (ImportException e) { final String msg = e.getMessage(); Display.getDefault() .syncExec( new Runnable() { public void run() { MessageDialog.openInformation( Display.getDefault().getActiveShell(), Messages.getString("utils.NattableUtil.msgTitle"), msg); } }); return; } if (state == ITmImporter.IMPORT_STATE_FAILED) { Display.getDefault() .syncExec( new Runnable() { public void run() { MessageDialog.openInformation( Display.getDefault().getActiveShell(), Messages.getString("utils.NattableUtil.msgTitle"), Messages.getString("utils.NattableUtil.msg2")); } }); return; } else if (state == ITmImporter.IMPORT_STATE_NODB) { Display.getDefault() .syncExec( new Runnable() { public void run() { MessageDialog.openInformation( Display.getCurrent().getActiveShell(), Messages.getString("utils.NattableUtil.msgTitle"), Messages.getString("utils.NattableUtil.msg3")); } }); } } } addToTmResultRowIds.addAll(rowIdList); } // monitor.setTaskName(Messages.getString("utils.NattableUtil.task2")); Display.getDefault() .syncExec( new Runnable() { public void run() { // 修改文本段状态,目前没有取消批准的功能,所以直接传入true,即所有的操作都是批准 List<String> rowIds = xliffEditor .getXLFHandler() .approveTransUnits(addToTmResultRowIds, true); if (rowIds.size() > 0) { String message; if (addToTmResultRowIds != null && addToTmResultRowIds.size() == 1) { message = Messages.getString("utils.NattableUtil.msg4"); } else { message = MessageFormat.format( Messages.getString("utils.NattableUtil.msg5"), rowIds.size()); } boolean res = MessageDialog.openQuestion( xliffEditor.getTable().getShell(), null, message); if (res) { xliffEditor.getXLFHandler().approveTransUnits(rowIds, true, false); } } xliffEditor.updateStatusLine(); xliffEditor.getTable().redraw(); } }); // monitor.worked(2); // if (monitor.isCanceled()) { // return; // } // // // 批准时需要进行繁殖翻译 // // propagateTranslations(addToTmResultRowIds, new // // SubProgressMonitor(monitor, 2)); // monitor.done(); } }); // try { // new // ProgressMonitorDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()).run(true, true, // runnable); if (isJumpNext) { int[] selectedRows = xliffEditor.getSelectedRows(); Arrays.sort(selectedRows); xliffEditor.jumpToRow(selectedRows[selectedRows.length - 1] + 1); } else { IViewPart viewPart = PlatformUI.getWorkbench() .getActiveWorkbenchWindow() .getActivePage() .findView("net.heartsome.cat.ts.ui.translation.view.matchview"); int[] selected = xliffEditor.getSelectedRows(); if (viewPart != null && viewPart instanceof IMatchViewPart && selected.length != 0) { ((IMatchViewPart) viewPart).reLoadMatches(xliffEditor, selected[selected.length - 1]); } HsMultiCellEditorControl.activeSourceAndTargetCell(xliffEditor); } // } catch (InvocationTargetException e) { // e.printStackTrace(); // } catch (InterruptedException e) { // e.printStackTrace(); // } }