/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.document.library.google.docs.internal.util; import com.liferay.counter.kernel.service.CounterLocalServiceUtil; import com.liferay.document.library.kernel.model.DLFileEntry; import com.liferay.document.library.kernel.model.DLFileEntryMetadata; import com.liferay.document.library.kernel.model.DLFileEntryType; import com.liferay.document.library.kernel.model.DLFileVersion; import com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalService; import com.liferay.dynamic.data.mapping.kernel.DDMStructure; import com.liferay.dynamic.data.mapping.service.DDMStructureLocalService; import com.liferay.dynamic.data.mapping.storage.DDMFormValues; import com.liferay.dynamic.data.mapping.storage.Field; import com.liferay.dynamic.data.mapping.storage.Fields; import com.liferay.dynamic.data.mapping.storage.StorageEngine; import com.liferay.dynamic.data.mapping.util.DDMFormValuesToFieldsConverter; import com.liferay.dynamic.data.mapping.util.FieldsToDDMFormValuesConverter; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.service.ServiceContext; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Iván Zaera */ public class GoogleDocsMetadataHelper { public static DDMStructure getGoogleDocsDDMStructure( DLFileEntryType dlFileEntryType) { if (dlFileEntryType == null) { return null; } List<DDMStructure> ddmStructures = dlFileEntryType.getDDMStructures(); for (DDMStructure ddmStructure : ddmStructures) { String structureKey = ddmStructure.getStructureKey(); if (structureKey.equals( GoogleDocsConstants.DDM_STRUCTURE_KEY_GOOGLE_DOCS)) { return ddmStructure; } } return null; } public GoogleDocsMetadataHelper( DDMFormValuesToFieldsConverter ddmFormValuesToFieldsConverter, DDMStructureLocalService ddmStructureLocalService, DLFileEntry dlFileEntry, DLFileEntryMetadataLocalService dlFileEntryMetadataLocalService, FieldsToDDMFormValuesConverter fieldsToDDMFormValuesConverter, StorageEngine storageEngine) { try { _ddmFormValuesToFieldsConverter = ddmFormValuesToFieldsConverter; _ddmStructureLocalService = ddmStructureLocalService; _dlFileEntryMetadataLocalService = dlFileEntryMetadataLocalService; _fieldsToDDMFormValuesConverter = fieldsToDDMFormValuesConverter; _storageEngine = storageEngine; _dlFileVersion = dlFileEntry.getFileVersion(); _ddmStructure = getGoogleDocsDDMStructure( dlFileEntry.getDLFileEntryType()); } catch (PortalException pe) { throw new SystemException(pe); } } public GoogleDocsMetadataHelper( DDMFormValuesToFieldsConverter ddmFormValuesToFieldsConverter, DDMStructureLocalService ddmStructureLocalService, DLFileVersion dlFileVersion, DLFileEntryMetadataLocalService dlFileEntryMetadataLocalService, FieldsToDDMFormValuesConverter fieldsToDDMFormValuesConverter, StorageEngine storageEngine) { _ddmFormValuesToFieldsConverter = ddmFormValuesToFieldsConverter; _ddmStructureLocalService = ddmStructureLocalService; _dlFileVersion = dlFileVersion; _dlFileEntryMetadataLocalService = dlFileEntryMetadataLocalService; _fieldsToDDMFormValuesConverter = fieldsToDDMFormValuesConverter; _storageEngine = storageEngine; try { _ddmStructure = getGoogleDocsDDMStructure( dlFileVersion.getDLFileEntryType()); } catch (PortalException pe) { throw new SystemException(pe); } } public boolean containsField(String fieldName) { initDLFileEntryMetadataAndFields(); Field field = _fieldsMap.get(fieldName); if (field != null) { return true; } return false; } public String getFieldValue(String fieldName) { Field field = _getField(fieldName); Serializable value = field.getValue(); if (value == null) { return null; } return value.toString(); } public boolean isGoogleDocs() { if (_ddmStructure != null) { return true; } return false; } protected void addGoogleDocsDLFileEntryMetadata() { try { DLFileEntry dlFileEntry = _dlFileVersion.getFileEntry(); _dlFileEntryMetadata = _dlFileEntryMetadataLocalService.createDLFileEntryMetadata( CounterLocalServiceUtil.increment()); long ddmStructureId = _ddmStructure.getStructureId(); Fields fields = new Fields(); fields.put( new Field( ddmStructureId, GoogleDocsConstants.DDM_FIELD_NAME_DESCRIPTION, "")); fields.put( new Field( ddmStructureId, GoogleDocsConstants.DDM_FIELD_NAME_EMBEDDABLE_URL, "")); fields.put( new Field( ddmStructureId, GoogleDocsConstants.DDM_FIELD_NAME_ICON_URL, "")); fields.put( new Field( ddmStructureId, GoogleDocsConstants.DDM_FIELD_NAME_ID, "")); fields.put( new Field( ddmStructureId, GoogleDocsConstants.DDM_FIELD_NAME_NAME, "")); fields.put( new Field( ddmStructureId, GoogleDocsConstants.DDM_FIELD_NAME_URL, "")); ServiceContext serviceContext = new ServiceContext(); serviceContext.setScopeGroupId(_dlFileVersion.getGroupId()); serviceContext.setUserId(_dlFileVersion.getUserId()); DDMFormValues ddmFormValues = toDDMFormValues(fields); long ddmStorageId = _storageEngine.create( _dlFileVersion.getCompanyId(), ddmStructureId, ddmFormValues, serviceContext); _dlFileEntryMetadata.setDDMStorageId(ddmStorageId); _dlFileEntryMetadata.setDDMStructureId(ddmStructureId); _dlFileEntryMetadata.setFileEntryId(dlFileEntry.getFileEntryId()); _dlFileEntryMetadata.setFileVersionId( _dlFileVersion.getFileVersionId()); _dlFileEntryMetadata = _dlFileEntryMetadataLocalService.addDLFileEntryMetadata( _dlFileEntryMetadata); } catch (PortalException pe) { throw new SystemException( "Unable to add DDM fields for file version " + _dlFileVersion.getFileVersionId(), pe); } } protected void initDLFileEntryMetadataAndFields() { if (_fieldsMap != null) { return; } if (_dlFileVersion == null) { return; } _fieldsMap = new HashMap<>(); _dlFileEntryMetadata = _dlFileEntryMetadataLocalService.fetchFileEntryMetadata( _ddmStructure.getStructureId(), _dlFileVersion.getFileVersionId()); if (_dlFileEntryMetadata == null) { addGoogleDocsDLFileEntryMetadata(); } try { DDMFormValues ddmFormValues = _storageEngine.getDDMFormValues( _dlFileEntryMetadata.getDDMStorageId()); _fields = _ddmFormValuesToFieldsConverter.convert( _ddmStructureLocalService.getDDMStructure( _ddmStructure.getStructureId()), ddmFormValues); for (Field field : _fields) { _fieldsMap.put(field.getName(), field); } } catch (PortalException pe) { throw new SystemException( "Unable to load DDM fields for file version " + _dlFileVersion.getFileVersionId(), pe); } } protected DDMFormValues toDDMFormValues(Fields fields) throws PortalException { return _fieldsToDDMFormValuesConverter.convert( _ddmStructureLocalService.getDDMStructure( _ddmStructure.getStructureId()), fields); } private Field _getField(String fieldName) { initDLFileEntryMetadataAndFields(); Field field = _fieldsMap.get(fieldName); if (field == null) { throw new IllegalArgumentException("Unknown field " + fieldName); } return field; } private final DDMFormValuesToFieldsConverter _ddmFormValuesToFieldsConverter; private final DDMStructure _ddmStructure; private final DDMStructureLocalService _ddmStructureLocalService; private DLFileEntryMetadata _dlFileEntryMetadata; private final DLFileEntryMetadataLocalService _dlFileEntryMetadataLocalService; private DLFileVersion _dlFileVersion; private Fields _fields; private Map<String, Field> _fieldsMap; private final FieldsToDDMFormValuesConverter _fieldsToDDMFormValuesConverter; private final StorageEngine _storageEngine; }