/** 添加帮助按钮,备注,这里的配置与其他的不一样 robert 2012-09-06 */
 protected Control createHelpToolItem(Composite parent) {
   // ROBERTHELP xml 转换器配置
   String language = CommonFunction.getSystemLanguage();
   final String helpUrl =
       MessageFormat.format(
           "/net.heartsome.cat.ts.ui.help/html/{0}/ch08.html#configure-xml-converter", language);
   Image helpImage = JFaceResources.getImage(DLG_IMG_HELP);
   ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.NO_FOCUS);
   toolBar.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
   final Cursor cursor = new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
   toolBar.setCursor(cursor);
   toolBar.addDisposeListener(
       new DisposeListener() {
         public void widgetDisposed(DisposeEvent e) {
           cursor.dispose();
         }
       });
   ToolItem helpItem = new ToolItem(toolBar, SWT.NONE);
   helpItem.setImage(helpImage);
   helpItem.setToolTipText(JFaceResources.getString("helpToolTip")); // $NON-NLS-1$
   helpItem.addSelectionListener(
       new SelectionAdapter() {
         public void widgetSelected(SelectionEvent e) {
           PlatformUI.getWorkbench().getHelpSystem().displayHelpResource(helpUrl);
         }
       });
   return toolBar;
 }
    /**
     * 创建所有批注节点
     *
     * @throws Exception
     */
    private void createComments() throws Exception {
      String xpath = "";
      // 先生成全局批注的定义节点
      if (fileCommentsList.size() > 0) {
        String fileCommentId = CommonFunction.createUUID();
        String fileCommentStr = "<sdl:cmt id=\"" + fileCommentId + "\" />";
        xpath = "/xliff/file/header";
        outputAP.selectXPath(xpath);
        while (outputAP.evalXPath() != -1) {
          outputXM.insertBeforeTail(fileCommentStr.getBytes("utf-8"));
          commentMap.put(fileCommentId, fileCommentsList);
        }
      }

      // 开始生成Comments节点
      if (commentMap.size() == 0) {
        return;
      }
      xpath = "/xliff/doc-info";
      outputAP.selectXPath(xpath);
      if (outputAP.evalXPath() != -1) {
        StringBuffer commentSB = new StringBuffer();
        commentSB.append("<cmt-defs>");
        for (Entry<String, List<CommentBean>> entry : commentMap.entrySet()) {
          String id = entry.getKey();
          commentSB.append("<cmt-def id=\"" + id + "\">");
          commentSB.append("<Comments xmlns=\"\">");
          for (CommentBean bean : entry.getValue()) {
            commentSB.append(
                "<Comment severity=\""
                    + bean.getSeverity()
                    + "\" "
                    + "user=\""
                    + bean.getUser()
                    + "\" date=\""
                    + bean.getDate()
                    + "\" version=\"1.0\">"
                    + bean.getCommentText()
                    + "</Comment>");
          }
          commentSB.append("</Comments>");
          commentSB.append("</cmt-def>");
        }
        commentSB.append("</cmt-defs>");

        outputXM.insertBeforeTail(commentSB.toString().getBytes("utf-8"));
      }
    }
  @Override
  public boolean performOk() {
    if (!isInit) {
      return true;
    }

    if (btnCheckUpdateWithStartup.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_STARTUP);
    } else if (btnCheckUpdateWithMonthly.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY);
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_MONTHLY_DATE, selectDateSpi.getSelection());
    } else if (btnCheckUpdateWithWeekly.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY);
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_WEEKLY_DATE,
          cmbSelectWeek.getSelectionIndex() + 1);
    } else if (btnCheckUpdateWithNever.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_AUTO_UPDATE,
          IPreferenceConstants.SYSTEM_CHECK_UPDATE_WITH_NEVER);
    }

    preferenceStore.setValue(
        IPreferenceConstants.SYSTEM_USER,
        txtSystemUser.getText() == null ? "" : txtSystemUser.getText());
    // 将用户保存到平台首选项中
    PlatformUI.getPreferenceStore()
        .setValue(
            IPreferenceConstants.SYSTEM_USER,
            preferenceStore.getString(IPreferenceConstants.SYSTEM_USER));
    if (btnLanguageWithEN.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_LANGUAGE, IPreferenceConstants.SYSTEM_LANGUAGE_WITH_EN);
      CommonFunction.setSystemLanguage("en");
      if (initLang != IPreferenceConstants.SYSTEM_LANGUAGE_WITH_EN) {
        changeLocale("en");
        if (MessageDialog.openConfirm(
            getShell(),
            Messages.getString("preferencepage.SystemPreferencePage.msgTitle"),
            Messages.getString("preferencepage.SystemPreferencePage.msgInfo"))) {
          PlatformUI.getWorkbench().restart();
        }
      }
    } else if (btnLanguageWithZHCN.getSelection()) {
      preferenceStore.setValue(
          IPreferenceConstants.SYSTEM_LANGUAGE, IPreferenceConstants.SYSTEM_LANGUAGE_WITH_ZH_CN);
      CommonFunction.setSystemLanguage("zh");
      if (initLang != IPreferenceConstants.SYSTEM_LANGUAGE_WITH_ZH_CN) {
        changeLocale("zh");
        if (MessageDialog.openConfirm(
            getShell(),
            Messages.getString("preferencepage.SystemPreferencePage.msgTitle"),
            Messages.getString("preferencepage.SystemPreferencePage.msgInfo"))) {
          PlatformUI.getWorkbench().restart();
        }
      }
    }

    FontData[] fontData = editorFontSetting.getFontSetingFont();
    JFaceResources.getFontRegistry().put(Constants.XLIFF_EDITOR_TEXT_FONT, fontData);
    preferenceStore.setValue(IPreferenceConstants.XLIFF_EDITOR_FONT_NAME, fontData[0].getName());
    preferenceStore.setValue(IPreferenceConstants.XLIFF_EDITOR_FONT_SIZE, fontData[0].getHeight());

    fontData = matchViewFontSetting.getFontSetingFont();
    JFaceResources.getFontRegistry().put(Constants.MATCH_VIEWER_TEXT_FONT, fontData);
    preferenceStore.setValue(IPreferenceConstants.MATCH_VIEW_FONT_NAME, fontData[0].getName());
    preferenceStore.setValue(IPreferenceConstants.MATCH_VIEW_FONT_SIZE, fontData[0].getHeight());

    return true;
  }
    /**
     * 替换掉骨架文件中的占位符
     *
     * @param segId
     * @param srcBean
     * @param tgtbeBean
     */
    private void replaceSegment(String segId, TuMrkBean srcBean, TuMrkBean tgtbeBean)
        throws Exception {
      String segStr = "%%%" + segId + "%%%";
      String srcXpath = "/xliff/file/body//trans-unit/seg-source//mrk[text()='" + segStr + "']";
      // 先处理源文
      outputAP.selectXPath(srcXpath);
      if (outputAP.evalXPath() != -1) {
        int textIdx = outputVN.getText();
        outputXM.updateToken(textIdx, srcBean.getContent().getBytes("utf-8"));
      }
      // 处理译文
      String tgtXpath = "/xliff/file/body//trans-unit/target//mrk[text()='" + segStr + "']";
      outputAP.selectXPath(tgtXpath);
      if (outputAP.evalXPath() != -1) {
        String content = tgtbeBean.getContent();
        if (tgtbeBean.getCommentList().size() > 0) {
          String uuId = CommonFunction.createUUID();
          commentMap.put(uuId, tgtbeBean.getCommentList());
          content =
              "<mrk mtype=\"x-sdl-comment\" sdl:cid=\""
                  + uuId
                  + "\">"
                  + tgtbeBean.getContent()
                  + "</mrk>";
        }
        int textIdx = outputVN.getText();
        outputXM.updateToken(textIdx, content.getBytes("utf-8"));

        // 开始处理状态
        int attrIdx = -1;
        if ((attrIdx = outputVN.getAttrVal("mid")) != -1) {
          boolean needLocked = false;
          String mid = outputVN.toString(attrIdx);
          // 下面根据mid找到对应的sdl:seg节点,这个节点里面存放的有每个文本段的状态
          String xpath = "ancestor::trans-unit/sdl:seg-defs/sdl:seg[@id='" + mid + "']";
          outputAP.selectXPath(xpath);
          if (outputAP.evalXPath() != -1) {
            // 先判断是否锁定
            if (tgtbeBean.isLocked()) {
              if ((attrIdx = outputVN.getAttrVal("locked")) != -1) {
                if (!"true".equals(outputVN.toString(attrIdx))) {
                  outputXM.updateToken(attrIdx, "true");
                }
              } else {
                needLocked = true;
              }
            } else {
              if ((attrIdx = outputVN.getAttrVal("locked")) != -1) {
                if ("true".equals(outputVN.toString(attrIdx))) {
                  outputXM.updateToken(attrIdx, "false");
                }
              }
            }

            // 下面根据R8的状态。修改sdl的状态。
            String conf = "";
            String status = tgtbeBean.getStatus();
            if ("new".equals(status)) {
              conf = "Draft";
            } else if ("translated".equals(status)) {
              conf = "Translated";
            } else if ("approved".equals(status)) {
              conf = "ApprovedTranslation";
            } else if ("signed-off".equals(status)) {
              conf = "ApprovedSignOff";
            }

            if ("".equals(conf)) {
              if ((attrIdx = outputVN.getAttrVal("conf")) != -1) {
                outputXM.updateToken(attrIdx, "");
              }
            } else {
              if ((attrIdx = outputVN.getAttrVal("conf")) != -1) {
                if (!conf.equals(outputVN.toString(attrIdx))) {
                  outputXM.updateToken(attrIdx, conf);
                }
              } else {
                String attributeStr = "";
                if (needLocked) {
                  attributeStr = " locked=\"true\" ";
                }
                attributeStr += " conf=\"" + conf + "\" ";
                outputXM.insertAttribute(attributeStr.getBytes("utf-8"));
                needLocked = false;
              }
            }

            if (needLocked) {
              outputXM.insertAttribute(" locked=\"true\" ".getBytes("utf-8"));
            }
          }
        }
      }
    }