blob: b5f50e55aa7f4b09380ca4e9c432f67d860b2187 [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.
*
*************************************************************/
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
*/
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 record 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 record entries cannot fit in the header,
* then nextRecordList has the local ID of a
* recordList that contains the next set of records.
* 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 di a DataInput object
* @throws IOException if 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 DataOut object
* @throws IOException if 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);
}
}