package de.gaalop.tba.table; import de.gaalop.tba.IMultTable; import de.gaalop.tba.table.BitIO.*; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Manages all table formats * @author Christian Steinmetz */ public class TableFormat { public static final int TABLE_COMPRESSED_MAX = 1; public static final int TABLE_HUMAN_READABLE = 69; /** * Returns the format for a given TableReaderIO instance * @param tableReaderIO The instance * @return The format of the given TableReaderIO */ public static int getByteFormat(TableReaderIO tableReaderIO) { if (tableReaderIO instanceof TableCompressed) { TableCompressed tc = (TableCompressed) tableReaderIO; AbsBitReader reader = tc.getReader(); if (reader instanceof MaxReader) return TABLE_COMPRESSED_MAX; } if (tableReaderIO instanceof TableHumanReadable) return TABLE_HUMAN_READABLE; throw new IllegalArgumentException("Table_IO type unknown"); } /** * Creates an according TableReaderIO instance for a format * @param byteFormat The format * @return The created TableReaderIO instance */ public static TableReaderIO getTableReaderIO(int byteFormat) { switch (byteFormat) { case TABLE_COMPRESSED_MAX: return new TableCompressed(new MaxReader(), new MaxWriter()); case TABLE_HUMAN_READABLE: return new TableHumanReadable(); default: throw new IllegalArgumentException("Products file format not recognized"); } } public static void readFromFile(InputStream filestream, IMultTable innerTable, IMultTable outerTable, IMultTable geoTable) throws IOException { DataInputStream in = new DataInputStream(filestream); byte format = in.readByte(); getTableReaderIO(format).readFromInputStream(in, innerTable, outerTable, geoTable); } public static void writeToFile(int bladeCount, int dimension, IMultTable innerTable, IMultTable outerTable, IMultTable geoTable, OutputStream outputStream, int format) throws IOException { DataOutputStream out = new DataOutputStream(outputStream); out.writeByte(format); //format getTableReaderIO(format).writeFromInputStream(bladeCount, dimension, innerTable, outerTable, geoTable, out); } }