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 }