Skip to content

Commit

Permalink
GH-67 Filter by visibility (#68)
Browse files Browse the repository at this point in the history
*  Allows filtering by private/public visibility
  • Loading branch information
gtache authored May 13, 2020
1 parent 1637d75 commit 09efacd
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public class FindMarkupAnnotationTask extends AbstractTask<Void, Object> {
private MarkupAnnotationPanel.SortColumn sortType;
private MarkupAnnotationPanel.FilterSubTypeColumn filterType;
private MarkupAnnotationPanel.FilterAuthorColumn filterAuthor;
private MarkupAnnotationPanel.FilterVisibilityColumn filterVisibility;
private Color filterColor;
private boolean isRegex;
private boolean isCaseSensitive;
Expand Down Expand Up @@ -102,6 +103,7 @@ private FindMarkupAnnotationTask(Builder builder) {
this.filterType = builder.filterType;
this.filterAuthor = builder.filterAuthor;
this.filterColor = builder.filterColor;
this.filterVisibility = builder.filterVisibility;
this.isRegex = builder.isRegex;
this.isCaseSensitive = builder.isCaseSensitive;

Expand Down Expand Up @@ -176,6 +178,15 @@ protected Void doInBackground() {
filter = true;
}
}
if (MarkupAnnotationPanel.PRIVATE_PROPERTY_ENABLED &&
filterVisibility != MarkupAnnotationPanel.FilterVisibilityColumn.ALL) {
if ((markupAnnotation.getFlagPrivateContents()
&& filterVisibility == MarkupAnnotationPanel.FilterVisibilityColumn.PUBLIC)
|| (!markupAnnotation.getFlagPrivateContents()
&& filterVisibility == MarkupAnnotationPanel.FilterVisibilityColumn.PRIVATE)) {
filter = true;
}
}
// app search regex
if (isRegex && searchPattern != null) {
Matcher matcher = searchPattern.matcher(
Expand Down Expand Up @@ -375,6 +386,7 @@ public static class Builder {
private MarkupAnnotationPanel.SortColumn sortType;
private MarkupAnnotationPanel.FilterSubTypeColumn filterType;
private MarkupAnnotationPanel.FilterAuthorColumn filterAuthor;
private MarkupAnnotationPanel.FilterVisibilityColumn filterVisibility;
private Color filterColor;
private boolean isRegex;
private boolean isCaseSensitive;
Expand Down Expand Up @@ -407,6 +419,11 @@ Builder setFilterAuthor(MarkupAnnotationPanel.FilterAuthorColumn filterAuthor) {
return this;
}

Builder setFilterVisibility(MarkupAnnotationPanel.FilterVisibilityColumn filterVisibility) {
this.filterVisibility = filterVisibility;
return this;
}

Builder setFilterColor(Color filterColor) {
this.filterColor = filterColor;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public class MarkupAnnotationHandlerPanel extends AbstractWorkerPanel
private MarkupAnnotationPanel.SortColumn sortType;
private MarkupAnnotationPanel.FilterSubTypeColumn filterType;
private MarkupAnnotationPanel.FilterAuthorColumn filterAuthor;
private MarkupAnnotationPanel.FilterVisibilityColumn filterVisibility;
private Color filterColor;
private boolean isRegex;
private boolean isCaseSensitive;
Expand Down Expand Up @@ -198,13 +199,15 @@ private AnnotationTreeNode findAnnotationTreeNode(TreeNode treeNode, MarkupAnnot
public void sortAndFilterAnnotationData(Pattern searchPattern, MarkupAnnotationPanel.SortColumn sortType,
MarkupAnnotationPanel.FilterSubTypeColumn filterType,
MarkupAnnotationPanel.FilterAuthorColumn filterAuthor,
MarkupAnnotationPanel.FilterVisibilityColumn filterVisibility,
Color filterColor,
boolean isRegex,
boolean isCaseSensitive) {
this.searchPattern = searchPattern;
this.sortType = sortType;
this.filterType = filterType;
this.filterAuthor = filterAuthor;
this.filterVisibility = filterVisibility;
this.filterColor = filterColor;
this.isRegex = isRegex;
this.isCaseSensitive = isCaseSensitive;
Expand Down Expand Up @@ -280,6 +283,7 @@ protected void buildWorkerTaskUI() {
.setSortType(sortType)
.setFilterType(filterType)
.setFilterAuthor(filterAuthor)
.setFilterVisibility(filterVisibility)
.setFilterColor(filterColor)
.setRegex(isRegex)
.setCaseSensitive(isCaseSensitive).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ public class MarkupAnnotationPanel extends JPanel implements ActionListener, Pro
"org.icepdf.core.page.annotation.privateProperty.enabled", false);
}

public String COLUMN_PROPERTY = "Column";
public static final String COLUMN_PROPERTY = "Column";

public enum SortColumn {PAGE, AUTHOR, DATE, TYPE, COLOR}
public enum SortColumn {PAGE, AUTHOR, DATE, TYPE, COLOR, VISIBILITY}

public enum FilterAuthorColumn {
ALL, AUTHOR_CURRENT, AUTHOR_OTHER,
Expand All @@ -75,6 +75,10 @@ public enum FilterAuthorColumn {
public enum FilterSubTypeColumn {
ALL, TEXT, HIGHLIGHT, STRIKEOUT, UNDERLINE, LINE, SQUARE, CIRCLE, INK, FREETEXT
}
public enum FilterVisibilityColumn {
ALL, PRIVATE, PUBLIC
}


// layouts constraint
protected GridBagConstraints constraints;
Expand All @@ -97,6 +101,8 @@ public enum FilterSubTypeColumn {
private Action sortAction;
private ArrayList<Action> filterAuthorActions;
private Action filterAuthorAction;
private ArrayList<Action> filterVisibilityActions;
private Action filterVisibilityAction;
private ArrayList<Action> filterTypeActions;
private Action filterTypeAction;
private Action filterColorAction;
Expand Down Expand Up @@ -139,6 +145,14 @@ public MarkupAnnotationPanel(SwingController controller) {
"viewer.utilityPane.markupAnnotation.toolbar.filter.option.byAuthor.current.label"), FilterAuthorColumn.AUTHOR_CURRENT));
filterAuthorActions.add(new FilterAuthorAction(messageBundle.getString(
"viewer.utilityPane.markupAnnotation.toolbar.filter.option.byAuthor.others.label"), FilterAuthorColumn.AUTHOR_OTHER));
// assemble filter by visibility
filterVisibilityActions = new ArrayList<>(3);
filterVisibilityActions.add(new FilterVisibilityAction(messageBundle.getString(
"viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.all.label"), FilterVisibilityColumn.ALL));
filterVisibilityActions.add(new FilterVisibilityAction(messageBundle.getString(
"viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.public.label"), FilterVisibilityColumn.PUBLIC));
filterVisibilityActions.add(new FilterVisibilityAction(messageBundle.getString(
"viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.private.label"), FilterVisibilityColumn.PRIVATE));
// assemble filter by type
filterTypeActions = new ArrayList<>(10);
filterTypeActions.add(new FilterTypeAction(messageBundle.getString(
Expand Down Expand Up @@ -397,6 +411,14 @@ protected void buildSortFilterToolBar() {
defaultColumn = preferences.get(ViewerPropertiesManager.PROPERTY_ANNOTATION_FILTER_AUTHOR_COLUMN, FilterAuthorColumn.ALL.toString());
filterAuthorAction = buildMenuItemGroup(authorFilterMenuItem, filterAuthorActions, defaultColumn, filterAuthorAction);

// build out visibility submenu, all, public, private
JMenu visibilityMenuItem = new JMenu(
messageBundle.getString("viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.label"));
defaultColumn = preferences.get(
ViewerPropertiesManager.PROPERTY_ANNOTATION_FILTER_VISIBILITY_COLUMN, FilterVisibilityColumn.ALL.toString());
filterVisibilityAction = buildMenuItemGroup(
visibilityMenuItem, filterVisibilityActions, defaultColumn, filterVisibilityAction);

// build out markup annotation types.
defaultColumn = preferences.get(ViewerPropertiesManager.PROPERTY_ANNOTATION_FILTER_TYPE_COLUMN, FilterSubTypeColumn.ALL.toString());
filterTypeAction = buildMenuItemGroup(typeFilterMenuItem, filterTypeActions, defaultColumn, filterTypeAction);
Expand All @@ -423,6 +445,9 @@ protected void buildSortFilterToolBar() {
filterDropDownButton.add(authorFilterMenuItem);
filterDropDownButton.add(colorFilterMenuItem);
filterDropDownButton.add(typeFilterMenuItem);
if (PRIVATE_PROPERTY_ENABLED) {
filterDropDownButton.add(visibilityMenuItem);
}
filterDropDownButton.addSeparator();
filterDropDownButton.add(regexMenuItem);
filterDropDownButton.add(caseSensitiveMenutItem);
Expand Down Expand Up @@ -546,7 +571,7 @@ protected void sortAndFilterAnnotationData() {
FilterSubTypeColumn filterType = (FilterSubTypeColumn) filterTypeAction.getValue(COLUMN_PROPERTY);
FilterAuthorColumn filterAuthor = (FilterAuthorColumn) filterAuthorAction.getValue(COLUMN_PROPERTY);
Color filterColor = (Color) filterColorAction.getValue(COLUMN_PROPERTY);

FilterVisibilityColumn filterVisibility = (FilterVisibilityColumn) filterVisibilityAction.getValue(COLUMN_PROPERTY);
if (!filterAuthor.equals(FilterAuthorColumn.ALL) ||
!filterType.equals(FilterSubTypeColumn.ALL) ||
filterColor != null) {
Expand All @@ -565,7 +590,7 @@ protected void sortAndFilterAnnotationData() {
}

markupAnnotationHandlerPanel.sortAndFilterAnnotationData(
searchPattern, sortType, filterType, filterAuthor, filterColor,
searchPattern, sortType, filterType, filterAuthor, filterVisibility, filterColor,
regexMenuItem.isSelected(), caseSensitive);
}

Expand Down Expand Up @@ -671,6 +696,20 @@ public void actionPerformed(ActionEvent ae) {
}
}

class FilterVisibilityAction extends AbstractAction {

public FilterVisibilityAction(String label, FilterVisibilityColumn column) {
this.putValue(Action.NAME, label);
this.putValue(COLUMN_PROPERTY, column);
}

public void actionPerformed(ActionEvent ae) {
filterVisibilityAction = this;
preferences.put(ViewerPropertiesManager.PROPERTY_ANNOTATION_FILTER_VISIBILITY_COLUMN, getValue(COLUMN_PROPERTY).toString());
sortAndFilterAnnotationData();
}
}

public class FilterColorAction extends AbstractAction {

public FilterColorAction(String label, Color color) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ public final class ViewerPropertiesManager {
// store of sort, filter and quick colour markup annotation utility pane persisted values.
public static final String PROPERTY_ANNOTATION_SORT_COLUMN = "application.viewer.utility.annotation.sort.column";
public static final String PROPERTY_ANNOTATION_FILTER_AUTHOR_COLUMN = "application.viewer.utility.annotation.filter.author.column";
public static final String PROPERTY_ANNOTATION_FILTER_VISIBILITY_COLUMN = "application.viewer.utility.annotation.filter.visibility.column";
public static final String PROPERTY_ANNOTATION_FILTER_TYPE_COLUMN = "application.viewer.utility.annotation.filter.type.column";
public static final String PROPERTY_ANNOTATION_FILTER_COLOR_COLUMN = "application.viewer.utility.annotation.filter.color.column";
public static final String PROPERTY_ANNOTATION_QUICK_COLOR = "application.viewer.utility.annotation.filter.quick.color";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -878,6 +878,10 @@ viewer.utilityPane.markupAnnotation.toolbar.sort.option.byAuthor.label=Author
viewer.utilityPane.markupAnnotation.toolbar.sort.option.byDate.label=Date
viewer.utilityPane.markupAnnotation.toolbar.sort.option.byType.label=Type
viewer.utilityPane.markupAnnotation.toolbar.sort.option.byColor.label=Color
viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.label=Visibility
viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.all.label=All
viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.private.label=Private
viewer.utilityPane.markupAnnotation.toolbar.filter.option.byVisibility.public.label=Public
viewer.utilityPane.markupAnnotation.toolbar.filter.filterButton.label=Filter
viewer.utilityPane.markupAnnotation.toolbar.filter.filterButton.tooltip=Filter search options
viewer.utilityPane.markupAnnotation.toolbar.filter.option.byAuthor.label=Author
Expand Down

0 comments on commit 09efacd

Please sign in to comment.