From fa7a29264079d779dc84d6e46549ce98cf4a9850 Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Wed, 20 Jun 2012 13:12:37 -0400 Subject: [PATCH 1/5] Ordering/prioritizing Data Content Viewers --- .../DataContentTopComponent.java | 33 ++++++------------- .../DataContentViewerArtifact.java | 17 +++++++--- .../corecomponents/DataContentViewerHex.java | 14 ++++++-- .../DataContentViewerMedia.java | 28 ++++++++++++++-- .../DataContentViewerPicture.java | 8 +++-- .../DataContentViewerString.java | 14 ++++++-- .../keywordsearch/ExtractedContentViewer.java | 14 ++++++-- 7 files changed, 88 insertions(+), 40 deletions(-) diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java index 77e4781b19..887d1c1287 100755 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentTopComponent.java @@ -98,7 +98,7 @@ public final class DataContentTopComponent extends TopComponent implements DataC return this.wrapped.isSupported(node); } - boolean isPreferred(Node node, boolean isSupported) { + int isPreferred(Node node, boolean isSupported) { return this.wrapped.isPreferred(node, isSupported); } } @@ -293,17 +293,10 @@ public final class DataContentTopComponent extends TopComponent implements DataC int totalTabs = dataContentTabbedPane.getTabCount(); - List dcvs = new ArrayList(); - dcvs.addAll(Lookup.getDefault().lookupAll(DataContentViewer.class)); - for (int i = 0; i i){ - dataContentTabbedPane.setSelectedIndex(i); - } - } + int maxPreferred = 0; + int indexOfPreferred = 0; if (totalTabs > 0) { // make sure there are tabs to reset - int tempIndex = dataContentTabbedPane.getSelectedIndex(); for (int i = 0; i < totalTabs; i++) { UpdateWrapper dcv = viewers.get(i); dcv.resetComponent(); @@ -312,25 +305,19 @@ public final class DataContentTopComponent extends TopComponent implements DataC boolean dcvSupported = dcv.isSupported(selectedNode); if (! dcvSupported) { dataContentTabbedPane.setEnabledAt(i, false); - - // change the tab selection if it's the current selection - if (tempIndex == i) { - if (i > 0) { - dataContentTabbedPane.setSelectedIndex(0); - } else { - dataContentTabbedPane.setSelectedIndex(1); - } - } } else { dataContentTabbedPane.setEnabledAt(i, true); - if (dcv.isPreferred(selectedNode, dcvSupported)) - dataContentTabbedPane.setSelectedIndex(i); + int currentPreferred = dcv.isPreferred(selectedNode, dcvSupported); + if (currentPreferred > maxPreferred) { + indexOfPreferred = i; + maxPreferred = currentPreferred; + } } } - int newIndex = dataContentTabbedPane.getSelectedIndex(); // set the display of the tab - viewers.get(newIndex).setNode(selectedNode); + dataContentTabbedPane.setSelectedIndex(indexOfPreferred); + viewers.get(indexOfPreferred).setNode(selectedNode); } } diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java index b49113ca7c..9d820404ad 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java @@ -314,12 +314,19 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat } @Override - public boolean isPreferred(Node node, boolean isSupported) { + public int isPreferred(Node node, boolean isSupported) { BlackboardArtifact art = node.getLookup().lookup(BlackboardArtifact.class); - if(art != null && art.getArtifactTypeID() != BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) - return true; - else - return false; + if(isSupported) { + if(art == null) { + return 1; + } else if(art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) { + return 3; + } else { + return 4; + } + } else { + return 0; + } } private void customizeComponents(){ diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index 0416cdee81..00e916e373 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -361,6 +361,10 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont @Override public void setNode(Node selectedNode) { + if(!isSupported(selectedNode)) { + setDataView(null, 0, true); + return; + } if (selectedNode != null) { Content content = (selectedNode).getLookup().lookup(Content.class); if (content != null) { @@ -413,6 +417,8 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont nextPageButton.setVisible(isVisible); pageLabel.setVisible(isVisible); pageLabel2.setVisible(isVisible); + goToPageTextField.setVisible(isVisible); + goToPageLabel.setVisible(isVisible); } @Override @@ -430,8 +436,12 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont } @Override - public boolean isPreferred(Node node, boolean isSupported) { - return false; + public int isPreferred(Node node, boolean isSupported) { + if(isSupported) { + return 1; + } else { + return 0; + } } @Override diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java index 70e5362f63..1f7e508d80 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java @@ -172,6 +172,9 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo } File file = selectedNode.getLookup().lookup(File.class); setDataView(file); + if(file == null) { + return; + } boolean isVidOrAud = containsExt(file.getName(), VIDEOS) || containsExt(file.getName(), AUDIOS); pauseButton.setVisible(isVidOrAud); progressLabel.setVisible(isVidOrAud); @@ -179,8 +182,12 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo } private void setDataView(File file) { - if(file == null) + if(file == null) { + setComponentsVisibility(false); return; + } else { + setComponentsVisibility(true); + } this.currentFile = file; if (containsExt(file.getName(), IMAGES)) { @@ -196,6 +203,17 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo playbin2.play(); } } + /** + * To set the visibility of specific components in this class. + * + * @param isVisible whether to show or hide the specific components + */ + private void setComponentsVisibility(boolean isVisible) { + pauseButton.setVisible(isVisible); + progressLabel.setVisible(isVisible); + progressSlider.setVisible(isVisible); + videoPanel.setVisible(isVisible); + } @Override public String getTitle() { @@ -283,8 +301,12 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo } @Override - public boolean isPreferred(Node node, boolean isSupported) { - return isSupported; + public int isPreferred(Node node, boolean isSupported) { + if(isSupported) { + return 5; + } else { + return 0; + } } private static boolean containsExt(String name, String[] exts) { diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java index e4bc39c99c..36ca063420 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerPicture.java @@ -178,8 +178,12 @@ public class DataContentViewerPicture extends javax.swing.JPanel implements Data } @Override - public boolean isPreferred(Node node, boolean isSupported) { - return isSupported; + public int isPreferred(Node node, boolean isSupported) { + if(isSupported) { + return 1; + } else { + return 0; + } } @Override diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index 1da7c206e0..c2abad99f9 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -355,10 +355,16 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC nextPageButton.setVisible(isVisible); pageLabel.setVisible(isVisible); pageLabel2.setVisible(isVisible); + goToPageTextField.setVisible(isVisible); + goToPageLabel.setVisible(isVisible); } @Override public void setNode(Node selectedNode) { + if(!isSupported(selectedNode)) { + setDataView(null, 0, true); + return; + } if (selectedNode != null) { Lookup lookup = selectedNode.getLookup(); Content content = lookup.lookup(Content.class); @@ -421,14 +427,16 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC } @Override - public boolean isPreferred(Node node, boolean isSupported) { + public int isPreferred(Node node, boolean isSupported) { if(node != null && isSupported){ StringContent scontent = node.getLookup().lookup(StringContent.class); if(scontent != null){ - return true; + return 3; + } else { + return 2; } } - return false; + return 0; } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java index 0001c62629..e2303e20f7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java @@ -304,10 +304,20 @@ public class ExtractedContentViewer implements DataContentViewer { } @Override - public boolean isPreferred(Node node, + public int isPreferred(Node node, boolean isSupported) { BlackboardArtifact art = node.getLookup().lookup(BlackboardArtifact.class); - return isSupported && (art == null || art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()); + if(isSupported) { + if(art == null) { + return 3; + } else if(art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) { + return 4; + } else { + return 3; + } + } else { + return 0; + } } /** From 6e207f22458c60235b97bed0c436d91cf2f2a3bc Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Wed, 20 Jun 2012 13:16:08 -0400 Subject: [PATCH 2/5] Forgot to include interface --- .../autopsy/corecomponentinterfaces/DataContentViewer.java | 7 +++++-- .../autopsy/corecomponents/DataContentViewerArtifact.java | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java index f77479e6ea..d1d0204545 100644 --- a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/DataContentViewer.java @@ -74,8 +74,11 @@ public interface DataContentViewer { * @param node Node to check for preference * @param isSupported, true if the viewer is supported by the node * as determined by a previous check - * @return True if viewer preferred, else false + * @return an int (0-10) higher return means the viewer has higher priority + * 0 means not supported + * 1/2 means will display all supported + * 3-10 are prioritized by Content viewer developer */ - public boolean isPreferred(Node node, boolean isSupported); + public int isPreferred(Node node, boolean isSupported); } diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java index 9d820404ad..1970853c20 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java @@ -318,7 +318,7 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat BlackboardArtifact art = node.getLookup().lookup(BlackboardArtifact.class); if(isSupported) { if(art == null) { - return 1; + return 3; } else if(art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) { return 3; } else { From 4c481c5db2e70a9295e18d381f17c982d02318f8 Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Wed, 20 Jun 2012 15:03:57 -0400 Subject: [PATCH 3/5] changes to isPreferred() return values --- .../corecomponents/DataContentViewerArtifact.java | 6 ++---- .../autopsy/corecomponents/DataContentViewerHex.java | 2 +- .../corecomponents/DataContentViewerMedia.java | 4 ++-- .../corecomponents/DataContentViewerString.java | 12 ++++-------- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java index 1970853c20..901f901446 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java @@ -46,7 +46,7 @@ import org.sleuthkit.datamodel.TskException; /** * Viewer displays Artifacts associated with Contents */ -@ServiceProvider(service = DataContentViewer.class) +@ServiceProvider(service = DataContentViewer.class, position=3) public class DataContentViewerArtifact extends javax.swing.JPanel implements DataContentViewer{ private static int currentPage = 1; @@ -319,10 +319,8 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat if(isSupported) { if(art == null) { return 3; - } else if(art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) { - return 3; } else { - return 4; + return 5; } } else { return 0; diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index 00e916e373..9ec3b8d1e0 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -39,7 +39,7 @@ import org.sleuthkit.datamodel.TskException; /** * Hex view of file contents. */ -@ServiceProvider(service = DataContentViewer.class) +@ServiceProvider(service = DataContentViewer.class, position=1) public class DataContentViewerHex extends javax.swing.JPanel implements DataContentViewer { private static long currentOffset = 0; diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java index 1f7e508d80..c92deeca35 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerMedia.java @@ -45,7 +45,7 @@ import org.sleuthkit.datamodel.TskData; * * @author dfickling */ -@ServiceProvider(service = DataContentViewer.class) +@ServiceProvider(service = DataContentViewer.class, position=5) public class DataContentViewerMedia extends javax.swing.JPanel implements DataContentViewer { private static final String[] IMAGES = new String[]{ ".jpg", ".jpeg", ".png", ".gif", ".jpe", ".bmp"}; @@ -303,7 +303,7 @@ public class DataContentViewerMedia extends javax.swing.JPanel implements DataCo @Override public int isPreferred(Node node, boolean isSupported) { if(isSupported) { - return 5; + return 7; } else { return 0; } diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index c2abad99f9..8b526600e7 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -40,7 +40,7 @@ import org.sleuthkit.datamodel.TskException; /** * Viewer displays strings extracted from contents. */ -@ServiceProvider(service = DataContentViewer.class) +@ServiceProvider(service = DataContentViewer.class, position=2) public class DataContentViewerString extends javax.swing.JPanel implements DataContentViewer { private static long currentOffset = 0; @@ -429,14 +429,10 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC @Override public int isPreferred(Node node, boolean isSupported) { if(node != null && isSupported){ - StringContent scontent = node.getLookup().lookup(StringContent.class); - if(scontent != null){ - return 3; - } else { - return 2; - } + return 2; + } else { + return 0; } - return 0; } @Override From 64352884e7afeb77a7e0db21880a36383b7d4a70 Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Wed, 20 Jun 2012 16:55:35 -0400 Subject: [PATCH 4/5] Fix integer division error --- .../autopsy/corecomponents/DataContentViewerHex.java | 4 ++-- .../autopsy/corecomponents/DataContentViewerString.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index 9ec3b8d1e0..2ae5e98be6 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -257,7 +257,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont private void goToPageTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_goToPageTextFieldActionPerformed String pageNumberStr = goToPageTextField.getText(); int pageNumber = 0; - int maxPage = (int) (dataSource.getSize() / pageLength) + 1; + int maxPage = Math.round(dataSource.getSize() / pageLength); try { pageNumber = Integer.parseInt(pageNumberStr); } catch (NumberFormatException ex) { @@ -333,7 +333,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont } if (setVisible) { - int totalPage = (int) (dataSource.getSize() / pageLength) + 1; + int totalPage = Math.round(dataSource.getSize() / pageLength); totalPageLabel.setText(Integer.toString(totalPage)); currentPageLabel.setText(Integer.toString(currentPage)); setComponentsVisibility(true); // shows the components that not needed diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index 8b526600e7..7b874a7014 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -241,7 +241,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC private void goToPageTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_goToPageTextFieldActionPerformed String pageNumberStr = goToPageTextField.getText(); int pageNumber = 0; - int maxPage = (int) (dataSource.getSize() / pageLength) + 1; + int maxPage = Math.round(dataSource.getSize() / pageLength); try { pageNumber = Integer.parseInt(pageNumberStr); } catch (NumberFormatException ex) { @@ -320,7 +320,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC } if (setVisible) { - int totalPage = (int) (dataSource.getSize() / pageLength) + 1; + int totalPage = Math.round(dataSource.getSize() / pageLength); totalPageLabel.setText(Integer.toString(totalPage)); currentPageLabel.setText(Integer.toString(currentPage)); outputViewPane.setText(text); // set the output view From 4e4f21e0a750ab5e8079318c2501dff0888d8ed1 Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Wed, 20 Jun 2012 16:57:25 -0400 Subject: [PATCH 5/5] Fix TSK-486: Rename ".." to be "[parent folder]" in tree --- .../autopsy/datamodel/AbstractFsContentNode.java | 13 ++++++++++++- .../autopsy/datamodel/DirectoryNode.java | 15 +++------------ .../org/sleuthkit/autopsy/datamodel/FileNode.java | 12 ------------ .../autopsy/directorytree/CollapseAction.java | 2 +- .../directorytree/DataResultFilterNode.java | 11 ++++++++--- .../DirectoryTreeFilterChildren.java | 7 ++----- .../directorytree/DirectoryTreeFilterNode.java | 2 +- .../keywordsearch/ExtractedContentViewer.java | 8 ++++---- 8 files changed, 31 insertions(+), 39 deletions(-) diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java index d9d85c4327..f406fc3929 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractFsContentNode.java @@ -186,6 +186,7 @@ public abstract class AbstractFsContentNode extends Abstrac // selecting a file filter (e.g. 'type' or 'recent'), it is false AbstractFsContentNode(T fsContent, boolean directoryBrowseMode) { super(fsContent); + this.setDisplayName(AbstractFsContentNode.getFsContentName(fsContent)); this.directoryBrowseMode = directoryBrowseMode; } @@ -226,7 +227,7 @@ public abstract class AbstractFsContentNode extends Abstrac * @param content to extract properties from */ public static void fillPropertyMap(Map map, FsContent content) { - map.put(FsContentPropertyType.NAME.toString(), content.getName()); + map.put(FsContentPropertyType.NAME.toString(), getFsContentName(content)); map.put(FsContentPropertyType.LOCATION.toString(), DataConversion.getformattedPath(ContentUtils.getDisplayPath(content), 0, 1)); map.put(FsContentPropertyType.MOD_TIME.toString(), ContentUtils.getStringTime(content.getMtime(), content)); map.put(FsContentPropertyType.CHANGED_TIME.toString(), ContentUtils.getStringTime(content.getCtime(), content)); @@ -245,4 +246,14 @@ public abstract class AbstractFsContentNode extends Abstrac map.put(FsContentPropertyType.KNOWN.toString(), content.getKnown().getName()); map.put(FsContentPropertyType.MD5HASH.toString(), content.getMd5Hash() == null ? "" : content.getMd5Hash()); } + + static String getFsContentName(FsContent fsContent) { + String name = fsContent.getName(); + if(name.equals("..")) { + name = DirectoryNode.DOTDOTDIR; + } else if(name.equals(".")) { + name = DirectoryNode.DOTDIR; + } + return name; + } } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java index e64611de72..875e2e0dc7 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java @@ -27,16 +27,9 @@ import org.sleuthkit.datamodel.TskData; * Its children are more directories. */ public class DirectoryNode extends AbstractFsContentNode { - - /** - * Helper so that the display name and the name used in building the path - * are determined the same way. - * @param d Directory to get the name of - * @return short name for the directory - */ - static String nameForDirectory(Directory d) { - return d.getName(); - } + + public static final String DOTDOTDIR = "[parent folder]"; + public static final String DOTDIR = "[current folder]"; public DirectoryNode(Directory dir) { this(dir, true); @@ -50,8 +43,6 @@ public class DirectoryNode extends AbstractFsContentNode { super(dir, directoryBrowseMode); // set name, display name, and icon - String dirName = nameForDirectory(dir); - this.setDisplayName(dirName); if (Directory.dirFlagToValue(dir.getDir_flags()).equals(TskData.TSK_FS_NAME_FLAG_ENUM.TSK_FS_NAME_FLAG_UNALLOC.toString())) { this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/folder-icon-deleted.png"); } else { diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java index bb92b68821..d444317e65 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/FileNode.java @@ -30,16 +30,6 @@ import org.sleuthkit.datamodel.TskData; */ public class FileNode extends AbstractFsContentNode { - /** - * Helper so that the display name and the name used in building the path - * are determined the same way. - * @param f File to get the name of - * @return short name for the File - */ - static String nameForFile(File f) { - return f.getName(); - } - /** * * @param file underlying Content @@ -52,8 +42,6 @@ public class FileNode extends AbstractFsContentNode { super(file, directoryBrowseMode); // set name, display name, and icon - String fileName = nameForFile(file); - this.setDisplayName(fileName); if (File.dirFlagToValue(file.getDir_flags()).equals(TskData.TSK_FS_NAME_FLAG_ENUM.TSK_FS_NAME_FLAG_UNALLOC.toString())) { this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file-icon-deleted.png"); } else { diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java index 4d1acb9c43..9d2c25c698 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/CollapseAction.java @@ -30,7 +30,7 @@ import org.sleuthkit.autopsy.coreutils.Log; * * @author jantonius */ -public class CollapseAction extends AbstractAction { +class CollapseAction extends AbstractAction { CollapseAction(String title) { super(title); diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java index e20d9b1685..7f05fceb30 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java @@ -46,6 +46,7 @@ import org.sleuthkit.autopsy.datamodel.ExtractedContentNode; import org.sleuthkit.autopsy.datamodel.FileNode; import org.sleuthkit.autopsy.datamodel.FileSearchFilterNode; import org.sleuthkit.autopsy.datamodel.HashsetHits.HashsetHitsRootNode; +import org.sleuthkit.autopsy.datamodel.HashsetHits.HashsetHitsSetNode; import org.sleuthkit.autopsy.datamodel.ImageNode; import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsKeywordNode; import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsListNode; @@ -154,7 +155,6 @@ public class DataResultFilterNode extends FilterNode{ List actions = new ArrayList(); actions.add(new NewWindowViewAction("View in New Window", vol)); actions.addAll(ShowDetailActionVisitor.getActions(vol.getLookup().lookup(Content.class))); - actions.add(new ChangeViewAction("View", 0, vol)); return actions; } @@ -271,6 +271,11 @@ public class DataResultFilterNode extends FilterNode{ return openChild(hhrn); } + @Override + public AbstractAction visit(HashsetHitsSetNode hhsn) { + return openChild(hhsn); + } + @Override public AbstractAction visit(EmailExtractedRootNode eern) { return openChild(eern); @@ -303,9 +308,9 @@ public class DataResultFilterNode extends FilterNode{ @Override public AbstractAction visit(DirectoryNode dn){ - if(dn.getDisplayName().equals("..")) + if(dn.getDisplayName().equals(DirectoryNode.DOTDOTDIR)) return openParent(dn); - else if(!dn.getDisplayName().equals(".")) + else if(!dn.getDisplayName().equals(DirectoryNode.DOTDIR)) return openChild(dn); else return null; diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java index 1311c9a12f..6884caa15e 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterChildren.java @@ -89,11 +89,10 @@ class DirectoryTreeFilterChildren extends FilterNode.Children { || arg0 instanceof HashsetHitsRootNode || arg0 instanceof EmailExtractedRootNode || arg0 instanceof EmailExtractedAccountNode - || arg0 instanceof EmailExtractedFolderNode || arg0 instanceof ImagesNode || arg0 instanceof ViewsNode || arg0 instanceof ResultsNode)) { - return new Node[]{this.copyNode(arg0)}; + return new Node[]{this.copyNode(arg0, true)}; } else if (arg0 != null && (arg0 instanceof KeywordHitsKeywordNode || (arg0 instanceof DirectoryNode @@ -102,8 +101,6 @@ class DirectoryTreeFilterChildren extends FilterNode.Children { || arg0 instanceof RecentFilesFilterNode || arg0 instanceof FileSearchFilterNode || arg0 instanceof HashsetHitsSetNode - || arg0 instanceof EmailExtractedRootNode - || arg0 instanceof EmailExtractedAccountNode || arg0 instanceof EmailExtractedFolderNode )) { return new Node[]{this.copyNode(arg0, false)}; @@ -142,7 +139,7 @@ class DirectoryTreeFilterChildren extends FilterNode.Children { */ private static boolean isDotDirectory(DirectoryNode dir) { String name = dir.getDisplayName(); - return name.equals(".") || name.equals(".."); + return name.equals(DirectoryNode.DOTDIR) || name.equals(DirectoryNode.DOTDOTDIR); } /** diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java index 4013ee9903..b1ae1ef70c 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java @@ -63,7 +63,6 @@ class DirectoryTreeFilterNode extends FilterNode { Content c = this.getLookup().lookup(Content.class); if (c != null) { actions.addAll(DirectoryTreeFilterNode.getDetailActions(c)); - actions.add(collapseAll); Directory dir = this.getLookup().lookup(Directory.class); if (dir != null) { @@ -83,6 +82,7 @@ class DirectoryTreeFilterNode extends FilterNode { }); } } + actions.add(collapseAll); return actions.toArray(new Action[actions.size()]); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java index e2303e20f7..6d4cc55755 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/ExtractedContentViewer.java @@ -45,7 +45,7 @@ import org.sleuthkit.datamodel.Directory; * MarkupSource items in the selected Node's lookup, plus the content that * Solr extracted (if there is any). */ -@ServiceProvider(service = DataContentViewer.class) +@ServiceProvider(service = DataContentViewer.class, position=4) public class ExtractedContentViewer implements DataContentViewer { private static final Logger logger = Logger.getLogger(ExtractedContentViewer.class.getName()); @@ -309,11 +309,11 @@ public class ExtractedContentViewer implements DataContentViewer { BlackboardArtifact art = node.getLookup().lookup(BlackboardArtifact.class); if(isSupported) { if(art == null) { - return 3; - } else if(art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) { return 4; + } else if(art.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) { + return 6; } else { - return 3; + return 4; } } else { return 0;