annotate servlet/src/digilib/io/FileOps.java @ 5:fa22d26c02d3 vendor

First import of client module
author robcast
date Thu, 17 Jan 2002 15:29:52 +0100
parents 0ff3ede32060
children 2ea78a56ecf8 6d2032b6121d 9cedd170b581
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",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
35 "png", "image/png",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
36 "gif", "image/gif",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
37 "tif", "image/tiff",
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
38 "tiff", "image/tiff"};
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
39
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
40 public FileOps() {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
41 util = new Utils();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
42 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
43
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
44 public FileOps(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
45 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
46 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
47
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
48 public void setUtils(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
49 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
50 }
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 * get the mime type for a file format (by extension)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
56 public static String mimeForFile(File f) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
57 String fn = f.getName();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
58 for (int i = 0; i < fileTypes.length; i += 2) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
59 if (fn.toLowerCase().endsWith(fileTypes[i])) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
60 return fileTypes[i+1];
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
61 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
62 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
63 return null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
64 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
65
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
66 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
67 * get a filehandle for a file or directory name
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
68 * returns File number n if fn is directory (starts with 1)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
69 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
70 public File getFile(String fn, int n) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
71 util.dprintln(4, "getFile ("+fn+", "+n+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
72
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
73 File f = new File(fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
74 // if fn is a file name then return file
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
75 if (f.isFile()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
76 return f;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
77 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
78 // if fn is a directory name then open directory
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
79 if (f.isDirectory()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
80 File[] fl = f.listFiles(new ImgFileFilter());
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
81 Arrays.sort(fl);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
82 if ((n > 0) && (n <= fl.length)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
83 return fl[n - 1];
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
84 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
85 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
86 throw new FileOpException("Unable to find file: "+fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
87 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
88
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
89 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
90 * get the number of files in a directory
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
91 * (almost the same as getFile)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
92 * returns 0 in case of problems
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
93 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
94 public int getNumFiles(String fn) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
95 util.dprintln(4, "getNumFiles ("+fn+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
96
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
97 File f = new File(fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
98 // if fn is a file name then return 1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
99 if (f.isFile()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
100 return 1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
101 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
102 // if fn is a directory name then return the number of files
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
103 if (f.isDirectory()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
104 return f.listFiles(new ImgFileFilter()).length;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
105 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
106 // then fn must be something strange...
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
107 return 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
108 }
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 * get a filehandle for a file or directory name out of a list
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
113 * dirs is a list of base directories, fn is the appended file/dirname
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
114 * searches dirs until fn exists (backwards if fwd is false)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
115 * returns File number n if fn is directory (starts with 1)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
116 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
117 public File getFileVariant(String[] dirs, String fn, int n, boolean fwd) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
118 util.dprintln(4, "getVariantFile ("+dirs+", "+fn+", "+n+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
119
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
120 File f = null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
121 int start = 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
122 int inc = 1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
123 int end = dirs.length;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
124 if (fwd == false) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
125 start = dirs.length - 1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
126 inc = -1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
127 end = 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
128 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
129
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
130 for (int i = start; i != end; i += inc) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
131 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
132 f = getFile(dirs[i]+fn, n);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
133 } catch (FileOpException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
134 f = null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
135 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
136 if (f != null) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
137 return f;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
138 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
139 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
140 throw new FileOpException("Unable to find file: "+fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
141 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
142
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
143 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
144 * get the number of files in a directory
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
145 * (almost the same as getFileVariant)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
146 * returns 0 in case of problems
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
147 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
148 public int getNumFilesVariant(String[] dirs, String fn, boolean fwd) throws FileOpException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
149 util.dprintln(4, "getNumFilesVariant ("+dirs+", "+fn+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
150
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
151 int nf = 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
152 int start = 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
153 int inc = 1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
154 int end = dirs.length;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
155 if (fwd == false) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
156 start = dirs.length - 1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
157 inc = -1;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
158 end = 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 for (int i = start; i != end; i += inc) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
162 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
163 nf = getNumFiles(dirs[i]+fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
164 } catch (FileOpException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
165 nf = 0;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
166 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
167 if (nf > 0) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
168 return nf;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
169 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
170 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
171 return 0;
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 * FileFilter for image types (helper class for getFile)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
176 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
177 private class ImgFileFilter implements FileFilter {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
178
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
179 public boolean accept(File f) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
180 if (f.isFile()) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
181 return (mimeForFile(f) != null);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
182 } else {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
183 return false;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
184 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
185 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
186 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
187
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
188 }