diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java index f9eb7e7c88..090b95740f 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java @@ -23,16 +23,14 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.Children.Keys; import org.openide.nodes.Node; import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsRootNode; -import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.File; -import org.sleuthkit.datamodel.FileSystem; import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.LayoutDirectory; import org.sleuthkit.datamodel.SleuthkitVisitableItem; import org.sleuthkit.datamodel.SleuthkitItemVisitor; import org.sleuthkit.datamodel.TskException; import org.sleuthkit.datamodel.Volume; -import org.sleuthkit.datamodel.VolumeSystem; import org.sleuthkit.datamodel.LayoutFile; /** @@ -92,6 +90,11 @@ abstract class AbstractContentChildren extends Keys { public AbstractContentNode visit(LayoutFile lf) { return new LayoutFileNode(lf); } + + @Override + public AbstractContentNode visit(LayoutDirectory ld) { + return new LayoutDirectoryNode(ld); + } @Override protected AbstractContentNode defaultVisit(SleuthkitVisitableItem di) { diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentHierarchyVisitor.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentHierarchyVisitor.java index 3576d1f07c..f4d726201a 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentHierarchyVisitor.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentHierarchyVisitor.java @@ -9,6 +9,7 @@ import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.ContentVisitor; import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.FileSystem; +import org.sleuthkit.datamodel.LayoutDirectory; import org.sleuthkit.datamodel.TskException; import org.sleuthkit.datamodel.VolumeSystem; @@ -71,4 +72,10 @@ public class ContentHierarchyVisitor extends ContentVisitor.Default visit(LayoutDirectory ldir) { + //return getChildren(ldir); + return Collections.singletonList(ldir); + } } \ No newline at end of file diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java index 3d99f33d6d..ce8fa29ba0 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java @@ -33,6 +33,8 @@ public interface ContentNodeVisitor { T visit(VolumeNode vn); T visit(LayoutFileNode lcn); + + T visit(LayoutDirectoryNode lcn); /** * Visitor with an implementable default behavior for all types. Override @@ -72,5 +74,10 @@ public interface ContentNodeVisitor { public T visit(LayoutFileNode lcn) { return defaultVisit(lcn); } + + @Override + public T visit(LayoutDirectoryNode ldn) { + return defaultVisit(ldn); + } } } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java index b6516b2bda..1bb0f39d21 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ContentUtils.java @@ -37,6 +37,7 @@ import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.FileSystem; import org.sleuthkit.datamodel.FsContent; import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.LayoutDirectory; import org.sleuthkit.datamodel.LayoutFile; import org.sleuthkit.datamodel.ReadContentInputStream; import org.sleuthkit.datamodel.TskException; @@ -151,6 +152,13 @@ public final class ContentUtils { path.add(toString.visit(lay)); return path; } + + @Override + public List visit(LayoutDirectory ld) { + List path = ld.getParent().accept(this); + path.add(toString.visit(ld)); + return path; + } @Override public List visit(Directory dir) { @@ -301,6 +309,7 @@ public final class ContentUtils { cntnt.accept(new ExtractFscContentVisitor(dest, progress, worker, true)); } + @Override public Void visit(File f) { try { ContentUtils.writeToFile(f, dest, progress, worker, source); diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java index 07747dad68..e825f8774c 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java @@ -55,6 +55,7 @@ public interface DisplayableItemNodeVisitor { T visit(ResultsNode rn); T visit(ImagesNode in); T visit(LayoutFileNode lcn); + T visit(LayoutDirectoryNode ldn); /** * Visitor with an implementable default behavior for all types. Override @@ -184,5 +185,10 @@ public interface DisplayableItemNodeVisitor { public T visit(LayoutFileNode lcn) { return defaultVisit(lcn); } + + @Override + public T visit(LayoutDirectoryNode ldn) { + return defaultVisit(ldn); + } } } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/LayoutDirectoryNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/LayoutDirectoryNode.java new file mode 100644 index 0000000000..5a222591fa --- /dev/null +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/LayoutDirectoryNode.java @@ -0,0 +1,83 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.util.LinkedHashMap; +import java.util.Map; +import org.openide.nodes.Sheet; +import org.sleuthkit.autopsy.datamodel.LayoutFileNode.LayoutContentPropertyType; +import org.sleuthkit.datamodel.LayoutDirectory; +import org.sleuthkit.datamodel.LayoutFile; + +/** + * Node for layout dir + */ +public class LayoutDirectoryNode extends AbstractAbstractFileNode { + + + + public static String nameForLayoutFile(LayoutDirectory ld) { + return ld.getName(); + } + + public LayoutDirectoryNode(LayoutDirectory ld) { + super(ld); + + this.setDisplayName(nameForLayoutFile(ld)); + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file-icon-deleted.png"); + } + + @Override + protected Sheet createSheet() { + Sheet s = super.createSheet(); + Sheet.Set ss = s.get(Sheet.PROPERTIES); + if (ss == null) { + ss = Sheet.createPropertiesSet(); + s.put(ss); + } + + Map map = new LinkedHashMap(); + fillPropertyMap(map, content); + + ss.put(new NodeProperty("Name", "Name", "no description", getName())); + + final String NO_DESCR = "no description"; + for (Map.Entry entry : map.entrySet()) { + ss.put(new NodeProperty(entry.getKey(), entry.getKey(), NO_DESCR, entry.getValue())); + } + // @@@ add more properties here... + + return s; + } + + @Override + public T accept(ContentNodeVisitor v) { + return v.visit(this); + } + + @Override + public T accept(DisplayableItemNodeVisitor v) { + return v.visit(this); + } + + private static void fillPropertyMap(Map map, LayoutDirectory content) { + map.put(LayoutContentPropertyType.NAME.toString(), content.getName()); + map.put(LayoutContentPropertyType.SIZE.toString(), content.getSize()); + } +} diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java index 8b897f82fc..eccf1071c4 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java @@ -43,6 +43,7 @@ import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.FileSystem; import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.LayoutDirectory; import org.sleuthkit.datamodel.LayoutFile; import org.sleuthkit.datamodel.TskException; import org.sleuthkit.datamodel.Volume; @@ -204,5 +205,10 @@ class ViewContextAction extends AbstractAction { public List visit(LayoutFile lc) { return lc.getParent().accept(this); } + + @Override + public List visit(LayoutDirectory ld) { + return ld.getParent().accept(this); + } } } diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/GetAllFilesContentVisitor.java b/Ingest/src/org/sleuthkit/autopsy/ingest/GetAllFilesContentVisitor.java index 2a9c912991..920b2fef49 100644 --- a/Ingest/src/org/sleuthkit/autopsy/ingest/GetAllFilesContentVisitor.java +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/GetAllFilesContentVisitor.java @@ -31,6 +31,7 @@ import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.FileSystem; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.Directory; +import org.sleuthkit.datamodel.LayoutDirectory; import org.sleuthkit.datamodel.LayoutFile; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskData; @@ -61,6 +62,11 @@ class GetAllFilesContentVisitor extends GetFilesContentVisitor { public Collection visit(LayoutFile lf) { return Collections.singleton(lf); } + + @Override + public Collection visit(LayoutDirectory ld) { + return Collections.singleton(ld); + } @Override public Collection visit(FileSystem fs) { diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/GetFilesContentVisitor.java b/Ingest/src/org/sleuthkit/autopsy/ingest/GetFilesContentVisitor.java index bf52631631..f22969c2a0 100644 --- a/Ingest/src/org/sleuthkit/autopsy/ingest/GetFilesContentVisitor.java +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/GetFilesContentVisitor.java @@ -29,6 +29,7 @@ import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.FileSystem; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.Image; +import org.sleuthkit.datamodel.LayoutDirectory; import org.sleuthkit.datamodel.TskException; import org.sleuthkit.datamodel.Volume; import org.sleuthkit.datamodel.VolumeSystem; @@ -51,6 +52,11 @@ public abstract class GetFilesContentVisitor implements ContentVisitor visit(LayoutFile lc); + @Override + public Collection visit(LayoutDirectory ld) { + return getAllFromChildren(ld); + } + @Override public Collection visit(Directory drctr) { return getAllFromChildren(drctr);