import java.util.BitSet;
import java.util.Collections;
import java.util.List;
+import java.util.regex.PatternSyntaxException;
/**
* Data class holding the selected columns and hidden column ranges for a view.
*/
IntList()
{
- order = new ArrayList<Integer>();
+ order = new ArrayList<>();
_uorder = Collections.unmodifiableList(order);
selected = new BitSet();
}
void remove(int col)
{
- Integer colInt = new Integer(col);
+ Integer colInt = Integer.valueOf(col);
if (selected.get(col))
{
// clear shifted bits and update List of selected columns
selected.clear(temp);
mask.set(temp - change);
- order.set(i, new Integer(temp - change));
+ order.set(i, Integer.valueOf(temp - change));
}
}
// lastly update the bitfield all at once
*/
List<int[]> getRanges()
{
- List<int[]> rlist = new ArrayList<int[]>();
+ List<int[]> rlist = new ArrayList<>();
if (selected.isEmpty())
{
return rlist;
}
}
- IntList selection = new IntList();
+ private IntList selection = new IntList();
/**
* Add a column to the selection
Integer colInt;
for (int i = start; i < end; i++)
{
- colInt = new Integer(i);
+ colInt = Integer.valueOf(i);
if (selection.contains(colInt))
{
selection.remove(colInt);
}
-
/**
* Hides the specified column and any adjacent selected columns
*
hidden.hideColumns(min, max);
}
-
-
-
-
/**
* Copy constructor
*
{
}
-
-
-
-
-
/**
* Invert the column selection from first to end-1. leaves hiddenColumns
* untouched (and unselected)
}
}
-
/**
*
* @return true if there are columns marked
return (selection != null && selection.size() > 0);
}
-
-
- public boolean filterAnnotations(Annotation[] annotations,
+ /**
+ * Selects columns where the given annotation matches the provided filter
+ * condition(s). Any existing column selections are first cleared. Answers the
+ * number of columns added.
+ *
+ * @param annotations
+ * @param filterParams
+ * @return
+ */
+ public int filterAnnotations(Annotation[] annotations,
AnnotationFilterParameter filterParams)
{
// JBPNote - this method needs to be refactored to become independent of
// viewmodel package
this.clear();
- int count = 0;
+ int addedCount = 0;
+ int column = 0;
do
{
- if (annotations[count] != null)
+ Annotation ann = annotations[column];
+ if (ann != null)
{
-
- boolean itemMatched = false;
-
- if (filterParams.getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD
- && annotations[count].value >= filterParams
- .getThresholdValue())
+ boolean matched = false;
+
+ /*
+ * filter may have multiple conditions -
+ * these are or'd until a match is found
+ */
+ if (filterParams
+ .getThresholdType() == AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD
+ && ann.value > filterParams.getThresholdValue())
{
- itemMatched = true;
+ matched = true;
}
- if (filterParams.getThresholdType() == AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD
- && annotations[count].value <= filterParams
- .getThresholdValue())
+
+ if (!matched && filterParams
+ .getThresholdType() == AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD
+ && ann.value < filterParams.getThresholdValue())
{
- itemMatched = true;
+ matched = true;
}
- if (filterParams.isFilterAlphaHelix()
- && annotations[count].secondaryStructure == 'H')
+ if (!matched && filterParams.isFilterAlphaHelix()
+ && ann.secondaryStructure == 'H')
{
- itemMatched = true;
+ matched = true;
}
- if (filterParams.isFilterBetaSheet()
- && annotations[count].secondaryStructure == 'E')
+ if (!matched && filterParams.isFilterBetaSheet()
+ && ann.secondaryStructure == 'E')
{
- itemMatched = true;
+ matched = true;
}
- if (filterParams.isFilterTurn()
- && annotations[count].secondaryStructure == 'S')
+ if (!matched && filterParams.isFilterTurn()
+ && ann.secondaryStructure == 'S')
{
- itemMatched = true;
+ matched = true;
}
String regexSearchString = filterParams.getRegexString();
- if (regexSearchString != null
- && !filterParams.getRegexSearchFields().isEmpty())
+ if (!matched && regexSearchString != null)
{
List<SearchableAnnotationField> fields = filterParams
.getRegexSearchFields();
- try
+ for (SearchableAnnotationField field : fields)
{
- if (fields.contains(SearchableAnnotationField.DISPLAY_STRING)
- && annotations[count].displayCharacter
- .matches(regexSearchString))
+ String compareTo = field == SearchableAnnotationField.DISPLAY_STRING
+ ? ann.displayCharacter // match 'Label'
+ : ann.description; // and/or 'Description'
+ if (compareTo != null)
{
- itemMatched = true;
- }
- } catch (java.util.regex.PatternSyntaxException pse)
- {
- if (annotations[count].displayCharacter
- .equals(regexSearchString))
- {
- itemMatched = true;
+ try
+ {
+ if (compareTo.matches(regexSearchString))
+ {
+ matched = true;
+ }
+ } catch (PatternSyntaxException pse)
+ {
+ if (compareTo.equals(regexSearchString))
+ {
+ matched = true;
+ }
+ }
+ if (matched)
+ {
+ break;
+ }
}
}
- if (fields.contains(SearchableAnnotationField.DESCRIPTION)
- && annotations[count].description != null
- && annotations[count].description
- .matches(regexSearchString))
- {
- itemMatched = true;
- }
}
- if (itemMatched)
+ if (matched)
{
- this.addElement(count);
+ this.addElement(column);
+ addedCount++;
}
}
- count++;
- } while (count < annotations.length);
- return false;
+ column++;
+ } while (column < annotations.length);
+
+ return addedCount;
}
/**
*
* @return
*/
- public boolean markColumns(BitSet markedColumns, int startCol,
- int endCol, boolean invert, boolean extendCurrent, boolean toggle)
+ public boolean markColumns(BitSet markedColumns, int startCol, int endCol,
+ boolean invert, boolean extendCurrent, boolean toggle)
{
boolean changed = false;
if (!extendCurrent && !toggle)