/** * 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.util; /** * @author José Manuel Navarro */ public class TableNameOrderByComparator<T> extends OrderByComparator<T> { public TableNameOrderByComparator( OrderByComparator<T> orderByComparator, String tableName) { _orderByComparator = orderByComparator; setTableName(tableName); } @Override public int compare(T obj1, T obj2) { return _orderByComparator.compare(obj1, obj2); } @Override public String getOrderBy() { String orderBy = _orderByComparator.getOrderBy(); if (_tableName == null) { return orderBy; } String[] columnNames = StringUtil.split(orderBy); StringBundler sb = new StringBundler((3 * columnNames.length) - 1); for (int i = 0; i < columnNames.length; ++i) { String columnName = columnNames[i]; if (columnName.indexOf(CharPool.PERIOD) != -1) { columnName = StringUtil.split(columnName, CharPool.PERIOD)[1]; } sb.append(_tableName); sb.append(StringUtil.trim(columnName)); if (i < (columnNames.length - 1)) { sb.append(StringPool.COMMA_AND_SPACE); } } return sb.toString(); } @Override public String[] getOrderByConditionFields() { return _orderByComparator.getOrderByConditionFields(); } @Override public Object[] getOrderByConditionValues(Object obj) { return _orderByComparator.getOrderByConditionValues(obj); } @Override public String[] getOrderByFields() { return _orderByComparator.getOrderByFields(); } public OrderByComparator<T> getWrappedOrderByComparator() { return _orderByComparator; } @Override public boolean isAscending() { return _orderByComparator.isAscending(); } @Override public boolean isAscending(String field) { return _orderByComparator.isAscending(field); } public void setTableName(String tableName) { if (Validator.isNotNull(tableName)) { if (tableName.endsWith(StringPool.PERIOD)) { _tableName = tableName; } else { _tableName = tableName + CharPool.PERIOD; } } else { _tableName = null; } } @Override public String toString() { return _orderByComparator.toString(); } private final OrderByComparator<T> _orderByComparator; private String _tableName; }