blob: 1c46a4a28c1aca674a72f7d00581f8f939105a81 [file] [log] [blame]
/*
* Copyright (c) 2014-2021 by Wen Yu
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License, v. 2.0 are satisfied: GNU General Public License, version 2
* or any later version.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
*
* Change History - most recent changes go on top of previous changes
*
* _8BIM.java
*
* Who Date Description
* ==== ========= =================================================================
* WY 13Mar2015 initial creation
*/
package pixy.meta.adobe;
import java.io.IOException;
import java.io.OutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pixy.meta.MetadataEntry;
import pixy.meta.adobe.ImageResourceID;
import pixy.io.IOUtils;
import pixy.string.StringUtils;
public class _8BIM {
private short id;
private String name;
protected int size;
protected byte[] data;
// Obtain a logger instance
private static final Logger LOGGER = LoggerFactory.getLogger(_8BIM.class);
public _8BIM(short id, String name, byte[] data) {
this(id, name, (data == null)?0:data.length, data);
}
public _8BIM(short id, String name, int size, byte[] data) {
this.id = id;
this.name = name;
this.size = size;
this.data = data;
}
public _8BIM(ImageResourceID eId, String name, byte[] data) {
this(eId.getValue(), name, data);
}
public byte[] getData() {
return data.clone();
}
// Default implementation to be override by sub-classes for iteration purpose
protected MetadataEntry getMetadataEntry() {
//
ImageResourceID eId = ImageResourceID.fromShort(id);
if((id >= ImageResourceID.PATH_INFO0.getValue()) && (id <= ImageResourceID.PATH_INFO998.getValue())) {
return new MetadataEntry("PATH_INFO [" + StringUtils.shortToHexStringMM(id) + "]", eId.getDescription());
} else if((id >= ImageResourceID.PLUGIN_RESOURCE0.getValue()) && (id <= ImageResourceID.PLUGIN_RESOURCE999.getValue())) {
return new MetadataEntry("PLUGIN_RESOURCE [" + StringUtils.shortToHexStringMM(id) + "]", eId.getDescription());
} else if (eId == ImageResourceID.UNKNOWN) {
return new MetadataEntry("UNKNOWN [" + StringUtils.shortToHexStringMM(id) + "]", eId.getDescription());
} else {
return new MetadataEntry("" + eId, eId.getDescription());
}
}
public String getName() {
return name;
}
public short getID() {
return id;
}
public int getSize() {
return size;
}
public void print() {
ImageResourceID eId = ImageResourceID.fromShort(id);
if((id >= ImageResourceID.PATH_INFO0.getValue()) && (id <= ImageResourceID.PATH_INFO998.getValue())) {
LOGGER.info("PATH_INFO [Value: {}] - Path Information (saved paths).", StringUtils.shortToHexStringMM(id));
}
else if((id >= ImageResourceID.PLUGIN_RESOURCE0.getValue()) && (id <= ImageResourceID.PLUGIN_RESOURCE999.getValue())) {
LOGGER.info("PLUGIN_RESOURCE [Value: {}] - Plug-In resource.", StringUtils.shortToHexStringMM(id));
}
else if (eId == ImageResourceID.UNKNOWN) {
LOGGER.info("{} [Value: {}]", eId, StringUtils.shortToHexStringMM(id));
}
else {
LOGGER.info("{}", eId);
}
LOGGER.info("Type: 8BIM");
LOGGER.info("Name: {}", name);
LOGGER.info("Size: {}", size);
}
public void write(OutputStream os) throws IOException {
// Write IRB id
os.write("8BIM".getBytes());
// Write resource id
IOUtils.writeShortMM(os, id);
// Write name (Pascal string - first byte denotes length of the string)
byte[] temp = name.trim().getBytes();
os.write(temp.length); // Size of the string, may be zero
os.write(temp);
if(temp.length%2 == 0)
os.write(0);
// Now write data size
IOUtils.writeIntMM(os, size);
os.write(data); // Write the data itself
if(data.length%2 != 0)
os.write(0); // Padding the data to even size if needed
}
}