1 package eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes;
3 import eu.svjatoslav.commons.file.FilePathParser;
6 import java.io.Serializable;
8 public abstract class AbstractFile implements Serializable {
10 private static final long serialVersionUID = -2547388204667088033L;
13 * File name relative to the immediate parent directory.
15 public final String fileName;
18 * File length in bytes.
20 private long fileLength = -1;
22 private transient boolean metaInfoVerified;
24 AbstractFile(final File parentDirectory, final String fileName)
26 this.fileName = fileName;
27 ensureFileMetainfoIsUpToDate(parentDirectory);
31 * @return <code>true</code> if file metadata was updated.
33 public boolean ensureFileMetainfoIsUpToDate(final File parentDirectory)
35 if (!isMetainfoUpToDate(parentDirectory)) {
36 fileLength = getFile(parentDirectory).length();
37 updateFileMetainfo(parentDirectory);
38 metaInfoVerified = true;
44 public boolean fileExists(final File parentDirectory) {
45 return getFile(parentDirectory).exists();
48 File getFile(final File parentDirectory) {
49 return new File(parentDirectory.getAbsolutePath(), fileName);
52 public String getFileExtension() {
53 return FilePathParser.getFileExtension(fileName);
56 public long getFileLength() {
60 private boolean isMetainfoUpToDate(final java.io.File parentDirectory) {
65 final File file = getFile(parentDirectory);
67 // first check that file exists at all
69 System.out.println(file);
70 throw new RuntimeException("Picture file by name \"" + fileName
71 + "\" does not exist in the parent directory \""
72 + parentDirectory.getAbsolutePath() + "\"");
75 // check that file length is the same as before
76 if (file.length() != fileLength)
79 metaInfoVerified = true;
83 public boolean isMetaInfoVerified() {
84 return metaInfoVerified;
87 protected abstract void updateFileMetainfo(final File parentDirectory)