/** * */ package com.googlecode.flickr2twitter.com.aetrion.flickr.util; import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectInputStream; import java.util.HashMap; import java.util.Map; import com.googlecode.flickr2twitter.com.aetrion.flickr.auth.Auth; /** * * Implements a filesystem based storage system for Auth instances. One ".auth" file is maintained per * Auth instance stored. * * @author Matthew MacKenzie * */ public class FileAuthStore implements AuthStore { private Map auths; private File authStoreDir; public FileAuthStore(File authStoreDir) throws IOException { this.auths = new HashMap(); this.authStoreDir = authStoreDir; if (!authStoreDir.exists()) authStoreDir.mkdir(); if (!authStoreDir.canRead()) { throw new IOException("Cannot read " + authStoreDir.getCanonicalPath()); } this.load(); } private void load() throws IOException { File[] authFiles = authStoreDir.listFiles(new AuthFilenameFilter()); for (int i = 0; i < authFiles.length; i++) { if (authFiles[i].isFile() && authFiles[i].canRead()) { ObjectInputStream authStream = new ObjectInputStream(new FileInputStream(authFiles[i])); Auth authInst = null; try { authInst = (Auth)authStream.readObject(); } catch (ClassCastException cce) { // ignore. Its not an auth, so we won't store it. simple as that :-); } catch (ClassNotFoundException e) { // yep, ignoring. LALALALALLALAL. I can't hear you :-) } if (authInst != null) { this.auths.put(authInst.getUser().getId(), authInst); } } } } /* (non-Javadoc) * @see com.aetrion.flickr.util.AuthStore#retrieve(java.lang.String) */ public Auth retrieve(String nsid) { return (Auth) this.auths.get(nsid); } /* (non-Javadoc) * @see com.aetrion.flickr.util.AuthStore#retrieveAll() */ public Auth[] retrieveAll() { return (Auth[])this.auths.values().toArray(new Auth[this.auths.size()]); } /* (non-Javadoc) * @see com.aetrion.flickr.util.AuthStore#clearAll() */ public void clearAll() { this.auths.clear(); File[] auths = this.authStoreDir.listFiles(new AuthFilenameFilter()); for (int i = 0; i < auths.length; i++) { auths[i].delete(); } } /* (non-Javadoc) * @see com.aetrion.flickr.util.AuthStore#clear(java.lang.String) */ public void clear(String nsid) { this.auths.remove(nsid); File auth = new File(this.authStoreDir, nsid + ".auth"); if (auth.exists()) auth.delete(); } static class AuthFilenameFilter implements FilenameFilter { private static final String suffix = ".auth"; public boolean accept(File dir, String name) { if (name.endsWith(suffix)) return true; return false; } } }