annotate servlet/src/digilib/io/FileOps.java @ 86:997ba69afb81

New version 1.8b1. With directory and file information cache. With enhanceRGB method for color correction.
author robcast
date Sun, 09 Mar 2003 21:37:27 +0100
parents 4e6757e8ccd4
children a398fc09ba71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 64
diff changeset
1 /* FileOps -- Utility class for file operations
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
2
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
3 Digital Image Library servlet components
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
4
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
5 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
6
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
7 This program is free software; you can redistribute it and/or modify it
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
9 Free Software Foundation; either version 2 of the License, or (at your
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
10 option) any later version.
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
11
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
12 Please read license.txt for the full details. A copy of the GPL
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
13 may be found at http://www.gnu.org/copyleft/lgpl.html
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
14
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
16 along with this program; if not, write to the Free Software
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
18
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
19 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
20
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
21 package digilib.io;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
22
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
23 import java.io.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
24 import java.util.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
25
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
26 import digilib.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
27
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
28
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
29 public class FileOps {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
30
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
31 private Utils util = null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
32 public static String[] fileTypes = {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
33 "jpg", "image/jpeg",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
34 "jpeg", "image/jpeg",
64
5ea1999befd4 New JAI ImageLoader plugin. Currently uses first beta version of the plugin.
robcast
parents: 56
diff changeset
35 "jp2", "image/jp2",
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
36 "png", "image/png",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
37 "gif", "image/gif",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
38 "tif", "image/tiff",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
39 "tiff", "image/tiff"};
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
40
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
41 public FileOps() {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
42 util = new Utils();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
43 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
44
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
45 public FileOps(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
46 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
47 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
48
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
49 public void setUtils(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
50 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
51 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
52
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
53
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
54 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55 * get the mime type for a file format (by extension)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
56 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
57 public static String mimeForFile(File f) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
58 String fn = f.getName();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
59 for (int i = 0; i < fileTypes.length; i += 2) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
60 if (fn.toLowerCase().endsWith(fileTypes[i])) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
61 return fileTypes[i+1];
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
62 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
63 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
64 return null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
65 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
66
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
67 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
68 * get a filehandle for a file or directory name
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
69 * returns File number n if fn is directory (starts with 1)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
70 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
71 public File getFile(String fn, int n) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
72 util.dprintln(4, "getFile ("+fn+", "+n+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
73
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
74 File f = new File(fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
75 // if fn is a file name then return file
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
76 if (f.isFile()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
77 return f;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
78 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
79 // if fn is a directory name then open directory
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
80 if (f.isDirectory()) {
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
81 File[] fl = f.listFiles(new ImageFileFilter());
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
82 Arrays.sort(fl);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
83 if ((n > 0) && (n <= fl.length)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
84 return fl[n - 1];
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
85 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
86 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
87 throw new FileOpException("Unable to find file: "+fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
88 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
89
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
90 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
91 * get the number of files in a directory
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
92 * (almost the same as getFile)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
93 * returns 0 in case of problems
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
94 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
95 public int getNumFiles(String fn) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
96 util.dprintln(4, "getNumFiles ("+fn+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
97
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
98 File f = new File(fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
99 // if fn is a file name then return 1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
100 if (f.isFile()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
101 return 1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
102 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
103 // if fn is a directory name then return the number of files
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
104 if (f.isDirectory()) {
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
105 return f.listFiles(new ImageFileFilter()).length;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
106 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
107 // then fn must be something strange...
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
108 return 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
109 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
110
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
111
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
112 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
113 * get a filehandle for a file or directory name out of a list
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
114 * dirs is a list of base directories, fn is the appended file/dirname
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
115 * searches dirs until fn exists (backwards if fwd is false)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
116 * returns File number n if fn is directory (starts with 1)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
117 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
118 public File getFileVariant(String[] dirs, String fn, int n, boolean fwd) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
119 util.dprintln(4, "getVariantFile ("+dirs+", "+fn+", "+n+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
120
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
121 File f = null;
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
122 int nvar = dirs.length;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
123
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
124 for (int i = 0; i < nvar; i++) {
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
125 try {
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
126 f = getFile(dirs[(fwd) ? i : (nvar-i-1)]+fn, n);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
127 } catch (FileOpException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
128 f = null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
129 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
130 if (f != null) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
131 return f;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
132 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
133 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
134 throw new FileOpException("Unable to find file: "+fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
135 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
136
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
137 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
138 * get the number of files in a directory
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
139 * (almost the same as getFileVariant)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
140 * returns 0 in case of problems
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
141 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
142 public int getNumFilesVariant(String[] dirs, String fn, boolean fwd) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
143 util.dprintln(4, "getNumFilesVariant ("+dirs+", "+fn+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
144
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
145 int nf = 0;
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
146 int nvar = dirs.length;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
147
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
148 for (int i = 0; i < nvar; i++) {
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
149 try {
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
150 nf = getNumFiles(dirs[(fwd) ? i : (nvar-i-1)]+fn);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
151 } catch (FileOpException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
152 nf = 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
153 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
154 if (nf > 0) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
155 return nf;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
156 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
157 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
158 return 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
159 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
160
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
161 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
162 * FileFilter for image types (helper class for getFile)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
163 */
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
164 static class ImageFileFilter implements FileFilter {
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
165
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
166 public boolean accept(File f) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
167 if (f.isFile()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
168 return (mimeForFile(f) != null);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
169 } else {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
170 return false;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
171 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
172 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
173 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
174
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
175 }