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

com.liferay.portal.search.buffer.IndexerRequest Maven / Gradle / Ivy

There is a newer version: 4.0.4
Show 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.portal.search.buffer;

import com.liferay.portal.kernel.messaging.proxy.ProxyModeThreadLocal;
import com.liferay.portal.kernel.messaging.proxy.ProxyModeThreadLocalCloseable;
import com.liferay.portal.kernel.model.ClassedModel;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.util.ClassUtil;
import com.liferay.portal.kernel.util.HashUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.Validator;

import java.lang.reflect.Method;

/**
 * @author Michael C. Han
 */
public class IndexerRequest {

	public IndexerRequest(
		Method method, ClassedModel classedModel, Indexer indexer) {

		_method = method;
		_classedModel = classedModel;
		_indexer = new NoAutoCommitIndexer<>(indexer);

		_forceSync = ProxyModeThreadLocal.isForceSync();
		_modelClassName = classedModel.getModelClassName();
		_modelPrimaryKey = (Long)_classedModel.getPrimaryKeyObj();
	}

	public IndexerRequest(
		Method method, Indexer indexer, String modelClassName,
		Long modelPrimaryKey) {

		_method = method;
		_indexer = new NoAutoCommitIndexer<>(indexer);
		_modelClassName = modelClassName;
		_modelPrimaryKey = modelPrimaryKey;

		_classedModel = null;
		_forceSync = ProxyModeThreadLocal.isForceSync();
	}

	@Override
	public boolean equals(Object object) {
		if (this == object) {
			return true;
		}

		if (!(object instanceof IndexerRequest)) {
			return false;
		}

		IndexerRequest indexerRequest = (IndexerRequest)object;

		if (Validator.equals(_indexer, indexerRequest._indexer) &&
			(Validator.equals(_method, indexerRequest._method) ||
			 (Validator.equals(
				 _method.getName(), indexerRequest._method.getName()) &&
			  Validator.equals(
				  _modelPrimaryKey, indexerRequest._modelPrimaryKey))) &&
			Validator.equals(_modelClassName, indexerRequest._modelClassName)) {

			return true;
		}

		return false;
	}

	public void execute() throws Exception {
		try (ProxyModeThreadLocalCloseable proxyModeThreadLocalCloseable =
				new ProxyModeThreadLocalCloseable()) {

			ProxyModeThreadLocal.setForceSync(_forceSync);

			if (_method.getParameterTypes().length == 1) {
				_method.invoke(_indexer, _classedModel);
			}
			else {
				_method.invoke(_indexer, _modelClassName, _modelPrimaryKey);
			}
		}
	}

	public String getSearchEngineId() {
		return _indexer.getSearchEngineId();
	}

	@Override
	public int hashCode() {
		int hashCode = HashUtil.hash(0, _method.getName());

		hashCode = HashUtil.hash(hashCode, _modelClassName);
		hashCode = HashUtil.hash(hashCode, _modelPrimaryKey);

		return hashCode;
	}

	@Override
	public String toString() {
		StringBundler sb = new StringBundler(13);

		sb.append("{classModel=");
		sb.append(_classedModel);
		sb.append(", forceSync=");
		sb.append(_forceSync);
		sb.append(", indexer=");
		sb.append(ClassUtil.getClassName(_indexer));
		sb.append(", method=");
		sb.append(_method);
		sb.append(", modelClassName=");
		sb.append(_modelClassName);
		sb.append(", modelPrimaryKey=");
		sb.append(_modelPrimaryKey);
		sb.append("}");

		return sb.toString();
	}

	private final ClassedModel _classedModel;
	private final boolean _forceSync;
	private final Indexer _indexer;
	private final Method _method;
	private final String _modelClassName;
	private final Long _modelPrimaryKey;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy