1 package org.apache.maven.wagon;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.maven.wagon.authentication.AuthenticationException;
23 import org.apache.maven.wagon.authentication.AuthenticationInfo;
24 import org.apache.maven.wagon.authorization.AuthorizationException;
25 import org.apache.maven.wagon.events.SessionListener;
26 import org.apache.maven.wagon.events.TransferListener;
27 import org.apache.maven.wagon.proxy.ProxyInfo;
28 import org.apache.maven.wagon.proxy.ProxyInfoProvider;
29 import org.apache.maven.wagon.repository.Repository;
30
31 import java.io.File;
32 import java.util.List;
33
34 public interface Wagon
35 {
36 String ROLE = Wagon.class.getName();
37
38 // ----------------------------------------------------------------------
39 // File/File handling
40 // ----------------------------------------------------------------------
41
42 /**
43 * Downloads specified resource from the repository to given file.
44 *
45 * @param resourceName
46 * @param destination
47 * @throws TransferFailedException
48 * @throws ResourceDoesNotExistException
49 * @throws AuthorizationException
50 */
51 void get( String resourceName, File destination )
52 throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
53
54 /**
55 * Downloads specified resource from the repository
56 * if it was modified since specified date.
57 * The date is measured in milliseconds, between the current time and midnight, January 1, 1970 UTC
58 * and aligned to GMT timezone.
59 *
60 * @param resourceName
61 * @param destination
62 * @param timestamp
63 * @return <code>true</code> if newer resource has been downloaded, <code>false</code> if resource
64 * in the repository is older or has the same age.
65 * @throws TransferFailedException
66 * @throws ResourceDoesNotExistException
67 * @throws AuthorizationException
68 */
69 boolean getIfNewer( String resourceName, File destination, long timestamp )
70 throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
71
72 /**
73 * Copy a file from local system to remote
74 *
75 * @param source the local file
76 * @param destination the remote destination
77 * @throws TransferFailedException
78 * @throws ResourceDoesNotExistException
79 * @throws AuthorizationException
80 */
81 void put( File source, String destination )
82 throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
83
84 /**
85 * Copy a directory from local system to remote
86 *
87 * @param sourceDirectory the local directory
88 * @param destinationDirectory the remote destination
89 * @throws TransferFailedException
90 * @throws ResourceDoesNotExistException
91 * @throws AuthorizationException
92 */
93 void putDirectory( File sourceDirectory, String destinationDirectory )
94 throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
95
96 /**
97 * Check if a remote resource exists
98 *
99 * @param resourceName
100 * @return whether the resource exists or not
101 * @throws TransferFailedException if there's an error trying to access the remote side
102 * @throws AuthorizationException if not authorized to verify the existence of the resource
103 */
104 boolean resourceExists( String resourceName )
105 throws TransferFailedException, AuthorizationException;
106
107 /**
108 * <p/>
109 * Returns a {@link List} of strings naming the files and directories in the directory denoted by
110 * this abstract pathname.
111 * </p>
112 * <p/>
113 * If this abstract pathname does not denote a directory, or does not exist, then this method throws
114 * {@link ResourceDoesNotExistException}.
115 * Otherwise a {@link List} of strings is returned, one for each file or directory in the directory.
116 * Names denoting the directory itself and the directory's parent directory are not included in
117 * the result. Each string is a file name rather than a complete path.
118 * </p>
119 * <p/>
120 * There is no guarantee that the name strings in the resulting list will appear in any specific
121 * order; they are not, in particular, guaranteed to appear in alphabetical order.
122 * </p>
123 *
124 * @param destinationDirectory directory to list contents of
125 * @return A {@link List} of strings naming the files and directories in the directory denoted by
126 * this abstract pathname. The {@link List} will be empty if the directory is empty.
127 * @throws TransferFailedException if there's an error trying to access the remote side
128 * @throws ResourceDoesNotExistException if destinationDirectory does not exist or is not a directory
129 * @throws AuthorizationException if not authorized to list the contents of the directory
130 */
131 List<String> getFileList( String destinationDirectory )
132 throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
133
134 /**
135 * Flag indicating if this wagon supports directory copy operations.
136 *
137 * @return whether if this wagon supports directory operations
138 */
139 boolean supportsDirectoryCopy();
140
141 Repository getRepository();
142
143 // ----------------------------------------------------------------------
144 // Connection/Disconnection
145 // ----------------------------------------------------------------------
146
147 /**
148 * Initiate the connection to the repository.
149 *
150 * @param source the repository to connect to
151 * @throws ConnectionException if there is a problem connecting
152 * @throws org.apache.maven.wagon.authentication.AuthenticationException
153 * if the credentials for connecting are not sufficient
154 */
155 void connect( Repository source )
156 throws ConnectionException, AuthenticationException;
157
158 /**
159 * Initiate the connection to the repository.
160 *
161 * @param source the repository to connect to
162 * @throws ConnectionException if there is a problem connecting
163 * @throws org.apache.maven.wagon.authentication.AuthenticationException
164 * if the credentials for connecting are not sufficient
165 */
166 void connect( Repository source, ProxyInfo proxyInfo )
167 throws ConnectionException, AuthenticationException;
168
169 /**
170 * Initiate the connection to the repository.
171 *
172 * @param source the repository to connect to
173 * @param proxyInfoProvider the provider to obtain a network proxy to use to connect to the remote repository
174 * @throws ConnectionException if there is a problem connecting
175 * @throws org.apache.maven.wagon.authentication.AuthenticationException
176 * if the credentials for connecting are not sufficient
177 */
178 void connect( Repository source, ProxyInfoProvider proxyInfoProvider )
179 throws ConnectionException, AuthenticationException;
180
181 /**
182 * Initiate the connection to the repository.
183 *
184 * @param source the repository to connect to
185 * @param authenticationInfo authentication credentials for connecting
186 * @throws ConnectionException if there is a problem connecting
187 * @throws org.apache.maven.wagon.authentication.AuthenticationException
188 * if the credentials for connecting are not sufficient
189 */
190 void connect( Repository source, AuthenticationInfo authenticationInfo )
191 throws ConnectionException, AuthenticationException;
192
193 /**
194 * Initiate the connection to the repository.
195 *
196 * @param source the repository to connect to
197 * @param authenticationInfo authentication credentials for connecting
198 * @param proxyInfo the network proxy to use to connect to the remote repository
199 * @throws ConnectionException if there is a problem connecting
200 * @throws org.apache.maven.wagon.authentication.AuthenticationException
201 * if the credentials for connecting are not sufficient
202 */
203 void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo )
204 throws ConnectionException, AuthenticationException;
205
206 /**
207 * Initiate the connection to the repository.
208 *
209 * @param source the repository to connect to
210 * @param authenticationInfo authentication credentials for connecting
211 * @param proxyInfoProvider the provider to obtain a network proxy to use to connect to the remote repository
212 * @throws ConnectionException if there is a problem connecting
213 * @throws org.apache.maven.wagon.authentication.AuthenticationException
214 * if the credentials for connecting are not sufficient
215 */
216 void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider )
217 throws ConnectionException, AuthenticationException;
218
219 /**
220 * Initiate the connection to the repository.
221 *
222 * @throws ConnectionException if there is a problem connecting
223 * @throws org.apache.maven.wagon.authentication.AuthenticationException
224 * if ther credentials for connecting are not sufficient
225 * @todo delegate this to a truly internal connection method
226 * @deprecated connect using the {@link #connect(org.apache.maven.wagon.repository.Repository)} or related methods
227 * - this is an internal method
228 */
229 void openConnection()
230 throws ConnectionException, AuthenticationException;
231
232 /**
233 * Disconnect from the repository.
234 *
235 * @throws ConnectionException if there is a problem disconnecting
236 */
237 void disconnect()
238 throws ConnectionException;
239
240 /**
241 * Set the connection timeout limit in milliseconds
242 */
243 void setTimeout( int timeoutValue );
244
245 /**
246 * Get the connection timeout limit in milliseconds
247 */
248 int getTimeout();
249
250 // ----------------------------------------------------------------------
251 // Session listener
252 // ----------------------------------------------------------------------
253
254 void addSessionListener( SessionListener listener );
255
256 void removeSessionListener( SessionListener listener );
257
258 boolean hasSessionListener( SessionListener listener );
259
260 // ----------------------------------------------------------------------
261 // Transfer listener
262 // ----------------------------------------------------------------------
263
264 void addTransferListener( TransferListener listener );
265
266 void removeTransferListener( TransferListener listener );
267
268 boolean hasTransferListener( TransferListener listener );
269
270 boolean isInteractive();
271
272 void setInteractive( boolean interactive );
273 }