1 package eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes;
4 import java.io.IOException;
5 import java.io.Serializable;
7 import eu.svjatoslav.commons.file.FilePathParser;
9 public abstract class AbstractFile implements Serializable {
11 private static final long serialVersionUID = -2547388204667088033L;
14 * File name relative to the immediate parent directory.
16 public final String fileName;
19 * File length in bytes.
21 private long fileLength;
23 private transient boolean metaInfoVerified;
25 public AbstractFile(final File parentDirectory, final String fileName)
27 this.fileName = fileName;
28 ensureFileMetainfoIsUpToDate(parentDirectory);
32 * @return <code>true</code> if file metadata was updated.
34 public boolean ensureFileMetainfoIsUpToDate(final File parentDirectory)
36 if (!isMetainfoUpToDate(parentDirectory)) {
37 fileLength = getFile(parentDirectory).length();
38 updateFileMetainfo(parentDirectory);
39 metaInfoVerified = true;
45 public boolean fileExists(final File parentDirectory) {
46 return getFile(parentDirectory).exists();
49 public File getFile(final File parentDirectory) {
50 return new File(parentDirectory.getAbsolutePath(), fileName);
53 public String getFileExtension() {
54 return FilePathParser.getFileExtension(fileName);
57 public long getFileLength() {
61 private boolean isMetainfoUpToDate(final java.io.File parentDirectory)
67 final File file = getFile(parentDirectory);
69 // first check that file exists at all
71 System.out.println(file);
72 throw new RuntimeException("Picture file by name \"" + fileName
73 + "\" does not exist in the parent directory \""
74 + parentDirectory.getAbsolutePath() + "\"");
77 // check that file length is the same as before
78 if (file.length() != fileLength)
81 metaInfoVerified = true;
85 public boolean isMetaInfoVerified() {
86 return metaInfoVerified;
89 protected abstract void updateFileMetainfo(final File parentDirectory)