diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/Case.java b/Case/src/org/sleuthkit/autopsy/casemodule/Case.java
index fcd4643404..b6fed160af 100755
--- a/Case/src/org/sleuthkit/autopsy/casemodule/Case.java
+++ b/Case/src/org/sleuthkit/autopsy/casemodule/Case.java
@@ -270,7 +270,7 @@ public class Case {
boolean allFilesExist = true;
String pathString = "";
for (String s : paths) {
- allFilesExist &= new File(s).exists();
+ allFilesExist &= isPhysicalDrive(s) || new File(s).exists();
pathString += s + "\n";
}
if (!allFilesExist) {
@@ -564,6 +564,18 @@ public class Case {
return xmlcm.getTempDir();
}
}
+
+ /**
+ * Gets the full path to the cache directory of this case
+ * @return cacheDirectoryPath
+ */
+ public String getCacheDirectory() {
+ if (xmlcm == null) {
+ return "";
+ } else {
+ return xmlcm.getCacheDir();
+ }
+ }
/**
* get the created date of this case
@@ -755,7 +767,8 @@ public class Case {
// create the folders inside the case directory
result = result && (new File(caseDir + File.separator + XMLCaseManagement.EXPORT_FOLDER_RELPATH)).mkdir()
&& (new File(caseDir + File.separator + XMLCaseManagement.LOG_FOLDER_RELPATH)).mkdir()
- && (new File(caseDir + File.separator + XMLCaseManagement.TEMP_FOLDER_RELPATH)).mkdir();
+ && (new File(caseDir + File.separator + XMLCaseManagement.TEMP_FOLDER_RELPATH)).mkdir()
+ && (new File(caseDir + File.separator + XMLCaseManagement.CACHE_FOLDER_RELPATH)).mkdir();
return result;
} catch (Exception e) {
diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java b/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java
index 4d7ad8d23f..b8ee3830a6 100644
--- a/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java
+++ b/Case/src/org/sleuthkit/autopsy/casemodule/CaseOpenAction.java
@@ -50,9 +50,9 @@ public final class CaseOpenAction implements ActionListener {
fc.setDragEnabled(false);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setMultiSelectionEnabled(false);
- fc.setAcceptAllFileFilterUsed(false);
+ //fc.setAcceptAllFileFilterUsed(false);
fc.addChoosableFileFilter(autFilter);
- fc.addChoosableFileFilter(fc.getAcceptAllFileFilter());
+ //fc.addChoosableFileFilter(fc.getAcceptAllFileFilter());
if(AutopsyProperties.getProperty(PROP_BASECASE) != null)
fc.setCurrentDirectory(new File(AutopsyProperties.getProperty(PROP_BASECASE)));
}
diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java b/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java
index 382c897a55..421fa99196 100644
--- a/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java
+++ b/Case/src/org/sleuthkit/autopsy/casemodule/XMLCaseManagement.java
@@ -79,6 +79,8 @@ public class XMLCaseManagement implements CaseConfigFileInterface{
final static String TEMP_FOLDER_RELPATH = "Temp";
final static String EXPORT_FOLDER_NAME = "ExportFolder";
final static String EXPORT_FOLDER_RELPATH = "Export";
+ final static String CACHE_FOLDER_NAME = "CacheFolder";
+ final static String CACHE_FOLDER_RELPATH = "Cache";
// folders attribute
final static String RELATIVE_NAME = "Relative"; // relevant path info
@@ -450,6 +452,26 @@ public class XMLCaseManagement implements CaseConfigFileInterface{
return ""; // should throw error or exception
}
}
+
+ /**
+ * Gets the full path to the Cache directory
+ *
+ * @return cacheDir the full path of the "Cache" directory
+ */
+ protected String getCacheDir(){
+ if(doc != null){
+ Element cacheElement = (Element)getCaseElement().getElementsByTagName(CACHE_FOLDER_NAME).item(0);
+ if(cacheElement.getAttribute(RELATIVE_NAME).equals(RELATIVE_TRUE)){
+ return caseDirPath + File.separator + cacheElement.getTextContent();
+ }
+ else{
+ return cacheElement.getTextContent();
+ }
+ }
+ else{
+ return ""; // should throw error or exception
+ }
+ }
/**
* Gets image Element from the document handler
@@ -720,6 +742,11 @@ public class XMLCaseManagement implements CaseConfigFileInterface{
tempElement.appendChild(doc.createTextNode(TEMP_FOLDER_RELPATH));
tempElement.setAttribute(RELATIVE_NAME, "true");
caseElement.appendChild(tempElement);
+
+ Element cacheElement = doc.createElement(CACHE_FOLDER_NAME); // ...
+ cacheElement.appendChild(doc.createTextNode(CACHE_FOLDER_RELPATH));
+ cacheElement.setAttribute(RELATIVE_NAME, "true");
+ caseElement.appendChild(cacheElement);
// create the new images
Element imagesElement = doc.createElement(IMAGES_NAME); // ...
diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java
index b5f9b13f81..e910f3942f 100644
--- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java
+++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewNode.java
@@ -24,12 +24,16 @@ import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
import java.lang.ref.SoftReference;
import java.util.logging.Level;
+import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import org.openide.nodes.FilterNode;
import org.openide.nodes.Node;
+import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.Log;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskException;
@@ -65,15 +69,26 @@ class ThumbnailViewNode extends FilterNode {
icon = iconCache.get();
}
+
+
if (icon == null) {
Content content = this.getLookup().lookup(Content.class);
if (content != null) {
- try {
- System.out.println("generate");
- icon = generateIcon(content);
- } catch (TskException ex) {
- icon = ThumbnailViewNode.defaultIcon;
+ if (getFile(content.getId()).exists()) {
+ try {
+ icon = ImageIO.read(getFile(content.getId()));
+ } catch (IOException ex) {
+ icon = ThumbnailViewNode.defaultIcon;
+ }
+ } else {
+ try {
+ icon = generateIcon(content);
+ ImageIO.write(toBufferedImage(icon), "jpg", getFile(content.getId()));
+ } catch (TskException ex) {
+ icon = ThumbnailViewNode.defaultIcon;
+ } catch (IOException ex) {
+ }
}
} else {
icon = ThumbnailViewNode.defaultIcon;
@@ -134,4 +149,20 @@ class ThumbnailViewNode extends FilterNode {
return Toolkit.getDefaultToolkit().createImage(combined.getSource());
}
+
+ private static BufferedImage toBufferedImage(Image src) {
+ int w = src.getWidth(null);
+ int h = src.getHeight(null);
+ int type = BufferedImage.TYPE_INT_RGB; // other options
+ BufferedImage dest = new BufferedImage(w, h, type);
+ Graphics2D g2 = dest.createGraphics();
+ g2.drawImage(src, 0, 0, null);
+ g2.dispose();
+ return dest;
+ }
+
+ private static File getFile(long id) {
+ return new File(Case.getCurrentCase().getCacheDirectory() + File.separator + id + ".jpg");
+ }
+
}