view servlet/src/digilib/io/DocuDirent.java @ 176:67ff8c7fecb9

Servlet version 1.17b2 - new mapping file for "virtual directories" - direct file URLs now work without extension (even with wrong ones)
author robcast
date Mon, 10 Nov 2003 20:59:00 +0100
parents e743b853efca
children afe7ff98bb71
line wrap: on
line source

/* DocuDirent.java --  Abstract directory entry in a DocuDirectory

  Digital Image Library servlet components

  Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)

  This program is free software; you can redistribute  it and/or modify it
  under  the terms of  the GNU General  Public License as published by the
  Free Software Foundation;  either version 2 of the  License, or (at your
  option) any later version.
   
  Please read license.txt for the full details. A copy of the GPL
  may be found at http://www.gnu.org/copyleft/lgpl.html

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

 * Created on 15.09.2003 by casties
 *
 */
package digilib.io;

import java.io.File;
import java.util.HashMap;

/** Abstract directory entry in a DocuDirectory.
 * 
 * @author casties
 *
 */
public abstract class DocuDirent {

	/** the file class of this file */
	protected static int fileClass = FileOps.CLASS_NONE; 
	/** HashMap with metadata */
	protected HashMap fileMeta = null;
	/** Is the Metadata valid */
	protected boolean metaChecked = false;
	/** the parent directory */
	protected Directory parent = null;

	/** Checks metadata and does something with it.
	 * 
	 */
	public abstract void checkMeta();

	/**
	 * gets the (default) File
	 * @return
	 */
	public abstract File getFile();

	/** Reads meta-data for this Fileset if there is any.
	 * 
	 */
	public void readMeta() {
		if ((fileMeta != null) || (getFile() != null)) {
			// there is already metadata or there is no file
			return;
		}
		// metadata is in the file {filename}.meta
		String fn = getFile().getAbsolutePath();
		File mf = new File(fn + ".meta");
		if (mf.canRead()) {
			XMLMetaLoader ml = new XMLMetaLoader();
			try {
				// read meta file
				HashMap meta = ml.loadURL(mf.getAbsolutePath());
				if (meta == null) {
					return;
				}
				fileMeta = (HashMap) meta.get(getName());
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/** The name of the file.
	 * 
	 * If this is a Fileset, the method returns the name of the default file 
	 * (for image filesets the highest resolution file).
	 * 
	 * @return
	 */
	public String getName() {
		File f = getFile();
		return (f != null) ? f.getName() : null;
	}

	/** The filename sans extension.
	 * 
	 * @return
	 */
	public String getBasename() {
		File f = getFile();
		if (f == null) {
			return null;
		}
		return FileOps.basename(f.getName());
	}

	/** Returns the parent Directory.
	 * 
	 * @return DocuDirectory
	 */
	public Directory getParent() {
		return parent;
	}

	/** Sets the parent Directory.
	 * 
	 * @param parent The parent to set
	 */
	public void setParent(Directory parent) {
		this.parent = parent;
	}

	/** Returns the meta-data for this file(set).
	 * 
	 * @return HashMap
	 */
	public HashMap getFileMeta() {
		return fileMeta;
	}

	/** Sets the meta-data for this file(set)
	 * .
	 * @param fileMeta The fileMeta to set
	 */
	public void setFileMeta(HashMap fileMeta) {
		this.fileMeta = fileMeta;
	}

	/**
	 * @return
	 */
	public boolean isMetaChecked() {
		return metaChecked;
	}

	/**
	 * @return
	 */
	public static int getFileClass() {
		return fileClass;
	}

}