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

com.liferay.object.internal.upgrade.v10_8_1.ObjectEntryAssetEntryTitleUpgradeProcess Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2025 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

package com.liferay.object.internal.upgrade.v10_8_1;

import com.liferay.object.system.SystemObjectDefinitionManager;
import com.liferay.object.system.SystemObjectDefinitionManagerRegistry;
import com.liferay.petra.sql.dsl.Table;
import com.liferay.petra.string.StringBundler;
import com.liferay.portal.dao.orm.common.SQLTransformer;
import com.liferay.portal.kernel.dao.jdbc.AutoBatchPreparedStatementUtil;
import com.liferay.portal.kernel.service.ClassNameLocalService;
import com.liferay.portal.kernel.upgrade.UpgradeProcess;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.Localization;
import com.liferay.portal.vulcan.util.LocalizedMapUtil;

import java.sql.PreparedStatement;
import java.sql.ResultSet;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * @author Yuri Monteiro
 */
public class ObjectEntryAssetEntryTitleUpgradeProcess extends UpgradeProcess {

	public ObjectEntryAssetEntryTitleUpgradeProcess(
		ClassNameLocalService classNameLocalService, Localization localization,
		SystemObjectDefinitionManagerRegistry
			systemObjectDefinitionManagerRegistry) {

		_classNameLocalService = classNameLocalService;
		_localization = localization;
		_systemObjectDefinitionManagerRegistry =
			systemObjectDefinitionManagerRegistry;
	}

	@Override
	protected void doUpgrade() throws Exception {
		Map objectEntryInfos = new HashMap<>();

		try (PreparedStatement preparedStatement1 = connection.prepareStatement(
				SQLTransformer.transform(
					StringBundler.concat(
						"select ObjectDefinition.className, ",
						"ObjectDefinition.dbTableName, ",
						"ObjectDefinition.modifiable, ObjectDefinition.name, ",
						"ObjectDefinition.pkObjectFieldDBColumnName, ",
						"ObjectDefinition.system_, ObjectField.dbColumnName ",
						"from ObjectDefinition left join ObjectField on ",
						"ObjectDefinition.titleObjectFieldId = ",
						"ObjectField.objectFieldId where ",
						"ObjectDefinition.enableLocalization = [$TRUE$] and ",
						"ObjectField.localized = [$TRUE$]")));
			ResultSet resultSet1 = preparedStatement1.executeQuery()) {

			while (resultSet1.next()) {
				String dbColumnName = resultSet1.getString("dbColumnName");

				String dbTableName = null;

				if (!resultSet1.getBoolean("modifiable") &&
					resultSet1.getBoolean("system_")) {

					SystemObjectDefinitionManager
						systemObjectDefinitionManager =
							_systemObjectDefinitionManagerRegistry.
								getSystemObjectDefinitionManager(
									resultSet1.getString("name"));

					Table localizationTable =
						systemObjectDefinitionManager.getLocalizationTable();

					dbTableName = localizationTable.getTableName();
				}
				else {
					dbTableName = resultSet1.getString("dbTableName") + "_l";
				}

				try (PreparedStatement preparedStatement2 =
						connection.prepareStatement(
							SQLTransformer.transform(
								StringBundler.concat(
									"select ObjectEntry.objectEntryId, ",
									"ObjectEntry.defaultLanguageId, ",
									dbTableName, ".languageId, ", dbTableName,
									".", dbColumnName,
									" from ObjectEntry inner join ",
									dbTableName,
									" on ObjectEntry.objectEntryId = ",
									dbTableName, ".",
									resultSet1.getString(
										"pkObjectFieldDBColumnName"))));
					ResultSet resultSet2 = preparedStatement2.executeQuery()) {

					while (resultSet2.next()) {
						long objectEntryId = resultSet2.getLong(
							"objectEntryId");

						ObjectEntryInfo objectEntryInfo = objectEntryInfos.get(
							objectEntryId);

						if (objectEntryInfo == null) {
							objectEntryInfo = new ObjectEntryInfo(
								resultSet1.getString("className"),
								resultSet2.getString("defaultLanguageId"));

							objectEntryInfos.put(
								objectEntryId, objectEntryInfo);
						}

						objectEntryInfo.putTitle(
							LocaleUtil.fromLanguageId(
								resultSet2.getString("languageId")),
							resultSet2.getString(dbColumnName));
					}
				}
			}
		}

		try (PreparedStatement preparedStatement3 =
				AutoBatchPreparedStatementUtil.concurrentAutoBatch(
					connection,
					StringBundler.concat(
						"update AssetEntry set mimeType = '",
						ContentTypes.TEXT_HTML,
						"', title = ? where classNameId = ? and classPK = ",
						"?"))) {

			for (Map.Entry entry :
					objectEntryInfos.entrySet()) {

				ObjectEntryInfo objectEntryInfo = entry.getValue();

				preparedStatement3.setString(
					1,
					_localization.getXml(
						LocalizedMapUtil.getLanguageIdMap(
							objectEntryInfo._titleMap),
						objectEntryInfo._defaultLanguageId, "title"));
				preparedStatement3.setLong(
					2,
					_classNameLocalService.getClassNameId(
						objectEntryInfo._className));

				preparedStatement3.setLong(3, entry.getKey());

				preparedStatement3.addBatch();
			}

			preparedStatement3.executeBatch();
		}
	}

	private final ClassNameLocalService _classNameLocalService;
	private final Localization _localization;
	private final SystemObjectDefinitionManagerRegistry
		_systemObjectDefinitionManagerRegistry;

	private static class ObjectEntryInfo {

		public ObjectEntryInfo(String className, String defaultLanguageId) {
			_className = className;
			_defaultLanguageId = defaultLanguageId;
		}

		public void putTitle(Locale locale, String title) {
			_titleMap.put(locale, title);
		}

		private final String _className;
		private final String _defaultLanguageId;
		private Map _titleMap = new HashMap<>();

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy