001    /*
002     @license.text@ 
003     */
004    package biz.hammurapi.legacy.persistence;
005    
006    import java.io.File;
007    import java.io.FileInputStream;
008    import java.io.FileOutputStream;
009    import java.io.IOException;
010    import java.io.ObjectInputStream;
011    import java.io.ObjectOutputStream;
012    import java.io.Serializable;
013    
014    /**
015     * @author Pavel Vlasov
016     * @version $Revision: 1.1 $
017     */
018    public class FileStorage implements Storage {
019            
020            private File storageDir;
021    
022            public FileStorage(File storageDir) {
023                    this.storageDir=storageDir;
024            }
025    
026            public String put(Object o) throws PersistenceException {
027                    if (o instanceof Serializable) {
028                            try {
029                                    File file=File.createTempFile("storage", ".dat", storageDir);
030                                    ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));
031                                    try {
032                                            oos.writeObject(o);
033                                    } finally {
034                                            oos.close();
035                                    }
036                                    return file.getName();
037                            } catch (IOException e) {
038                                    throw new PersistenceException(e);
039                            }
040                    } else {
041                            return null;
042                    }
043            }
044    
045            public Object get(String key) throws PersistenceException {
046                    File file=new File(storageDir, key);
047                    try {
048                            ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
049                            try {
050                                    return ois.readObject();
051                            } finally {
052                                    ois.close();
053                            }
054                    } catch (IOException e) {
055                            throw new PersistenceException(e);
056                    } catch (ClassNotFoundException e) {
057                            throw new PersistenceException(e);                      
058                    }
059            }
060    
061            public void remove(String key) throws PersistenceException {
062                    new File(storageDir, key).delete();
063            }
064    
065    }