1 25 package org.archive.io; 26 27 import java.io.File ; 28 import java.io.IOException ; 29 import java.io.InputStream ; 30 import java.io.ObjectInputStream ; 31 import java.util.Iterator ; 32 import java.util.LinkedList ; 33 34 import org.archive.util.FileUtils; 35 36 37 45 public class ObjectPlusFilesInputStream extends ObjectInputStream { 46 LinkedList <File > auxiliaryDirectoryStack = new LinkedList <File >(); 47 LinkedList <Runnable > postRestoreTasks = new LinkedList <Runnable >(); 48 49 57 public ObjectPlusFilesInputStream(InputStream in, File storeDir) 58 throws IOException { 59 super(in); 60 auxiliaryDirectoryStack.addFirst(storeDir); 61 } 62 63 69 public void pushAuxiliaryDirectory(String dir) { 70 auxiliaryDirectoryStack. 71 addFirst(new File (getAuxiliaryDirectory(), dir)); 72 } 73 74 77 public void popAuxiliaryDirectory() { 78 auxiliaryDirectoryStack.removeFirst(); 79 } 80 81 87 public File getAuxiliaryDirectory() { 88 return (File )auxiliaryDirectoryStack.getFirst(); 89 } 90 91 99 public void restoreFile(File destination) throws IOException { 100 String nameAsStored = readUTF(); 101 long lengthAtStoreTime = readLong(); 102 File storedFile = new File (getAuxiliaryDirectory(),nameAsStored); 103 FileUtils.copyFile(storedFile, destination, lengthAtStoreTime); 104 } 105 106 114 public void restoreFileTo(File directory) throws IOException { 115 String nameAsStored = readUTF(); 116 long lengthAtStoreTime = readLong(); 117 File storedFile = new File (getAuxiliaryDirectory(),nameAsStored); 118 File destination = new File (directory,nameAsStored); 119 FileUtils.copyFile(storedFile, destination, lengthAtStoreTime); 120 } 121 122 128 public void registerFinishTask(Runnable task) { 129 postRestoreTasks.addFirst(task); 130 } 131 132 private void doFinishTasks() { 133 Iterator iter = postRestoreTasks.iterator(); 134 while(iter.hasNext()) { 135 ((Runnable )iter.next()).run(); 136 } 137 } 138 139 144 public void close() throws IOException { 145 super.close(); 146 doFinishTasks(); 147 } 148 } 149 | Popular Tags |