package de.danielsenff.madds.models;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Vector;
import de.master.core.graph.base.Graph;
import de.master.core.graph.base.Node;
public class Inventorizer {
private FileFilter filter;
private Graph<Sizable> fileTree;
private HashMap<File, TextureFile> textureFiles;
public Inventorizer(final String extension) {
this.filter = new TextureNodeFileFilter(extension);
this.fileTree = new Graph<Sizable>();
this.textureFiles = TextureHashMap.getTextureHashMap();
}
public void makeInventoryForDir(Node<Sizable> parentNode, File[] files) {
for (int i = 0; i < files.length; i++) {
File file = files[i];
if(file.isDirectory()) {
TextureFolder tfolder = new TextureFolder(file);
Node<Sizable> folderNode = new Node((Sizable)tfolder);
fileTree.insertAt(0.0, parentNode, folderNode);
makeInventoryForDir(folderNode, file.listFiles(filter));
parentNode.getData().addSize(tfolder.getSize());
} else {
// add file to tree
try {
TextureFile tfile = TextureFile.read(file);
fileTree.insertAt(0.0, parentNode, new Node<Sizable>((Sizable)tfile));
this.textureFiles.put(file, tfile);
parentNode.getData().addSize(tfile.getSize());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void startInventoring(File rootDirectory) {
TextureFolder tfolder = new TextureFolder(rootDirectory);
Node<Sizable> rootFolderNode = new Node(tfolder);
fileTree.insert(0, rootFolderNode);
makeInventoryForDir(rootFolderNode, rootDirectory.listFiles(filter));
}
public Graph<Sizable> getFileSizeTree() {
return this.fileTree;
}
public HashMap<File, TextureFile> getTextureFiles() {
return this.textureFiles;
}
}