pl.edu.pjwstk.yaod.store.defaultstore.newblocks
Class DataBlock

java.lang.Object
  |
  +--pl.edu.pjwstk.yaod.store.defaultstore.newblocks.DataBlock

public class DataBlock
extends java.lang.Object

Klasa zapewnia logike zwiazana z wewnetrznym funkcjonowaniem blokow danych. Blok danych jest struktura umozliwiajaca rejestrowanie w niej rekordow. Rekord jest zserializowanym atomem. Blok danych sklada sie z sekcji:

Sekcja slotow i sekcja danych przyrastaja kosztem sekcji pustej - sekcja slotow od gory w dol, sekcja danych od dolu do gory.

Author:
M. Lentner, raist@ertel.com.pl

Field Summary
static short BLOCKTYPE
           
static short NEXT_RECORD_LENGTH
           
static short RECORD_HEADER_LENGTH
           
static short SLOT_LENGTH
           
 
Constructor Summary
DataBlock(byte[] rawBlock)
          Tworzy blok danych na podstawie podanej tablicy, zawierajacej jego zserializowana zawartosc.
DataBlock(int size)
          Tworzy pusty blok danych podanej wielkosci.
 
Method Summary
 short createRecord(byte[] record, int type)
          Tworzy rekord.
 void deleteRecord(short slot)
          Usuwa rekord identyfikowany podanym slotem.
 short getBlock()
          Zwraca numer bloku w ramach pliku danych, do ktorego nalezy blok.
 short getDataSectionSize()
          Zwraca wielkosc zapisanej przestrzeni w ramach bloku, jako rozmiar sekcji danych.
 short getFile()
          Zwraca identyfikator pliku danych, do ktorego nalezy blok.
 short getFreeSpaceSectionSize()
          Zwraca wielkosc dostepnej wolnej przestrzeni w ramach bloku, jako rozmiar sekcji pustej.
 RecordPointer getNextPart(short slot)
          Zwraca wskaznik kolejnego rekordu dla danego rekordu lancuchowanego.
 byte[] getRecord(short slot)
          Zwraca rekord identyfikowany podanym slotem.
 short getRecordLength(short slot)
          Zwraca dlugosc rekordu.
 short getSize()
          Zwraca wielkosc bloku (suma wszystkich sekcji).
 boolean isChainedRecord(short slot)
          Sprawdza, czy dany rekord jest lancuchowany, czyli czy zawiera dalszy ciag w innym bloku.
 void setBlock(short block)
          Ustawia numer bloku w ramach pliku danych, do ktorego nalezy blok.
 void setFile(short file)
          Ustawia identyfikator pliku danych, do ktorego nalezy blok.
 void setNextPart(short slot, RecordPointer ptr)
          Ustawia wskaznik kolejnego rekordu dla danego rekordu lancuchowanego.
 byte[] toByteArray()
          Serializuje blok, w celu zapisania go na dysku.
 void updateRecord(short slot, byte[] record, boolean complex)
          Aktualizuje rekord identyfikowany podanym slotem.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BLOCKTYPE

public static final short BLOCKTYPE

SLOT_LENGTH

public static final short SLOT_LENGTH

RECORD_HEADER_LENGTH

public static final short RECORD_HEADER_LENGTH

NEXT_RECORD_LENGTH

public static final short NEXT_RECORD_LENGTH
Constructor Detail

DataBlock

public DataBlock(int size)
          throws SectionBoundsException
Tworzy pusty blok danych podanej wielkosci.
Parameters:
size - wielkosc tworzonego bloku.

DataBlock

public DataBlock(byte[] rawBlock)
          throws BlockFormatException
Tworzy blok danych na podstawie podanej tablicy, zawierajacej jego zserializowana zawartosc.
Parameters:
rawBlock - zserializowany blok.
Throws:
BlockFormatException - podnoszony, jesli podana tablica nie zawiera bloku danych.
Method Detail

