/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.test.transactional;
import static java.lang.System.identityHashCode;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.Optional.of;
import static org.mule.runtime.api.util.Preconditions.checkArgument;
import static org.mule.runtime.api.util.Preconditions.checkState;
import org.mule.runtime.extension.api.annotation.param.Connection;
import org.mule.runtime.extension.api.annotation.param.Content;
import org.mule.runtime.extension.api.runtime.streaming.PagingProvider;
import org.mule.runtime.extension.api.tx.OperationTransactionalAction;
import org.mule.test.transactional.connection.TestTransactionalConnection;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
public class TransactionalOperations {
public TestTransactionalConnection getConnection(@Connection TestTransactionalConnection connection) {
return connection;
}
public void verifyNoTransaction(@Connection TestTransactionalConnection connection) {
checkState(!connection.isTransactionBegun(), "transaction begun with no reason");
}
public void verifyTransactionBegun(@Connection TestTransactionalConnection connection) {
checkState(connection.isTransactionBegun(), "transaction not begun");
}
public void verifyTransactionCommited(@Connection TestTransactionalConnection connection) {
checkState(connection.isTransactionCommited(), "transaction not committed");
}
public void verifyTransactionRolledback(@Connection TestTransactionalConnection connection) {
checkState(connection.isTransactionRolledback(), "transaction not rolled back");
}
public void verifySameConnection(@Connection TestTransactionalConnection connection,
@Content TestTransactionalConnection transactionalConnection) {
checkArgument(transactionalConnection != null, "The transactionalConnection can't be null");
checkState(connection.getConnectionId() == transactionalConnection.getConnectionId(), "The connection is not the same");
}
public OperationTransactionalAction injectTransactionalAction(@Connection TestTransactionalConnection connection,
OperationTransactionalAction action) {
return action;
}
public PagingProvider<TestTransactionalConnection, Integer> pagedTransactionalOperation() throws Exception {
return new PagingProvider<TestTransactionalConnection, Integer>() {
private static final int SIZE = 2;
private int count = 0;
@Override
public List<Integer> getPage(TestTransactionalConnection connection) {
return count++ < SIZE ? asList(identityHashCode(connection)) : emptyList();
}
@Override
public Optional<Integer> getTotalResults(TestTransactionalConnection connection) {
return of(SIZE);
}
@Override
public void close() throws IOException {
}
@Override
public boolean useStickyConnections() {
return false;
}
};
}
public void fail() {
throw new RuntimeException("you better rollback!");
}
}