Class WadMap

java.lang.Object
net.mtrop.doom.WadMap
All Implemented Interfaces:
Iterable<WadEntry>, Wad

public class WadMap extends Object implements Wad
This is just a basic mapping of WAD entries to a file. The file is NOT kept open after the read, and the file or stream used to gather the WAD metadata is not kept.

This may not be added to or changed, and its data may not be read directly, because this is just a mapping of entries. Individual entries may be read for data offset information and then read from the corresponding file or stream.

Despite the name, this is not a structure that reads Doom Map information. Use DoomMap, HexenMap, or UDMFMap for that purpose.

Author:
Matthew Tropiano
  • Constructor Details

  • Method Details

    • isIWAD

      public boolean isIWAD()
      Description copied from interface: Wad
      Checks if this WAD is an Internal WAD.
      Specified by:
      isIWAD in interface Wad
      Returns:
      true if so, false if not.
    • isPWAD

      public boolean isPWAD()
      Description copied from interface: Wad
      Checks if this WAD is a Patch WAD.
      Specified by:
      isPWAD in interface Wad
      Returns:
      true if so, false if not.
    • getEntryCount

      public int getEntryCount()
      Specified by:
      getEntryCount in interface Wad
      Returns:
      the number of entries in this Wad.
    • getContentLength

      public int getContentLength()
      Specified by:
      getContentLength in interface Wad
      Returns:
      the amount of content data in this Wad in bytes.
    • addEntry

      public WadEntry addEntry(WadEntry entry) throws IOException
      Description copied from interface: Wad
      Adds a new entry to the Wad. Exercise caution with this method, as this entry is added as-is, and an entry can reference anywhere in the Wad!
      Specified by:
      addEntry in interface Wad
      Parameters:
      entry - the entry to add.
      Returns:
      the entry added.
      Throws:
      IOException - if the entry cannot be written.
    • addEntryAt

      public WadEntry addEntryAt(int index, WadEntry entry) throws IOException
      Description copied from interface: Wad
      Adds a new entry to the Wad. Exercise caution with this method, as this entry is added as-is, and an entry can reference anywhere in the Wad!
      Specified by:
      addEntryAt in interface Wad
      Parameters:
      index - the index at which to add the entry.
      entry - the entry to add.
      Returns:
      the entry added.
      Throws:
      IOException - if the entry cannot be written.
    • addData

      public WadEntry addData(String entryName, InputStream in, int maxLength) throws IOException
      Description copied from interface: Wad
      Adds data to this Wad, using entryName as the name of the new entry. The provided input stream is read until the end of the stream is reached or maxLength bytes are read. The input stream is NOT CLOSED, afterward. The overhead for multiple individual additions may be expensive I/O-wise depending on the Wad implementation.
      Specified by:
      addData in interface Wad
      Parameters:
      entryName - the name of the entry to add this as.
      in - the input stream to read.
      maxLength - the maximum amount of bytes to read from the InputStream, or a value < 0 to keep reading until end-of-stream.
      Returns:
      a WadEntry that describes the added data.
      Throws:
      IOException - if the data cannot be written or the stream could not be read.
    • addDataAt

      public WadEntry addDataAt(int index, String entryName, InputStream in, int maxLength) throws IOException
      Description copied from interface: Wad
      Adds data to this Wad at a particular entry offset, using entryName as the name of the entry. The provided input stream is read until the end of the stream is reached or maxLength bytes are read. The input stream is NOT CLOSED, afterward. The rest of the entries in the wad are shifted down one index. The overhead for multiple individual additions may be expensive I/O-wise depending on the Wad implementation.
      Specified by:
      addDataAt in interface Wad
      Parameters:
      index - the index at which to add the entry.
      entryName - the name of the entry to add this as.
      in - the input stream to read.
      maxLength - the maximum amount of bytes to read from the InputStream, or a value < 0 to keep reading until end-of-stream.
      Returns:
      a WadEntry that describes the added data.
      Throws:
      IOException - if the data cannot be written or the stream could not be read.
    • deleteEntry

      public WadEntry deleteEntry(int n) throws IOException
      Description copied from interface: Wad
      Deletes a Wad's entry and its contents. The overhead for multiple deletions may be expensive I/O-wise.
      Specified by:
      deleteEntry in interface Wad
      Parameters:
      n - the index of the entry to delete.
      Returns:
      the entry deleted.
      Throws:
      IOException - if the entry cannot be deleted.
    • removeEntry

      public WadEntry removeEntry(int n) throws IOException
      Description copied from interface: Wad
      Remove a Wad's entry (but not contents). This will leave abandoned, un-addressed data in a Wad file and will not be removed until the data is purged.
      Specified by:
      removeEntry in interface Wad
      Parameters:
      n - the index of the entry to delete.
      Returns:
      the entry removed from the Wad.
      Throws:
      IOException - if the entry cannot be removed.
    • renameEntry

      public void renameEntry(int index, String newName) throws IOException
      Description copied from interface: Wad
      Renames the entry at an index in the Wad.
      Specified by:
      renameEntry in interface Wad
      Parameters:
      index - the index of the entry to rename.
      newName - the new name of the entry.
      Throws:
      IOException - if the entry cannot be renamed.
    • replaceEntry

      public void replaceEntry(int index, byte[] data) throws IOException
      Description copied from interface: Wad
      Replaces the entry at an index in the Wad. If the incoming data is the same size as the entry at the index, this will change the data in-place without deleting and adding.
      Specified by:
      replaceEntry in interface Wad
      Parameters:
      index - the index of the entry to replace.
      data - the data to replace the entry with.
      Throws:
      IOException - if the entry cannot be replaced.
    • unmapEntries

      public void unmapEntries(int startIndex, WadEntry... entryList) throws IOException
      Description copied from interface: Wad
      Replaces a series of WadEntry objects in this Wad, using the provided list of entries as the replacement list. If the list of entries plus the starting index would breach the original list of entries, the excess is appended to the Wad.
      Specified by:
      unmapEntries in interface Wad
      Parameters:
      startIndex - the starting index to replace from (inclusive).
      entryList - the set of entries to replace (in order) from the starting index.
      Throws:
      IOException - if the entries could not be written.
    • setEntries

      public void setEntries(WadEntry... entryList) throws IOException
      Description copied from interface: Wad
      Completely replaces the list of entries in this Wad with a completely different set of entries.
      Specified by:
      setEntries in interface Wad
      Parameters:
      entryList - the set of entries that will make up this Wad.
      Throws:
      IOException - if the entries could not be written.
    • fetchContent

      public void fetchContent(int offset, int length, byte[] dest, int destOffset) throws IOException
      Description copied from interface: Wad
      Fetches a series of bytes from an arbitrary place in the Wad and puts them into a provided array. This is will attempt to get the full provided length, throwing an exception if it does not.
      Specified by:
      fetchContent in interface Wad
      Parameters:
      offset - the offset byte into that data to start at.
      length - the amount of bytes to fetch.
      dest - the destination array of bytes.
      destOffset - the offset into the destination array to put the bytes into.
      Throws:
      IOException - if an error occurs during read.
    • getContent

      public byte[] getContent(int offset, int length) throws IOException
      Description copied from interface: Wad
      Gets a series of bytes representing the data at an arbitrary place in the Wad.
      Specified by:
      getContent in interface Wad
      Parameters:
      offset - the offset byte into that data to start at.
      length - the amount of bytes to return.
      Returns:
      a copy of the byte data as an array of bytes.
      Throws:
      IOException - if an error occurs during read.
    • getData

      public byte[] getData(WadEntry entry) throws IOException
      Description copied from interface: Wad
      Retrieves the data of the specified entry.
      Specified by:
      getData in interface Wad
      Parameters:
      entry - the entry to use.
      Returns:
      a byte array of the data.
      Throws:
      IOException - if the data couldn't be retrieved or the entry's offsets breach the file extents.
    • getInputStream

      public InputStream getInputStream(WadEntry entry) throws IOException
      Description copied from interface: Wad
      Retrieves the data of the specified entry from a starting index and returns it as a stream.
      Specified by:
      getInputStream in interface Wad
      Parameters:
      entry - the entry to use.
      Returns:
      an open input stream of the data.
      Throws:
      IOException - if the data couldn't be retrieved or the entry's offsets breach the file extents.
    • getEntry

      public WadEntry getEntry(int n)
      Description copied from interface: Wad
      Gets the WadEntry at index n.
      Specified by:
      getEntry in interface Wad
      Parameters:
      n - the index of the entry in the entry list.
      Returns:
      the entry at n.
    • iterator

      public Iterator<WadEntry> iterator()
      Specified by:
      iterator in interface Iterable<WadEntry>
    • close

      public void close() throws IOException
      Description copied from interface: Wad
      Closes this Wad. Does nothing on some implementations.
      Specified by:
      close in interface Wad
      Throws:
      IOException - if an error occurred during close.