toByteArray

public byte[] toByteArray()
Serializuje blok, w celu zapisania go na dysku.
Returns:
zserializowany blok.

setFile

public void setFile(short file)
Ustawia identyfikator pliku danych, do ktorego nalezy blok.
Parameters:
file - numer pliku.

getFile

public short getFile()
Zwraca identyfikator pliku danych, do ktorego nalezy blok.
Returns:
numer pliku danych.

setBlock

public void setBlock(short block)
Ustawia numer bloku w ramach pliku danych, do ktorego nalezy blok.
Parameters:
block - numer bloku w pliku.

getBlock

public short getBlock()
Zwraca numer bloku w ramach pliku danych, do ktorego nalezy blok.
Returns:
numer bloku w pliku.

getSize

public short getSize()
Zwraca wielkosc bloku (suma wszystkich sekcji).
Returns:
wielkosc bloku.

getFreeSpaceSectionSize

public short getFreeSpaceSectionSize()
Zwraca wielkosc dostepnej wolnej przestrzeni w ramach bloku, jako rozmiar sekcji pustej.
Returns:
wielkosc wolnej przestrzeni.

getDataSectionSize

public short getDataSectionSize()
Zwraca wielkosc zapisanej przestrzeni w ramach bloku, jako rozmiar sekcji danych.
Returns:
wielkosc sekcji danych.

createRecord

public short createRecord(byte[] record,
                          int type)
                   throws SectionBoundsException,
                          NoSuchRecordException
Tworzy rekord.
Parameters:
record - tresc rekordu jako ciag bajtow.
type - czy rekord posiada dalszy ciag w innym bloku.
Returns:
numer slotu.

getRecord

public byte[] getRecord(short slot)
                 throws SectionBoundsException,
                        NoSuchRecordException
Zwraca rekord identyfikowany podanym slotem.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.
Returns:
tresc rekordu.

updateRecord

public void updateRecord(short slot,
                         byte[] record,
                         boolean complex)
                  throws SectionBoundsException,
                         NoSuchRecordException
Aktualizuje rekord identyfikowany podanym slotem. Operacja ta polega na usunieciu danych (i wypelnieniu powstalej ewentualnie dziury + aktualizacja slotow na nowe wartosci) oraz wprowadzeniu nowych danych + aktualizacja wartosci slotu modyfikowanego rekordu.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.
record - nowa tresc rekordu.
complex - czy rekord ma dalszy ciag w innym bloku.

deleteRecord

public void deleteRecord(short slot)
                  throws SectionBoundsException,
                         NoSuchRecordException
Usuwa rekord identyfikowany podanym slotem.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.

isChainedRecord

public boolean isChainedRecord(short slot)
                        throws SectionBoundsException,
                               NoSuchRecordException
Sprawdza, czy dany rekord jest lancuchowany, czyli czy zawiera dalszy ciag w innym bloku. Jesli rekord jest lancuchowany, wowczas bezposrednio za nim wystepuje identyfikator kolejnego rekordu.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.

setNextPart

public void setNextPart(short slot,
                        RecordPointer ptr)
                 throws NoSuchRecordException,
                        SectionBoundsException
Ustawia wskaznik kolejnego rekordu dla danego rekordu lancuchowanego.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.
ptr - wskaznik do nastepnego rekordu.

getNextPart

public RecordPointer getNextPart(short slot)
                          throws NoSuchRecordException,
                                 SectionBoundsException
Zwraca wskaznik kolejnego rekordu dla danego rekordu lancuchowanego.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.
Returns:
wskaznik do kolejnego rekordu.

getRecordLength

public short getRecordLength(short slot)
                      throws NoSuchRecordException,
                             SectionBoundsException
Zwraca dlugosc rekordu.
Parameters:
slot - numer slotu przypisanego danemu rekordowi.
Returns:
dlugosc rekordu.