annotate servlet/src/digilib/io/FileOps.java @ 72:300d5ba8b33b

New servlet version 1.5b. Mostly cleanup. Global parameters for digilib now in DigilibConfiguration, per request parameters are now all in DigilibRequest. The DocuImage implementation can be selected by the configuration docuimage-class. Pixel-by-pixel view implemented with "mo=clip".
author robcast
date Fri, 24 Jan 2003 21:40:59 +0100
parents 5ea1999befd4
children 4e6757e8ccd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
1 /* FileOps -- Utility class for file operations
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()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
81 File[] fl = f.listFiles(new ImgFileFilter());
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()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
105 return f.listFiles(new ImgFileFilter()).length;
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 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
164 private class ImgFileFilter implements FileFilter {
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 }