Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Individual filterer disable/reenable in filters panel. #2163

Draft
wants to merge 60 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
f018c82
'#39: fix a NPE when dragging node with right mouse button
lfcnassif Apr 11, 2024
8c88e00
'#39: fix NPE by avoiding wrong clone, change map key to FilterNode
lfcnassif Apr 12, 2024
02c580f
'#39: fix DecisionNode clone method call
lfcnassif Apr 12, 2024
b3477e0
'#39: try to keep previous logic before commit 8c88e00
lfcnassif Apr 12, 2024
d4a1d7b
'#39 updates lastClickedPath also when clicking for start dragging from
patrickdalla Apr 18, 2024
945ad13
'#39 refactors FilterNode classes in a way to keep track of its
patrickdalla Apr 18, 2024
897e291
'#39 returns cachedBitSet map from CombinedFilterer to its previous
patrickdalla Apr 18, 2024
e0ee88a
'#39 Properly implements clone methods of DecisionNode subclasses, so
patrickdalla Apr 18, 2024
4da3cdf
'#39 Alters field names to be similar with correspondent
patrickdalla Apr 18, 2024
14e403c
'#39 Allow only on filter node selection at a time in combined filterer
patrickdalla Apr 18, 2024
7e31973
'#39 Implement code to avoid NPE
patrickdalla Apr 18, 2024
df8043d
'#39 Adds a centered tip message informing about drag and drop filter
patrickdalla Apr 18, 2024
a7f8461
'#39 Case insensitive search from table header search menu text field.
patrickdalla Apr 19, 2024
8e42673
'#39 Creates interface IFilter method to return a more detailed textual
patrickdalla Apr 19, 2024
75c0b8c
'#39 adding some comments
patrickdalla Apr 19, 2024
d6cd081
'#39 Add support for disable Filterer on Filterers tree via its checkbox
patrickdalla Apr 19, 2024
aca03c1
'#39 Corrects AppListener to only use text from SearchFilterer (it was
patrickdalla Apr 22, 2024
3fddcb6
'#39 use hasFilters instead of hasFiltersApplied to execute filter
patrickdalla Apr 22, 2024
04f70ef
Merge branch 'master' into #39_complement
lfcnassif Apr 29, 2024
7bf5574
'#39: removes unneeded interface
lfcnassif Apr 29, 2024
93418ad
'#39: code formatting
lfcnassif Apr 29, 2024
b7e9fe7
'#39: minor change in tooltip message
lfcnassif Apr 30, 2024
fe3e815
'#2163 Corrects search filterer to not consider the standard tip as
patrickdalla May 2, 2024
20c2073
'#2163 Adds a menu entry to the table header menu to represent the
patrickdalla May 2, 2024
fa8b377
'#2163 Implements enabling/disabling filterer via filters panel for
patrickdalla May 3, 2024
d49950e
'#2163 Implementation of disable/enable filterer through filterer tree
patrickdalla May 3, 2024
a4d498c
'#2163 Use same rule to color tab backgraund in filterer tree node
patrickdalla May 3, 2024
796f257
'#2163 Updates tab colors when clear filterer filters from popup menu.
patrickdalla May 3, 2024
c277b39
'#2163 Sets initial value for duplicate filter as disable (as it will
patrickdalla May 7, 2024
e49c7e7
Merge branch 'master' into #39_complement
lfcnassif May 28, 2024
cde98c5
'#2163 Removes old conflicting code to set category tab color if any
patrickdalla May 28, 2024
0de6aa7
Merge branch '#39_complement' of https://github.com/sepinf-inc/IPED.g…
patrickdalla May 28, 2024
95c75bc
'#2163 Implements missing implementation of new hasFiltersApplied method
patrickdalla May 28, 2024
087ea23
'#2163 Implements hasFiltersApplied of FilterSelectedEdges
patrickdalla May 28, 2024
55429bb
'#2163 adds comments on some interface methods definitions to explain
patrickdalla May 28, 2024
70dd932
'#2163 Removes unnecessary and complicated wrapping desing of
patrickdalla May 28, 2024
1e535b1
'#2163 Implements clear filter code to sync with clearAllFilters button.
patrickdalla May 28, 2024
f58d09b
'#2163 Search Filter getQuery returns null if query text is
patrickdalla May 28, 2024
8eef37f
'#2163 Design method for restoration of defined filters of a filter from
patrickdalla May 29, 2024
fbc1804
'#2163 Implements restoreDefinedFilters for filterers declared in App
patrickdalla May 29, 2024
c2eea39
'#2163 Implements restore filters of MetadataPanel filterer.
patrickdalla Jun 3, 2024
10dba2d
'#2163 Implements restoreDefinedFilters for evidence tree filterer.
patrickdalla Jun 3, 2024
df5d086
'#2163 Corrects NPE on evidence filterer
patrickdalla Jun 3, 2024
77d3e11
'#2163 Removes unnecessary field and corrects getQuery method to return
patrickdalla Jun 4, 2024
2686d8a
'#2163 updates internal control field 'selection' on
patrickdalla Jun 4, 2024
b46dff9
'#2163 Implements restoreFilters for Bookmarks filterer.
patrickdalla Jun 4, 2024
32c22bd
'#2163 corrects hasFilters from DuplicatesFilterer
patrickdalla Jun 4, 2024
c324e7e
'#2163 Code to avoid enabling filterer from filterpanel without any
patrickdalla Jun 4, 2024
5fa2d11
'#2163 corrects similar documents and similar image filter restoration.
patrickdalla Jun 4, 2024
c606d3e
'#2163 corrects similar image filterer restoration.
patrickdalla Jun 4, 2024
e8b19e3
'#2163 Implementation of restore filters for Table Header Filterers.
patrickdalla Jun 4, 2024
039a51f
'#2163 forces updateFileListing at the end of setSelectedIndices method.
patrickdalla Jun 4, 2024
5a6309c
'#2163 repositions update file listing outside setSelectedIndices, right
patrickdalla Jun 4, 2024
b77a2f4
'#2163 Force call to setDockableColores after filterer checkbox click.
patrickdalla Jun 5, 2024
3434d2d
'#2163 Creates a map to store the correspondence between a query escaped
patrickdalla Jun 5, 2024
c2793dc
'#2163 Implementation of restoreDefinedFilters of Timeline filterer.
patrickdalla Jun 17, 2024
fc2c5df
'#2163 restore filters implementation for GraphAnalisys.
patrickdalla Jun 17, 2024
9af46bb
'#2163 Repaints links tab in red when filters are restored.
patrickdalla Jun 17, 2024
5b72dc6
'#2251 and '#2163 apply duplicate filter as last filterer.
Jun 27, 2024
8b2878d
Revert "'#2251 and '#2163 apply duplicate filter as last filterer."
patrickdalla Jun 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ iped.app.ui.TimelineListener.filtererName=Timeline Filter
iped.app.ui.TreeListener.filtererName=Evidence Tree Filter
iped.app.ui.filterdecisiontree.CombinedFilterer.filtererName=Combined Filter
iped.app.ui.filterdecisiontree.CombinedFilterer.tooltip=Apply Combined Filter
iped.app.ui.filterdecisiontree.CombinedFilterer.dragAndDropTooltip=Drag and drop filters into node tree to combine them.
FilterValue.Duplicates=Duplicate Filter Result
FilterValue.SimilarDocument=Similar Documents
FilterValue.SimilarFace=Similar Faces:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ iped.app.ui.TimelineListener.filtererName=Timeline Filter (TBT)
iped.app.ui.TreeListener.filtererName=Evidence Tree Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.filtererName=Combined Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.tooltip=Apply Combined Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.dragAndDropTooltip=Drag and drop filters into node tree to combine them.(TBT)
FilterValue.Duplicates=Duplicate Filter Result (TBT)
FilterValue.SimilarDocument=Similar Documents (TBT)
FilterValue.SimilarFace=Similar Faces: (TBT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ iped.app.ui.TimelineListener.filtererName=Timeline Filter (TBT)
iped.app.ui.TreeListener.filtererName=Evidence Tree Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.filtererName=Combined Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.tooltip=Apply Combined Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.dragAndDropTooltip=Drag and drop filters into node tree to combine them.(TBT)
FilterValue.Duplicates=Duplicate Filter Result (TBT)
FilterValue.SimilarDocument=Similar Documents (TBT)
FilterValue.SimilarFace=Similar Faces: (TBT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ iped.app.ui.TimelineListener.filtererName=Timeline Filter (TBT)
iped.app.ui.TreeListener.filtererName=Evidence Tree Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.filtererName=Combined Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.tooltip=Apply Combined Filter (TBT)
iped.app.ui.filterdecisiontree.CombinedFilterer.dragAndDropTooltip=Drag and drop filters into node tree to combine them.(TBT)
FilterValue.Duplicates=Duplicate Filter Result (TBT)
FilterValue.SimilarDocument=Similar Documents (TBT)
FilterValue.SimilarFace=Similar Faces: (TBT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ iped.app.ui.TimelineListener.filtererName=Filtro de Visão em Timeline
iped.app.ui.TreeListener.filtererName=Filtro da Árvore de Evidências
iped.app.ui.filterdecisiontree.CombinedFilterer.filtererName=Filtro Combinado
iped.app.ui.filterdecisiontree.CombinedFilterer.tooltip=Aplicar Filtro Combinado
iped.app.ui.filterdecisiontree.CombinedFilterer.dragAndDropTooltip=Arreste e solte filtros na árvore de nós para combiná-los.
FilterValue.Duplicates=Resultado do Filtro de Duplicados
FilterValue.SimilarDocument=Documentos Similares
FilterValue.SimilarFace=Faces Similares:
Expand Down
15 changes: 14 additions & 1 deletion iped-app/src/main/java/iped/app/graph/FilterSelectedEdges.java
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ public boolean hasFilters() {

@Override
public boolean hasFiltersApplied() {
return false;
return selectedEdges.size() > 0;
}

@Override
Expand All @@ -199,6 +199,19 @@ public void clearFilter() {
public void setGraph(Graph graph) {
this.graph = graph;
}

@Override
public void restoreDefinedFilters(List<IFilter> filtersToRestore) {
for (Iterator iterator = filtersToRestore.iterator(); iterator.hasNext();) {
IFilter iFilter = (IFilter) iterator.next();
if (iFilter instanceof EdgeFilter) {
EdgeFilter efilter = (EdgeFilter) iFilter;
this.graph = efilter.graph;
this.selectedEdges = efilter.selectedEdges;
}
}
updateResults();
}
}

class EdgeFilter implements IResultSetFilter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,40 @@
public class ValueCountQueryFilter implements IQueryFilter {
StringBuffer queryStr = null;
StringBuffer name = null;
StringBuffer textualDetail = null;
Set<ValueCount> values = null;
String filterField;
MetadataSearch metadataSearch;
private Query query;

public ValueCountQueryFilter(String filterField, Set<ValueCount> selectedValues) {
public ValueCountQueryFilter(MetadataSearch metadataSearch, String filterField, Set<ValueCount> selectedValues) {
this.filterField = filterField;
this.metadataSearch = metadataSearch;
values = new HashSet<ValueCount>();
if (selectedValues != null) {
values.addAll(selectedValues);
}
}

@Override
public String getTextualDetails() {
if (textualDetail == null) {
textualDetail = new StringBuffer();
textualDetail.append(filterField);
textualDetail.append(":[");
boolean first = true;
for (ValueCount value : values) {
if (!first) {
textualDetail.append(",");
}
textualDetail.append(value.getVal());
first = false;
}
textualDetail.append("]");
}
return textualDetail.toString();
}

public String toString() {
if (name == null) {
name = new StringBuffer();
Expand Down Expand Up @@ -82,4 +104,16 @@ public Query getQuery() {
return query;
}

public String getFilterField() {
return filterField;
}

public Set<ValueCount> getValues() {
return values;
}

public MetadataSearch getMetadataSearch() {
return metadataSearch;
}

}
36 changes: 28 additions & 8 deletions iped-app/src/main/java/iped/app/timelinegraph/IpedChartPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import iped.jfextensions.chart.ChartPanel;
import iped.jfextensions.model.Minute;
import iped.utils.IconUtil;
import iped.viewers.api.IFilterer;

public class IpedChartPanel extends ChartPanel implements KeyListener {
private Rectangle2D filterIntervalRectangle; // represents the filter selection rectangle while drawing/defining a interval
Expand All @@ -83,7 +84,7 @@ public class IpedChartPanel extends ChartPanel implements KeyListener {

HashMap<Class<? extends TimePeriod>, ChartTimePeriodConstraint> timePeriodConstraints = new HashMap<Class<? extends TimePeriod>, ChartTimePeriodConstraint>();

JButton apllyFilters;
JButton applyFilters;

private int filterMask = InputEvent.SHIFT_DOWN_MASK;
private int panMask = InputEvent.CTRL_DOWN_MASK;
Expand Down Expand Up @@ -157,18 +158,32 @@ public IpedChartPanel(IpedChart chart, IpedChartsPanel ipedChartsPanel) {

IpedChartPanel self = this;

ipedChartsPanel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
App.get().setDockablesColors();
if (e.getID() == IFilterer.ENABLE_FILTER_EVENT) {
ipedChartsPanel.setApplyFilters(true);
} else {
ipedChartsPanel.setApplyFilters(false);
}
App.get().filtersPanel.updateUI();
}
});

this.setLayout(new FlowLayout(FlowLayout.LEFT));
ImageIcon icon = new ImageIcon(IconUtil.class.getResource(resPath + "down.png"));
Image img = icon.getImage();
apllyFilters = new JButton(new ImageIcon(img.getScaledInstance(12, 12, java.awt.Image.SCALE_SMOOTH)));
apllyFilters.setMaximumSize(new Dimension(16, 16));
apllyFilters.addActionListener(new ActionListener() {
applyFilters = new JButton(new ImageIcon(img.getScaledInstance(12, 12, java.awt.Image.SCALE_SMOOTH)));
applyFilters.setMaximumSize(new Dimension(16, 16));
applyFilters.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
chartPanelPopupMenu.show(apllyFilters, apllyFilters.getX() - 2, apllyFilters.getY() + apllyFilters.getHeight() - 8);
chartPanelPopupMenu.show(applyFilters, applyFilters.getX() - 2,
applyFilters.getY() + applyFilters.getHeight() - 8);
}
});
this.add(apllyFilters);
this.add(applyFilters);

this.addChartMouseListener(new ChartMouseListener() {
@Override
Expand Down Expand Up @@ -855,7 +870,7 @@ public void removeAllFilters(boolean updateResult) {
}

App app = (App) ipedChartsPanel.getGUIProvider();
app.setDockablesColors();

this.repaint();
}

Expand Down Expand Up @@ -918,7 +933,6 @@ public void filterSelection() {
if (!isClearing) {
app.getAppListener().updateFileListing();
}
app.setDockablesColors();
}

public HashSet<String> getExcludedEvents() {
Expand Down Expand Up @@ -1030,4 +1044,10 @@ public void updateUI() {
}
}
}

public void applyFilters(boolean selected) {
App app = (App) this.getIpedChartsPanel().getGUIProvider();
app.getFilterManager().setFilterEnabled(this.getIpedChartsPanel(), selected);
this.filterSelection();
}
}
102 changes: 68 additions & 34 deletions iped-app/src/main/java/iped/app/timelinegraph/IpedChartsPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -1084,48 +1084,64 @@ public void resetZoom() {
refreshChart(true);
}

public class TimeRangeFilter implements IQueryFilter {
private Query query;
Date[] dates;

public TimeRangeFilter(Date[] dates) {
this.dates = dates;
}

public String toString() {
String timeFilter = domainAxis.ISO8601DateFormatUTC(dates[0]);
timeFilter += " TO ";
timeFilter += domainAxis.ISO8601DateFormatUTC(dates[1]);
return timeFilter;
}

@Override
public Query getQuery() {
if (query == null) {
String timeFilter = "timeStamp:[";
timeFilter += domainAxis.ISO8601DateFormatUTC(dates[0]);
timeFilter += " TO ";
timeFilter += domainAxis.ISO8601DateFormatUTC(dates[1]);
timeFilter += "]";

try {
query = new QueryBuilder(App.get().appCase).getQuery(timeFilter);
} catch (ParseException | QueryNodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return query;
}
}

public class EventTypeFilter implements IFilter {
String event;

public EventTypeFilter(String event) {
this.event = event;
}

public String toString() {
return "-eventType:" + event;
}
}

@Override
public List getDefinedFilters() {
ArrayList<IFilter> result = new ArrayList<IFilter>();
if (chartPanel.definedFilters.size() > 0) {
for (Date[] dates : chartPanel.definedFilters) {
result.add(new IQueryFilter() {
private Query query;

public String toString() {
String timeFilter = domainAxis.ISO8601DateFormatUTC(dates[0]);
timeFilter += " TO ";
timeFilter += domainAxis.ISO8601DateFormatUTC(dates[1]);
return timeFilter;
}

@Override
public Query getQuery() {
if (query == null) {
String timeFilter = "timeStamp:[";
timeFilter += domainAxis.ISO8601DateFormatUTC(dates[0]);
timeFilter += " TO ";
timeFilter += domainAxis.ISO8601DateFormatUTC(dates[1]);
timeFilter += "]";

try {
query = new QueryBuilder(App.get().appCase).getQuery(timeFilter);
} catch (ParseException | QueryNodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return query;
}
});
result.add(new TimeRangeFilter(dates));
}
}

for (String event : chartPanel.excludedEvents) {
result.add(new IFilter() {
public String toString() {
return "-eventType:" + event;
}
});
result.add(new EventTypeFilter(event));
}

return result;
Expand All @@ -1144,4 +1160,22 @@ public static String[] getOrdToEventName() {
return ordToEventName;
}

public void restoreDefinedFilters(List<IFilter> filtersToRestore) {
boolean hasFilters = false;
for (IFilter filter : filtersToRestore) {
hasFilters = true;
if (filter instanceof TimeRangeFilter) {
chartPanel.definedFilters.add(((TimeRangeFilter) filter).dates);
}
if (filter instanceof EventTypeFilter) {
chartPanel.excludedEvents.add(((EventTypeFilter) filter).event);
}
}
if (hasFilters) {
applyFilters = true;
App.get().getFilterManager().setFilterEnabled(this, true);
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

import iped.app.timelinegraph.IpedChartPanel;
import iped.app.timelinegraph.dialog.IntervalDefinitionDialog;
import iped.app.ui.App;
import iped.app.ui.Messages;

public class ChartPanelPopupMenu extends JPopupMenu implements ActionListener {
Expand Down Expand Up @@ -63,10 +62,7 @@ public void actionPerformed(ActionEvent e) {

if (e.getSource() == applyFiltersMenu) {
if (!ipedChartPanel.hasNoFilter()) {
ipedChartPanel.getIpedChartsPanel().setApplyFilters(applyFiltersMenu.isSelected());
App app = (App) ipedChartPanel.getIpedChartsPanel().getGUIProvider();
ipedChartPanel.filterSelection();
app.setDockablesColors();
ipedChartPanel.applyFilters(applyFiltersMenu.isSelected());
}
}
if (e.getSource() == clearAllFiltersMenu) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ public void actionPerformed(ActionEvent e) {
}

if (e.getSource() == filterSelection) {
ipedChartPanel.getIpedChartsPanel().setApplyFilters(true);
ipedChartPanel.filterSelection();
ipedChartPanel.applyFilters(true);
}

if (e.getSource() == selectItems) {
Expand Down
Loading
Loading