/* ** 2015 December 22 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. */ package info.ata4.disunity.cli.command.asset; import com.beust.jcommander.Parameters; import info.ata4.disunity.cli.util.Formatters; import info.ata4.disunity.cli.util.TableBuilder; import info.ata4.disunity.cli.util.TableModel; import info.ata4.disunity.cli.util.TextTableFormat; import info.ata4.junity.serialize.SerializedFile; import info.ata4.util.io.DataBlock; import java.util.LinkedHashMap; import java.util.Map; /** * * @author Nico Bergemann <barracuda415 at yahoo.de> */ @Parameters( commandDescription = "List file data blocks." ) public class AssetBlocks extends AssetTableCommand { @Override protected TableModel tableModel(SerializedFile serialized) { Map<String, DataBlock> blocks = new LinkedHashMap<>(); blocks.put("Header", serialized.headerBlock()); blocks.put("Type Tree", serialized.metadata().typeTreeBlock()); blocks.put("Object Info", serialized.metadata().objectInfoBlock()); blocks.put("External Refs", serialized.metadata().externalsBlock()); blocks.put("Object Data", serialized.objectDataBlock()); TableBuilder table = new TableBuilder(); table.row("Name", "Offset", "Size"); blocks.entrySet().stream() .sorted((e1, e2) -> Long.compare( e1.getValue().offset(), e2.getValue().offset() ) ) .forEach(e -> { DataBlock block = e.getValue(); table.row( e.getKey(), block.offset(), block.length() ); }); TableModel model = new TableModel("Blocks", table.get()); TextTableFormat format = model.format(); format.columnFormatter(1, Formatters::hex); return model; } }