package rocks.inspectit.shared.cs.communication.comparator; import java.util.Comparator; import java.util.List; import rocks.inspectit.shared.all.cmr.service.ICachedDataService; import rocks.inspectit.shared.all.communication.data.SqlStatementData; import rocks.inspectit.shared.all.util.ObjectUtils; /** * Comparators for {@link SqlStatementData}. * * @author Ivan Senic * */ public enum SqlStatementDataComparatorEnum implements IDataComparator<SqlStatementData>, Comparator<SqlStatementData> { /** * Sort by if the statement is prepared or not. */ IS_PREPARED_STATEMENT, /** * Sort by SQL string. */ SQL, /** * Sort by parameter values. */ PARAMETERS, /** * Sort by both SQL string and parameter values. */ SQL_AND_PARAMETERS, /** * Sort by the name of the database. */ DATABASE_NAME, /** * Sort by the database version. */ DATABASE_VERSION, /** * Sort by the database url. */ DATABASE_URL; /** * {@inheritDoc} */ @Override public int compare(SqlStatementData o1, SqlStatementData o2, ICachedDataService cachedDataService) { return compare(o1, o2); } /** * {@inheritDoc} */ @Override public int compare(SqlStatementData o1, SqlStatementData o2) { switch (this) { case IS_PREPARED_STATEMENT: return Boolean.valueOf(o1.isPreparedStatement()).compareTo(Boolean.valueOf(o2.isPreparedStatement())); case SQL: return ObjectUtils.compare(o1.getSql(), o2.getSql()); case DATABASE_NAME: return ObjectUtils.compare(o1.getDatabaseProductName(), o2.getDatabaseProductName()); case DATABASE_VERSION: return ObjectUtils.compare(o1.getDatabaseProductVersion(), o2.getDatabaseProductVersion()); case DATABASE_URL: return ObjectUtils.compare(o1.getDatabaseUrl(), o2.getDatabaseUrl()); case PARAMETERS: List<String> parameterList1 = o1.getParameterValues(); List<String> parameterList2 = o2.getParameterValues(); return ObjectUtils.compare(parameterList1, parameterList2); case SQL_AND_PARAMETERS: int result = SQL.compare(o1, o2); if (0 != result) { return result; } else { return PARAMETERS.compare(o1, o2); } default: return 0; } } }