001: /* CheckpointUtils
002: *
003: * $Id: CheckpointUtils.java 4658 2006-09-25 22:40:19Z paul_jack $
004: *
005: * Created on December 16, 2005.
006: *
007: * Copyright (C) 2005 Internet Archive.
008: *
009: * This file is part of the Heritrix web crawler (crawler.archive.org).
010: *
011: * Heritrix is free software; you can redistribute it and/or modify
012: * it under the terms of the GNU Lesser Public License as published by
013: * the Free Software Foundation; either version 2.1 of the License, or
014: * any later version.
015: *
016: * Heritrix is distributed in the hope that it will be useful,
017: * but WITHOUT ANY WARRANTY; without even the implied warranty of
018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
019: * GNU Lesser Public License for more details.
020: *
021: * You should have received a copy of the GNU Lesser Public License
022: * along with Heritrix; if not, write to the Free Software
023: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024: */
025: package org.archive.crawler.util;
026:
027: import java.io.File;
028: import java.io.FileInputStream;
029: import java.io.FileNotFoundException;
030: import java.io.FileOutputStream;
031: import java.io.FilenameFilter;
032: import java.io.IOException;
033: import java.io.ObjectInputStream;
034: import java.io.ObjectOutputStream;
035:
036: /**
037: * Utilities useful checkpointing.
038: * @author stack
039: * @version $Date: 2006-09-25 22:40:19 +0000 (Mon, 25 Sep 2006) $ $Revision: 4658 $
040: */
041: public class CheckpointUtils {
042: public static final String SERIALIZED_CLASS_SUFFIX = ".serialized";
043:
044: public static File getBdbSubDirectory(File checkpointDir) {
045: return new File(checkpointDir, "bdbje-logs");
046: }
047:
048: public static File getClassCheckpointFile(File checkpointDir,
049: final String suffix, Class c) {
050: return new File(checkpointDir, getClassCheckpointFilename(c,
051: suffix));
052: }
053:
054: public static File getClassCheckpointFile(File checkpointDir,
055: Class c) {
056: return new File(checkpointDir, getClassCheckpointFilename(c,
057: null));
058: }
059:
060: public static String getClassCheckpointFilename(final Class c) {
061: return getClassCheckpointFilename(c, null);
062: }
063:
064: public static String getClassCheckpointFilename(final Class c,
065: final String suffix) {
066: return c.getName() + ((suffix == null) ? "" : "." + suffix)
067: + SERIALIZED_CLASS_SUFFIX;
068: }
069:
070: /**
071: * Utility function to serialize an object to a file in current checkpoint
072: * dir. Facilities
073: * to store related files alongside the serialized object in a directory
074: * named with a <code>.auxillary</code> suffix.
075: *
076: * @param o Object to serialize.
077: * @param dir Directory to serialize into.
078: * @throws IOException
079: */
080: public static void writeObjectToFile(final Object o, final File dir)
081: throws IOException {
082: writeObjectToFile(o, null, dir);
083: }
084:
085: public static void writeObjectToFile(final Object o,
086: final String suffix, final File dir) throws IOException {
087: dir.mkdirs();
088: ObjectOutputStream out = new ObjectOutputStream(
089: new FileOutputStream(getClassCheckpointFile(dir,
090: suffix, o.getClass())));
091: try {
092: out.writeObject(o);
093: } finally {
094: out.close();
095: }
096: }
097:
098: public static <T> T readObjectFromFile(final Class<T> c,
099: final File dir) throws FileNotFoundException, IOException,
100: ClassNotFoundException {
101: return readObjectFromFile(c, null, dir);
102: }
103:
104: public static <T> T readObjectFromFile(final Class<T> c,
105: final String suffix, final File dir)
106: throws FileNotFoundException, IOException,
107: ClassNotFoundException {
108: ObjectInputStream in = new ObjectInputStream(
109: new FileInputStream(getClassCheckpointFile(dir, suffix,
110: c)));
111: T o = null;
112: try {
113: o = c.cast(in.readObject());
114: } finally {
115: in.close();
116: }
117: return o;
118: }
119:
120: /**
121: * @return Instance of filename filter that will let through files ending
122: * in '.jdb' (i.e. bdb je log files).
123: */
124: public static FilenameFilter getJeLogsFilter() {
125: return new FilenameFilter() {
126: public boolean accept(File dir, String name) {
127: return name != null
128: && name.toLowerCase().endsWith(".jdb");
129: }
130: };
131: }
132: }
|