Mercurial > hg > digilib-old
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