X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationRowFilter.java;h=ed59ef60188711fd1fd5442fd04112ccc88d1705;hb=c03d2649512cdc491a46dda1d1370273241b5253;hp=9e205c42dad3be6a4a5059d71b8cf597cb2b0513;hpb=ead72caff9aef9b7103dbb15907aeae777200832;p=jalview.git diff --git a/src/jalview/gui/AnnotationRowFilter.java b/src/jalview/gui/AnnotationRowFilter.java index 9e205c4..ed59ef6 100644 --- a/src/jalview/gui/AnnotationRowFilter.java +++ b/src/jalview/gui/AnnotationRowFilter.java @@ -3,6 +3,8 @@ package jalview.gui; import jalview.api.AnnotationRowFilterI; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; +import jalview.datamodel.AnnotationFilterParameter; +import jalview.datamodel.AnnotationFilterParameter.SearchableAnnotationField; import jalview.datamodel.ColumnSelection; import jalview.datamodel.GraphLine; import jalview.datamodel.SequenceGroup; @@ -12,6 +14,7 @@ import jalview.util.MessageManager; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.List; import java.util.Vector; import javax.swing.JCheckBox; @@ -156,7 +159,6 @@ public abstract class AnnotationRowFilter extends JPanel implements } } } - // seqAssociated.setEnabled(enableSeqAss); this.annmap = new int[list.size()]; System.arraycopy(anmap, 0, this.annmap, 0, this.annmap.length); return list; @@ -364,76 +366,87 @@ public abstract class AnnotationRowFilter extends JPanel implements return false; } - protected boolean markColumnsContaining( - AlignmentAnnotation currentAnnotation, int thresholdComparisonType) + protected boolean filterAnnotations(Annotation[] annotations, + AnnotationFilterParameter filterParams, ColumnSelection cs) { - try + av.showAllHiddenColumns(); + cs.clear(); + int count = 0; + do { - if (currentAnnotation != null) + if (annotations[count] != null) { - Annotation[] annotations = currentAnnotation.annotations; - ColumnSelection cs = av.getColumnSelection(); - cs.clear(); - if (thresholdComparisonType == AnnotationColourGradient.NO_THRESHOLD) + + boolean itemMatched = false; + + if (filterParams.getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD + && annotations[count].value > currentAnnotation.threshold.value) { - int count = 0; - do - { - if (annotations[count] != null) - { - if (currentAnnotation.label.equals("Secondary Structure") - && annotations[count].secondaryStructure != ' ') - { - cs.addElement(count); - } - else if (currentAnnotation.label - .equals("Iron Sulphur Contacts")) - { - cs.addElement(count); - } - else if (annotations[count].value != 0.0) - { - cs.addElement(count); - } + itemMatched = true; + } + if (filterParams.getThresholdType() == AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD + && annotations[count].value < currentAnnotation.threshold.value) + { + itemMatched = true; + } - } - count++; - } while (count < annotations.length); + if (filterParams.isFilterAlphaHelix() + && annotations[count].secondaryStructure == 'H') + { + itemMatched = true; } - else + + if (filterParams.isFilterBetaSheet() + && annotations[count].secondaryStructure == 'E') + { + itemMatched = true; + } + + if (filterParams.isFilterTurn() + && annotations[count].secondaryStructure == 'S') { - int count = 0; - do + itemMatched = true; + } + + String regexSearchString = filterParams.getRegexString(); + if (regexSearchString != null + && !filterParams.getRegexSearchFields().isEmpty()) + { + List fields = filterParams + .getRegexSearchFields(); + try { - if (annotations[count] != null) + if (fields.contains(SearchableAnnotationField.DISPLAY_STRING) + && annotations[count].displayCharacter + .matches(regexSearchString)) { - if (thresholdComparisonType == AnnotationColourGradient.ABOVE_THRESHOLD) - { - if (annotations[count].value > currentAnnotation.threshold.value) - { - cs.addElement(count); - } - } - else if (thresholdComparisonType == AnnotationColourGradient.BELOW_THRESHOLD) - { - if (annotations[count].value < currentAnnotation.threshold.value) - { - cs.addElement(count); - } - } - + itemMatched = true; } - count++; - } while (count < annotations.length); + } catch (java.util.regex.PatternSyntaxException pse) + { + if (annotations[count].displayCharacter + .equals(regexSearchString)) + { + itemMatched = true; + } + } + if (fields.contains(SearchableAnnotationField.DESCRIPTION) + && annotations[count].description != null + && annotations[count].description + .matches(regexSearchString)) + { + itemMatched = true; + } } - } - return true; - } catch (Exception e) - { - e.printStackTrace(); - return false; - } + if (itemMatched) + { + cs.addElement(count); + } + } + count++; + } while (count < annotations.length); + return false; } public jalview.datamodel.AlignmentAnnotation getCurrentAnnotation()