Esempio n. 1
0
  /**
   * 批准或取消批准文本段
   *
   * @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();
    //		}
  }