CooperatorOwnedLangFilter.java

/*
 * Copyright 2026 Global Crop Diversity Trust
 * Licensed under the Apache License, Version 2.0
 * See LICENSE file in project root folder or http://www.apache.org/licenses/LICENSE-2.0
 */

package org.gringlobal.service.filter;

import java.util.List;
import java.util.Set;

import org.genesys.blocks.model.EmptyModel;
import org.genesys.blocks.model.filters.StringFilter;

import org.gringlobal.model.CooperatorOwnedLang;
import org.gringlobal.model.QCooperatorOwnedLang;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.dsl.EntityPathBase;
import org.apache.commons.collections4.CollectionUtils;

@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
@Accessors(fluent = true)
public abstract class CooperatorOwnedLangFilter<T extends CooperatorOwnedLangFilter<T, L, E, Q>, L extends CooperatorOwnedLang<L, E>, E extends EmptyModel, Q extends EntityPathBase<L>> extends CooperatorOwnedModelFilter<T, L, Q> {

	public Set<Long> sysLangId;
	public StringFilter title;
	public StringFilter description;

	/**
	 * Collects list of filter predicates
	 *
	 * @param instance the instance of Q-type of <em>R</em>
	 * @param langInstance the cooperator owned lang model
	 * @return list of predicates
	 */
	protected List<Predicate> collectSuperPredicates(final Q instance, final QCooperatorOwnedLang langInstance) {
		List<Predicate> predicates = super.collectSuperPredicates(instance, langInstance._super);

		if (!CollectionUtils.isEmpty(sysLangId)) {
			predicates.add(langInstance.sysLang().id.in(sysLangId));
		}
		if (title != null) {
			predicates.add(title.buildQuery(langInstance.title));
		}
		if (description != null) {
			predicates.add(description.buildQuery(langInstance.description));
		}
		return predicates;
	}

}