jpayne@68: package gff; jpayne@68: jpayne@68: import java.util.ArrayList; jpayne@68: import java.util.Arrays; jpayne@68: jpayne@68: import fileIO.ByteStreamWriter; jpayne@68: import shared.Shared; jpayne@68: import shared.Tools; jpayne@68: import structures.ByteBuilder; jpayne@68: jpayne@68: public class GbffFeature { jpayne@68: jpayne@68: public GbffFeature(final ArrayList lines0, final String typeString, final String accessionString){ jpayne@68: accession=accessionString; jpayne@68: setType(typeString); jpayne@68: parseSlow(lines0); jpayne@68: if(type==rRNA){ jpayne@68: setSubtype(); jpayne@68: } jpayne@68: if(stop lines0){ jpayne@68: ArrayList lines=fixLines(lines0); jpayne@68: parseStartStop(lines.get(0)); jpayne@68: for(int i=1; i fixLines(ArrayList lines){ jpayne@68: ArrayList fixed=new ArrayList(); jpayne@68: ByteBuilder bb=new ByteBuilder(); jpayne@68: for(byte[] line : lines){ jpayne@68: if(bb.length()>0 && line[21]=='/'){ jpayne@68: fixed.add(bb.toBytes()); jpayne@68: bb.clear(); jpayne@68: } jpayne@68: append(bb, line); jpayne@68: } jpayne@68: if(bb.length()>0){ jpayne@68: fixed.add(bb.toBytes()); jpayne@68: bb.clear(); jpayne@68: } jpayne@68: return fixed; jpayne@68: } jpayne@68: jpayne@68: void append(ByteBuilder bb, byte[] line){ jpayne@68: assert(line[20]==' '); jpayne@68: assert(line.length>21); jpayne@68: // assert(line[21]!=' ') : "'"+new String(line)+"'"; jpayne@68: if(line[21]=='/'){ jpayne@68: bb.append(line, 22, line.length-22); jpayne@68: }else{ jpayne@68: // System.err.println(line.length+", "+21+", "+(line.length-21+1)+"\n'"+new String(line)+"'"); jpayne@68: if(bb.length>0){bb.append(' ');} jpayne@68: bb.append(line, 21, line.length-21); jpayne@68: } jpayne@68: } jpayne@68: jpayne@68: void setType(String typeString){ jpayne@68: int x=Tools.find(typeString, typeStrings); jpayne@68: assert(x>=0) : x+", "+typeString; jpayne@68: type=x; jpayne@68: } jpayne@68: jpayne@68: void parseStartStop(final byte[] line0){ jpayne@68: byte[] line=line0; jpayne@68: jpayne@68: if(line[0]=='c'){ jpayne@68: assert(Tools.startsWith(line, "complement(")); jpayne@68: line=Arrays.copyOfRange(line, 11, line.length-1); jpayne@68: strand=Shared.MINUS; jpayne@68: } jpayne@68: if(line[0]=='j'){ jpayne@68: assert(Tools.startsWith(line, "join(")); jpayne@68: line=Arrays.copyOfRange(line, 5, line.length-1); jpayne@68: strand=Shared.MINUS; jpayne@68: } jpayne@68: jpayne@68: int i=0; jpayne@68: for(start=0; i