/************************************************************************ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ package org.openoffice.xmerge.converter.palm; import java.io.OutputStream; import java.io.InputStream; import java.io.DataOutputStream; import java.io.DataInputStream; import java.io.IOException; /** *

Contains the raw bytes for a Record in a PDB.

* *

Note that it is not associated with a Record number * or ID.

* * @author Akhil Arora, Herbie Ong * @see PalmDocument * @see PalmDB */ public final class Record { /** Record byte array. */ private byte[] data; /** Record attributes. */ private byte attributes = 0; /** * Default constructor. */ public Record() { data = new byte[0]; } /** *

Constructor to create a Record filled with * bytes.

* *

Note that this does not check for 64k Record * sizes. User of this class must check for that.

* * @param d byte array contents for this object. */ public Record(byte[] d) { this(d, (byte) 0); } /** *

Constructor to create a Record filled with * bytes and assign Record attributes.

* *

Note that this does not check for 64k Record * sizes. User of this class must check for that.

* * @param d byte array contents for this object. * @param attrs Record attributes. */ public Record(byte[] d, byte attrs) { data = new byte[d.length]; attributes = attrs; System.arraycopy(d, 0, data, 0, d.length); } /** * This method returns the number of bytes in this object. * * @return Number of bytes in this object. */ public int getSize() { return data.length; } /** * This method returns the contents of this Object. * * @return Contents in byte array */ public byte[] getBytes() { return data; } /** *

This method returns the Record attributes.

* *
     *  Record attributes consists of (from high to low bit)
     *
     *  delete (1) - dirty (1) - busy (1) - secret (1) - category (4)
     *  
* * @return Record attribute. */ public byte getAttributes() { return attributes; } /** * Write out the Record attributes and * Record length followed by the data in this * Record object. * * @param out The OutputStream to write the object. * * @throws IOException If any I/O error occurs. */ public void write(OutputStream outs) throws IOException { DataOutputStream out = new DataOutputStream(outs); out.writeByte(attributes); out.writeShort(data.length); out.write(data); } /** * Read the necessary data to create a PDB from * the InputStream. * * @param in The InputStream to read data from * in order to restore the object. * * @throws IOException If any I/O error occurs. */ public void read(InputStream ins) throws IOException { DataInputStream in = new DataInputStream(ins); attributes = in.readByte(); int len = in.readUnsignedShort(); data = new byte[len]; in.readFully(data); } /** *

Override equals method of Object.

* *

Two Record objects are equal if they contain * the same bytes in the array and the same attributes.

* *

This is used primarily for testing purposes only for now.

* * @param obj A Record object to compare with * * @return true if obj is equal, otherwise false. */ public boolean equals(Object obj) { boolean bool = false; if (obj instanceof Record) { Record rec = (Record) obj; checkLabel: { if (rec.getAttributes() != attributes) { break checkLabel; } if (rec.getSize() == data.length) { for (int i = 0; i < data.length; i++) { if (data[i] != rec.data[i]) { break checkLabel; } } bool = true; } } } return bool; } }