Example: Creating a traversable integrated file system tree (File two of three)

This example code, in conjunction with the code in the other two example files, displays an HTMLTree and FileListElement in a servlet. The three files in the example are:

Note: Read the Code example disclaimer for important legal information.
//////////////////////////////////////////////////////////////////////////////////
//
// This source is an example of using the IBM Toolbox for Java HTML
// package classes, which allow you to easily build HTML and File Trees.
//
//////////////////////////////////////////////////////////////////////////////////

import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.*;

import com.ibm.as400.access.AS400;
import com.ibm.as400.access.IFSJavaFile;
import com.ibm.as400.util.html.HTMLMeta;
import com.ibm.as400.util.html.HTMLTree;
import com.ibm.as400.util.html.HTMLTreeElement;
import com.ibm.as400.util.html.URLParser;
import com.ibm.as400.util.html.DirFilter;
import com.ibm.as400.util.html.FileTreeElement;
import com.ibm.as400.util.servlet.ServletHyperlink;

//
// An example of using the HTMLTree and FileTreeElement classes
// in a servlet.
//

public class TreeNav extends HttpServlet 
{
   private AS400 sys_;

   public void init(ServletConfig config) 
      throws ServletException
   {
      super.init(config);

      // Create an AS400 object.
      sys_ = new AS400("mySystem", "myUserID", "myPassword");

      // IBM Toolbox for Java uses a set of default icons to represents expanded,
      // collapsed, and documents within the HTMLTree. To enhance those icons,
      // IBM Toolbox for Java ships three gifs (expanded.gif, collapsed.gif, bullet.gif)
      // in the jt400Servlet.jar file.  Browsers do not have the ability to find
      // gifs in a jar or zip file, so you need to extract those images from the
      // jar file and place them in the appropriate webserver directory (by default
      // it is the /html directory). Then change the following lines of code to
      // specify the correct location in the set methods.  The location can be
      // absolute or relative.
      
      HTMLTreeElement.setExpandedGif("http://myServer/expanded.gif");
      HTMLTreeElement.setCollapsedGif("http://myServer/collapsed.gif");
      HTMLTreeElement.setDocGif("http://myServer/bullet.gif");
   }
   
   /**
    *  Process the GET request.
    *  @param req The request.
    *  @param res The response.
    **/

   public void doGet (HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException
   {  
      // Use session data to remember the state of the tree.
      HttpSession session = req.getSession(true);
      HTMLTree fileTree = (HTMLTree)session.getValue("filetree");

      // If this session does not already have a file tree, then
      // create the initial tree.
      if (fileTree == null)
         fileTree = createTree(req, resp, req.getRequestURI());
        
      // Set the Http servlet request on the HTMLTree.
      fileTree.setHttpServletRequest(req);

      resp.setContentType("text/html");

      PrintWriter out = resp.getWriter();
      out.println("<html>\n");
      out.println(new HTMLMeta("Expires","Mon, 03 Jan 1990 13:00:00 GMT"));
      out.println("<body>\n");

      // Get the tag for the HTMLTree.
      out.println(fileTree.getTag());

      out.println("</body>\n");
      out.println("</html>\n");
      out.close();

      // Set the session tree value, so when entering this servlet for
      // the second time, the FileTree object will be reused.
      session.putValue("filetree", fileTree);    
   }
   
   /**
    *  Process the POST request.
    *  @param req The request.
    *  @param res The response.
    **/

   public void doPost (HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException
   {
      res.setContentType("text/html");
      ServletOutputStream out = res.getOutputStream();
   }

   /**
    *  This method will create the initial HTMLTree.
    **/

   private HTMLTree createTree(HttpServletRequest req, 
                               HttpServletResponse resp, String uri)
   {
      // Create an HTMLTree object.
      HTMLTree tree = new HTMLTree(req);

        try
        {  
          // Create a URLParser object.
          URLParser urlParser = new URLParser(uri);

          // Create a File object and set the root IFS directory.
          IFSJavaFile root = new IFSJavaFile(sys_, "/QIBM");

          // Create a Filter.
          DirFilter filter = new DirFilter();

          // Get the list of files that satisfy the directory filter.
          String[] list = root.list(filter);

          File[] dirList = new File[list.length];

          // We don't want to require webservers to use JDK1.2 because
          // most webserver JVM's are slower to upgrade to the latest 
          // JDK level. The most efficient way to create these file objects
          // is to use the listFiles(filter) method in JDK1.2 which would
          // be done like the following, instead of using the list(filter)
          // method and then converting the returned string arrary into the
          // appropriate File array.
          // File[] dirList = root.listFiles(filter);

          for (int j=0; j<dirList.length; ++j)
          {  
            if (root instanceof IFSJavaFile)
               dirList[j] = new IFSJavaFile((IFSJavaFile)root, list[j]);
            else
               dirList[j] = new File(list[j]);
          }

          for (int i=0; i<dirList.length; i++)
          {  
            // Create a FileTreeElement for each directory in the list.
            FileTreeElement node = new FileTreeElement(dirList[i]);

            // Create a ServletHyperlink for the expand/collapse icons.
            ServletHyperlink sl = new ServletHyperlink(urlParser.getURI());
            sl.setHttpServletResponse(resp);
            node.setIconUrl(sl);

            // Create a ServletHyperlink to the TreeList servlet, which will
            // display the contents of thie FileTreeElement (directory).
            ServletHyperlink tl = new ServletHyperlink("/servlet/TreeList");
            tl.setTarget("list");

            // If the ServletHyperlink doesn't have a name, then set it to the
            // name of the directory.
            if (tl.getText() == null)
              tl.setText(dirList[i].getName());

            // Set the TextUrl for the FileTreeElement.
            node.setTextUrl(tl);

            // Add the FileTreeElement to the HTMLTree.
            tree.addElement(node);
          }

          sys_.disconnectAllServices();
        }

        catch (Exception e)
        {
          e.printStackTrace();
        }

        return tree;
    }

    public void destroy(ServletConfig config)
    {  
       // do nothing
    }

    public String getServletInfo()
    {
        return "FileTree Navigation";
    }
}