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

com.liferay.object.internal.related.models.ObjectEntry1toMObjectRelatedModelsPredicateProviderImpl Maven / Gradle / Ivy

/**
 * SPDX-FileCopyrightText: (c) 2000 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.related.models;

import com.liferay.object.constants.ObjectRelationshipConstants;
import com.liferay.object.model.ObjectDefinition;
import com.liferay.object.model.ObjectEntryTable;
import com.liferay.object.model.ObjectRelationship;
import com.liferay.object.petra.sql.dsl.DynamicObjectDefinitionTable;
import com.liferay.object.service.ObjectDefinitionLocalServiceUtil;
import com.liferay.object.service.ObjectFieldLocalService;
import com.liferay.petra.sql.dsl.Column;
import com.liferay.petra.sql.dsl.DSLQueryFactoryUtil;
import com.liferay.petra.sql.dsl.expression.Predicate;
import com.liferay.petra.string.StringBundler;
import com.liferay.portal.kernel.exception.PortalException;

/**
 * @author Luis Miguel Barcos
 */
public class ObjectEntry1toMObjectRelatedModelsPredicateProviderImpl
	extends BaseObjectEntryObjectRelatedModelsPredicateProviderImpl {

	public ObjectEntry1toMObjectRelatedModelsPredicateProviderImpl(
		ObjectDefinition objectDefinition,
		ObjectFieldLocalService objectFieldLocalService) {

		super(objectDefinition, objectFieldLocalService);
	}

	@Override
	public String getObjectRelationshipType() {
		return ObjectRelationshipConstants.TYPE_ONE_TO_MANY;
	}

	@Override
	public Predicate getPredicate(
			ObjectRelationship objectRelationship, Predicate predicate,
			ObjectDefinition relatedObjectDefinition)
		throws PortalException {

		ObjectDefinition objectDefinition1 = _getObjectDefinition1(
			objectRelationship);

		DynamicObjectDefinitionTable
			objectDefinition1DynamicObjectDefinitionTable =
				getDynamicObjectDefinitionTable(objectDefinition1);

		Column objectDefinition1PKObjectFieldColumn =
			getPKObjectFieldColumn(
				objectDefinition1DynamicObjectDefinitionTable,
				objectDefinition1.getPKObjectFieldDBColumnName());

		ObjectDefinition objectDefinition2 = _getObjectDefinition2(
			objectRelationship);

		DynamicObjectDefinitionTable
			objectDefinition2DynamicObjectDefinitionTable =
				getDynamicObjectDefinitionTable(objectDefinition2);
		DynamicObjectDefinitionTable
			objectDefinition2ExtensionDynamicObjectDefinitionTable =
				getExtensionDynamicObjectDefinitionTable(objectDefinition2);

		Column objectRelationshipColumn =
			objectDefinition2DynamicObjectDefinitionTable.getColumn(
				StringBundler.concat(
					"r_", objectRelationship.getName(), "_",
					objectDefinition1.getPKObjectFieldName()));

		if (objectRelationshipColumn == null) {
			objectRelationshipColumn =
				objectDefinition2ExtensionDynamicObjectDefinitionTable.
					getColumn(
						StringBundler.concat(
							"r_", objectRelationship.getName(), "_",
							objectDefinition1.getPKObjectFieldName()));
		}

		if (objectDefinition.getObjectDefinitionId() ==
				objectRelationship.getObjectDefinitionId1()) {

			return objectDefinition1PKObjectFieldColumn.in(
				DSLQueryFactoryUtil.select(
					objectRelationshipColumn
				).from(
					objectDefinition2DynamicObjectDefinitionTable
				).innerJoinON(
					ObjectEntryTable.INSTANCE,
					ObjectEntryTable.INSTANCE.objectEntryId.eq(
						objectDefinition2DynamicObjectDefinitionTable.
							getPrimaryKeyColumn())
				).innerJoinON(
					objectDefinition2ExtensionDynamicObjectDefinitionTable,
					objectDefinition2DynamicObjectDefinitionTable.
						getPrimaryKeyColumn(
						).eq(
							objectDefinition2ExtensionDynamicObjectDefinitionTable.
								getPrimaryKeyColumn()
						)
				).where(
					predicate
				));
		}

		Column objectDefinition2PKObjectFieldColumn =
			getPKObjectFieldColumn(
				objectDefinition2DynamicObjectDefinitionTable,
				objectDefinition2.getPKObjectFieldDBColumnName());
		DynamicObjectDefinitionTable objectDefinition1ExtensionTable =
			getExtensionDynamicObjectDefinitionTable(objectDefinition1);

		return objectDefinition2PKObjectFieldColumn.in(
			DSLQueryFactoryUtil.select(
				objectDefinition2PKObjectFieldColumn
			).from(
				objectDefinition2DynamicObjectDefinitionTable
			).innerJoinON(
				objectDefinition2ExtensionDynamicObjectDefinitionTable,
				objectDefinition2DynamicObjectDefinitionTable.
					getPrimaryKeyColumn(
					).eq(
						objectDefinition2ExtensionDynamicObjectDefinitionTable.
							getPrimaryKeyColumn()
					)
			).where(
				objectRelationshipColumn.in(
					DSLQueryFactoryUtil.select(
						objectDefinition1PKObjectFieldColumn
					).from(
						objectDefinition1DynamicObjectDefinitionTable
					).innerJoinON(
						ObjectEntryTable.INSTANCE,
						ObjectEntryTable.INSTANCE.objectEntryId.eq(
							objectDefinition1DynamicObjectDefinitionTable.
								getPrimaryKeyColumn())
					).innerJoinON(
						objectDefinition1ExtensionTable,
						objectDefinition1DynamicObjectDefinitionTable.
							getPrimaryKeyColumn(
							).eq(
								objectDefinition1ExtensionTable.
									getPrimaryKeyColumn()
							)
					).where(
						predicate
					))
			));
	}

	private ObjectDefinition _getObjectDefinition1(
			ObjectRelationship objectRelationship)
		throws PortalException {

		if (objectRelationship.getObjectDefinitionId1() ==
				objectDefinition.getObjectDefinitionId()) {

			return objectDefinition;
		}

		return ObjectDefinitionLocalServiceUtil.getObjectDefinition(
			objectRelationship.getObjectDefinitionId1());
	}

	private ObjectDefinition _getObjectDefinition2(
			ObjectRelationship objectRelationship)
		throws PortalException {

		if (objectRelationship.getObjectDefinitionId2() ==
				objectDefinition.getObjectDefinitionId()) {

			return objectDefinition;
		}

		return ObjectDefinitionLocalServiceUtil.getObjectDefinition(
			objectRelationship.getObjectDefinitionId2());
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy