blob: 6c111c29c37a8ee9ce96e2ef98db3394e8d54b8e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.xmerge.converter.palm;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
/**
* <p>Class used only internally by <code>PdbEncoder</code> and
* <code>PdbDecoder</code> to store, read and write a PDB header.</p>
*
* <p>Note that fields are intended to be accessible only at the
* package level.</p>
*
* <p>Some of the fields are internally represented using a
* larger type since Java does not have unsigned types.
* Some are not since they are not relevant for now.
* The <code>read</code> and <code>write</code> methods should
* handle them properly.</p>
*
* @author Herbie Ong
* @see PalmDB
* @see Record
*/
final class PdbHeader {
/** Name of the database. 32 bytes. */
byte[] pdbName = null;
/**
* Flags for the database. Palm UInt16. Unsignedness should be
* irrelevant.
*/
short attribute = 0;
/** Application-specific version for the database. Palm UInt16. */
int version = 0;
/** Date created. Palm UInt32. */
long creationDate = 0;
/** Date last modified. Palm UInt32. */
long modificationDate = 0;
/** Date last backup. Palm UInt32. */
long lastBackupDate = 0;
/**
* Incremented every time a <code>Record</code> is
* added, deleted or modified. Palm UInt32.
*/
long modificationNumber = 0;
/** Optional field. Palm UInt32. Unsignedness should be irrelevant. */
int appInfoID = 0;
/** Optional field. Palm UInt32. Unsignedness should be irrelevant. */
int sortInfoID = 0;
/** Database type ID. Palm UInt32. Unsignedness should be irrelevant. */
int typeID = 0;
/** Database creator ID. Palm UInt32. Unsignedness should be irrelevant. */
int creatorID = 0;
/** ??? */
int uniqueIDSeed = 0;
/** See numRecords. 4 bytes. */
int nextRecordListID = 0;
/**
* Number of Records stored in the database header.
* If all the <code>Record</code> entries cannot fit in the header,
* then <code>nextRecordList</code> has the local ID of a
* RecordList that contains the next set of <code>Record</code>.
* Palm UInt16.
*/
int numRecords = 0;
/**
* Read in the data for the PDB header. Need to
* preserve the unsigned value for some of the fields.
*
* @param in A <code>DataInput</code> object.
*
* @throws IOException If any I/O error occurs.
*/
public void read(DataInput in) throws IOException {
pdbName = new byte[PalmDB.NAME_LENGTH];
in.readFully(pdbName);
attribute = in.readShort();
version = in.readUnsignedShort();
creationDate = ((long) in.readInt()) & 0xffffffffL;
modificationDate = ((long) in.readInt()) & 0xffffffffL;
lastBackupDate = ((long) in.readInt()) & 0xffffffffL;
modificationNumber = ((long) in.readInt()) & 0xffffffffL;
appInfoID = in.readInt();
sortInfoID = in.readInt();
creatorID = in.readInt();
typeID = in.readInt();
uniqueIDSeed = in.readInt();
nextRecordListID = in.readInt();
numRecords = in.readUnsignedShort();
}
/**
* Write out PDB header data.
*
* @param out A <code>DataOutput</code> object.
*
* @throws IOException If any I/O error occurs.
*/
public void write(DataOutput out) throws IOException {
out.write(pdbName);
out.writeShort(attribute);
out.writeShort(version);
out.writeInt((int) creationDate);
out.writeInt((int) modificationDate);
out.writeInt((int) lastBackupDate);
out.writeInt((int) modificationNumber);
out.writeInt(appInfoID);
out.writeInt(sortInfoID);
out.writeInt(typeID);
out.writeInt(creatorID);
out.writeInt(uniqueIDSeed);
out.writeInt(nextRecordListID);
out.writeShort(numRecords);
}
}