Esempio n. 1
0
  /** 合并文本段 ; */
  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);
    }
  }
Esempio n. 2
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();
    //		}
  }