All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liferay.document.library.google.docs.migration.LegacyGoogleDocsMigration Maven / Gradle / Ivy

The newest version!
/**
 * 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.migration;

import com.liferay.document.library.google.docs.util.GoogleDocsConstants;
import com.liferay.document.library.google.docs.util.GoogleDocsDLFileEntryTypeHelper;
import com.liferay.document.library.google.docs.util.GoogleDocsMetadataHelper;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFileEntryType;
import com.liferay.document.library.kernel.service.DLFileEntryLocalService;
import com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalService;
import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalService;
import com.liferay.dynamic.data.mapping.kernel.DDMStructure;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalService;
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.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.util.SetUtil;

/**
 * @author Iván Zaera
 */
public class LegacyGoogleDocsMigration {

	public LegacyGoogleDocsMigration(
		Company company,
		DDMFormValuesToFieldsConverter ddmFormValuesToFieldsConverter,
		DDMStructureLocalService ddmStructureLocalService,
		DLFileEntryTypeLocalService dlFileEntryTypeLocalService,
		DLFileEntryLocalService dlFileEntryLocalService,
		DLFileEntryMetadataLocalService dlFileEntryMetadataLocalService,
		FieldsToDDMFormValuesConverter fieldsToDDMFormValuesConverter,
		GoogleDocsDLFileEntryTypeHelper googleDocsDLFileEntryTypeHelper,
		StorageEngine storageEngine) {

		_company = company;
		_ddmFormValuesToFieldsConverter = ddmFormValuesToFieldsConverter;
		_ddmStructureLocalService = ddmStructureLocalService;
		_dlFileEntryTypeLocalService = dlFileEntryTypeLocalService;
		_dlFileEntryLocalService = dlFileEntryLocalService;
		_dlFileEntryMetadataLocalService = dlFileEntryMetadataLocalService;
		_fieldsToDDMFormValuesConverter = fieldsToDDMFormValuesConverter;
		_googleDocsDLFileEntryTypeHelper = googleDocsDLFileEntryTypeHelper;
		_storageEngine = storageEngine;

		try {
			_dlFileEntryType = _dlFileEntryTypeLocalService.fetchFileEntryType(
				_company.getGroupId(),
				LegacyGoogleDocsConstants.DL_FILE_ENTRY_TYPE_KEY);
		}
		catch (PortalException pe) {
			throw new SystemException(pe);
		}
	}

	public boolean isMigrationNeeded() {
		if (_dlFileEntryType == null) {
			return false;
		}

		return true;
	}

	public void migrate() throws PortalException {
		com.liferay.dynamic.data.mapping.model.DDMStructure ddmStructure =
			_googleDocsDLFileEntryTypeHelper.addGoogleDocsDDMStructure();

		_dlFileEntryType.setFileEntryTypeKey(
			GoogleDocsConstants.DL_FILE_ENTRY_TYPE_KEY);

		_dlFileEntryType = _dlFileEntryTypeLocalService.updateDLFileEntryType(
			_dlFileEntryType);

		_dlFileEntryTypeLocalService.addDDMStructureLinks(
			_dlFileEntryType.getFileEntryTypeId(),
			SetUtil.fromArray(new long[] {ddmStructure.getStructureId()}));

		upgradeDLFileEntries();

		deleteLegacyGoogleDocsDDMStructureFields();
	}

	protected void deleteLegacyGoogleDocsDDMStructureFields()
		throws PortalException {

		DDMStructure legacyDDMStructure =
			LegacyGoogleDocsMetadataHelper.getGoogleDocsDDMStructure(
				_dlFileEntryType);

		String definition = legacyDDMStructure.getDefinition();

		definition = definition.replaceAll(
			"(?s)]*>.*?", "");

		com.liferay.dynamic.data.mapping.model.DDMStructure ddmStructure =
			_ddmStructureLocalService.getDDMStructure(
				legacyDDMStructure.getStructureId());

		ddmStructure.setDefinition(definition);

		_ddmStructureLocalService.updateDDMStructure(ddmStructure);
	}

	protected void upgradeDLFileEntries() throws PortalException {
		ActionableDynamicQuery actionableDynamicQuery =
			_dlFileEntryLocalService.getActionableDynamicQuery();

		actionableDynamicQuery.setPerformActionMethod(
			new ActionableDynamicQuery.PerformActionMethod() {

				@Override
				public void performAction(DLFileEntry dlFileEntry) {
					GoogleDocsMetadataHelper googleDocsMetadataHelper =
						new GoogleDocsMetadataHelper(
							_ddmFormValuesToFieldsConverter,
							_ddmStructureLocalService, dlFileEntry,
							_dlFileEntryMetadataLocalService,
							_fieldsToDDMFormValuesConverter, _storageEngine);

					LegacyGoogleDocsMetadataHelper
						legacyGoogleDocsMetadataHelper =
							new LegacyGoogleDocsMetadataHelper(
								_ddmFormValuesToFieldsConverter,
								_ddmStructureLocalService, dlFileEntry,
								_storageEngine);

					googleDocsMetadataHelper.setFieldValue(
						GoogleDocsConstants.DDM_FIELD_NAME_EMBEDDABLE_URL,
						legacyGoogleDocsMetadataHelper.getFieldValue(
							LegacyGoogleDocsConstants.DDM_FIELD_NAME_VIEW_URL));
					googleDocsMetadataHelper.setFieldValue(
						GoogleDocsConstants.DDM_FIELD_NAME_ICON_URL,
						legacyGoogleDocsMetadataHelper.getFieldValue(
							LegacyGoogleDocsConstants.DDM_FIELD_NAME_ICON_URL));
					googleDocsMetadataHelper.setFieldValue(
						GoogleDocsConstants.DDM_FIELD_NAME_ID,
						legacyGoogleDocsMetadataHelper.getFieldValue(
							LegacyGoogleDocsConstants.DDM_FIELD_NAME_ID));
					googleDocsMetadataHelper.setFieldValue(
						GoogleDocsConstants.DDM_FIELD_NAME_NAME,
						legacyGoogleDocsMetadataHelper.getFieldValue(
							LegacyGoogleDocsConstants.DDM_FIELD_NAME_NAME));
					googleDocsMetadataHelper.setFieldValue(
						GoogleDocsConstants.DDM_FIELD_NAME_URL,
						legacyGoogleDocsMetadataHelper.getFieldValue(
							LegacyGoogleDocsConstants.DDM_FIELD_NAME_EDIT_URL));

					googleDocsMetadataHelper.update();

					legacyGoogleDocsMetadataHelper.delete();
				}

			});

		actionableDynamicQuery.performActions();
	}

	private final Company _company;
	private final DDMFormValuesToFieldsConverter
		_ddmFormValuesToFieldsConverter;
	private final DDMStructureLocalService _ddmStructureLocalService;
	private final DLFileEntryLocalService _dlFileEntryLocalService;
	private final DLFileEntryMetadataLocalService
		_dlFileEntryMetadataLocalService;
	private DLFileEntryType _dlFileEntryType;
	private final DLFileEntryTypeLocalService _dlFileEntryTypeLocalService;
	private final FieldsToDDMFormValuesConverter
		_fieldsToDDMFormValuesConverter;
	private final GoogleDocsDLFileEntryTypeHelper
		_googleDocsDLFileEntryTypeHelper;
	private final StorageEngine _storageEngine;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy