protected String doExportData(
      PortletDataContext context, String portletId, PortletPreferences preferences)
      throws Exception {

    context.addPermissions("com.liferay.portlet.journal", context.getScopeGroupId());

    String articleId = preferences.getValue("article-id", null);

    if (articleId == null) {
      if (_log.isWarnEnabled()) {
        _log.warn("No article id found in preferences of portlet " + portletId);
      }

      return StringPool.BLANK;
    }

    long articleGroupId = GetterUtil.getLong(preferences.getValue("group-id", StringPool.BLANK));

    if (articleGroupId <= 0) {
      if (_log.isWarnEnabled()) {
        _log.warn("No group id found in preferences of portlet " + portletId);
      }

      return StringPool.BLANK;
    }

    JournalArticle article = null;

    try {
      article =
          JournalArticleLocalServiceUtil.getLatestArticle(
              articleGroupId, articleId, WorkflowConstants.STATUS_APPROVED);
    } catch (NoSuchArticleException nsae) {
      if (_log.isWarnEnabled()) {
        _log.warn(
            "No approved article found with group id "
                + articleGroupId
                + " and article id "
                + articleId);
      }
    }

    if (article == null) {
      return StringPool.BLANK;
    }

    Document document = SAXReaderUtil.createDocument();

    Element rootElement = document.addElement("journal-content-data");

    String path = JournalPortletDataHandlerImpl.getArticlePath(context, article);

    Element articleElement = rootElement.addElement("article");

    articleElement.addAttribute("path", path);

    Element dlFoldersElement = rootElement.addElement("dl-folders");
    Element dlFilesElement = rootElement.addElement("dl-file-entries");
    Element dlFileRanksElement = rootElement.addElement("dl-file-ranks");
    Element igFoldersElement = rootElement.addElement("ig-folders");
    Element igImagesElement = rootElement.addElement("ig-images");

    JournalPortletDataHandlerImpl.exportArticle(
        context,
        rootElement,
        dlFoldersElement,
        dlFilesElement,
        dlFileRanksElement,
        igFoldersElement,
        igImagesElement,
        article,
        false);

    String structureId = article.getStructureId();

    if (Validator.isNotNull(structureId)) {
      JournalStructure structure =
          JournalStructureUtil.findByG_S(article.getGroupId(), structureId);

      JournalPortletDataHandlerImpl.exportStructure(context, rootElement, structure);
    }

    String templateId = article.getTemplateId();

    if (Validator.isNotNull(templateId)) {
      JournalTemplate template = JournalTemplateUtil.findByG_T(article.getGroupId(), templateId);

      JournalPortletDataHandlerImpl.exportTemplate(
          context,
          rootElement,
          dlFoldersElement,
          dlFilesElement,
          dlFileRanksElement,
          igFoldersElement,
          igImagesElement,
          template);
    }

    return document.formattedString();
  }
  protected PortletPreferences doImportData(
      PortletDataContext context, String portletId, PortletPreferences preferences, String data)
      throws Exception {

    context.importPermissions(
        "com.liferay.portlet.journal", context.getSourceGroupId(), context.getScopeGroupId());

    if (Validator.isNull(data)) {
      return null;
    }

    Document document = SAXReaderUtil.read(data);

    Element rootElement = document.getRootElement();

    Element dlFoldersElement = rootElement.element("dl-folders");

    List<Element> dlFolderElements = Collections.EMPTY_LIST;

    if (dlFoldersElement != null) {
      dlFolderElements = dlFoldersElement.elements("folder");
    }

    for (Element folderElement : dlFolderElements) {
      DLPortletDataHandlerImpl.importFolder(context, folderElement);
    }

    Element dlFileEntriesElement = rootElement.element("dl-file-entries");

    List<Element> dlFileEntryElements = Collections.EMPTY_LIST;

    if (dlFileEntriesElement != null) {
      dlFileEntryElements = dlFileEntriesElement.elements("file-entry");
    }

    for (Element fileEntryElement : dlFileEntryElements) {
      DLPortletDataHandlerImpl.importFileEntry(context, fileEntryElement);
    }

    Element dlFileRanksElement = rootElement.element("dl-file-ranks");

    List<Element> dlFileRankElements = Collections.EMPTY_LIST;

    if (dlFileRanksElement != null) {
      dlFileRankElements = dlFileRanksElement.elements("file-rank");
    }

    for (Element fileRankElement : dlFileRankElements) {
      DLPortletDataHandlerImpl.importFileRank(context, fileRankElement);
    }

    Element igFoldersElement = rootElement.element("ig-folders");

    List<Element> igFolderElements = Collections.EMPTY_LIST;

    if (igFoldersElement != null) {
      igFolderElements = igFoldersElement.elements("folder");
    }

    for (Element folderElement : igFolderElements) {
      IGPortletDataHandlerImpl.importFolder(context, folderElement);
    }

    Element igImagesElement = rootElement.element("ig-images");

    List<Element> igImageElements = Collections.EMPTY_LIST;

    if (igImagesElement != null) {
      igImageElements = igImagesElement.elements("image");
    }

    for (Element imageElement : igImageElements) {
      IGPortletDataHandlerImpl.importImage(context, imageElement);
    }

    Element structureElement = rootElement.element("structure");

    if (structureElement != null) {
      JournalPortletDataHandlerImpl.importStructure(context, structureElement);
    }

    Element templateElement = rootElement.element("template");

    if (templateElement != null) {
      JournalPortletDataHandlerImpl.importTemplate(context, templateElement);
    }

    Element articleElement = rootElement.element("article");

    if (articleElement != null) {
      JournalPortletDataHandlerImpl.importArticle(context, articleElement);
    }

    String articleId = preferences.getValue("article-id", StringPool.BLANK);

    if (Validator.isNotNull(articleId)) {
      Map<String, String> articleIds =
          (Map<String, String>) context.getNewPrimaryKeysMap(JournalArticle.class);

      articleId = MapUtil.getString(articleIds, articleId, articleId);

      preferences.setValue("group-id", String.valueOf(context.getScopeGroupId()));
      preferences.setValue("article-id", articleId);

      Layout layout = LayoutLocalServiceUtil.getLayout(context.getPlid());

      JournalContentSearchLocalServiceUtil.updateContentSearch(
          context.getScopeGroupId(),
          layout.isPrivateLayout(),
          layout.getLayoutId(),
          portletId,
          articleId,
          true);
    }

    return preferences;
  }