01: package it.unimi.dsi.mg4j.document;
02:
03: /*
04: * MG4J: Managing Gigabytes for Java
05: *
06: * Copyright (C) 2006-2007 Sebastiano Vigna
07: *
08: * This library is free software; you can redistribute it and/or modify it
09: * under the terms of the GNU Lesser General Public License as published by the Free
10: * Software Foundation; either version 2.1 of the License, or (at your option)
11: * any later version.
12: *
13: * This library is distributed in the hope that it will be useful, but
14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
16: * for more details.
17: *
18: * You should have received a copy of the GNU Lesser General Public License
19: * along with this program; if not, write to the Free Software
20: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21: *
22: */
23:
24: import it.unimi.dsi.Util;
25: import it.unimi.dsi.io.SafelyCloseable;
26:
27: import java.io.IOException;
28:
29: import org.apache.log4j.Logger;
30:
31: /** An abstract, {@link it.unimi.dsi.io.SafelyCloseable safely closeable} implementation of a document.
32: *
33: * <p>This implementation provides also a {@link #toString()} method that just returns the document
34: * {@linkplain it.unimi.dsi.mg4j.document.Document#title() title}.
35: *
36: * <p>Note that even if your {@link it.unimi.dsi.mg4j.document.Document} implementation does not allocate
37: * any document-specific resource, it is nonetheless a good idea to inherit from this class, as tracking
38: * missing calls to {@link java.io.Closeable#close() close()} will be easier to detect.
39: */
40: public abstract class AbstractDocument implements Document,
41: SafelyCloseable {
42: private static final Logger LOGGER = Util
43: .getLogger(AbstractDocument.class);
44: /** Whether this document has been already closed. */
45: private boolean closed;
46:
47: protected void finalize() throws Throwable {
48: try {
49: if (!closed) {
50: LOGGER.warn("This " + this .getClass().getName() + " ["
51: + toString() + "] should have been closed.");
52: close();
53: }
54: } finally {
55: super .finalize();
56: }
57: }
58:
59: public void close() throws IOException {
60: closed = true;
61: }
62:
63: public String toString() {
64: return title().toString();
65: }
66: }
|