View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.spi.io;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.io.InputStream;
24  import java.nio.ByteBuffer;
25  
26  /**
27   * A utility component to perform file-based operations.
28   */
29  public interface FileProcessor {
30  
31      /**
32       * Creates the directory named by the given abstract pathname, including any necessary but nonexistent parent
33       * directories. Note that if this operation fails it may have succeeded in creating some of the necessary parent
34       * directories.
35       *
36       * @param directory The directory to create, may be {@code null}.
37       * @return {@code true} if and only if the directory was created, along with all necessary parent directories;
38       *         {@code false} otherwise
39       */
40      boolean mkdirs(File directory);
41  
42      /**
43       * Writes the given data to a file. UTF-8 is assumed as encoding for the data. Creates the necessary directories for
44       * the target file. In case of an error, the created directories will be left on the file system.
45       *
46       * @param target The file to write to, must not be {@code null}. This file will be overwritten.
47       * @param data The data to write, may be {@code null}.
48       * @throws IOException If an I/O error occurs.
49       */
50      void write(File target, String data) throws IOException;
51  
52      /**
53       * Writes the given stream to a file. Creates the necessary directories for the target file. In case of an error,
54       * the created directories will be left on the file system.
55       *
56       * @param target The file to write to, must not be {@code null}. This file will be overwritten.
57       * @param source The stream to write to the file, must not be {@code null}.
58       * @throws IOException If an I/O error occurs.
59       */
60      void write(File target, InputStream source) throws IOException;
61  
62      /**
63       * Moves the specified source file to the given target file. If the target file already exists, it is overwritten.
64       * Creates the necessary directories for the target file. In case of an error, the created directories will be left
65       * on the file system.
66       *
67       * @param source The file to move from, must not be {@code null}.
68       * @param target The file to move to, must not be {@code null}.
69       * @throws IOException If an I/O error occurs.
70       */
71      void move(File source, File target) throws IOException;
72  
73      /**
74       * Copies the specified source file to the given target file. Creates the necessary directories for the target file.
75       * In case of an error, the created directories will be left on the file system.
76       *
77       * @param source The file to copy from, must not be {@code null}.
78       * @param target The file to copy to, must not be {@code null}.
79       * @throws IOException If an I/O error occurs.
80       */
81      void copy(File source, File target) throws IOException;
82  
83      /**
84       * Copies the specified source file to the given target file. Creates the necessary directories for the target file.
85       * In case of an error, the created directories will be left on the file system.
86       *
87       * @param source The file to copy from, must not be {@code null}.
88       * @param target The file to copy to, must not be {@code null}.
89       * @param listener The listener to notify about the copy progress, may be {@code null}.
90       * @return The number of copied bytes.
91       * @throws IOException If an I/O error occurs.
92       */
93      long copy(File source, File target, ProgressListener listener) throws IOException;
94  
95      /**
96       * A listener object that is notified for every progress made while copying files.
97       *
98       * @see FileProcessor#copy(File, File, ProgressListener)
99       */
100     interface ProgressListener {
101 
102         void progressed(ByteBuffer buffer) throws IOException;
103     }
104 
105     /**
106      * Reads checksum from specified file.
107      *
108      * @throws IOException in case of any IO error.
109      * @since 1.8.0
110      */
111     String readChecksum(File checksumFile) throws IOException;
112 
113     /**
114      * Writes checksum to specified file.
115      *
116      * @throws IOException in case of any IO error.
117      * @since 1.8.0
118      */
119     void writeChecksum(File checksumFile, String checksum) throws IOException;
120 }