//file: x_tar.java
package learningjava.contenthandlers.application;

import java.net.*;
import java.io.*;
import java.util.Date;

public class x_tar extends ContentHandler {
  static int
    RECORDLEN = 512,
    NAMEOFF = 0, NAMELEN = 100,
    SIZEOFF = 124, SIZELEN = 12,
    MTIMEOFF = 136, MTIMELEN = 12;

  public Object getContent(URLConnection uc) throws IOException {
    InputStream is = uc.getInputStream(  );
    StringBuffer output =
        new StringBuffer( "Tape Archive Listing:\n\n" );
    byte [] header = new byte[RECORDLEN];
    int count = 0;

    while ( (is.read(header) == RECORDLEN)
             && (header[NAMEOFF] != 0) ) {
      String name =
           new String(header, NAMEOFF, NAMELEN, "8859_1"). trim(  );
      String s =
           new String(header, SIZEOFF, SIZELEN, "8859_1").trim(  );
      int size = Integer.parseInt(s, 8);
      s = new String(header, MTIMEOFF, MTIMELEN, "8859_1").trim(  );
      long l = Integer.parseInt(s, 8);
      Date mtime = new Date( l*1000 );

      output.append( size + " " + mtime + " " + name + "\n" );

      count += is.skip( size ) + RECORDLEN;
      if ( count % RECORDLEN != 0 )
        count += is.skip ( RECORDLEN - count % RECORDLEN);
    }

    if ( count == 0 )
      output.append("Not a valid TAR file\n");

    return( output.toString(  ) );
  }
}

