diff servlet/src/digilib/io/AliasingDocuDirCache.java @ 339:6d2032b6121d gen2_1

new directory and cache work
author robcast
date Wed, 17 Nov 2004 18:17:34 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet/src/digilib/io/AliasingDocuDirCache.java	Wed Nov 17 18:17:34 2004 +0100
@@ -0,0 +1,91 @@
+/*
+ * AliasingDocuDirCache -- DocuDirCache using alias entries from config file
+ * 
+ * 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 04.11.2003
+ */
+
+package digilib.io;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * @author casties
+ *  
+ */
+public class AliasingDocuDirCache extends DocuDirCache {
+
+	/**
+	 * @param baseDirs
+	 * @param fileClasses
+	 * @param confFileName
+	 * @throws FileOpException
+	 */
+	public AliasingDocuDirCache(File confFile) throws FileOpException {
+		// create standard DocuDirCache
+		super();
+		Map pathMap = null;
+		// read alias config file
+		try {
+			// load into pathMap
+			XMLListLoader mapLoader = new XMLListLoader("digilib-aliases",
+					"mapping", "link", "dir");
+			pathMap = mapLoader.loadURL(confFile.toURL().toString());
+		} catch (Exception e) {
+			throw new FileOpException("ERROR loading mapping file: " + e);
+		}
+		if (pathMap == null) {
+			throw new FileOpException("ERROR: unable to load mapping file!");
+		}
+
+		/*
+		 * load map entries into cache
+		 */
+
+		for (Iterator i = pathMap.keySet().iterator(); i.hasNext();) {
+			String link = FileOps.normalName((String) i.next());
+			String dn = (String) pathMap.get(link);
+			File dir = FileOps.getRealFile(dn);
+			if (dir.isDirectory()) {
+				logger.debug("Aliasing dir: " + link);
+				DigiDirectory destDir = new DigiDirectory(dir, dn, null);
+				// add the alias name
+				putName(link, destDir);
+				// add the real dir
+				putDir(destDir);
+			}
+		}
+	}
+
+	/**
+	 * Adds a DocuDirectory under another name to the cache.
+	 * 
+	 * @param name
+	 * @param newdir
+	 */
+	public void putName(String name, DigiDirectory newdir) {
+		Object oldkey = map.put(name, newdir);
+		if (oldkey != null) {
+			logger
+					.warn("Duplicate key in AliasingDocuDirCache.put -- replaced!");
+		}
+	}
+
+}