package mwt.wow.mpq;
class BlockTableEntry {
private long blockOffset;
private int blockSize;
private int fileSize;
private int flags;
private String filePath;
private Integer extCRC32;
private Long extFiletime;
private byte[] extMD5;
public BlockTableEntry(long blockOffset, int blockSize, int fileSize,
int flags) {
this.blockOffset = blockOffset;
this.blockSize = blockSize;
this.fileSize = fileSize;
this.flags = flags;
}
public long getBlockOffset() {
return blockOffset;
}
public int getBlockSize() {
return blockSize;
}
public int getFileSize() {
return fileSize;
}
public int getFlags() {
return flags;
}
public boolean isFile() {
return (flags & 0x80000000) != 0;
}
public boolean isSingleUnit() {
return (flags & 0x01000000) != 0;
}
public boolean isEncryptionAdjusted() {
return (flags & 0x00020000) != 0;
}
public boolean isEncrypted() {
return (flags & 0x00010000) != 0;
}
public boolean isCompressed() {
return (flags & 0x00000200) != 0;
}
public boolean isImploded() {
return (flags & 0x00000100) != 0;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public Integer getExtCRC32() {
return extCRC32;
}
public void setExtCRC32(Integer extCRC32) {
this.extCRC32 = extCRC32;
}
public Long getExtFiletime() {
return extFiletime;
}
public void setExtFiletime(Long extFiletime) {
this.extFiletime = extFiletime;
}
public byte[] getExtMD5() {
return extMD5;
}
public void setExtMD5(byte[] extMD5) {
if (extMD5 != null && extMD5.length != 16) {
throw new IllegalArgumentException("extMD5");
}
this.extMD5 = extMD5;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append('\n');
s.append("Block offset: ").append(blockOffset).append('\n');
s.append("Block size: ").append(blockSize).append('\n');
s.append("File size: ").append(fileSize).append('\n');
s.append("Flags: ").append(String.format("%08x", flags)).append('\n');
s.append("File path: ").append(filePath).append('\n');
if (extCRC32 != null) {
s.append("CRC32: ").append(extCRC32).append('\n');
}
if (extFiletime != null) {
s.append("File time: ").append(extFiletime).append('\n');
}
if (extMD5 != null) {
s.append("MD5:");
for (byte b : extMD5) {
s.append(String.format(" %02x", b & 0xff));
}
s.append('\n');
}
return s.toString();
}
}