package aliview.sequenceold; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.ListIterator; import org.bitbucket.kienerj.io.OptimizedRandomAccessFile; import aliview.importer.FileFormat; import aliview.sequences.FileSequence; import aliview.sequences.Sequence; public class OldFileSequenceList implements List<Sequence>{ private FileFormat fileFormat; private File aliFile; private int estimatedSize; private SequenceCache seqCache = new SequenceCache(1000); public OldFileSequenceList(File aliFile) { this.aliFile = aliFile; try { createFileSequences(0,1000,2000); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void createFileSequences(int firstIndex, int lastIndex, int seqLength) throws IOException { OptimizedRandomAccessFile raf = new OptimizedRandomAccessFile(aliFile, "r"); List<FileSequence> seqs = findSequencesInFile(raf); estimatedSize = seqs.size(); for(int n = 0; n < seqs.size(); n++){ seqCache.put( new Integer(n) ,seqs.get(n) ); } } private ArrayList<FileSequence> findSequencesInFile(OptimizedRandomAccessFile raf) throws IOException{ long startTime = System.currentTimeMillis(); ArrayList<FileSequence> allSeqs = new ArrayList<FileSequence>(); String line = ""; long nSeqCount = 0; byte[] buffer = new byte[100]; long startPos = 0; // StringBuilder name = new StringBuilder(); boolean bytesUntilNextLFAreName = false; FileSequence sequence = null; while ((raf.read(buffer)) > 0) { long filePoint = raf.getFilePointer(); boolean findNextLF = false; int n = 0; while(n<buffer.length){ //System.out.println("buffer[n]" + buffer[n]); // Find name start if(buffer[n] == '>'){ startPos = filePoint - n; // save last seq and start a new one if(sequence != null){ // sequence.addName(name.toString()); // name = new StringBuilder('>'); bytesUntilNextLFAreName = true; // sequence.setNextSeqStartPos(startPos); // allSeqs.add(sequence); } // sequence = new FileSequence(raf, startPos); //raf.seek(filePoint + 48000 *10); //n = 100000; } if(buffer[n] == '\n'){ raf.seek(filePoint + 48000); nSeqCount ++; if(nSeqCount % 1000 == 1){ //System.out.println("n" + n); System.out.println("nSeqCount" + nSeqCount); System.out.println("raf.getFilePointer()" + raf.getFilePointer()); } n = 100000; } if(bytesUntilNextLFAreName){ // name.append((char) buffer[n]); } n++; } // System.out.println("nSeqCount" + nSeqCount); // System.out.println("raf.getFilePointer()" + raf.getFilePointer()); } // Skip adding the last seq for now //long endPos = raf.length(); //sequence.addNextSeqStartPos(startPos); long endTime = System.currentTimeMillis(); System.out.println("reading sequences took " + (endTime - startTime) + " milliseconds"); return allSeqs; } public byte getByteInFile(int pos) { // byte[] val = new byte[1]; // mappedBuff.read(val,pos,1); return 66; } public int size() { return estimatedSize; } public boolean isEmpty() { // TODO Auto-generated method stub return false; } public boolean contains(Object o) { // TODO Auto-generated method stub return false; } public Iterator<Sequence> iterator() { // TODO Auto-generated method stub return null; } public Object[] toArray() { // TODO Auto-generated method stub return null; } public <T> T[] toArray(T[] a) { // TODO Auto-generated method stub return null; } public boolean add(Sequence e) { // TODO Auto-generated method stub return false; } public boolean remove(Object o) { // TODO Auto-generated method stub return false; } public boolean containsAll(Collection<?> c) { // TODO Auto-generated method stub return false; } public boolean addAll(Collection<? extends Sequence> c) { return false; } public boolean addAll(int index, Collection<? extends Sequence> c) { // TODO Auto-generated method stub return false; } public boolean removeAll(Collection<?> c) { // TODO Auto-generated method stub return false; } public boolean retainAll(Collection<?> c) { // TODO Auto-generated method stub return false; } public void clear() { // TODO Auto-generated method stub } public Sequence get(int index) { return seqCache.get(new Integer(index)); } public Sequence set(int index, Sequence element) { // TODO Auto-generated method stub return null; } public void add(int index, Sequence element) { // TODO Auto-generated method stub } public Sequence remove(int index) { // TODO Auto-generated method stub return null; } public int indexOf(Object o) { // TODO Auto-generated method stub return 0; } public int lastIndexOf(Object o) { // TODO Auto-generated method stub return 0; } public ListIterator<Sequence> listIterator() { // TODO Auto-generated method stub return null; } public ListIterator<Sequence> listIterator(int index) { // TODO Auto-generated method stub return null; } public List<Sequence> subList(int fromIndex, int toIndex) { // TODO Auto-generated method stub return null; } private class SequenceCache extends LinkedHashMap<Integer,Sequence> { private int cacheSize; public SequenceCache (int size) { cacheSize = size; } /* protected boolean removeEldestEntry(Entry<Integer, Record> eldest) { if (size() > ldcSize) { // Release some memory eldest.getValue().columnData = null; return true; } return false; } */ } }