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.apache.maven.api.services;
20
21 import java.io.Closeable;
22 import java.net.URI;
23 import java.nio.charset.Charset;
24 import java.nio.charset.StandardCharsets;
25 import java.nio.file.Path;
26 import java.util.Optional;
27
28 import org.apache.maven.api.RemoteRepository;
29 import org.apache.maven.api.annotations.Consumer;
30 import org.apache.maven.api.annotations.Experimental;
31 import org.apache.maven.api.annotations.Nonnull;
32
33 /**
34 * Transport for specified remote repository (using provided remote repository base URI as root). Must be treated as a
35 * resource, best in try-with-resource block.
36 *
37 * @since 4.0
38 */
39 @Experimental
40 @Consumer
41 public interface Transport extends Closeable {
42 /**
43 * GETs the source URI content into target (does not have to exist, or will be overwritten if exist). The
44 * source MUST BE relative from the {@link RemoteRepository#getUrl()} root.
45 *
46 * @return {@code true} if operation succeeded, {@code false} if source does not exist.
47 * @throws RuntimeException If failed (and not due source not exists).
48 */
49 boolean get(@Nonnull URI relativeSource, @Nonnull Path target);
50
51 /**
52 * GETs the source URI content as byte array. The source MUST BE relative from the {@link RemoteRepository#getUrl()}
53 * root.
54 *
55 * @return the byte array if operation succeeded, {@code null} if source does not exist.
56 * @throws RuntimeException If failed (and not due source not exists).
57 */
58 @Nonnull
59 Optional<byte[]> getBytes(@Nonnull URI relativeSource);
60
61 /**
62 * GETs the source URI content as string. The source MUST BE relative from the {@link RemoteRepository#getUrl()}
63 * root.
64 *
65 * @return the string if operation succeeded, {@code null} if source does not exist.
66 * @throws RuntimeException If failed (and not due source not exists).
67 */
68 @Nonnull
69 Optional<String> getString(@Nonnull URI relativeSource, @Nonnull Charset charset);
70
71 /**
72 * GETs the source URI content as string using UTF8 charset. The source MUST BE relative from the
73 * {@link RemoteRepository#getUrl()} root.
74 *
75 * @return the string if operation succeeded, {@code null} if source does not exist.
76 * @throws RuntimeException If failed (and not due source not exists).
77 */
78 @Nonnull
79 default Optional<String> getString(@Nonnull URI relativeSource) {
80 return getString(relativeSource, StandardCharsets.UTF_8);
81 }
82
83 /**
84 * PUTs the source file (must exist as file) to target URI. The target MUST BE relative from the
85 * {@link RemoteRepository#getUrl()} root.
86 *
87 * @throws RuntimeException If PUT fails for any reason.
88 */
89 void put(@Nonnull Path source, @Nonnull URI relativeTarget);
90
91 /**
92 * PUTs the source byte array to target URI. The target MUST BE relative from the
93 * {@link RemoteRepository#getUrl()} root.
94 *
95 * @throws RuntimeException If PUT fails for any reason.
96 */
97 void putBytes(@Nonnull byte[] source, @Nonnull URI relativeTarget);
98
99 /**
100 * PUTs the source string to target URI. The target MUST BE relative from the
101 * {@link RemoteRepository#getUrl()} root.
102 *
103 * @throws RuntimeException If PUT fails for any reason.
104 */
105 void putString(@Nonnull String source, @Nonnull Charset charset, @Nonnull URI relativeTarget);
106
107 /**
108 * PUTs the source string using UTF8 charset to target URI. The target MUST BE relative from the
109 * {@link RemoteRepository#getUrl()} root.
110 *
111 * @throws RuntimeException If PUT fails for any reason.
112 */
113 default void putString(@Nonnull String source, @Nonnull URI relativeTarget) {
114 putString(source, StandardCharsets.UTF_8, relativeTarget);
115 }
116 }