1 18 package org.apache.activemq.kaha.impl.index; 19 20 import java.io.IOException ; 21 import java.io.RandomAccessFile ; 22 23 import org.apache.activemq.kaha.impl.DataManager; 24 import org.apache.activemq.util.DataByteArrayOutputStream; 25 30 class StoreIndexWriter{ 31 32 protected final DataByteArrayOutputStream dataOut = new DataByteArrayOutputStream(); 33 protected final RandomAccessFile file; 34 protected final String name; 35 protected final DataManager redoLog; 36 37 42 StoreIndexWriter(RandomAccessFile file){ 43 this(file, null, null); 44 } 45 46 public StoreIndexWriter(RandomAccessFile file, String indexName, DataManager redoLog) { 47 this.file=file; 48 this.name = indexName; 49 this.redoLog = redoLog; 50 } 51 52 void storeItem(IndexItem indexItem) throws IOException { 53 54 if( redoLog!=null ) { 55 RedoStoreIndexItem redo = new RedoStoreIndexItem(name, indexItem.getOffset(), indexItem); 56 redoLog.storeRedoItem(redo); 57 } 58 59 dataOut.reset(); 60 indexItem.write(dataOut); 61 file.seek(indexItem.getOffset()); 62 file.write(dataOut.getData(),0,IndexItem.INDEX_SIZE); 63 } 64 65 void updateIndexes(IndexItem indexItem) throws IOException { 66 if( redoLog!=null ) { 67 RedoStoreIndexItem redo = new RedoStoreIndexItem(name, indexItem.getOffset(), indexItem); 68 redoLog.storeRedoItem(redo); 69 } 70 71 dataOut.reset(); 72 indexItem.updateIndexes(dataOut); 73 file.seek(indexItem.getOffset()); 74 file.write(dataOut.getData(),0,IndexItem.INDEXES_ONLY_SIZE); 75 } 76 77 public void redoStoreItem(RedoStoreIndexItem redo) throws IOException { 78 dataOut.reset(); 79 redo.getIndexItem().write(dataOut); 80 file.seek(redo.getOffset()); 81 file.write(dataOut.getData(),0,IndexItem.INDEX_SIZE); 82 } 83 84 } 85 | Popular Tags |