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

com.liferay.portal.kernel.service.persistence.impl.PersistenceNestedSetsTreeManager Maven / Gradle / Ivy

There is a newer version: 7.4.3.112-ga112
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.kernel.service.persistence.impl;

import com.liferay.portal.kernel.dao.orm.QueryPos;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.SQLQuery;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.dao.orm.Type;
import com.liferay.portal.kernel.model.NestedSetsTreeNodeModel;
import com.liferay.portal.kernel.util.StringBundler;

import java.util.Iterator;
import java.util.List;

/**
 * @author Shuyang Zhou
 */
public class PersistenceNestedSetsTreeManager
	extends NestedSetsTreeManager {

	public PersistenceNestedSetsTreeManager(
		BasePersistenceImpl basePersistenceImpl, String tableName,
		String entityName, Class entityImplClass, String primaryKeyName,
		String nestedSetsTreeNodeScopeIdName, String nestedSetsTreeNodeLeftName,
		String nestedSetsTreeNodeRightName) {

		_basePersistenceImpl = basePersistenceImpl;
		_tableName = tableName;
		_entityName = entityName;
		_entityImplClass = entityImplClass;
		_primaryKeyName = primaryKeyName;
		_nestedSetsTreeNodeScopeIdName = nestedSetsTreeNodeScopeIdName;
		_nestedSetsTreeNodeLeftName = nestedSetsTreeNodeLeftName;
		_nestedSetsTreeNodeRightName = nestedSetsTreeNodeRightName;
	}

	@Override
	protected long doCountAncestors(
		long nestedSetsTreeNodeScopeId, long nestedSetsTreeNodeLeft,
		long nestedSetsTreeNodeRight) {

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			StringBundler sb = new StringBundler(9);

			sb.append("SELECT count(*) FROM ");
			sb.append(_tableName);
			sb.append(" WHERE ");
			sb.append(_nestedSetsTreeNodeScopeIdName);
			sb.append(" = ? AND ");
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" <= ? AND ");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" >= ?");

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(nestedSetsTreeNodeScopeId);
			qPos.add(nestedSetsTreeNodeLeft);
			qPos.add(nestedSetsTreeNodeRight);

			Number number = (Number)sqlQuery.uniqueResult();

			return number.longValue();
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	@Override
	protected long doCountDescendants(
		long nestedSetsTreeNodeScopeId, long nestedSetsTreeNodeLeft,
		long nestedSetsTreeNodeRight) {

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			StringBundler sb = new StringBundler(9);

			sb.append("SELECT count(*) FROM ");
			sb.append(_tableName);
			sb.append(" WHERE ");
			sb.append(_nestedSetsTreeNodeScopeIdName);
			sb.append(" = ? AND ");
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" >= ? AND ");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" <= ?");

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(nestedSetsTreeNodeScopeId);
			qPos.add(nestedSetsTreeNodeLeft);
			qPos.add(nestedSetsTreeNodeRight);

			Number number = (Number)sqlQuery.uniqueResult();

			return number.longValue();
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	@Override
	protected List doGetAncestors(
		long nestedSetsTreeNodeScopeId, long nestedSetsTreeNodeLeft,
		long nestedSetsTreeNodeRight) {

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			StringBundler sb = new StringBundler(11);

			sb.append("SELECT {");
			sb.append(_entityName);
			sb.append(".*} FROM ");
			sb.append(_tableName);
			sb.append(" WHERE ");
			sb.append(_nestedSetsTreeNodeScopeIdName);
			sb.append(" = ? AND ");
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" <= ? AND ");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" >= ?");

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			sqlQuery.addEntity(_entityName, _entityImplClass);

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(nestedSetsTreeNodeScopeId);
			qPos.add(nestedSetsTreeNodeLeft);
			qPos.add(nestedSetsTreeNodeRight);

			return (List)QueryUtil.list(
				sqlQuery, _basePersistenceImpl.getDialect(), QueryUtil.ALL_POS,
				QueryUtil.ALL_POS);
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	@Override
	protected List doGetDescendants(
		long nestedSetsTreeNodeScopeId, long nestedSetsTreeNodeLeft,
		long nestedSetsTreeNodeRight) {

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			StringBundler sb = new StringBundler(11);

			sb.append("SELECT {");
			sb.append(_entityName);
			sb.append(".*} FROM ");
			sb.append(_tableName);
			sb.append(" WHERE ");
			sb.append(_nestedSetsTreeNodeScopeIdName);
			sb.append(" = ? AND ");
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" >= ? AND ");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" <= ?");

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			sqlQuery.addEntity(_entityName, _entityImplClass);

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(nestedSetsTreeNodeScopeId);
			qPos.add(nestedSetsTreeNodeLeft);
			qPos.add(nestedSetsTreeNodeRight);

			return (List)QueryUtil.list(
				sqlQuery, _basePersistenceImpl.getDialect(), QueryUtil.ALL_POS,
				QueryUtil.ALL_POS);
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	protected void doUpdate(
		boolean leftOrRight, long nestedSetsTreeNodeScopeId, long delta,
		long start, boolean startInclusive, long end, boolean endInclusive,
		List includeList) {

		StringBundler sb = null;

		if (includeList == null) {
			sb = new StringBundler(14);
		}
		else {
			sb = new StringBundler(17 + includeList.size() * 2);
		}

		sb.append("UPDATE ");
		sb.append(_tableName);
		sb.append(" SET ");

		if (leftOrRight) {
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" = (");
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" + ?)");
		}
		else {
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" = (");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" + ?)");
		}

		sb.append(" WHERE ");
		sb.append(_nestedSetsTreeNodeScopeIdName);
		sb.append(" = ? AND ");

		if (leftOrRight) {
			sb.append(_nestedSetsTreeNodeLeftName);
		}
		else {
			sb.append(_nestedSetsTreeNodeRightName);
		}

		if (startInclusive) {
			sb.append(" >= ? AND ");
		}
		else {
			sb.append(" > ? AND ");
		}

		if (leftOrRight) {
			sb.append(_nestedSetsTreeNodeLeftName);
		}
		else {
			sb.append(_nestedSetsTreeNodeRightName);
		}

		if (endInclusive) {
			sb.append(" <= ? ");
		}
		else {
			sb.append(" < ? ");
		}

		if (includeList != null) {
			sb.append(" AND ");
			sb.append(_primaryKeyName);
			sb.append(" IN(");

			for (T t : includeList) {
				sb.append(t.getPrimaryKey());
				sb.append(", ");
			}

			sb.setIndex(sb.index() - 1);

			sb.append(")");
		}

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(delta);
			qPos.add(nestedSetsTreeNodeScopeId);
			qPos.add(start);
			qPos.add(end);

			sqlQuery.executeUpdate();
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	@Override
	protected void doUpdate(
		long nestedSetsTreeNodeScopeId, boolean leftOrRight, long delta,
		long limit, boolean inclusive) {

		StringBundler sb = new StringBundler(12);

		sb.append("UPDATE ");
		sb.append(_tableName);
		sb.append(" SET ");

		if (leftOrRight) {
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" = (");
			sb.append(_nestedSetsTreeNodeLeftName);
			sb.append(" + ?)");
		}
		else {
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" = (");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" + ?)");
		}

		sb.append(" WHERE ");
		sb.append(_nestedSetsTreeNodeScopeIdName);
		sb.append(" = ? AND ");

		if (leftOrRight) {
			sb.append(_nestedSetsTreeNodeLeftName);
		}
		else {
			sb.append(_nestedSetsTreeNodeRightName);
		}

		if (inclusive) {
			sb.append(" >= ?");
		}
		else {
			sb.append(" > ?");
		}

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(delta);
			qPos.add(nestedSetsTreeNodeScopeId);
			qPos.add(limit);

			sqlQuery.executeUpdate();
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	@Override
	protected void doUpdate(
		long nestedSetsTreeNodeScopeId, long delta, long start,
		boolean startInclusive, long end, boolean endInclusive,
		List includeList) {

		doUpdate(
			false, nestedSetsTreeNodeScopeId, delta, start, startInclusive, end,
			endInclusive, includeList);
		doUpdate(
			true, nestedSetsTreeNodeScopeId, delta, start, startInclusive, end,
			endInclusive, includeList);
	}

	@Override
	protected long getMaxNestedSetsTreeNodeRight(
		long nestedSetsTreeNodeScopeId) {

		Session session = null;

		try {
			session = _basePersistenceImpl.openSession();

			StringBundler sb = new StringBundler(9);

			sb.append("SELECT MAX(");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(") AS maxNestedSetsTreeNodeRight FROM ");
			sb.append(_tableName);
			sb.append(" WHERE ");
			sb.append(_nestedSetsTreeNodeScopeIdName);
			sb.append(" = ? AND ");
			sb.append(_nestedSetsTreeNodeRightName);
			sb.append(" > 0");

			SQLQuery sqlQuery = session.createSynchronizedSQLQuery(
				sb.toString());

			sqlQuery.addScalar("maxNestedSetsTreeNodeRight", Type.LONG);

			QueryPos qPos = QueryPos.getInstance(sqlQuery);

			qPos.add(nestedSetsTreeNodeScopeId);

			Iterator iterator = (Iterator)QueryUtil.iterate(
				sqlQuery, _basePersistenceImpl.getDialect(), QueryUtil.ALL_POS,
				QueryUtil.ALL_POS);

			Long maxNSRight = iterator.next();

			if (maxNSRight != null) {
				return maxNSRight + 1;
			}

			return 1;
		}
		catch (Exception e) {
			throw _basePersistenceImpl.processException(e);
		}
		finally {
			_basePersistenceImpl.closeSession(session);
		}
	}

	private final BasePersistenceImpl _basePersistenceImpl;
	private final Class _entityImplClass;
	private final String _entityName;
	private final String _nestedSetsTreeNodeLeftName;
	private final String _nestedSetsTreeNodeRightName;
	private final String _nestedSetsTreeNodeScopeIdName;
	private final String _primaryKeyName;
	private final String _tableName;

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy