docs: public Entry[] listEntries( DirectoryEntry directory )
      {
          if ( getRoot().equals( directory ) )
          {
              Set<String> rootGroupIds = new TreeSet<String>( store.getGroupIds( "" ) );
              Entry[] result = new Entry[rootGroupIds.size()];
              int index = 0;
              for ( String name : rootGroupIds )
              {
                  result[index++] = new DefaultDirectoryEntry( this, getRoot(), name );
              }
              return result;
          }
          List<Entry> result = new ArrayList<Entry>();
          Set<String> names = new HashSet<String>();
          String path = directory.toPath();
  
          try
          {
              store.getMetadataLastModified( path );
              MetadataFileEntry entry = new MetadataFileEntry( this, directory, path, store );
              if ( !names.contains( entry.getName() ) )
              {
                  result.add( entry );
                  names.add( entry.getName() );
              }
          }
          catch ( MetadataNotFoundException e )
          {
              // ignore
          }
          catch ( IOException e )
          {
              // ignore
          }
  
          String groupId = path.replace( '/', '.' );
  
          // get all the groupId's that start with this groupId
          String groupIdPrefix = groupId + ".";
          Set<String> groupIds = new TreeSet<String>( store.getGroupIds( groupId ) );
          for ( String name : groupIds )
          {
              if ( !names.contains( name ) )
              {
                  result.add( new DefaultDirectoryEntry( this, directory, name ) );
                  names.add( name );
              }
          }
  
          // get all the artifactIds that belong to this groupId
          for ( String name : store.getArtifactIds( groupId ) )
          {
              if ( !names.contains( name ) )
              {
                  result.add( new DefaultDirectoryEntry( this, directory, name ) );
                  names.add( name );
              }
          }
  
          DirectoryEntry parent = directory.getParent();
          if ( parent != null && !getRoot().equals( parent ) )
          {
              // get all the versions that belong to the groupId/artifactId path
              groupId = parent.toPath().replace( '/', '.' );
              String artifactId = directory.getName();
              for ( String name : store.getVersions( groupId, artifactId ) )
              {
                  if ( !names.contains( name ) )
                  {
                      result.add( new DefaultDirectoryEntry( this, directory, name ) );
                      names.add( name );
                  }
              }
              DirectoryEntry grandParent = parent.getParent();
              if ( grandParent != null && !getRoot().equals( grandParent ) )
              {
                  // get all the versions that belong to the groupId/artifactId path
                  groupId = grandParent.toPath().replace( '/', '.' );
                  artifactId = parent.getName();
                  String version = directory.getName();
                  for ( Artifact a : store.getArtifacts( groupId, artifactId, version ) )
                  {
                      ArtifactFileEntry entry = new ArtifactFileEntry( this, directory, a, store );
                      if ( !names.contains( entry.getName() ) )
                      {
                          result.add( entry );
                          names.add( entry.getName() );
                      }
                  }
              }
          }
  
          // sort
          Collections.sort( result, new Comparator<Entry>()
          {
              public int compare( Entry o1, Entry o2 )
              {
                  return ( o1 ).getName().compareTo( ( o2 ).getName() );
              }
          } );
          return result.toArray( new Entry[result.size()] );
      }