package com.newsrob.storage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.OutputStream;
import android.content.Context;
abstract class AbstractStorageAdapter implements IStorageAdapter {
private Context ctx;
AbstractStorageAdapter(Context ctx) {
this.ctx = ctx;
}
Context getContext() {
return ctx;
}
abstract File getBaseDir();
private File[] getAllAssetFiles(String longAtomId) {
final String atomId = longAtomIdToShortAtomId(longAtomId);
return getBaseDir().listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.startsWith(atomId);
}
});
}
public void clear() {
File[] filesToClear = getBaseDir().listFiles();
if (filesToClear == null)
return;
for (File file : filesToClear) {
if (!file.getName().endsWith(".settings"))
deleteFile(file);
}
}
private void deleteFile(File file) {
if (file.isDirectory()) {
for (File f : file.listFiles())
deleteFile(f);
}
file.delete();
}
public OutputStream openFileOutput(String fileName) throws FileNotFoundException {
File f = new File(getBaseDir(), fileName);
File parent = f.getParentFile();
if (!parent.exists())
parent.mkdirs();
return new FileOutputStream(f);
}
public int removeAllAssets(String atomId) {
int noOfDeletedAssets = 0;
File[] allFiles2delete = getAllAssetFiles(atomId);
if (allFiles2delete == null)
return 0;
for (File file : allFiles2delete) {
deleteFile(file);
noOfDeletedAssets++;
}
return noOfDeletedAssets;
}
private static final String longAtomIdToShortAtomId(String longAtomId) {
return "a" + longAtomId.substring(longAtomId.lastIndexOf("/") + 1).replace('/', '_');
}
}