/******************************************************************************* * Copyright (c) 2016 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Semantum Oy - initial API and implementation *******************************************************************************/ package org.simantics.db.function; import java.util.Objects; import org.simantics.db.exception.DatabaseException; /** * Represents an operation that accepts two input arguments and returns no * result and can throw database exceptions. This is the two-arity * specialization of {@link DbConsumer}. Unlike most other functional interfaces, * {@code BiDbConsumer} is expected to operate via side-effects. * * @param * the type of the first argument to the operation * @param * the type of the second argument to the operation * * @see Consumer * @since 1.22.1 & 1.24.0 */ @FunctionalInterface public interface DbBiConsumer { /** * Performs this operation on the given arguments. * * @param t the first input argument * @param u the second input argument */ void accept(T t, U u) throws DatabaseException; /** * Returns a composed {@code BiConsumer} that performs, in sequence, this * operation followed by the {@code after} operation. If performing either * operation throws an exception, it is relayed to the caller of the * composed operation. If performing this operation throws an exception, * the {@code after} operation will not be performed. * * @param after the operation to perform after this operation * @return a composed {@code BiConsumer} that performs in sequence this * operation followed by the {@code after} operation * @throws NullPointerException if {@code after} is null */ default DbBiConsumer andThen(DbBiConsumer after) { Objects.requireNonNull(after); return (l, r) -> { accept(l, r); after.accept(l, r); }; } }