1
20 package org.crosswire.jsword.book.sword.state;
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.io.RandomAccessFile;
25 import java.net.URI;
26
27 import org.crosswire.common.util.FileUtil;
28 import org.crosswire.common.util.IOUtil;
29 import org.crosswire.common.util.Reporter;
30 import org.crosswire.jsword.JSMsg;
31 import org.crosswire.jsword.book.BookException;
32 import org.crosswire.jsword.book.BookMetaData;
33 import org.crosswire.jsword.book.sword.SwordUtil;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
46 public class ZLDBackendState extends RawLDBackendState {
47
56 ZLDBackendState(BookMetaData bookMetaData) throws BookException {
57 super(bookMetaData);
58 zdxFile = null;
59 zdtFile = null;
60 zdxRaf = null;
61 zdtRaf = null;
62 lastBlockNum = -1;
63 lastUncompressed = EMPTY_BYTES;
64
65 URI path = null;
66 try {
67 path = SwordUtil.getExpandedDataPath(bookMetaData);
68 } catch (BookException e) {
69 Reporter.informUser(this, e);
70 return;
71 }
72
73 try {
74 zdxFile = new File(path.getPath() + EXTENSION_Z_INDEX);
75 zdtFile = new File(path.getPath() + EXTENSION_Z_DATA);
76
77 if (!zdxFile.canRead()) {
78 Reporter.informUser(this, new BookException(JSMsg.gettext("Error reading {0}", zdtFile.getAbsolutePath())));
81 return;
82 }
83
84 if (!zdtFile.canRead()) {
85 Reporter.informUser(this, new BookException(JSMsg.gettext("Error reading {0}", zdtFile.getAbsolutePath())));
88 return;
89 }
90
91 zdxRaf = new RandomAccessFile(zdxFile, FileUtil.MODE_READ);
93 zdtRaf = new RandomAccessFile(zdtFile, FileUtil.MODE_READ);
94 } catch (IOException ex) {
95 IOUtil.close(zdxRaf);
97 IOUtil.close(zdtRaf);
98
99 LOGGER.error("failed to open files", ex);
100 zdxRaf = null;
101 zdtRaf = null;
102 return;
103 }
104 }
105
106 @Override
107 public void releaseResources() {
108 super.releaseResources();
109 lastBlockNum = -1;
110 lastUncompressed = EMPTY_BYTES;
111
112 IOUtil.close(zdxRaf);
113 IOUtil.close(zdtRaf);
114 zdxRaf = null;
115 zdtRaf = null;
116 }
117
118
121 public RandomAccessFile getZdxRaf() {
122 return zdxRaf;
123 }
124
125
128 public RandomAccessFile getZdtRaf() {
129 return zdtRaf;
130 }
131
132
135 public long getLastBlockNum() {
136 return lastBlockNum;
137 }
138
139
142 public byte[] getLastUncompressed() {
143 return lastUncompressed;
144 }
145
146
149 public void setLastBlockNum(long lastBlockNum) {
150 this.lastBlockNum = lastBlockNum;
151 }
152
153
156 public void setLastUncompressed(byte[] lastUncompressed) {
157 this.lastUncompressed = lastUncompressed;
158 }
159
160 private static final byte[] EMPTY_BYTES = new byte[0];
161 private static final String EXTENSION_Z_INDEX = ".zdx";
162 private static final String EXTENSION_Z_DATA = ".zdt";
163
164
167 private File zdxFile;
168
169
172 private RandomAccessFile zdxRaf;
173
174
177 private File zdtFile;
178
179
182 private RandomAccessFile zdtRaf;
183
184
187 private long lastBlockNum;
188
189
192 private byte[] lastUncompressed;
193
194
197 private static final Logger LOGGER = LoggerFactory.getLogger(ZLDBackendState.class);
198 }
199