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

panda.net.ftp.parser.NetwareFTPEntryParser Maven / Gradle / Ivy

package panda.net.ftp.parser;

import java.text.ParseException;

import panda.net.ftp.FTPClientConfig;
import panda.net.ftp.FTPFile;

/**
 * Implementation of FTPFileEntryParser and FTPFileListParser for Netware Systems. Note that some of
 * the proprietary extensions for Novell-specific operations are not supported. See  http://www.novell.com/documentation/nw65/index.html?page=/documentation/nw65/ftp_enu/data/
 * fbhbgcfa.html for more details.
 * 
 * @see panda.net.ftp.FTPFileEntryParser FTPFileEntryParser (for usage instructions)
 */
public class NetwareFTPEntryParser extends ConfigurableFTPFileEntryParserImpl {

	/**
	 * Default date format is e.g. Feb 22 2006
	 */
	private static final String DEFAULT_DATE_FORMAT = "MMM dd yyyy";

	/**
	 * Default recent date format is e.g. Feb 22 17:32
	 */
	private static final String DEFAULT_RECENT_DATE_FORMAT = "MMM dd HH:mm";

	/**
	 * this is the regular expression used by this parser. Example: d [-W---F--] SCION_VOL2 512 Apr
	 * 13 23:12 VOL2
	 */
	private static final String REGEX = "(d|-){1}\\s+" // Directory/file flag
			+ "\\[([-A-Z]+)\\]\\s+" // Attributes RWCEAFMS or -
			+ "(\\S+)\\s+" + "(\\d+)\\s+" // Owner and size
			+ "(\\S+\\s+\\S+\\s+((\\d+:\\d+)|(\\d{4})))" // Long/short date format
			+ "\\s+(.*)"; // Filename (incl. spaces)

	/**
	 * The default constructor for a NetwareFTPEntryParser object.
	 * 
	 * @exception IllegalArgumentException Thrown if the regular expression is unparseable. Should
	 *                not be seen under normal conditions. It it is seen, this is a sign that
	 *                REGEX is not a valid regular expression.
	 */
	public NetwareFTPEntryParser() {
		this(null);
	}

	/**
	 * This constructor allows the creation of an NetwareFTPEntryParser object with something other
	 * than the default configuration.
	 * 
	 * @param config The {@link FTPClientConfig configuration} object used to configure this parser.
	 * @exception IllegalArgumentException Thrown if the regular expression is unparseable. Should
	 *                not be seen under normal conditions. It it is seen, this is a sign that
	 *                REGEX is not a valid regular expression.
	 */
	public NetwareFTPEntryParser(FTPClientConfig config) {
		super(REGEX);
		configure(config);
	}

	/**
	 * Parses a line of an NetwareFTP server file listing and converts it into a usable format in
	 * the form of an  FTPFile  instance. If the file listing line doesn't describe a
	 * file,  null  is returned, otherwise a  FTPFile  instance
	 * representing the files in the directory is returned.
	 * 

* Netware file permissions are in the following format: RWCEAFMS, and are explained as follows: *

    *
  • S - Supervisor; All rights. *
  • R - Read; Right to open and read or execute. *
  • W - Write; Right to open and modify. *
  • C - Create; Right to create; when assigned to a file, allows a deleted file to be * recovered. *
  • E - Erase; Right to delete. *
  • M - Modify; Right to rename a file and to change attributes. *
  • F - File Scan; Right to see directory or file listings. *
  • A - Access Control; Right to modify trustee assignments and the Inherited Rights * Mask. *
* See here for more details * * @param entry A line of text from the file listing * @return An FTPFile instance corresponding to the supplied entry */ // @Override public FTPFile parseFTPEntry(String entry) { FTPFile f = new FTPFile(); if (matches(entry)) { String dirString = group(1); String attrib = group(2); String user = group(3); String size = group(4); String datestr = group(5); String name = group(9); try { f.setTimestamp(super.parseTimestamp(datestr)); } catch (ParseException e) { // intentionally do nothing } // is it a DIR or a file if (dirString.trim().equals("d")) { f.setType(FTPFile.DIRECTORY_TYPE); } else // Should be "-" { f.setType(FTPFile.FILE_TYPE); } f.setUser(user); // set the name f.setName(name.trim()); // set the size f.setSize(Long.parseLong(size.trim())); // Now set the permissions (or at least a subset thereof - full permissions would // probably require // subclassing FTPFile and adding extra metainformation there) if (attrib.indexOf("R") != -1) { f.setPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION, true); } if (attrib.indexOf("W") != -1) { f.setPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION, true); } return (f); } return null; } /** * Defines a default configuration to be used when this class is instantiated without a * {@link FTPClientConfig FTPClientConfig} parameter being specified. * * @return the default configuration for this parser. */ @Override protected FTPClientConfig getDefaultConfiguration() { return new FTPClientConfig(FTPClientConfig.SYST_NETWARE, DEFAULT_DATE_FORMAT, DEFAULT_RECENT_DATE_FORMAT, null, null, null); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy