public List getFileList()

in wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java [244:336]


    public List<String> getFileList( String destinationDirectory )
        throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
    {
        String repositoryUrl = repository.getUrl();
        String url = repositoryUrl + ( repositoryUrl.endsWith( "/" ) ? "" : "/" ) + destinationDirectory;

        HttpPropfind method = null;
        CloseableHttpResponse closeableHttpResponse = null;
        try
        {
            if ( isDirectory( url ) )
            {
                DavPropertyNameSet nameSet = new DavPropertyNameSet();
                nameSet.add( DavPropertyName.create( DavConstants.PROPERTY_DISPLAYNAME ) );

                method = new HttpPropfind( url, nameSet, DavConstants.DEPTH_1 );
                closeableHttpResponse = execute( method );
                if ( method.succeeded( closeableHttpResponse ) )
                {
                    ArrayList<String> dirs = new ArrayList<>();
                    MultiStatus multiStatus = method.getResponseBodyAsMultiStatus( closeableHttpResponse );
                    for ( int i = 0; i < multiStatus.getResponses().length; i++ )
                    {
                        MultiStatusResponse response = multiStatus.getResponses()[i];
                        String entryUrl = response.getHref();
                        String fileName = PathUtils.filename( URLDecoder.decode( entryUrl ) );
                        if ( entryUrl.endsWith( "/" ) )
                        {
                            if ( i == 0 )
                            {
                                // by design jackrabbit WebDAV sticks parent directory as the first entry
                                // so we need to ignore this entry
                                // http://www.webdav.org/specs/rfc4918.html#rfc.section.9.1
                                continue;
                            }

                            //extract "dir/" part of "path.to.dir/"
                            fileName = PathUtils.filename( PathUtils.dirname( URLDecoder.decode( entryUrl ) ) ) + "/";
                        }

                        if ( !StringUtils.isEmpty( fileName ) )
                        {
                            dirs.add( fileName );
                        }
                    }
                    return dirs;
                }

                int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
                String reasonPhrase = closeableHttpResponse.getStatusLine().getReasonPhrase();
                if ( statusCode == HttpStatus.SC_NOT_FOUND || statusCode == HttpStatus.SC_GONE )
                {
                    EntityUtils.consumeQuietly( closeableHttpResponse.getEntity() );
                    throw new ResourceDoesNotExistException( formatResourceDoesNotExistMessage( url, statusCode,
                            reasonPhrase, getProxyInfo() ) );
                }
            }
        }
        catch ( HttpException e )
        {
            throw new TransferFailedException( e.getMessage(), e );
        }
        catch ( DavException e )
        {
            throw new TransferFailedException( e.getMessage(), e );
        }
        catch ( IOException e )
        {
            throw new TransferFailedException( e.getMessage(), e );
        }
        finally
        {
            //TODO olamy: not sure we still need this!!
            if ( method != null )
            {
                method.releaseConnection();
            }
            if ( closeableHttpResponse != null )
            {
                try
                {
                    closeableHttpResponse.close();
                }
                catch ( IOException e )
                {
                    // ignore
                }
            }
        }
        // FIXME WAGON-580; actually the exception is wrong here; we need an IllegalStateException here
        throw new ResourceDoesNotExistException(
            "Destination path exists but is not a " + "WebDAV collection (directory): " + url );
    }