package provider.nx; import provider.MapleDataDirectoryEntry; import provider.MapleDataEntity; import provider.MapleDataEntry; import provider.MapleDataFileEntry; import provider.pkgnx.NXNode; import provider.pkgnx.nodes.NXNullNode; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author 黯淡 * @version 3.1 * @since 6/5/15 */ public class NXDataDirectoryEntry implements MapleDataDirectoryEntry { private final NXNode node; private final NXData parent; private final List<MapleDataDirectoryEntry> subdirs = new ArrayList<>(); private final List<MapleDataFileEntry> files = new ArrayList<>(); private final Map<String, MapleDataEntry> entries = new HashMap<>(); public NXDataDirectoryEntry(NXNode node, NXData parent) { this.node = node; this.parent = parent; } public void addDirectory(MapleDataDirectoryEntry dir) { subdirs.add(dir); entries.put(dir.getName(), dir); } public void addFile(MapleDataFileEntry fileEntry) { files.add(fileEntry); entries.put(fileEntry.getName(), fileEntry); } @Override public List<MapleDataDirectoryEntry> getSubdirectories() { return Collections.unmodifiableList(subdirs); } @Override public List<MapleDataFileEntry> getFiles() { return Collections.unmodifiableList(files); } @Override public MapleDataEntry getEntry(String name) { return entries.get(name); } @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; for (NXNode child : node) { i++; if (child == node) { break; } } return (int) (node.getFile().getHeader().getNodeOffset() + (20 * i)); } }