package aliview.sequencelist; import java.io.File; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import aliview.AliView; import aliview.alignment.AAHistogram; import aliview.alignment.AliHistogram; import aliview.alignment.NucleotideHistogram; import aliview.importer.FileFormat; import aliview.messenges.Messenger; import aliview.sequences.FileSequence; import aliview.sequences.Sequence; import aliview.sequences.SequenceUtils; import aliview.settings.Settings; public class FileSequenceAlignmentListModel extends AlignmentListModel{ private static final Logger logger = Logger.getLogger(FileSequenceAlignmentListModel.class); private static final String LF = System.getProperty("line.separator"); private List<FileSequenceLoadListener> fileSeqLoadListeners = new ArrayList<FileSequenceLoadListener>(); public FileSequenceAlignmentListModel(File alignmentFile, FileFormat foundFormat) throws IOException { super(new CopyOnWriteArrayList<Sequence>(), foundFormat); MemoryMappedSequencesFile sequencesFile = new MemoryMappedSequencesFile(alignmentFile, foundFormat); sequencesFile.indexFileAndAddSequencesToAlignmentModel(this); } public void writeSelectionAsFasta(Writer out) { //if(getSelectionSize()*3 > MemoryUtils.getMaxMem()){ if(getSelectionSize() > 200000000){ //AliView.showUserMessage("Selection is to big to Copy with current Java Memory setting"); Messenger.showOKOnlyMessage(Messenger.TO_BIG_SELECTION_FOR_COPY); logger.info("getSelectionSize" + getSelectionSize()); } else{ int n = 0; for(Sequence sequence : this.delegateSequences){ if(sequence.hasSelection()){ String tempSeq = sequence.getSelectedBasesAsString(); try { //TODO maybe format fasta better out.append(">"); out.append(sequence.getName()); out.append(LF); out.append(sequence.getSelectedBasesAsString()); out.append(LF); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } logger.info("WroteSeq=" + n); n++; } } } logger.info("Write done"); } public boolean isEditable(){ return false; } public void addMoreFileSequences(List<Sequence> moreSeqs, boolean setSelected) { super.addAll(moreSeqs, setSelected); } @Override public AliHistogram getHistogram() { long startTime = System.currentTimeMillis(); AliHistogram histogram = null; if(sequenceType == SequenceUtils.TYPE_AMINO_ACID){ histogram = new AAHistogram(getLongestSequenceLength()); }else{ histogram = new NucleotideHistogram(getLongestSequenceLength()); } // only do MAX_HISTOGRAM_SEQUENCES int counter = 0; for(Sequence seq: delegateSequences){ if(counter > Settings.getMaxFileHistogramSequences().getIntValue()){ break; } if(sequenceType == SequenceUtils.TYPE_AMINO_ACID){ histogram.addSequence(seq); }else{ histogram.addSequence(seq); } counter++; } long endTime = System.currentTimeMillis(); logger.info("Create histogram took " + (endTime - startTime) + " milliseconds"); return histogram; } /* public void addAll(List<Sequence> moreSeqs, boolean setSelected) { for(Sequence seq: moreSeqs){ seq.setAlignmentModel(this); } logger.info("added all"); delegateSequences.addAll(moreSeqs); if(setSelected){ //getSeleselectionModel.setSequenceSelection(moreSeqs); } } */ // Skip padding if filesequences public boolean rightPadWithGapUntilEqualLength(){ return false; } // Skip padding if filesequences public boolean leftPadWithGapUntilEqualLength() { return false; } // Skip trimming if filesequences public boolean rightTrimSequencesRemoveGapsUntilEqualLength(){ return false; } // Skip delete if filesequences public void deleteBasesInAllSequencesFromMask(boolean[] deleteMask) { return; } }