docs: protected Entry get( DirectoryEntry parent, String name )
      {
          String path = "/";
          if ( StringUtils.isNotEmpty( parent.toPath()  ) )
          {
              path += parent.toPath() + "/";
          }
          path += name;
  
          if ( "favicon.ico".equals( name ) )
          {
              return null;
          }
          if ( METADATA.matcher( path ).matches() )
          {
              MetadataFileEntry entry = new MetadataFileEntry( this, parent, parent.toPath(), store );
              try
              {
                  entry.getLastModified();
                  return entry;
              }
              catch ( IOException e )
              {
                  return null;
              }
          }
          else if ( ARCHETYPE_CATALOG.matcher( path ).matches() )
          {
              ArchetypeCatalogFileEntry entry = new ArchetypeCatalogFileEntry( this, parent, store );
              try
              {
                  entry.getLastModified();
                  return entry;
              }
              catch ( IOException e )
              {
                  return null;
              }
          }
          else
          {
              Matcher snapshotArtifact = SNAPSHOT_ARTIFACT.matcher( path );
              if ( snapshotArtifact.matches() )
              {
                  String groupId = StringUtils.stripEnd( snapshotArtifact.group( 1 ), "/" ).replace( '/', '.' );
                  String artifactId = snapshotArtifact.group( 2 );
                  String version = snapshotArtifact.group( 3 ) + "-SNAPSHOT";
                  Pattern rule = Pattern.compile(
                      "\\Q" + artifactId + "\\E-(?:\\Q" + StringUtils.removeEnd( version, "-SNAPSHOT" )
                          + "\\E-(SNAPSHOT|(\\d{4})(\\d{2})(\\d{2})\\.(\\d{2})(\\d{2})(\\d{2})-(\\d+)))(?:-([^.]+))?\\.([^/]*)" );
                  Matcher matcher = rule.matcher( name );
                  if ( !matcher.matches() )
                  {
                      String classifier = snapshotArtifact.group( 5 );
                      String type = snapshotArtifact.group( 6 );
                      if ( classifier != null )
                      {
                          classifier = classifier.substring( 1 );
                      }
                      if ( StringUtils.isEmpty( classifier ) )
                      {
                          classifier = null;
                      }
                      return new ArtifactFileEntry( this, parent,
                                                    new Artifact( groupId, artifactId, version, classifier, type ),
                                                    store );
                  }
                  if ( matcher.group( 1 ).equals( "SNAPSHOT" ) )
                  {
                      Artifact artifact = new Artifact( groupId, artifactId, version, matcher.group( 9 ),
                                                        matcher.group( 10 ) );
                      try
                      {
                          store.get( artifact );
                          return new ArtifactFileEntry( this, parent, artifact, store );
                      }
                      catch ( IOException e )
                      {
                          return null;
                      }
                      catch ( ArtifactNotFoundException e )
                      {
                          return null;
                      }
                  }
                  try
                  {
                      Calendar cal = new GregorianCalendar();
                      cal.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
                      cal.set( Calendar.YEAR, Integer.parseInt( matcher.group( 2 ) ) );
                      cal.set( Calendar.MONTH, Integer.parseInt( matcher.group( 3 ) ) - 1 );
                      cal.set( Calendar.DAY_OF_MONTH, Integer.parseInt( matcher.group( 4 ) ) );
                      cal.set( Calendar.HOUR_OF_DAY, Integer.parseInt( matcher.group( 5 ) ) );
                      cal.set( Calendar.MINUTE, Integer.parseInt( matcher.group( 6 ) ) );
                      cal.set( Calendar.SECOND, Integer.parseInt( matcher.group( 7 ) ) );
                      cal.set( Calendar.MILLISECOND, 0);
                      long timestamp = cal.getTimeInMillis();
                      int buildNumber = Integer.parseInt( matcher.group( 8 ) );
                      
                      Artifact artifact = new Artifact( groupId, artifactId, version, matcher.group( 9 ),
                                                        matcher.group( 10 ), timestamp, buildNumber );
                      try
                      {
                          store.get( artifact );
                          return new ArtifactFileEntry( this, parent, artifact, store );
                      }
                      catch ( IOException e )
                      {
                          return null;
                      }
                      catch ( ArtifactNotFoundException e )
                      {
                          return null;
                      }
                  }
                  catch ( NullPointerException e )
                  {
                      return new DefaultDirectoryEntry( this, parent, name );
                  }
              }
              else
              {
                  Matcher matcher = ARTIFACT.matcher( path );
                  if ( matcher.matches() )
                  {
                      String groupId = StringUtils.stripEnd( matcher.group( 1 ), "/" ).replace( '/', '.' );
                      String artifactId = matcher.group( 2 );
                      String version = matcher.group( 3 );
                      String classifier = matcher.group( 5 );
                      String type = matcher.group( 6 );
                      if ( classifier != null )
                      {
                          classifier = classifier.substring( 1 );
                      }
                      if ( StringUtils.isEmpty( classifier ) )
                      {
                          classifier = null;
                      }
                      
                      Artifact artifact = new Artifact( groupId, artifactId, version, classifier, type );
                      try
                      {
                          store.get( artifact );
                          return new ArtifactFileEntry( this, parent, artifact, store );
                      }
                      catch ( ArtifactNotFoundException e )
                      {
                          return null;
                      }
                      catch ( IOException e )
                      {
                          return null;
                      }
                  }
                  else
                  {
                      return new DefaultDirectoryEntry( this, parent, name );
                  }
              }
          }
      }