protected void exportAssetCategories(PortletDataContext portletDataContext, Element rootElement)
      throws Exception {

    Element assetVocabulariesElement = rootElement.element("vocabularies");

    if (assetVocabulariesElement == null) {
      assetVocabulariesElement = rootElement.addElement("vocabularies");
    }

    Element assetsElement = rootElement.addElement("assets");

    Element assetCategoriesElement = rootElement.addElement("categories");

    Map<String, String[]> assetCategoryUuidsMap = portletDataContext.getAssetCategoryUuidsMap();

    for (Map.Entry<String, String[]> entry : assetCategoryUuidsMap.entrySet()) {

      String[] assetCategoryEntryParts = StringUtil.split(entry.getKey(), CharPool.POUND);

      String className = assetCategoryEntryParts[0];
      long classPK = GetterUtil.getLong(assetCategoryEntryParts[1]);

      Element assetElement = assetsElement.addElement("asset");

      assetElement.addAttribute("class-name", className);
      assetElement.addAttribute("class-pk", String.valueOf(classPK));
      assetElement.addAttribute("category-uuids", StringUtil.merge(entry.getValue()));

      List<AssetCategory> assetCategories =
          AssetCategoryServiceUtil.getCategories(className, classPK);

      for (AssetCategory assestCategory : assetCategories) {
        exportAssetCategory(
            portletDataContext, assetVocabulariesElement,
            assetCategoriesElement, assestCategory);
      }
    }
  }