package provider.nx;
import provider.MapleData;
import provider.MapleDataDirectoryEntry;
import provider.MapleDataProvider;
import provider.pkgnx.NXFile;
import provider.pkgnx.EagerNXFile;
import java.io.IOException;
import java.util.Iterator;
import provider.MapleDataFileEntry;
import provider.pkgnx.NXNode;
/**
* @author 黯淡
* @version 3.1
* @since 6/5/15
*/
public class NXDataProvider implements MapleDataProvider {
private final NXFile root;
private final NXDataDirectoryEntry rootForNavigation;
public NXDataProvider(String path) throws IOException {
root = new EagerNXFile(path);
rootForNavigation = new NXDataDirectoryEntry(root.getRoot(), null);
fillMapleDataEntitysRoot(root, rootForNavigation);
}
private void fillMapleDataEntitysRoot(NXFile lroot, NXDataDirectoryEntry nxdir) {
for (NXNode child : lroot.getRoot()) {
String fileName = child.getName();
if (child.getChildCount() > 0 && !fileName.endsWith(".img")) {
NXDataDirectoryEntry mDDE = new NXDataDirectoryEntry(child, new NXData(child, null));
nxdir.addDirectory(mDDE);
fillMapleDataEntitys(child, mDDE);
} else {
nxdir.addFile(new NXDataFileEntry(child, new NXData(child, null)));
}
}
}
private void fillMapleDataEntitys(NXNode lroot, NXDataDirectoryEntry nxdir) {
for (NXNode child : lroot) {
String fileName = child.getName();
if (child.getChildCount() > 0 && !fileName.endsWith(".img")) {
NXDataDirectoryEntry mDDE = new NXDataDirectoryEntry(child, new NXData(child, null));
nxdir.addDirectory(mDDE);
fillMapleDataEntitys(child, mDDE);
} else {
nxdir.addFile(new NXDataFileEntry(child, new NXData(child, null)));
}
}
}
@Override
public MapleData getData(String path) {
try {
NXData nxData = new NXData(root.resolve(path), null);
return nxData;
} catch (Exception e) {
return null;
}
}
@Override
public MapleDataDirectoryEntry getRoot() {
return rootForNavigation;
}
}