All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.ibm.as400.util.html.FileTreeElement Maven / Gradle / Ivy

There is a newer version: 11.1
Show newest version
///////////////////////////////////////////////////////////////////////////////
//                                                                             
// JTOpen (IBM Toolbox for Java - OSS version)                              
//                                                                             
// Filename: FileTreeElement.java
//                                                                             
// The source code contained herein is licensed under the IBM Public License   
// Version 1.0, which has been approved by the Open Source Initiative.         
// Copyright (C) 1997-2002 International Business Machines Corporation and     
// others. All rights reserved.                                                
//                                                                             
///////////////////////////////////////////////////////////////////////////////

package com.ibm.as400.util.html;

import java.io.File;
import java.io.IOException;
import java.util.Vector;
import java.util.Properties;
import java.beans.PropertyVetoException;
import java.beans.PropertyChangeSupport;

import com.ibm.as400.access.Trace;
import com.ibm.as400.access.IFSJavaFile;
import com.ibm.as400.access.IFSFile;
import com.ibm.as400.access.ExtendedIllegalArgumentException;
import com.ibm.as400.util.servlet.ServletHyperlink;


/**
*  The FileTreeElement class represents the Integrated File System within an HTMLTree view.
*
*  

This example creates an FileTreeElement object: * * *

*  // Create an HTMLTree object.
*  HTMLTree tree = new HTMLTree(httpServletRequest);
*  
*  // Create a URLParser object.
*  URLParser urlParser = new URLParser(httpServletRequest.getRequestURI());
*  
*  // Create a object to represent the connection to the system.
*  AS400 system = new AS400(mySystem, myUserId, myPassword);
*  
*  // Create an IFS object.
*  IFSJavaFile root = new IFSJavaFile(system, "/QIBM");
*  
*  // Create a DirFilter object and get the directories.
*  DirFilter filter = new DirFilter();
*  File[] dirList = root.listFiles(filter);
*  
*
*  for (int i=0; i < dirList.length; i++)
*  {  
*     // Create a FileTreeElement.
*     FileTreeElement node = new FileTreeElement(dirList[i]);
*     
*     // Set the Icon URL.
*     ServletHyperlink sl = new ServletHyperlink(urlParser.getURI());
*     sl.setHttpServletResponse(resp);
*     node.setIconUrl(sl);
*     
*     // Add the FileTreeElement to the tree.
*     tree.addElement(node);
*  }
*  
* * Once the elements are added to an HTMLTree object, the FileTreeElements will look like this: * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* + * * include *
* + * * locales *
* + * * ProdData *
* + * * Test Folder *
* + * * UserData *
* + * * XML *
*

* FileTreeElement objects generate the following events: *

    *
  • ElementEvent - The events fired are: *
      *
    • elementAdded *
    • elementRemoved *
    *
  • PropertyChangeEvent *
* * @see com.ibm.as400.util.html.DirFilter **/ public class FileTreeElement extends HTMLTreeElement implements java.io.Serializable { private static final String copyright = "Copyright (C) 1997-2002 International Business Machines Corporation and others."; static final long serialVersionUID = 210948696422108527L; private File file_; private boolean populated_ = false; private String parameter_; //@CRS private String shareName_; // @B1A @CRS private String sharePath_; // @B1A @CRS private int patternMatching_ = -1; // @KKB /** * Constructs a default FileTreeElement object. **/ public FileTreeElement() { } /** * Constructs a FileTreeElement with the specified file. * * @param file The file. **/ public FileTreeElement(File file) { setFile(file); setText(file.getName()); } //@CRS /** * Constructs a FileTreeElement with the specified file. * * @param file The file. * @param parameter **/ public FileTreeElement(File file, String parameter) { setFile(file); setText(file.getName()); parameter_ = parameter; } /** * Constructs a FileTreeElement with the specified file, * NetServer shareName and sharePath. * * @param file The file. * @param shareName The name of the NetServer share. * @param sharePath The path of the NetServer share. **/ public FileTreeElement(File file, String shareName, String sharePath) // @B1A { // @B1A setFile(file); // @B1A setShareName(shareName); // @B1A setSharePath(sharePath); // @B1A } // @B1A //@CRS /** * Constructs a FileTreeElement with the specified file, * NetServer shareName and sharePath. * * @param file The file. * @param shareName The name of the NetServer share. * @param sharePath The path of the NetServer share. * @param parameter **/ public FileTreeElement(File file, String shareName, String sharePath, String parameter) // @B1A { // @B1A setFile(file); // @B1A setShareName(shareName); // @B1A setSharePath(sharePath); // @B1A parameter_ = parameter; } // @B1A /** * Added the necessary properties to the text url so that if they * click on the texturl and are using the FileListElement class, * they will properly see the directory listing. This will * avoid externalizing the properties we are passing on the * HttpServletRequest to show the FileListElements. This only * applies to FileTreeElements. **/ private void addProperties() { if (getTextUrl() != null) { ServletHyperlink sl = (ServletHyperlink)getTextUrl().clone(); // If a share name has been specified, then remove the actual path of the share from the // @B1A // path info and replace it with just the share name and the directories after the share. // @B1A if (shareName_ != null) // @B1A { // @B1A String absPath = file_.getAbsolutePath().replace('\\','/'); // @B1A if (sharePath_.charAt(0) != '/') // @B1A absPath = absPath.substring(1); // @B1A if (Trace.isTraceOn()) // @B1A { // @B1A Trace.log(Trace.INFORMATION, "FileTree absolute path: " + absPath); // @B1A Trace.log(Trace.INFORMATION, "FileTree share path: " + sharePath_); // @B1A } // @B1A StringBuffer pathInfo = new StringBuffer(shareName_); // @B1A @CRS String remainingPath = absPath.substring(sharePath_.length()); //@CRS if (remainingPath.length() > 0 && remainingPath.charAt(0) != '/') pathInfo.append('/'); //@CRS @KKC pathInfo.append(remainingPath); // @B1A @CRS if (parameter_ != null) //@CRS { Properties parms = sl.getProperties(); //@CRS if (parms == null) parms = new Properties(); //@CRS parms.put(parameter_, pathInfo.toString()); //@CRS try { sl.setProperties(parms); } catch(PropertyVetoException pve) {} //@CRS } else //@CRS { sl.setPathInfo(pathInfo.toString()); // @B1A } } // @B1A else { String pathInfo = file_.getAbsolutePath().replace('\\', '/'); //@CRS if (parameter_ != null) //@CRS { Properties parms = sl.getProperties(); //@CRS if (parms == null) parms = new Properties(); //@CRS parms.put(parameter_, pathInfo); //@CRS try { sl.setProperties(parms); } catch(PropertyVetoException pve) {} //@CRS } else //@CRS { sl.setPathInfo(pathInfo); // @A3C @CRS } } if (Trace.isTraceOn()) // @B1A { Trace.log(Trace.INFORMATION, "FileTree path Info: " + sl.getPathInfo()); // @B1A } try { sl.setText(file_.getName()); } catch (PropertyVetoException e) { /* Ignore */ } setTextUrl(sl); } } /** * Returns the file represented by this FileTreeElement. * @return File **/ public File getFile() { return file_; } /** * Returns the NetServer share name. * @return share name **/ public String getShareName() // @B1A { // @B1A // Need to check for null // before performing a toString(). if (shareName_ == null) return null; else return shareName_; // @B1A @CRS } /** * Returns the NetServer share path. * @return share path **/ public String getSharePath() // @B1A { // @B1A // Need to check for null // before performing a toString(). if (sharePath_ == null) return null; else return sharePath_; // @B1A @CRS } /** * Indicates if the FileTreeElement is a leaf. * * @return true if the element is a leaf, false otherwise. **/ public boolean isLeaf() { // We don't want the user to have to add the path and list properties to // the TextUrl for the parent elements in the tree. if (getTextUrl() != null /*&& getTextUrl().getProperties() == null*/) // @B2C addProperties(); if (!populated_) return file_.isFile(); else return super.isLeaf(); } /** * Deserializes and initializes transient data. **/ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { in.defaultReadObject(); // changes_ = new PropertyChangeSupport(this); } /** * Indicates which FileTreeElement is selected. The hashcode is used * to determine which element within the tree to expand or collapse. * * @param hashcode The hashcode. **/ public void selected(int hashcode) { // @C1D if (hashcode == this.hashCode()) { if ((file_.isDirectory()) && (!populated_)) { File[] files; if (file_ instanceof IFSJavaFile) //$A1A { if(patternMatching_ != -1) //@KKB specify the pattern matching to be used { try{ ((IFSJavaFile)file_).setPatternMatching(patternMatching_); } catch(IOException e) { // error occured setting pattern matching for the file, default value will be used if(Trace.isTraceOn()) Trace.log(Trace.ERROR, e); } } // @B6A // When we are using IFSJavaFile objects, we can use // the listFiles() method becuase it is not dependant on any // JDK1.2 code. Using listFiles() will also cache information // like if it is a directory, so we don't flow another call to the // system to find that out. We can then build both the // directory and file list at the same time. File[] filesAndDirs = ((IFSJavaFile) file_).listFiles(); // @B6A // The vector of directories. Vector dv = new Vector(); // @B6A for (int i=0; i IFSFile.PATTERN_OS2) throw new ExtendedIllegalArgumentException("patternMatching", ExtendedIllegalArgumentException.PARAMETER_VALUE_NOT_VALID); patternMatching_ = patternMatching; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy