protected DDMStructure addStructure(long classNameId, String name, String description)
      throws Exception {

    return addStructure(
        0,
        classNameId,
        null,
        name,
        description,
        read("test-structure.xsd"),
        StorageType.JSON.getValue(),
        DDMStructureConstants.TYPE_DEFAULT);
  }
  @Before
  @Override
  public void setUp() throws Exception {
    super.setUp();

    long classNameId = PortalUtil.getClassNameId(JournalArticle.class);

    String definition = read("test-ddm-structure-all-fields.xml");

    _ddmStructure =
        addStructure(
            classNameId,
            null,
            "Test Structure",
            definition,
            StorageType.JSON.getValue(),
            DDMStructureConstants.TYPE_DEFAULT);
  }
  protected long updateDDMStructure(
      long userId,
      String fileEntryTypeUuid,
      long fileEntryTypeId,
      long groupId,
      Map<Locale, String> nameMap,
      Map<Locale, String> descriptionMap,
      ServiceContext serviceContext)
      throws PortalException {

    fixDDMStructureKey(fileEntryTypeUuid, fileEntryTypeId, groupId);

    String ddmStructureKey = DLUtil.getDDMStructureKey(fileEntryTypeUuid);

    DDMForm ddmForm = (DDMForm) serviceContext.getAttribute("ddmForm");

    DDMStructure ddmStructure =
        ddmStructureLocalService.fetchStructure(
            groupId,
            classNameLocalService.getClassNameId(DLFileEntryMetadata.class),
            ddmStructureKey);

    if ((ddmStructure != null) && (ddmForm == null)) {
      ddmForm = ddmStructure.getDDMForm();
    }

    if (ddmForm == null) {
      return 0;
    }

    try {
      DDMFormLayout ddmFormLayout = DDMUtil.getDefaultDDMFormLayout(ddmForm);

      if (ddmStructure == null) {
        ddmStructure =
            ddmStructureLocalService.addStructure(
                userId,
                groupId,
                DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID,
                classNameLocalService.getClassNameId(DLFileEntryMetadata.class),
                ddmStructureKey,
                nameMap,
                descriptionMap,
                ddmForm,
                ddmFormLayout,
                StorageType.JSON.toString(),
                DDMStructureConstants.TYPE_AUTO,
                serviceContext);
      } else {
        ddmStructure =
            ddmStructureLocalService.updateStructure(
                userId,
                ddmStructure.getStructureId(),
                ddmStructure.getParentStructureId(),
                nameMap,
                descriptionMap,
                ddmForm,
                ddmFormLayout,
                serviceContext);
      }

      return ddmStructure.getStructureId();
    } catch (StructureDefinitionException sde) {
      if (ddmStructure != null) {
        ddmStructureLocalService.deleteStructure(ddmStructure.getStructureId());
      }
    }

    return 0;
  }