/* Utils Class for contining utility functions. This file is part of JavaDBF packege. author: anil@linuxense.com license: LGPL (http://www.gnu.org/copyleft/lesser.html) $Id: Utils.java,v 1.7 2004/03/31 16:00:34 anil Exp $ */ package whitebox.geospatialfiles.shapefile.attributes; import java.io.*; import java.util.*; import java.text.*; import static whitebox.geospatialfiles.shapefile.attributes.Utils.ALIGN_LEFT; import static whitebox.geospatialfiles.shapefile.attributes.Utils.ALIGN_RIGHT; import static whitebox.geospatialfiles.shapefile.attributes.Utils.textPadding; /** Miscelaneous functions required by the JavaDBF package. */ public final class Utils { public static final int ALIGN_LEFT = 10; public static final int ALIGN_RIGHT = 12; private Utils() { } public static int readLittleEndianInt(DataInput in) throws IOException { int bigEndian = 0; for (int shiftBy = 0; shiftBy < 32; shiftBy += 8) { bigEndian |= (in.readUnsignedByte() & 0xff) << shiftBy; } return bigEndian; } public static short readLittleEndianShort(DataInput in) throws IOException { int low = in.readUnsignedByte() & 0xff; int high = in.readUnsignedByte(); return (short) (high << 8 | low); } public static byte[] trimLeftSpaces(byte[] arr) { StringBuffer t_sb = new StringBuffer(arr.length); for (int i = 0; i < arr.length; i++) { if (arr[i] != ' ') { t_sb.append((char) arr[ i]); } } return t_sb.toString().getBytes(); } public static short littleEndian(short value) { short num1 = value; short mask = (short) 0xff; short num2 = (short) (num1 & mask); num2 <<= 8; mask <<= 8; num2 |= (num1 & mask) >> 8; return num2; } public static int littleEndian(int value) { int num1 = value; int mask = 0xff; int num2 = 0x00; num2 |= num1 & mask; for (int i = 1; i < 4; i++) { num2 <<= 8; mask <<= 8; num2 |= (num1 & mask) >> (8 * i); } return num2; } public static byte[] textPadding(String text, String characterSetName, int length) throws java.io.UnsupportedEncodingException { return textPadding(text, characterSetName, length, Utils.ALIGN_LEFT); } public static byte[] textPadding(String text, String characterSetName, int length, int alignment) throws java.io.UnsupportedEncodingException { return textPadding(text, characterSetName, length, alignment, (byte) ' '); } public static byte[] textPadding(String text, String characterSetName, int length, int alignment, byte paddingByte) throws java.io.UnsupportedEncodingException { if (text.length() >= length) { return text.substring(0, length).getBytes(characterSetName); } byte byte_array[] = new byte[length]; Arrays.fill(byte_array, paddingByte); switch (alignment) { case ALIGN_LEFT: System.arraycopy(text.getBytes(characterSetName), 0, byte_array, 0, text.length()); break; case ALIGN_RIGHT: int t_offset = length - text.length(); System.arraycopy(text.getBytes(characterSetName), 0, byte_array, t_offset, text.length()); break; } return byte_array; } public static byte[] doubleFormating(Double doubleNum, String characterSetName, int fieldLength, int sizeDecimalPart) throws java.io.UnsupportedEncodingException { int sizeWholePart = fieldLength - (sizeDecimalPart > 0 ? (sizeDecimalPart + 1) : 0); StringBuffer format = new StringBuffer(fieldLength); for (int i = 0; i < sizeWholePart; i++) { format.append("#"); } if (sizeDecimalPart > 0) { format.append("."); for (int i = 0; i < sizeDecimalPart; i++) { format.append("0"); } } DecimalFormat df = new DecimalFormat(format.toString()); return textPadding(df.format(doubleNum.doubleValue()).toString(), characterSetName, fieldLength, ALIGN_RIGHT); } public static boolean contains(byte[] arr, byte value) { boolean found = false; for (int i = 0; i < arr.length; i++) { if (arr[i] == value) { found = true; break; } } return found; } }