/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.jlab.hipo.io;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

/**
 *
 * @author gavalian
 */
public class HipoFileHeader {
    
    public static final int FILE_HEADER_LENGTH = 72;
    public static final int FILE_IDENTIFIER    = 0x4F504948;
    public static final int FILE_VERSION       = 0x312E3056;
    
    public static final int OFFSET_FILE_SIZE = 8;
    public static final int OFFSET_FILE_HEADER_SIZE = 12;
    public static final byte[] HIPO_FILE_SIGNATURE_BYTES = new byte[]{'H','I','P','O','V','0','.','2'};

    
    private  ByteBuffer  fileHeader    = null;
    private  Boolean     isHeaderValid = false;
    
    public HipoFileHeader(){
        byte[] header = new byte[HipoFileHeader.FILE_HEADER_LENGTH];
        fileHeader = ByteBuffer.wrap(header);
        fileHeader.order(ByteOrder.LITTLE_ENDIAN);
        for(int i = 0 ; i < 8; i++) fileHeader.put(i, HipoFileHeader.HIPO_FILE_SIGNATURE_BYTES[i]);
        this.setHeaderSize(0);
        this.isHeaderValid = true;
    }
    
    public HipoFileHeader(byte[] header){
        fileHeader = ByteBuffer.wrap(header);
        fileHeader.order(ByteOrder.LITTLE_ENDIAN);
        this.isHeaderValid = true;
        if(fileHeader.getInt(0)!=HipoFileHeader.FILE_IDENTIFIER){
            System.out.println("[Hipo-File] ---> error : this is not a HIPO File.");
            this.isHeaderValid = false;
        }
    }
    
    public int getRecordStart(){
        return HipoFileHeader.FILE_HEADER_LENGTH + getHeaderSize();
    }
    
    public boolean isValid(){
        return this.isHeaderValid;
    }
    
    public int getHeaderSize(){
        int headerSize = fileHeader.getInt(HipoFileHeader.OFFSET_FILE_HEADER_SIZE);
        return headerSize;
    }
    
    public int getIdentifier(){
        return fileHeader.getInt(0);
    }
    
    public int getVersion(){
        return fileHeader.getInt(4);
    }
    
    public int getHeaderStart(){
        return HipoFileHeader.FILE_HEADER_LENGTH;
    }
    
    public final void setHeaderSize(int size){
        fileHeader.putInt(HipoFileHeader.OFFSET_FILE_HEADER_SIZE, size);
    }
    
    public ByteBuffer build(){
        return this.fileHeader;
    }
        
}

 

Ads help maintain this website.