/**
* 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.transaction;
import com.liferay.portal.kernel.util.HashUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import java.util.Arrays;
/**
* @author Shuyang Zhou
*/
public class TransactionConfig {
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof TransactionConfig)) {
return false;
}
TransactionConfig transactionConfig = (TransactionConfig)obj;
if ((_isolation == transactionConfig._isolation) &&
Arrays.equals(
_noRollbackForClassNames,
transactionConfig._noRollbackForClassNames) &&
Arrays.equals(
_noRollbackForClasses,
transactionConfig._noRollbackForClasses) &&
(_propagation == transactionConfig._propagation) &&
(_readOnly == transactionConfig._readOnly) &&
Arrays.equals(
_rollbackForClassNames,
transactionConfig._rollbackForClassNames) &&
Arrays.equals(
_rollbackForClasses, transactionConfig._rollbackForClasses) &&
(_timeout == transactionConfig._timeout)) {
return true;
}
return false;
}
public Isolation getIsolation() {
return _isolation;
}
public Class<?>[] getNoRollbackForClasses() {
return _noRollbackForClasses;
}
public String[] getNoRollbackForClassNames() {
return _noRollbackForClassNames;
}
public Propagation getPropagation() {
return _propagation;
}
public Class<?>[] getRollbackForClasses() {
return _rollbackForClasses;
}
public String[] getRollbackForClassNames() {
return _rollbackForClassNames;
}
public int getTimeout() {
return _timeout;
}
@Override
public int hashCode() {
int hash = HashUtil.hash(0, _isolation);
if (_noRollbackForClassNames == null) {
hash = HashUtil.hash(hash, 0);
}
else {
for (String noRollbackForClassName : _noRollbackForClassNames) {
hash = HashUtil.hash(hash, noRollbackForClassName);
}
}
if (_noRollbackForClasses == null) {
hash = HashUtil.hash(hash, 0);
}
else {
for (Class<?> noRollbackForClass : _noRollbackForClasses) {
hash = HashUtil.hash(hash, noRollbackForClass);
}
}
hash = HashUtil.hash(hash, _propagation);
hash = HashUtil.hash(hash, _readOnly);
if (_rollbackForClassNames == null) {
hash = HashUtil.hash(hash, 0);
}
else {
for (String rollbackForClassName : _rollbackForClassNames) {
hash = HashUtil.hash(hash, rollbackForClassName);
}
}
if (_rollbackForClasses == null) {
hash = HashUtil.hash(hash, 0);
}
else {
for (Class<?> rollbackForClass : _rollbackForClasses) {
hash = HashUtil.hash(hash, rollbackForClass);
}
}
hash = HashUtil.hash(hash, _timeout);
return hash;
}
public boolean isReadOnly() {
return _readOnly;
}
@Override
public String toString() {
StringBundler sb = new StringBundler(17);
sb.append("{isolation=");
sb.append(_isolation);
sb.append(", noRollbackForClassNames=");
sb.append(Arrays.toString(_noRollbackForClassNames));
sb.append(", noRollbackForClasses=");
sb.append(Arrays.toString(_noRollbackForClasses));
sb.append(", propagation=");
sb.append(_propagation);
sb.append(", readOnly=");
sb.append(_readOnly);
sb.append(", rollbackForClassNames=");
sb.append(Arrays.toString(_rollbackForClassNames));
sb.append(", rollbackForClasses=");
sb.append(Arrays.toString(_rollbackForClasses));
sb.append(", timeout=");
sb.append(_timeout);
sb.append(StringPool.CLOSE_CURLY_BRACE);
return sb.toString();
}
public static class Builder {
public TransactionConfig build() {
return new TransactionConfig(this);
}
public Builder setIsolation(Isolation isolation) {
_isolation = isolation;
return this;
}
public Builder setNoRollbackForClasses(
Class<?>... noRollbackForClasses) {
_noRollbackForClasses = noRollbackForClasses;
return this;
}
public Builder setNoRollbackForClassNames(
String... noRollbackForClassNames) {
_noRollbackForClassNames = noRollbackForClassNames;
return this;
}
public Builder setPropagation(Propagation propagation) {
_propagation = propagation;
return this;
}
public Builder setReadOnly(boolean readOnly) {
_readOnly = readOnly;
return this;
}
public Builder setRollbackForClasses(Class<?>... rollbackForClasses) {
_rollbackForClasses = rollbackForClasses;
return this;
}
public Builder setRollbackForClassNames(
String... rollbackForClassNames) {
_rollbackForClassNames = rollbackForClassNames;
return this;
}
public Builder setTimeout(int timeout) {
_timeout = timeout;
return this;
}
private static final Class<?>[] _emptyClassArray = new Class<?>[0];
private Isolation _isolation = Isolation.DEFAULT;
private Class<?>[] _noRollbackForClasses = _emptyClassArray;
private String[] _noRollbackForClassNames = StringPool.EMPTY_ARRAY;
private Propagation _propagation = Propagation.REQUIRED;
private boolean _readOnly;
private Class<?>[] _rollbackForClasses = _emptyClassArray;
private String[] _rollbackForClassNames = StringPool.EMPTY_ARRAY;
private int _timeout = TransactionDefinition.TIMEOUT_DEFAULT;
}
public static class Factory {
public static TransactionConfig create(
Isolation isolation, Propagation propagation, boolean readOnly,
int timeout, Class<?>[] rollbackForClasses,
String[] rollbackForClassNames, Class<?>[] noRollbackForClasses,
String[] noRollbackForClassNames) {
Builder builder = new Builder();
builder.setIsolation(isolation);
builder.setPropagation(propagation);
builder.setReadOnly(readOnly);
builder.setTimeout(timeout);
builder.setRollbackForClasses(rollbackForClasses);
builder.setRollbackForClassNames(rollbackForClassNames);
builder.setNoRollbackForClasses(noRollbackForClasses);
builder.setNoRollbackForClassNames(noRollbackForClassNames);
return builder.build();
}
public static TransactionConfig create(
Propagation propagation, Class<?>[] rollbackForClasses,
Class<?>... noRollbackForClasses) {
return create(
Isolation.PORTAL, propagation, false, -1, rollbackForClasses,
new String[0], noRollbackForClasses, new String[0]);
}
}
private TransactionConfig(Builder builder) {
_isolation = builder._isolation;
_noRollbackForClassNames = builder._noRollbackForClassNames;
_noRollbackForClasses = builder._noRollbackForClasses;
_propagation = builder._propagation;
_readOnly = builder._readOnly;
_rollbackForClassNames = builder._rollbackForClassNames;
_rollbackForClasses = builder._rollbackForClasses;
_timeout = builder._timeout;
}
private final Isolation _isolation;
private final Class<?>[] _noRollbackForClasses;
private final String[] _noRollbackForClassNames;
private final Propagation _propagation;
private final boolean _readOnly;
private final Class<?>[] _rollbackForClasses;
private final String[] _rollbackForClassNames;
private final int _timeout;
}