View Javadoc

1   package org.apache.maven.wagon.providers.http;
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.http.HttpException;
23  import org.apache.http.HttpResponse;
24  import org.apache.http.HttpStatus;
25  import org.apache.http.client.methods.HttpGet;
26  import org.apache.maven.wagon.ResourceDoesNotExistException;
27  import org.apache.maven.wagon.TransferFailedException;
28  import org.apache.maven.wagon.authorization.AuthorizationException;
29  import org.apache.maven.wagon.shared.http4.AbstractHttpClientWagon;
30  import org.apache.maven.wagon.shared.http4.HtmlFileListParser;
31  
32  import java.io.IOException;
33  import java.io.InputStream;
34  import java.util.List;
35  
36  /**
37   * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
38   *
39   */
40  public class HttpWagon
41      extends AbstractHttpClientWagon
42  {
43      public List<String> getFileList( String destinationDirectory )
44          throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
45      {
46          if ( destinationDirectory.length() > 0 && !destinationDirectory.endsWith( "/" ) )
47          {
48              destinationDirectory += "/";
49          }
50  
51          String url = getRepository().getUrl() + "/" + destinationDirectory;
52  
53          HttpGet getMethod = new HttpGet( url );
54  
55          try
56          {
57  
58              HttpResponse response = execute( getMethod );
59              int statusCode = response.getStatusLine().getStatusCode();
60  
61              fireTransferDebug( url + " - Status code: " + statusCode );
62  
63              // TODO [BP]: according to httpclient docs, really should swallow the output on error. verify if that is required
64              switch ( statusCode )
65              {
66                  case HttpStatus.SC_OK:
67                      break;
68  
69                  case SC_NULL:
70                      throw new TransferFailedException( "Failed to transfer file: " );
71  
72                  case HttpStatus.SC_FORBIDDEN:
73                      throw new AuthorizationException( "Access denied to: " + url );
74  
75                  case HttpStatus.SC_UNAUTHORIZED:
76                      throw new AuthorizationException( "Not authorized." );
77  
78                  case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
79                      throw new AuthorizationException( "Not authorized by proxy." );
80  
81                  case HttpStatus.SC_NOT_FOUND:
82                      throw new ResourceDoesNotExistException( "File: " + url + " does not exist" );
83  
84                      //add more entries here
85                  default:
86                      throw new TransferFailedException(
87                          "Failed to transfer file: " + url + ". Return code is: " + statusCode );
88              }
89  
90              InputStream is = response.getEntity().getContent();
91  
92              return HtmlFileListParser.parseFileList( url, is );
93          }
94          catch ( IOException e )
95          {
96              throw new TransferFailedException( "Could not read response body.", e );
97          }
98          catch ( HttpException e )
99          {
100             throw new TransferFailedException( "Could not read response body.", e );
101         }
102         finally
103         {
104             getMethod.abort();
105         }
106     }
107 }