package provider.nx; import provider.MapleDataDirectoryEntry; import provider.MapleDataEntity; import provider.MapleDataEntry; import provider.MapleDataFileEntry; import provider.pkgnx.format.NXNode; import provider.pkgnx.format.nodes.NXNullNode; import java.util.ArrayList; import java.util.List; /** * @author Aaron * @version 1.0 * @since 6/8/13 */ public class NXDataDirectoryEntry implements MapleDataDirectoryEntry { private final NXNode node; private final NXData parent; public NXDataDirectoryEntry(NXNode node, NXData parent) { this.node = node; this.parent = parent; } @Override public List<MapleDataDirectoryEntry> getSubdirectories() { List<MapleDataDirectoryEntry> mdde = new ArrayList<>(); for (NXNode child : node) { if (child instanceof NXNullNode) { mdde.add(new NXDataDirectoryEntry(child, new NXData(node, parent))); } } return mdde; } @Override public List<MapleDataFileEntry> getFiles() { List<MapleDataFileEntry> mdde = new ArrayList<>(); for (NXNode child : node) { if (!(child instanceof NXNullNode)) { mdde.add(new NXDataFileEntry(child, new NXData(node, parent))); } } return mdde; } @Override public MapleDataEntry getEntry(String name) { return new NXDataEntry(node.getChild(name), new NXData(node, parent)); } @Override public String getName() { return node.getName(); } @Override public MapleDataEntity getParent() { return new NXDataEntity(parent.getNode(), parent.getParentAsNX()); } @Override public int getSize() { return node.getChildCount(); } @Override public int getChecksum() { return -1; // NOT USED ANYWHERE IN THE SOURCE. } @Override public int getOffset() { int i = 0; NXNode[] nodes = node.getFile().getNodes(); for (; i < nodes.length; i++) if (nodes[i] == node) break; return (int) (node.getFile().getHeader().getNodeOffset() + (20 * i)); } }