import com.liferay.document.library.kernel.exception.NoSuchFileEntryMetadataException;
import com.liferay.document.library.kernel.service.DLFileVersionLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFileVersion;
import com.liferay.document.library.kernel.model.DLFileEntryType;
import com.liferay.document.library.kernel.model.DLFileEntryMetadata;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.kernel.DDMFormValues;
import com.liferay.dynamic.data.mapping.kernel.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.kernel.LocalizedValue;
import com.liferay.dynamic.data.mapping.kernel.Value;
import com.liferay.dynamic.data.mapping.kernel.StorageEngineManagerUtil;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.LocaleUtil;

int start = QueryUtil.ALL_POS;
int end = QueryUtil.ALL_POS;

List<DLFileEntry> dlFileEntryList = DLFileEntryLocalServiceUtil.getFileEntries(start, end);

for(DLFileEntry dlFileEntry : dlFileEntryList) {
	DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();
	DLFileEntryType dlFileEntryType = DLFileEntryTypeLocalServiceUtil.getFileEntryType(dlFileVersion.getFileEntryTypeId());
	out.println("");
	out.println("dlFileVersion: " + dlFileVersion);
	out.println("dlFileEntryType: " + dlFileEntryType.getFileEntryTypeId() + " - key: " + dlFileEntryType.getFileEntryTypeKey() + " - name: " + dlFileEntryType.getName(LocaleUtil.getSiteDefault()));

	List<DDMStructure> ddmStructures = new ArrayList<DDMStructure>();

	/* Document types metadata structures (data added by the user) */
	for (com.liferay.dynamic.data.mapping.kernel.DDMStructure ddmStructureDLFileEntryType : dlFileEntryType.getDDMStructures()) {
		ddmStructures.add(DDMStructureLocalServiceUtil.getStructure(ddmStructureDLFileEntryType.getStructureId()));
	}

	/* Tika auto extracted metadata structures, remove if you only need the metadata from the final user!! */
	for (DDMStructure rawMetadataStructure : DDMStructureLocalServiceUtil.getClassStructures(dlFileVersion.getCompanyId(),PortalUtil.getClassNameId(com.liferay.document.library.kernel.util.RawMetadataProcessor.class),QueryUtil.ALL_POS, QueryUtil.ALL_POS)) {
		try {
			DLFileEntryMetadata fileEntryMetadata = DLFileEntryMetadataLocalServiceUtil.getFileEntryMetadata(rawMetadataStructure.getStructureId(), dlFileVersion.getFileVersionId());

			if (fileEntryMetadata != null) {
				ddmStructures.add(rawMetadataStructure);
			}
		}
		catch (NoSuchFileEntryMetadataException e) {
		}
	}

	int count;

	if(ddmStructures.size() == 0) {
		out.println("  (no metadata)");
	}
	else {
		count = 0;
		for (DDMStructure ddmStructure : ddmStructures) {
			out.println("  - Structure: " + (count++) + " - id: " + ddmStructure.getStructureId() + " - key: " + ddmStructure.getStructureKey() + " - name: " + ddmStructure.getName(LocaleUtil.getSiteDefault()));

			DLFileEntryMetadata fileEntryMetadata = DLFileEntryMetadataLocalServiceUtil.getFileEntryMetadata(ddmStructure.getStructureId(), dlFileVersion.getFileVersionId());

			DDMFormValues fields = StorageEngineManagerUtil.getDDMFormValues(fileEntryMetadata.getDDMStorageId());

			for (DDMFormFieldValue ddmFormFieldValue: fields.getDDMFormFieldValues()) {
				out.println("\t" + ddmFormFieldValueToString(ddmFormFieldValue));
				if (ddmFormFieldValue.getType().equals("fieldset")) {
					for (DDMFormFieldValue nestedDDNFormFieldValue: ddmFormFieldValue.getNestedDDMFormFieldValues()) {
						out.println("\t\t" + ddmFormFieldValueToString(nestedDDNFormFieldValue));
					}
				}
			}
		}
	}
}

public String ddmFormFieldValueToString(DDMFormFieldValue ddmFormFieldValue) {
	return "name: " + ddmFormFieldValue.getName() + " type: " + ddmFormFieldValue.getType() + " value: " + valueToString(ddmFormFieldValue.getValue());
	
}

public String valueToString(Value value) {
	if (value == null) {
		return null;
	}

	if (value instanceof LocalizedValue) {
		return value.getValues().toString();
	}

	return value.getString(value.getDefaultLocale());
}