diff servlet/src/digilib/io/ImageSet.java @ 576:dad720e9b12b stream

try: DocuDirent as interface, ImageFile inherits from ImageInput and implements DocuDirent
author robcast
date Wed, 22 Dec 2010 20:19:06 +0100
parents 790cbfb58b52
children bb8dfc05674f
line wrap: on
line diff
--- a/servlet/src/digilib/io/ImageSet.java	Wed Dec 22 18:32:06 2010 +0100
+++ b/servlet/src/digilib/io/ImageSet.java	Wed Dec 22 20:19:06 2010 +0100
@@ -17,16 +17,12 @@
 
 package digilib.io;
 
-import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.ListIterator;
-import java.util.Map;
 
 import digilib.image.ImageSize;
-import digilib.io.FileOps.FileClass;
 import digilib.servlet.DigilibConfiguration;
 
 /**
@@ -34,26 +30,17 @@
  */
 public class ImageSet {
 
-	/** this is an image file */
-	protected static FileClass fileClass = FileClass.IMAGE;
-	
 	/** list of files (ImageFile) */
-	private List<ImageInput> list = null;
+	protected List<ImageInput> list = null;
 
 	/** aspect ratio (width/height) */
-	private float aspect = 0f;
+	protected float aspect = 0f;
 
 	/** resolution of the biggest image (DPI) */
-	private float resX = 0f;
+	protected float resX = 0f;
 
 	/** resolution of the biggest image (DPI) */
-	private float resY = 0f;
-
-	private Directory parent;
-
-	private boolean metaChecked;
-
-	private Map fileMeta;
+	protected float resY = 0f;
 
 	/**
 	 * Creator for empty fileset.
@@ -66,38 +53,6 @@
 	}
 
 	/**
-	 * Constructor with a file and hints.
-	 * 
-	 * The hints are expected to contain 'basedirs' and 'scaledfilext' keys.
-	 * 
-	 * @param file
-	 * @param hints
-	 */
-	public ImageSet(File file, Map<Integer,Object> hints) {
-		Directory[] dirs = (Directory[]) hints.get(FileOps.HINT_BASEDIRS);
-		int nb = dirs.length;
-		list = new ArrayList<ImageInput>(nb);
-		parent = dirs[0];
-		fill(dirs, file, hints);
-	}
-
-	/**
-	 * Adds an ImageFile to this Fileset.
-	 * 
-	 * The files should be added in the order of higher to lower resolutions.
-	 * The first file is considered the hires "original".
-	 * 
-	 * 
-	 * @param f
-	 *            file to add
-	 * @return true (always)
-	 */
-	public boolean add(ImageFile f) {
-		f.setParent(this);
-		return list.add(f);
-	}
-
-	/**
 	 * The number of image files in this Fileset.
 	 * 
 	 * 
@@ -108,12 +63,11 @@
 	}
 
 	/**
-	 * Gets the default File.
+	 * Gets the default Input.
 	 *  
 	 */
-	public ImageInput getInput() {
-		//return (list != null) ? list.get(0).getFile() : null;
-		return null;
+	public ImageInput get() {
+		return (list != null) ? list.get(0) : null;
 	}
 
 	/**
@@ -144,7 +98,7 @@
 			ImageInput f = i.next();
 			try {
 				if (!f.isChecked()) {
-					DigilibConfiguration.docuImageIdentify((ImageFile) f);
+					DigilibConfiguration.docuImageIdentify((ImageFile) f); // FIXME: cast to file?
 				}
 				if (f.getSize().isTotallySmallerThan(size)) {
 					return f;
@@ -172,7 +126,7 @@
 			ImageInput f = i.previous();
 			try {
 				if (!f.isChecked()) {
-					DigilibConfiguration.docuImageIdentify((ImageFile) f);
+					DigilibConfiguration.docuImageIdentify((ImageFile) f); // FIXME: cast to file?
 				}
 				if (f.getSize().isBiggerThan(size)) {
 					return f;
@@ -229,163 +183,6 @@
 	}
 
 	/**
-	 * Fill the ImageSet with files from different base directories.
-	 * 
-	 * 
-	 * @param dirs
-	 *            list of base directories
-	 * @param fl
-	 *            file (from first base dir)
-	 * @param hints
-	 *  
-	 */
-	void fill(Directory[] dirs, File fl, Map<Integer,Object> hints) {
-		int nb = dirs.length;
-		String fn = fl.getName();
-		String baseFn = FileOps.basename(fn);
-		// add the first ImageFile to the ImageSet
-		add(new ImageFile(fn, this, parent));
-		// iterate the remaining base directories
-		for (int dirIdx = 1; dirIdx < nb; dirIdx++) {
-			if (dirs[dirIdx] == null) {
-				continue;
-			}
-			// read the directory
-			if (dirs[dirIdx].getFilenames() == null) {
-				dirs[dirIdx].readDir();
-			}
-			String[] dirFiles = dirs[dirIdx].getFilenames();
-			// try the same filename as the original
-			int fileIdx = Arrays.binarySearch(dirFiles, fn);
-			if (fileIdx < 0) {
-				// try closest matches without extension
-				fileIdx = -fileIdx - 1;
-				// try idx
-				if ((fileIdx < dirFiles.length)
-						&& (FileOps.basename(dirFiles[fileIdx]).equals(baseFn))) {
-					// idx ok
-				} else if ((fileIdx > 0)
-						&& (FileOps.basename(dirFiles[fileIdx - 1])
-								.equals(baseFn))) {
-					// idx-1 ok
-					fileIdx = fileIdx - 1;
-				} else if ((fileIdx+1 < dirFiles.length)
-						&& (FileOps.basename(dirFiles[fileIdx + 1])
-								.equals(baseFn))) {
-					// idx+1 ok
-					fileIdx = fileIdx + 1;
-				} else {
-					// basename doesn't match
-					continue;
-				}
-			}
-			if (FileOps.classForFilename(dirFiles[fileIdx]) == fileClass) {
-				/* logger.debug("adding file " + dirFiles[fileIdx]
-						+ " to Fileset " + this.getName()); */
-				add(new ImageFile(dirFiles[fileIdx], this, dirs[dirIdx]));
-			}
-		}
-	}
-
-	/**
-	 * Checks metadata and sets resolution in resX and resY.
-	 *  
-	 */
-	public void checkMeta() {
-		if (metaChecked) {
-			return;
-		}
-		if (fileMeta == null) {
-			// try to read metadata file
-			readMeta();
-			if (fileMeta == null) {
-				// try directory metadata
-				((DocuDirectory) parent).checkMeta();
-				if (((DocuDirectory) parent).getDirMeta() != null) {
-					fileMeta = ((DocuDirectory) parent).getDirMeta();
-				} else {
-					// try parent directory metadata
-					DocuDirectory gp = (DocuDirectory) parent.getParent();
-					if (gp != null) {
-						gp.checkMeta();
-						if (gp.getDirMeta() != null) {
-							fileMeta = gp.getDirMeta();
-						}
-					}
-				}
-			}
-		}
-		if (fileMeta == null) {
-			// no metadata available
-			metaChecked = true;
-			return;
-		}
-		metaChecked = true;
-		float dpi = 0;
-		float dpix = 0;
-		float dpiy = 0;
-		float sizex = 0;
-		float sizey = 0;
-		float pixx = 0;
-		float pixy = 0;
-		// DPI is valid for X and Y
-		if (fileMeta.containsKey("original-dpi")) {
-			try {
-				dpi = Float.parseFloat((String) fileMeta.get("original-dpi"));
-			} catch (NumberFormatException e) {
-			}
-			if (dpi != 0) {
-				resX = dpi;
-				resY = dpi;
-				return;
-			}
-		}
-		// DPI-X and DPI-Y
-		if (fileMeta.containsKey("original-dpi-x")
-				&& fileMeta.containsKey("original-dpi-y")) {
-			try {
-				dpix = Float.parseFloat((String) fileMeta
-						.get("original-dpi-x"));
-				dpiy = Float.parseFloat((String) fileMeta
-						.get("original-dpi-y"));
-			} catch (NumberFormatException e) {
-			}
-			if ((dpix != 0) && (dpiy != 0)) {
-				resX = dpix;
-				resY = dpiy;
-				return;
-			}
-		}
-		// SIZE-X and SIZE-Y and PIXEL-X and PIXEL-Y
-		if (fileMeta.containsKey("original-size-x")
-				&& fileMeta.containsKey("original-size-y")
-				&& fileMeta.containsKey("original-pixel-x")
-				&& fileMeta.containsKey("original-pixel-y")) {
-			try {
-				sizex = Float.parseFloat((String) fileMeta
-						.get("original-size-x"));
-				sizey = Float.parseFloat((String) fileMeta
-						.get("original-size-y"));
-				pixx = Float.parseFloat((String) fileMeta
-						.get("original-pixel-x"));
-				pixy = Float.parseFloat((String) fileMeta
-						.get("original-pixel-y"));
-			} catch (NumberFormatException e) {
-			}
-			if ((sizex != 0) && (sizey != 0) && (pixx != 0) && (pixy != 0)) {
-				resX = pixx / (sizex * 100 / 2.54f);
-				resY = pixy / (sizey * 100 / 2.54f);
-				return;
-			}
-		}
-	}
-
-	private void readMeta() {
-		// TODO Auto-generated method stub
-		
-	}
-
-	/**
 	 * @return
 	 */
 	public float getResX() {
@@ -422,4 +219,9 @@
 		return aspect;
 	}
 
+    public void checkMeta() {
+        // TODO Auto-generated method stub
+        
+    }
+
 }
\ No newline at end of file