/* * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.libraries.mobiledatadownload.file; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; /** * Interface for adding behavior to how a file is opened that's independent from the Opener and * Transforms. For example, this is used to support file locking and syncing. Instances are passed * the whole chain of streams (which includes backends, transforms and monitors). The chain is * ordered so that the first stream is the one that the client sees, and the last stream the * backend. While the interface only sees Input/OutputStreams, most implementations will rely on * instanceof to see if there are other features available on the stream. */ public interface Behavior { /** * Inform this Behavior about this input chain. * * @param chain The transforms, monitors, and backend (in that order). */ default void forInputChain(List chain) throws IOException {} /** * Inform this Behavior about this output chain. * * @param chain The transforms, monitors, and backend (in that order). */ default void forOutputChain(List chain) throws IOException {} /** * Perform any aspects of the behavior that are required to be executed immediately prior to * closing the stream. */ default void commit() throws IOException {} }