/** 对选中文本段执行签发操作 ; */
 public void changeToSignedOffState() {
   List<String> selectedRowIds = getRowIdsNoEmptyTranslate(true);
   for (int i = 0; i < selectedRowIds.size(); i++) {
     String rowId = selectedRowIds.get(i);
     String tgtContent = xliffEditor.getXLFHandler().getTgtContent(rowId);
     boolean isDraft = xliffEditor.getXLFHandler().isDraft(rowId);
     if (tgtContent == null || tgtContent.trim().equals("") || isDraft) {
       selectedRowIds.remove(i);
       i--;
     }
   }
   if (selectedRowIds.size() > 0) {
     changeTgtState(selectedRowIds, "signed-off");
   }
 }
 /**
  * 改变Target的状态,signed-off需要修改approved=yes,改为new或translated需要删除approved=yes属性
  *
  * @param state 状态值("new", "final", "translated", "signed-off", "needs-adaptation",
  *     "needs-review-adaptation", "needs-l10n", "needs-review-l10n", "needs-translation",
  *     "needs-review-translation");
  */
 public void changeTgtState(List<String> selectedRowIds, String state) {
   if (selectedRowIds != null && selectedRowIds.size() > 0) {
     xliffEditor.getXLFHandler().changeTransUnitState(selectedRowIds, state);
     xliffEditor.updateStatusLine();
     xliffEditor.getTable().redraw();
     NattableUtil.refreshCommand(
         AddSegmentToTMPropertyTester.PROPERTY_NAMESPACE,
         AddSegmentToTMPropertyTester.PROPERTY_ENABLED);
     NattableUtil.refreshCommand(
         SignOffPropertyTester.PROPERTY_NAMESPACE, SignOffPropertyTester.PROPERTY_ENABLED);
     NattableUtil.refreshCommand(
         UnTranslatedPropertyTester.PROPERTY_NAMESPACE,
         UnTranslatedPropertyTester.PROPERTY_ENABLED);
   }
 }
 /**
  * 锁定或取消锁定文本段
  *
  * @param selectedRowIds 选中行的rowId集合
  * @param lock true:锁定;false:取消锁定;
  */
 public void lockTransUnits(List<String> selectedRowIds, boolean lock) {
   xliffEditor.getXLFHandler().lockTransUnits(selectedRowIds, lock);
   xliffEditor.getTable().redraw();
   // IOperationHistory operationHistory =
   // OperationHistoryFactory.getOperationHistory();
   // try {
   // operationHistory
   // .execute(
   // new LockOperation("Lock", xliffEditor.getTable(), selectedRowIds,
   // xliffEditor
   // .getXLFHandler(), lock), null, null);
   // } catch (ExecutionException e) {
   // e.printStackTrace();
   // }
 }
 /**
  * 设置是否添加到记忆库
  *
  * @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();
   }
 }
 /**
  * 对选中的文本段进行过滤
  *
  * @param isSignedOff
  * @return ;
  */
 public List<String> getRowIdsNoEmptyTranslate(boolean isSignedOff) {
   List<String> selRowIds = xliffEditor.getSelectedRowIds();
   int oldSize = selRowIds.size();
   XLFHandler handler = xliffEditor.getXLFHandler();
   handler.removeNullTgtContentRowId(selRowIds);
   boolean hasEmpty = false;
   boolean hasDraft = false;
   if (oldSize != selRowIds.size()) {
     hasEmpty = true;
   }
   if (isSignedOff) { // 判断执行签发时是否有草稿状态的文本段
     for (int i = 0; i < selRowIds.size(); i++) {
       String rowId = selRowIds.get(i);
       if (handler.isDraft(rowId)) {
         selRowIds.remove(i);
         i--;
         hasDraft = true;
       }
     }
   }
   String message = null;
   if (hasEmpty && hasDraft) {
     message = Messages.getString("utils.NattableUtil.msg8");
   } else if (hasDraft) {
     message = Messages.getString("utils.NattableUtil.msg9");
   } else if (hasEmpty) {
     message = Messages.getString("utils.NattableUtil.msg1");
   }
   if (message != null) {
     if (!MessageDialog.openConfirm(
         xliffEditor.getTable().getShell(),
         Messages.getString("utils.NattableUtil.msgTitle"),
         message)) {
       selRowIds.clear();
     }
   }
   return selRowIds;
 }
  /** 合并文本段 ; */
  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);
    }
  }
  /**
   * 繁殖翻译 robert
   *
   * @param rowIdsMap
   * @param monitor
   * @return
   */
  public IStatus propagateTranslations(
      Map<String, List<String>> rowIdsMap, IProgressMonitor monitor) {
    if (monitor == null) {
      monitor = new NullProgressMonitor();
    }
    IProgressMonitor subMonitor =
        new SubProgressMonitor(monitor, 9, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
    subMonitor.beginTask(Messages.getString("utils.NattableUtil.task7"), rowIdsMap.keySet().size());

    Iterator<Entry<String, List<String>>> it = rowIdsMap.entrySet().iterator();
    final XLFHandler handler = xliffEditor.getXLFHandler();

    String tshelp = System.getProperties().getProperty("TSHelp");
    String tsstate = System.getProperties().getProperty("TSState");
    if (tshelp == null || !"true".equals(tshelp) || tsstate == null || !"true".equals(tsstate)) {
      LOGGER.error("Exception:key hs008 is lost.(Can't find the key)");
      System.exit(0);
    }

    while (it.hasNext()) {
      Entry<String, List<String>> entry = it.next();
      // 这是源文本,也就是繁殖翻译中的父
      String rootRowId = entry.getKey();
      // 这是要被繁殖的所有rowIds,其源文与rootRowId的源文一致
      final List<String> rowIds = entry.getValue();
      //			TransUnitBean tu = handler.getTransUnit(rootRowId);
      //			String tgtContent = tu.getTgtContent();
      final String rootTgtPureText = handler.getTUPureTextByRowId(rootRowId, false);

      for (String rowId : rowIds) {
        handler.changeTgtTextValue(rowId, rootTgtPureText, null, null);
      }

      // 下面这是处理处于获得焦点状态的文本段。无法繁殖翻译的情况
      Display.getDefault()
          .syncExec(
              new Runnable() {
                public void run() {
                  int focusRowIndex = HsMultiActiveCellEditor.sourceRowIndex;
                  if (focusRowIndex == -1) {
                    return;
                  }
                  if (!XLIFFEditorImplWithNatTable.getCurrent().isHorizontalLayout()) {
                    focusRowIndex = VerticalNatTableConfig.getRealRowIndex(focusRowIndex);
                  }
                  String focusRowId = handler.getRowId(focusRowIndex);
                  if (rowIds.contains(focusRowId)) {
                    HsMultiActiveCellEditor.getTargetStyledEditor()
                        .setCanonicalValue(new UpdateDataBean(rootTgtPureText, null, null));
                  }
                }
              });

      if (subMonitor.isCanceled()) {
        return Status.OK_STATUS;
      }
      subMonitor.worked(1);
    }
    subMonitor.done();
    return Status.OK_STATUS;
  }
  /**
   * 添加选中文本段到记忆库
   *
   * @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();
    //		}
  }