From 3c1701ea5ae90857670d7f8d33033586353798fb Mon Sep 17 00:00:00 2001 From: millmanorama Date: Sat, 11 Mar 2017 23:17:59 +0100 Subject: [PATCH 01/13] cleanup and refactoring in LuceneQuery.java --- .../keywordsearch/KeywordSearchUtil.java | 4 +- .../autopsy/keywordsearch/LuceneQuery.java | 305 +++++++----------- 2 files changed, 115 insertions(+), 194 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java index 19d60f71f7..bb2a7a4111 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchUtil.java @@ -47,9 +47,7 @@ class KeywordSearchUtil { return query; } - StringBuilder sb = new StringBuilder(); - sb.append("\"").append(query).append("\""); - return sb.toString(); + return "\""+query+"\""; } /** diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java index dcd485582c..a3994d43c7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java @@ -33,12 +33,9 @@ import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.CursorMarkParams; -import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.Version; -import static org.sleuthkit.autopsy.keywordsearch.RegexQuery.LOGGER; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute; @@ -53,7 +50,6 @@ import org.sleuthkit.datamodel.TskException; class LuceneQuery implements KeywordSearchQuery { private static final Logger logger = Logger.getLogger(LuceneQuery.class.getName()); - private final String keywordString; //original unescaped query private String keywordStringEscaped; private boolean isEscaped; private Keyword originalKeyword = null; @@ -75,10 +71,7 @@ class LuceneQuery implements KeywordSearchQuery { this.keywordList = keywordList; this.originalKeyword = keyword; - // @@@ BC: Long-term, we should try to get rid of this string and use only the - // keyword object. Refactoring did not make its way through this yet. - this.keywordString = keyword.getSearchTerm(); - this.keywordStringEscaped = this.keywordString; + this.keywordStringEscaped = this.originalKeyword.getSearchTerm(); } @Override @@ -100,7 +93,7 @@ class LuceneQuery implements KeywordSearchQuery { @Override public void escape() { - keywordStringEscaped = KeywordSearchUtil.escapeLuceneQuery(keywordString); + keywordStringEscaped = KeywordSearchUtil.escapeLuceneQuery(originalKeyword.getSearchTerm()); isEscaped = true; } @@ -121,22 +114,82 @@ class LuceneQuery implements KeywordSearchQuery { @Override public String getQueryString() { - return this.keywordString; + return this.originalKeyword.getSearchTerm(); + } + + @Override + public KeywordList getKeywordList() { + return keywordList; } @Override public QueryResults performQuery() throws KeywordSearchModuleException, NoOpenCoreException { + + final Server solrServer = KeywordSearch.getServer(); + double indexSchemaVersion = NumberUtils.toDouble(solrServer.getIndexInfo().getSchemaVersion()); + + SolrQuery solrQuery = createAndConfigureSolrQuery(KeywordSearchSettings.getShowSnippets()); + + final String strippedQueryString = StringUtils.strip(getQueryString(), "\""); + + String cursorMark = CursorMarkParams.CURSOR_MARK_START; + boolean allResultsProcessed = false; + List matches = new ArrayList<>(); + while (!allResultsProcessed) { + solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); + QueryResponse response = solrServer.query(solrQuery, SolrRequest.METHOD.POST); + SolrDocumentList resultList = response.getResults(); + // objectId_chunk -> "text" -> List of previews + Map>> highlightResponse = response.getHighlighting(); + + for (SolrDocument resultDoc : resultList) { + try { + /* + * for each result doc, check that the first occurence of + * that term is before the window. if all the ocurences + * start within the window, don't record them for this + * chunk, they will get picked up in the next one. + */ + final String docId = resultDoc.getFieldValue(Server.Schema.ID.toString()).toString(); + final Integer chunkSize = (Integer) resultDoc.getFieldValue(Server.Schema.CHUNK_SIZE.toString()); + final Collection content = resultDoc.getFieldValues(Server.Schema.CONTENT_STR.toString()); + + if (indexSchemaVersion < 2.0) { + //old schema versions don't support chunk_size or the content_str fields, so just accept hits + matches.add(createKeywordtHit(highlightResponse, docId)); + } else { + //check against file name and actual content seperately. + for (Object content_obj : content) { + String content_str = (String) content_obj; + //for new schemas, check that the hit is before the chunk/window boundary. + int firstOccurence = StringUtils.indexOfIgnoreCase(content_str, strippedQueryString); + //there is no chunksize field for "parent" entries in the index + if (chunkSize == null || chunkSize == 0 || (firstOccurence > -1 && firstOccurence < chunkSize)) { + matches.add(createKeywordtHit(highlightResponse, docId)); + } + } + } + } catch (TskException ex) { + throw new KeywordSearchModuleException(ex); + } + } + String nextCursorMark = response.getNextCursorMark(); + if (cursorMark.equals(nextCursorMark)) { + allResultsProcessed = true; + } + cursorMark = nextCursorMark; + } + QueryResults results = new QueryResults(this); //in case of single term literal query there is only 1 term - results.addResult(new Keyword(keywordString, true), - performLuceneQuery(KeywordSearchSettings.getShowSnippets())); + results.addResult(new Keyword(originalKeyword.getSearchTerm(), true), matches); return results; } @Override public boolean validate() { - return StringUtils.isNotBlank(keywordString); + return StringUtils.isNotBlank(originalKeyword.getSearchTerm()); } @Override @@ -149,7 +202,7 @@ class LuceneQuery implements KeywordSearchQuery { try { bba = hit.getContent().newArtifact(ARTIFACT_TYPE.TSK_KEYWORD_HIT); writeResult = new KeywordCachedArtifact(bba); - } catch (Exception e) { + } catch (TskCoreException e) { logger.log(Level.WARNING, "Error adding bb artifact for keyword hit", e); //NON-NLS return null; } @@ -158,13 +211,10 @@ class LuceneQuery implements KeywordSearchQuery { attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD_PREVIEW, MODULE_NAME, snippet)); } attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD, MODULE_NAME, foundKeyword.getSearchTerm())); - if ((listName != null) && (listName.equals("") == false)) { + if (StringUtils.isNotBlank(listName)) { attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_SET_NAME, MODULE_NAME, listName)); } - //bogus - workaround the dir tree table issue - //attributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID(), MODULE_NAME, "", "")); - //selector if (originalKeyword != null) { BlackboardAttribute.ATTRIBUTE_TYPE selType = originalKeyword.getArtifactAttributeType(); if (selType != null) { @@ -188,78 +238,10 @@ class LuceneQuery implements KeywordSearchQuery { return writeResult; } catch (TskCoreException e) { logger.log(Level.WARNING, "Error adding bb attributes to artifact", e); //NON-NLS + return null; } - return null; } - /** - * Perform the query and return results of unique files. - * - * @param snippets True if results should have a snippet - * - * @return list of KeywordHit objects. One per file with hit (ignores - * multiple hits of the word in the same doc) - * - */ - private List performLuceneQuery(boolean snippets) throws KeywordSearchModuleException, NoOpenCoreException { - List matches = new ArrayList<>(); - final Server solrServer = KeywordSearch.getServer(); - double indexSchemaVersion = NumberUtils.toDouble(solrServer.getIndexInfo().getSchemaVersion()); - - SolrQuery solrQuery = createAndConfigureSolrQuery(snippets); - - final String strippedQueryString = StringUtils.strip(getQueryString(), "\""); - - String cursorMark = CursorMarkParams.CURSOR_MARK_START; - boolean allResultsProcessed = false; - - while (!allResultsProcessed) { - solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); - QueryResponse response = solrServer.query(solrQuery, SolrRequest.METHOD.POST); - SolrDocumentList resultList = response.getResults(); - // objectId_chunk -> "text" -> List of previews - Map>> highlightResponse = response.getHighlighting(); - - for (SolrDocument resultDoc : resultList) { - try { - /* - * for each result, check that the first occurence of that - * term is before the window. if all the ocurences start - * within the window, don't record them for this chunk, they - * will get picked up in the next one. - */ - final String docId = resultDoc.getFieldValue(Server.Schema.ID.toString()).toString(); - final Integer chunkSize = (Integer) resultDoc.getFieldValue(Server.Schema.CHUNK_SIZE.toString()); - final Collection content = resultDoc.getFieldValues(Server.Schema.CONTENT_STR.toString()); - - if (indexSchemaVersion < 2.0) { - //old schema versions don't support chunk_size or the content_str fields, so just accept hits - matches.add(createKeywordtHit(highlightResponse, docId)); - } else { - //check against file name and actual content seperately. - for (Object content_obj : content) { - String content_str = (String) content_obj; - //for new schemas, check that the hit is before the chunk/window boundary. - int firstOccurence = StringUtils.indexOfIgnoreCase(content_str, strippedQueryString); - //there is no chunksize field for "parent" entries in the index - if (chunkSize == null || chunkSize == 0 || (firstOccurence > -1 && firstOccurence < chunkSize)) { - matches.add(createKeywordtHit(highlightResponse, docId)); - } - } - } - } catch (TskException ex) { - return matches; - } - } - String nextCursorMark = response.getNextCursorMark(); - if (cursorMark.equals(nextCursorMark)) { - allResultsProcessed = true; - } - cursorMark = nextCursorMark; - - } - return matches; - } /* * Create the query object for the stored keyword @@ -272,15 +254,15 @@ class LuceneQuery implements KeywordSearchQuery { SolrQuery q = new SolrQuery(); q.setShowDebugInfo(DEBUG); //debug // Wrap the query string in quotes if this is a literal search term. - String theQueryStr = originalKeyword.searchTermIsLiteral() + String queryStr = originalKeyword.searchTermIsLiteral() ? KeywordSearchUtil.quoteQuery(keywordStringEscaped) : keywordStringEscaped; // Run the query against an optional alternative field. if (field != null) { //use the optional field - theQueryStr = field + ":" + theQueryStr; + queryStr = field + ":" + queryStr; } - q.setQuery(theQueryStr); + q.setQuery(queryStr); q.setRows(MAX_RESULTS_PER_CURSOR_MARK); // Setting the sort order is necessary for cursor based paging to work. q.setSort(SolrQuery.SortClause.asc(Server.Schema.ID.toString())); @@ -294,29 +276,37 @@ class LuceneQuery implements KeywordSearchQuery { } if (snippets) { - q.addHighlightField(Server.Schema.TEXT.toString()); - //q.setHighlightSimplePre("«"); //original highlighter only - //q.setHighlightSimplePost("»"); //original highlighter only - q.setHighlightSnippets(1); - q.setHighlightFragsize(SNIPPET_LENGTH); - - //tune the highlighter - q.setParam("hl.useFastVectorHighlighter", "on"); //fast highlighter scales better than standard one NON-NLS - q.setParam("hl.tag.pre", "«"); //makes sense for FastVectorHighlighter only NON-NLS - q.setParam("hl.tag.post", "«"); //makes sense for FastVectorHighlighter only NON-NLS - q.setParam("hl.fragListBuilder", "simple"); //makes sense for FastVectorHighlighter only NON-NLS - - //Solr bug if fragCharSize is smaller than Query string, StringIndexOutOfBoundsException is thrown. - q.setParam("hl.fragCharSize", Integer.toString(theQueryStr.length())); //makes sense for FastVectorHighlighter only NON-NLS - - //docs says makes sense for the original Highlighter only, but not really - //analyze all content SLOW! consider lowering - q.setParam("hl.maxAnalyzedChars", Server.HL_ANALYZE_CHARS_UNLIMITED); //NON-NLS + configurwQueryForHighlighting(q); } return q; } + /** + * Configure the given query to return highlighting information. Must be + * called after setQuery() has been invoked on q. + * + * @param q The SolrQuery to configure. + */ + private static void configurwQueryForHighlighting(SolrQuery q) { + q.addHighlightField(HIGHLIGHT_FIELD); + q.setHighlightSnippets(1); + q.setHighlightFragsize(SNIPPET_LENGTH); + + //tune the highlighter + q.setParam("hl.useFastVectorHighlighter", "on"); //fast highlighter scales better than standard one NON-NLS + q.setParam("hl.tag.pre", "«"); //makes sense for FastVectorHighlighter only NON-NLS + q.setParam("hl.tag.post", "«"); //makes sense for FastVectorHighlighter only NON-NLS + q.setParam("hl.fragListBuilder", "simple"); //makes sense for FastVectorHighlighter only NON-NLS + + //Solr bug if fragCharSize is smaller than Query string, StringIndexOutOfBoundsException is thrown. + q.setParam("hl.fragCharSize", Integer.toString(q.getQuery().length())); //makes sense for FastVectorHighlighter only NON-NLS + + //docs says makes sense for the original Highlighter only, but not really + //analyze all content SLOW! consider lowering + q.setParam("hl.maxAnalyzedChars", Server.HL_ANALYZE_CHARS_UNLIMITED); //NON-NLS + } + private KeywordHit createKeywordtHit(Map>> highlightResponse, String docId) throws TskException { /** * Get the first snippet from the document if keyword search is @@ -331,7 +321,7 @@ class LuceneQuery implements KeywordSearchQuery { } } - return new KeywordHit(docId, snippet, keywordString); + return new KeywordHit(docId, snippet, originalKeyword.getSearchTerm()); } /** @@ -348,7 +338,7 @@ class LuceneQuery implements KeywordSearchQuery { * * @return */ - public static String querySnippet(String query, long solrObjectId, boolean isRegex, boolean group) throws NoOpenCoreException { + static String querySnippet(String query, long solrObjectId, boolean isRegex, boolean group) throws NoOpenCoreException { return querySnippet(query, solrObjectId, 0, isRegex, group); } @@ -367,62 +357,33 @@ class LuceneQuery implements KeywordSearchQuery { * * @return */ - public static String querySnippet(String query, long solrObjectId, int chunkID, boolean isRegex, boolean group) throws NoOpenCoreException { - Server solrServer = KeywordSearch.getServer(); - + static String querySnippet(String query, long solrObjectId, int chunkID, boolean isRegex, boolean group) throws NoOpenCoreException { SolrQuery q = new SolrQuery(); + q.setShowDebugInfo(DEBUG); //debug String queryStr; - if (isRegex) { - StringBuilder sb = new StringBuilder(); - sb.append(LuceneQuery.HIGHLIGHT_FIELD).append(":"); - if (group) { - sb.append("\""); - } - sb.append(query); - if (group) { - sb.append("\""); - } - - queryStr = sb.toString(); + queryStr = HIGHLIGHT_FIELD + ":" + + (group ? KeywordSearchUtil.quoteQuery(query) + : query); } else { - //simplify query/escaping and use default field - //always force grouping/quotes + /* + * simplify query/escaping and use default field always force + * grouping/quotes + */ queryStr = KeywordSearchUtil.quoteQuery(query); } - q.setQuery(queryStr); - String contentIDStr; - - if (chunkID == 0) { - contentIDStr = Long.toString(solrObjectId); - } else { - contentIDStr = Server.getChunkIdString(solrObjectId, chunkID); - } - + String contentIDStr = (chunkID == 0) + ? Long.toString(solrObjectId) + : Server.getChunkIdString(solrObjectId, chunkID); String idQuery = Server.Schema.ID.toString() + ":" + KeywordSearchUtil.escapeLuceneQuery(contentIDStr); - q.setShowDebugInfo(DEBUG); //debug q.addFilterQuery(idQuery); - q.addHighlightField(LuceneQuery.HIGHLIGHT_FIELD); - //q.setHighlightSimplePre("«"); //original highlighter only - //q.setHighlightSimplePost("»"); //original highlighter only - q.setHighlightSnippets(1); - q.setHighlightFragsize(SNIPPET_LENGTH); - //tune the highlighter - q.setParam("hl.useFastVectorHighlighter", "on"); //fast highlighter scales better than standard one NON-NLS - q.setParam("hl.tag.pre", "«"); //makes sense for FastVectorHighlighter only NON-NLS - q.setParam("hl.tag.post", "«"); //makes sense for FastVectorHighlighter only NON-NLS - q.setParam("hl.fragListBuilder", "simple"); //makes sense for FastVectorHighlighter only NON-NLS + configurwQueryForHighlighting(q); - //Solr bug if fragCharSize is smaller than Query string, StringIndexOutOfBoundsException is thrown. - q.setParam("hl.fragCharSize", Integer.toString(queryStr.length())); //makes sense for FastVectorHighlighter only NON-NLS - - //docs says makes sense for the original Highlighter only, but not really - //analyze all content SLOW! consider lowering - q.setParam("hl.maxAnalyzedChars", Server.HL_ANALYZE_CHARS_UNLIMITED); //NON-NLS + Server solrServer = KeywordSearch.getServer(); try { QueryResponse response = solrServer.query(q, METHOD.POST); @@ -446,42 +407,4 @@ class LuceneQuery implements KeywordSearchQuery { return ""; } } - - @Override - public KeywordList getKeywordList() { - return keywordList; - } - - /** - * Compares SolrDocuments based on their ID's. Two SolrDocuments with - * different chunk numbers are considered equal. - */ - static class SolrDocumentComparatorIgnoresChunkId implements Comparator { - - @Override - public int compare(SolrDocument left, SolrDocument right) { - // ID is in the form of ObjectId_Chunk - - final String idName = Server.Schema.ID.toString(); - - // get object id of left doc - String leftID = left.getFieldValue(idName).toString(); - int index = leftID.indexOf(Server.CHUNK_ID_SEPARATOR); - if (index != -1) { - leftID = leftID.substring(0, index); - } - - // get object id of right doc - String rightID = right.getFieldValue(idName).toString(); - index = rightID.indexOf(Server.CHUNK_ID_SEPARATOR); - if (index != -1) { - rightID = rightID.substring(0, index); - } - - Long leftLong = new Long(leftID); - Long rightLong = new Long(rightID); - return leftLong.compareTo(rightLong); - } - } - } From c068da3fcbb5f274c54990682375ddbc816dec29 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Sat, 11 Mar 2017 23:28:31 +0100 Subject: [PATCH 02/13] make fields final --- .../src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java index a3994d43c7..741928c92d 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java @@ -52,8 +52,8 @@ class LuceneQuery implements KeywordSearchQuery { private static final Logger logger = Logger.getLogger(LuceneQuery.class.getName()); private String keywordStringEscaped; private boolean isEscaped; - private Keyword originalKeyword = null; - private KeywordList keywordList = null; + private final Keyword originalKeyword ; + private final KeywordList keywordList ; private final List filters = new ArrayList<>(); private String field = null; private static final int MAX_RESULTS_PER_CURSOR_MARK = 512; @@ -70,7 +70,6 @@ class LuceneQuery implements KeywordSearchQuery { LuceneQuery(KeywordList keywordList, Keyword keyword) { this.keywordList = keywordList; this.originalKeyword = keyword; - this.keywordStringEscaped = this.originalKeyword.getSearchTerm(); } From 2e8272dba2794c5958fffb164365543bcbf8ebe2 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Wed, 8 Mar 2017 15:58:19 +0100 Subject: [PATCH 03/13] upgrade tika to 1.14 --- KeywordSearch/ivy.xml | 10 +- KeywordSearch/nbproject/project.properties | 163 +++++- KeywordSearch/nbproject/project.xml | 632 ++++++++++++++++----- 3 files changed, 634 insertions(+), 171 deletions(-) diff --git a/KeywordSearch/ivy.xml b/KeywordSearch/ivy.xml index 3728514fcd..01ba14e833 100644 --- a/KeywordSearch/ivy.xml +++ b/KeywordSearch/ivy.xml @@ -19,8 +19,8 @@ - - + + @@ -37,6 +37,10 @@ - + + + + diff --git a/KeywordSearch/nbproject/project.properties b/KeywordSearch/nbproject/project.properties index bb1793fe77..668ae6ee66 100644 --- a/KeywordSearch/nbproject/project.properties +++ b/KeywordSearch/nbproject/project.properties @@ -1,70 +1,173 @@ +file.reference.aopalliance-1.0.jar=release/modules/ext/aopalliance-1.0.jar file.reference.apache-mime4j-core-0.7.2.jar=release/modules/ext/apache-mime4j-core-0.7.2.jar file.reference.apache-mime4j-dom-0.7.2.jar=release/modules/ext/apache-mime4j-dom-0.7.2.jar +file.reference.asm-5.0.4.jar=release/modules/ext/asm-5.0.4.jar file.reference.asm-all-3.1.jar=release/modules/ext/asm-all-3.1.jar -file.reference.aspectjrt-1.6.11.jar=release/modules/ext/aspectjrt-1.6.11.jar -file.reference.bcmail-jdk15-1.45.jar=release/modules/ext/bcmail-jdk15-1.45.jar -file.reference.bcprov-jdk15-1.45.jar=release/modules/ext/bcprov-jdk15-1.45.jar -file.reference.commons-codec-1.5.jar=release/modules/ext/commons-codec-1.5.jar -file.reference.commons-compress-1.5.jar=release/modules/ext/commons-compress-1.5.jar +file.reference.bcmail-jdk15on-1.54.jar=release/modules/ext/bcmail-jdk15on-1.54.jar +file.reference.bcpkix-jdk15on-1.54.jar=release/modules/ext/bcpkix-jdk15on-1.54.jar +file.reference.bcprov-jdk15on-1.54.jar=release/modules/ext/bcprov-jdk15on-1.54.jar +file.reference.boilerpipe-1.1.0.jar=release/modules/ext/boilerpipe-1.1.0.jar +file.reference.bzip2-0.9.1.jar=release/modules/ext/bzip2-0.9.1.jar +file.reference.c3p0-0.9.1.1.jar=release/modules/ext/c3p0-0.9.1.1.jar +file.reference.cdm-4.5.5.jar=release/modules/ext/cdm-4.5.5.jar +file.reference.cleartk-util-2.0.0.jar=release/modules/ext/cleartk-util-2.0.0.jar +file.reference.commons-beanutils-1.9.2.jar=release/modules/ext/commons-beanutils-1.9.2.jar +file.reference.commons-codec-1.10.jar=release/modules/ext/commons-codec-1.10.jar +file.reference.commons-collections-3.2.2.jar=release/modules/ext/commons-collections-3.2.2.jar +file.reference.commons-collections4-4.1.jar=release/modules/ext/commons-collections4-4.1.jar +file.reference.commons-compress-1.12.jar=release/modules/ext/commons-compress-1.12.jar +file.reference.commons-csv-1.0.jar=release/modules/ext/commons-csv-1.0.jar +file.reference.commons-digester-1.8.1.jar=release/modules/ext/commons-digester-1.8.1.jar +file.reference.commons-exec-1.3.jar=release/modules/ext/commons-exec-1.3.jar file.reference.commons-io-2.3.jar=release/modules/ext/commons-io-2.3.jar file.reference.commons-io-2.5.jar=release/modules/ext/commons-io-2.5.jar -file.reference.commons-lang-2.4-javadoc.jar=release/modules/ext/commons-lang-2.4-javadoc.jar -file.reference.commons-lang-2.4-sources.jar=release/modules/ext/commons-lang-2.4-sources.jar -file.reference.commons-lang-2.4.jar=release/modules/ext/commons-lang-2.4.jar +file.reference.commons-lang-2.6.jar=release/modules/ext/commons-lang-2.6.jar +file.reference.commons-logging-1.2.jar=release/modules/ext/commons-logging-1.2.jar file.reference.commons-logging-api-1.1.jar=release/modules/ext/commons-logging-api-1.1.jar -file.reference.dom4j-1.6.1.jar=release/modules/ext/dom4j-1.6.1.jar -file.reference.fontbox-1.8.4.jar=release/modules/ext/fontbox-1.8.4.jar -file.reference.geronimo-stax-api_1.0_spec-1.0.1.jar=release/modules/ext/geronimo-stax-api_1.0_spec-1.0.1.jar +file.reference.commons-validator-1.5.1-javadoc.jar=release/modules/ext/commons-validator-1.5.1-javadoc.jar +file.reference.commons-validator-1.5.1-sources.jar=release/modules/ext/commons-validator-1.5.1-sources.jar +file.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1.jar +file.reference.commons-vfs2-2.0.jar=release/modules/ext/commons-vfs2-2.0.jar +file.reference.ctakes-core-3.2.2.jar=release/modules/ext/ctakes-core-3.2.2.jar +file.reference.ctakes-core-res-3.2.2.jar=release/modules/ext/ctakes-core-res-3.2.2.jar +file.reference.ctakes-type-system-3.2.2.jar=release/modules/ext/ctakes-type-system-3.2.2.jar +file.reference.ctakes-utils-3.2.2.jar=release/modules/ext/ctakes-utils-3.2.2.jar +file.reference.curvesapi-1.04.jar=release/modules/ext/curvesapi-1.04.jar +file.reference.cxf-core-3.0.3.jar=release/modules/ext/cxf-core-3.0.3.jar +file.reference.cxf-rt-frontend-jaxrs-3.0.3.jar=release/modules/ext/cxf-rt-frontend-jaxrs-3.0.3.jar +file.reference.cxf-rt-rs-client-3.0.3.jar=release/modules/ext/cxf-rt-rs-client-3.0.3.jar +file.reference.cxf-rt-transports-http-3.0.3.jar=release/modules/ext/cxf-rt-transports-http-3.0.3.jar +file.reference.ehcache-core-2.6.2.jar=release/modules/ext/ehcache-core-2.6.2.jar +file.reference.findstructapi-0.0.1.jar=release/modules/ext/findstructapi-0.0.1.jar +file.reference.fontbox-2.0.3.jar=release/modules/ext/fontbox-2.0.3.jar +file.reference.geoapi-3.0.0.jar=release/modules/ext/geoapi-3.0.0.jar +file.reference.grib-4.5.5.jar=release/modules/ext/grib-4.5.5.jar +file.reference.gson-2.2.4.jar=release/modules/ext/gson-2.2.4.jar +file.reference.guava-17.0.jar=release/modules/ext/guava-17.0.jar +file.reference.hamcrest-core-1.3.jar=release/modules/ext/hamcrest-core-1.3.jar file.reference.httpclient-4.3.1.jar=release/modules/ext/httpclient-4.3.1.jar file.reference.httpclient-4.4.1.jar=release/modules/ext/httpclient-4.4.1.jar file.reference.httpcore-4.3.jar=release/modules/ext/httpcore-4.3.jar file.reference.httpcore-4.4.1.jar=release/modules/ext/httpcore-4.4.1.jar file.reference.httpmime-4.3.1.jar=release/modules/ext/httpmime-4.3.1.jar file.reference.httpmime-4.4.1.jar=release/modules/ext/httpmime-4.4.1.jar +file.reference.httpservices-4.5.5.jar=release/modules/ext/httpservices-4.5.5.jar file.reference.icu4j-3.8.jar=release/modules/ext/icu4j-3.8.jar -file.reference.isoparser-1.0-RC-1.jar=release/modules/ext/isoparser-1.0-RC-1.jar +file.reference.isoparser-1.1.18.jar=release/modules/ext/isoparser-1.1.18.jar +file.reference.jackcess-2.1.4.jar=release/modules/ext/jackcess-2.1.4.jar +file.reference.jackcess-encrypt-2.1.1.jar=release/modules/ext/jackcess-encrypt-2.1.1.jar +file.reference.jackson-annotations-2.5.4.jar=release/modules/ext/jackson-annotations-2.5.4.jar +file.reference.jackson-core-2.8.1.jar=release/modules/ext/jackson-core-2.8.1.jar +file.reference.jackson-databind-2.5.4.jar=release/modules/ext/jackson-databind-2.5.4.jar +file.reference.jakarta-regexp-1.4.jar=release/modules/ext/jakarta-regexp-1.4.jar +file.reference.java-libpst-0.8.1.jar=release/modules/ext/java-libpst-0.8.1.jar +file.reference.javax.annotation-api-1.2.jar=release/modules/ext/javax.annotation-api-1.2.jar +file.reference.javax.ws.rs-api-2.0.1.jar=release/modules/ext/javax.ws.rs-api-2.0.1.jar +file.reference.jcip-annotations-1.0.jar=release/modules/ext/jcip-annotations-1.0.jar +file.reference.jcl-over-slf4j-1.7.7.jar=release/modules/ext/jcl-over-slf4j-1.7.7.jar +file.reference.jcommander-1.35.jar=release/modules/ext/jcommander-1.35.jar file.reference.jdom-1.0.jar=release/modules/ext/jdom-1.0.jar -file.reference.jempbox-1.8.4.jar=release/modules/ext/jempbox-1.8.4.jar +file.reference.jdom2-2.0.4.jar=release/modules/ext/jdom2-2.0.4.jar +file.reference.jempbox-1.8.12.jar=release/modules/ext/jempbox-1.8.12.jar file.reference.jericho-html-3.3-javadoc.jar=release/modules/ext/jericho-html-3.3-javadoc.jar file.reference.jericho-html-3.3-sources.jar=release/modules/ext/jericho-html-3.3-sources.jar file.reference.jericho-html-3.3.jar=release/modules/ext/jericho-html-3.3.jar +file.reference.jhighlight-1.0.2.jar=release/modules/ext/jhighlight-1.0.2.jar +file.reference.jj2000-5.2.jar=release/modules/ext/jj2000-5.2.jar +file.reference.jmatio-1.2.jar=release/modules/ext/jmatio-1.2.jar +file.reference.jna-4.1.0.jar=release/modules/ext/jna-4.1.0.jar +file.reference.joda-time-2.2.jar=release/modules/ext/joda-time-2.2.jar +file.reference.json-20140107.jar=release/modules/ext/json-20140107.jar +file.reference.json-simple-1.1.1.jar=release/modules/ext/json-simple-1.1.1.jar +file.reference.jsoup-1.7.2.jar=release/modules/ext/jsoup-1.7.2.jar +file.reference.jsr-275-0.9.3.jar=release/modules/ext/jsr-275-0.9.3.jar +file.reference.junit-4.11.jar=release/modules/ext/junit-4.11.jar file.reference.juniversalchardet-1.0.3.jar=release/modules/ext/juniversalchardet-1.0.3.jar +file.reference.junrar-0.7.jar=release/modules/ext/junrar-0.7.jar +file.reference.jVinci-2.6.0.jar=release/modules/ext/jVinci-2.6.0.jar +file.reference.jwnl-1.3.3.jar=release/modules/ext/jwnl-1.3.3.jar +file.reference.libsvm-3.1.jar=release/modules/ext/libsvm-3.1.jar file.reference.log4j-1.2.17.jar=release/modules/ext/log4j-1.2.17.jar -file.reference.metadata-extractor-2.7.2.jar=release/modules/ext/metadata-extractor-2.7.2.jar -file.reference.netcdf-4.2-min.jar=release/modules/ext/netcdf-4.2-min.jar +file.reference.lucene-analyzers-common-4.0.0.jar=release/modules/ext/lucene-analyzers-common-4.0.0.jar +file.reference.lucene-core-4.0.0.jar=release/modules/ext/lucene-core-4.0.0.jar +file.reference.lucene-queries-4.0.0.jar=release/modules/ext/lucene-queries-4.0.0.jar +file.reference.lucene-queryparser-4.0.0.jar=release/modules/ext/lucene-queryparser-4.0.0.jar +file.reference.lucene-sandbox-4.0.0.jar=release/modules/ext/lucene-sandbox-4.0.0.jar +file.reference.maven-scm-api-1.4.jar=release/modules/ext/maven-scm-api-1.4.jar +file.reference.maven-scm-provider-svn-commons-1.4.jar=release/modules/ext/maven-scm-provider-svn-commons-1.4.jar +file.reference.maven-scm-provider-svnexe-1.4.jar=release/modules/ext/maven-scm-provider-svnexe-1.4.jar +file.reference.metadata-extractor-2.9.1.jar=release/modules/ext/metadata-extractor-2.9.1.jar +file.reference.netcdf4-4.5.5.jar=release/modules/ext/netcdf4-4.5.5.jar file.reference.noggit-0.5.jar=release/modules/ext/noggit-0.5.jar file.reference.noggit-0.6.jar=release/modules/ext/noggit-0.6.jar +file.reference.openaifsm-0.0.1.jar=release/modules/ext/openaifsm-0.0.1.jar +file.reference.opennlp-maxent-3.0.3.jar=release/modules/ext/opennlp-maxent-3.0.3.jar +file.reference.opennlp-tools-1.5.3.jar=release/modules/ext/opennlp-tools-1.5.3.jar file.reference.org.apache.felix.scr.annotations-1.6.0.jar=release/modules/ext/org.apache.felix.scr.annotations-1.6.0.jar file.reference.org.apache.felix.scr.generator-1.1.2.jar=release/modules/ext/org.apache.felix.scr.generator-1.1.2.jar file.reference.org.osgi.compendium-4.0.0.jar=release/modules/ext/org.osgi.compendium-4.0.0.jar file.reference.org.osgi.core-4.0.0.jar=release/modules/ext/org.osgi.core-4.0.0.jar -file.reference.pdfbox-1.8.4.jar=release/modules/ext/pdfbox-1.8.4.jar -file.reference.poi-3.10-beta2.jar=release/modules/ext/poi-3.10-beta2.jar -file.reference.poi-ooxml-3.10-beta2.jar=release/modules/ext/poi-ooxml-3.10-beta2.jar -file.reference.poi-ooxml-schemas-3.10-beta2.jar=release/modules/ext/poi-ooxml-schemas-3.10-beta2.jar -file.reference.poi-scratchpad-3.10-beta2.jar=release/modules/ext/poi-scratchpad-3.10-beta2.jar +file.reference.pdfbox-2.0.3.jar=release/modules/ext/pdfbox-2.0.3.jar +file.reference.pdfbox-debugger-2.0.3.jar=release/modules/ext/pdfbox-debugger-2.0.3.jar +file.reference.pdfbox-tools-2.0.3.jar=release/modules/ext/pdfbox-tools-2.0.3.jar +file.reference.plexus-utils-1.5.6.jar=release/modules/ext/plexus-utils-1.5.6.jar +file.reference.poi-3.15.jar=release/modules/ext/poi-3.15.jar +file.reference.poi-ooxml-3.15.jar=release/modules/ext/poi-ooxml-3.15.jar +file.reference.poi-ooxml-schemas-3.15.jar=release/modules/ext/poi-ooxml-schemas-3.15.jar +file.reference.poi-scratchpad-3.15.jar=release/modules/ext/poi-scratchpad-3.15.jar +file.reference.protobuf-java-2.5.0.jar=release/modules/ext/protobuf-java-2.5.0.jar file.reference.qdox-1.12.jar=release/modules/ext/qdox-1.12.jar -file.reference.rome-0.9.jar=release/modules/ext/rome-0.9.jar +file.reference.quartz-2.2.0.jar=release/modules/ext/quartz-2.2.0.jar +file.reference.regexp-1.3.jar=release/modules/ext/regexp-1.3.jar +file.reference.rome-1.5.1.jar=release/modules/ext/rome-1.5.1.jar +file.reference.rome-utils-1.5.1.jar=release/modules/ext/rome-utils-1.5.1.jar +file.reference.sis-metadata-0.6.jar=release/modules/ext/sis-metadata-0.6.jar +file.reference.sis-netcdf-0.6.jar=release/modules/ext/sis-netcdf-0.6.jar +file.reference.sis-referencing-0.6.jar=release/modules/ext/sis-referencing-0.6.jar +file.reference.sis-storage-0.6.jar=release/modules/ext/sis-storage-0.6.jar +file.reference.sis-utility-0.6.jar=release/modules/ext/sis-utility-0.6.jar +file.reference.slf4j-api-1.7.12.jar=release/modules/ext/slf4j-api-1.7.12.jar file.reference.solr-solrj-4.9.1-javadoc.jar=release/modules/ext/solr-solrj-4.9.1-javadoc.jar file.reference.solr-solrj-4.9.1-sources.jar=release/modules/ext/solr-solrj-4.9.1-sources.jar file.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1.jar file.reference.solr-solrj-6.2.1-javadoc.jar=release/modules/ext/solr-solrj-6.2.1-javadoc.jar file.reference.solr-solrj-6.2.1-sources.jar=release/modules/ext/solr-solrj-6.2.1-sources.jar file.reference.solr-solrj-6.2.1.jar=release/modules/ext/solr-solrj-6.2.1.jar +file.reference.spring-aop-3.1.2.RELEASE.jar=release/modules/ext/spring-aop-3.1.2.RELEASE.jar +file.reference.spring-asm-3.1.2.RELEASE.jar=release/modules/ext/spring-asm-3.1.2.RELEASE.jar +file.reference.spring-beans-3.1.2.RELEASE.jar=release/modules/ext/spring-beans-3.1.2.RELEASE.jar +file.reference.spring-context-3.1.2.RELEASE.jar=release/modules/ext/spring-context-3.1.2.RELEASE.jar +file.reference.spring-core-3.1.2.RELEASE.jar=release/modules/ext/spring-core-3.1.2.RELEASE.jar +file.reference.spring-expression-3.1.2.RELEASE.jar=release/modules/ext/spring-expression-3.1.2.RELEASE.jar +file.reference.sqlite-jdbc-3.8.11.2.jar=release/modules/ext/sqlite-jdbc-3.8.11.2.jar +file.reference.sqlwrapper-0.0.1.jar=release/modules/ext/sqlwrapper-0.0.1.jar +file.reference.stax2-api-3.1.4.jar=release/modules/ext/stax2-api-3.1.4.jar file.reference.tagsoup-1.2.1.jar=release/modules/ext/tagsoup-1.2.1.jar -file.reference.tika-core-1.5.jar=release/modules/ext/tika-core-1.5.jar -file.reference.tika-parsers-1.5.jar=release/modules/ext/tika-parsers-1.5.jar -file.reference.vorbis-java-core-0.1-tests.jar=release/modules/ext/vorbis-java-core-0.1-tests.jar -file.reference.vorbis-java-tika-0.1.jar=release/modules/ext/vorbis-java-tika-0.1.jar -file.reference.xmlbeans-2.3.0.jar=release/modules/ext/xmlbeans-2.3.0.jar -file.reference.xmpcore-5.1.2.jar=release/modules/ext/xmpcore-5.1.2.jar +file.reference.tika-core-1.14.jar=release/modules/ext/tika-core-1.14.jar +file.reference.tika-parsers-1.14-javadoc.jar=release/modules/ext/tika-parsers-1.14-javadoc.jar +file.reference.tika-parsers-1.14-sources.jar=release/modules/ext/tika-parsers-1.14-sources.jar +file.reference.tika-parsers-1.14.jar=release/modules/ext/tika-parsers-1.14.jar +file.reference.udunits-4.5.5.jar=release/modules/ext/udunits-4.5.5.jar +file.reference.uimafit-core-2.1.0.jar=release/modules/ext/uimafit-core-2.1.0.jar +file.reference.uimaj-adapter-vinci-2.6.0.jar=release/modules/ext/uimaj-adapter-vinci-2.6.0.jar +file.reference.uimaj-core-2.5.0.jar=release/modules/ext/uimaj-core-2.5.0.jar +file.reference.uimaj-cpe-2.6.0.jar=release/modules/ext/uimaj-cpe-2.6.0.jar +file.reference.uimaj-document-annotation-2.5.0.jar=release/modules/ext/uimaj-document-annotation-2.5.0.jar +file.reference.uimaj-examples-2.4.0.jar=release/modules/ext/uimaj-examples-2.4.0.jar +file.reference.uimaj-tools-2.6.0.jar=release/modules/ext/uimaj-tools-2.6.0.jar +file.reference.vorbis-java-core-0.8.jar=release/modules/ext/vorbis-java-core-0.8.jar +file.reference.vorbis-java-tika-0.8.jar=release/modules/ext/vorbis-java-tika-0.8.jar +file.reference.woodstox-core-asl-4.4.1.jar=release/modules/ext/woodstox-core-asl-4.4.1.jar +file.reference.xmlbeans-2.6.0.jar=release/modules/ext/xmlbeans-2.6.0.jar +file.reference.xmlschema-core-2.1.0.jar=release/modules/ext/xmlschema-core-2.1.0.jar file.reference.xmpcore-5.1.2.jar=release/modules/ext/xmpcore-5.1.2.jar +file.reference.xz-1.5.jar=release/modules/ext/xz-1.5.jar +file.reference.zookeeper-3.4.6.jar=release/modules/ext/zookeeper-3.4.6.jar javac.source=1.8 javac.compilerargs=-Xlint -Xlint:-serial +javadoc.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1-javadoc.jar license.file=../LICENSE-2.0.txt nbm.homepage=http://www.sleuthkit.org/autopsy/ nbm.needs.restart=true -spec.version.base=6.3 -javadoc.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1-javadoc.jar -file.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1.jar source.reference.commons-validator-1.5.1.jar=release/modules/ext/commons-validator-1.5.1-sources.jar +spec.version.base=6.3 diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml index 2edea79b5b..3e8c0d4bd4 100644 --- a/KeywordSearch/nbproject/project.xml +++ b/KeywordSearch/nbproject/project.xml @@ -133,169 +133,129 @@ - org.apache.commons.lang - org.apache.commons.lang.builder - org.apache.commons.lang.enums - org.apache.commons.lang.exception - org.apache.commons.lang.math - org.apache.commons.lang.mutable - org.apache.commons.lang.text - org.apache.commons.lang.time org.apache.commons.logging.impl - org.apache.tika - org.apache.tika.config - org.apache.tika.detect - org.apache.tika.exception - org.apache.tika.extractor - org.apache.tika.fork - org.apache.tika.io - org.apache.tika.language - org.apache.tika.metadata - org.apache.tika.mime - org.apache.tika.parser - org.apache.tika.parser.asm - org.apache.tika.parser.audio - org.apache.tika.parser.chm - org.apache.tika.parser.chm.accessor - org.apache.tika.parser.chm.assertion - org.apache.tika.parser.chm.core - org.apache.tika.parser.chm.exception - org.apache.tika.parser.chm.lzx - org.apache.tika.parser.crypto - org.apache.tika.parser.dwg - org.apache.tika.parser.epub - org.apache.tika.parser.executable - org.apache.tika.parser.external - org.apache.tika.parser.feed - org.apache.tika.parser.font - org.apache.tika.parser.hdf - org.apache.tika.parser.html - org.apache.tika.parser.image - org.apache.tika.parser.image.xmp - org.apache.tika.parser.internal - org.apache.tika.parser.iptc - org.apache.tika.parser.iwork - org.apache.tika.parser.jpeg - org.apache.tika.parser.mail - org.apache.tika.parser.mbox - org.apache.tika.parser.microsoft - org.apache.tika.parser.microsoft.ooxml - org.apache.tika.parser.mp3 - org.apache.tika.parser.mp4 - org.apache.tika.parser.netcdf - org.apache.tika.parser.odf - org.apache.tika.parser.opendocument - org.apache.tika.parser.pdf - org.apache.tika.parser.pkg - org.apache.tika.parser.prt - org.apache.tika.parser.rtf org.apache.tika.parser.txt - org.apache.tika.parser.video - org.apache.tika.parser.xml - org.apache.tika.sax - org.apache.tika.sax.xpath - org.apache.tika.utils org.sleuthkit.autopsy.keywordsearch - ext/bcmail-jdk15-1.45.jar - release/modules/ext/bcmail-jdk15-1.45.jar + ext/commons-validator-1.5.1-sources.jar + release/modules/ext/commons-validator-1.5.1-sources.jar - ext/solr-solrj-6.2.1-javadoc.jar - release/modules/ext/solr-solrj-6.2.1-javadoc.jar + ext/commons-digester-1.8.1.jar + release/modules/ext/commons-digester-1.8.1.jar + + + ext/jwnl-1.3.3.jar + release/modules/ext/jwnl-1.3.3.jar + + + ext/tika-core-1.14.jar + release/modules/ext/tika-core-1.14.jar ext/httpmime-4.4.1.jar release/modules/ext/httpmime-4.4.1.jar - ext/tika-parsers-1.5.jar - release/modules/ext/tika-parsers-1.5.jar + ext/lucene-queryparser-4.0.0.jar + release/modules/ext/lucene-queryparser-4.0.0.jar - ext/jericho-html-3.3.jar - release/modules/ext/jericho-html-3.3.jar + ext/uimaj-examples-2.4.0.jar + release/modules/ext/uimaj-examples-2.4.0.jar + + + ext/cdm-4.5.5.jar + release/modules/ext/cdm-4.5.5.jar + + + ext/gson-2.2.4.jar + release/modules/ext/gson-2.2.4.jar ext/org.osgi.compendium-4.0.0.jar release/modules/ext/org.osgi.compendium-4.0.0.jar - ext/xmlbeans-2.3.0.jar - release/modules/ext/xmlbeans-2.3.0.jar + ext/geoapi-3.0.0.jar + release/modules/ext/geoapi-3.0.0.jar - ext/jempbox-1.8.4.jar - release/modules/ext/jempbox-1.8.4.jar + ext/hamcrest-core-1.3.jar + release/modules/ext/hamcrest-core-1.3.jar - ext/poi-ooxml-3.10-beta2.jar - release/modules/ext/poi-ooxml-3.10-beta2.jar + ext/boilerpipe-1.1.0.jar + release/modules/ext/boilerpipe-1.1.0.jar ext/commons-logging-api-1.1.jar release/modules/ext/commons-logging-api-1.1.jar - ext/asm-all-3.1.jar - release/modules/ext/asm-all-3.1.jar + ext/jakarta-regexp-1.4.jar + release/modules/ext/jakarta-regexp-1.4.jar - ext/poi-3.10-beta2.jar - release/modules/ext/poi-3.10-beta2.jar + ext/xmlbeans-2.6.0.jar + release/modules/ext/xmlbeans-2.6.0.jar - ext/icu4j-3.8.jar - release/modules/ext/icu4j-3.8.jar + ext/maven-scm-api-1.4.jar + release/modules/ext/maven-scm-api-1.4.jar - ext/fontbox-1.8.4.jar - release/modules/ext/fontbox-1.8.4.jar + ext/quartz-2.2.0.jar + release/modules/ext/quartz-2.2.0.jar - ext/xmpcore-5.1.2.jar - release/modules/ext/xmpcore-5.1.2.jar + ext/jackcess-2.1.4.jar + release/modules/ext/jackcess-2.1.4.jar - ext/metadata-extractor-2.7.2.jar - release/modules/ext/metadata-extractor-2.7.2.jar + ext/slf4j-api-1.7.12.jar + release/modules/ext/slf4j-api-1.7.12.jar - ext/tagsoup-1.2.1.jar - release/modules/ext/tagsoup-1.2.1.jar + ext/guava-17.0.jar + release/modules/ext/guava-17.0.jar - ext/commons-compress-1.5.jar - release/modules/ext/commons-compress-1.5.jar + ext/opennlp-maxent-3.0.3.jar + release/modules/ext/opennlp-maxent-3.0.3.jar - ext/commons-lang-2.4-javadoc.jar - release/modules/ext/commons-lang-2.4-javadoc.jar + ext/jVinci-2.6.0.jar + release/modules/ext/jVinci-2.6.0.jar - ext/org.osgi.core-4.0.0.jar - release/modules/ext/org.osgi.core-4.0.0.jar + ext/json-simple-1.1.1.jar + release/modules/ext/json-simple-1.1.1.jar - ext/isoparser-1.0-RC-1.jar - release/modules/ext/isoparser-1.0-RC-1.jar + ext/sis-utility-0.6.jar + release/modules/ext/sis-utility-0.6.jar + + + ext/jj2000-5.2.jar + release/modules/ext/jj2000-5.2.jar + + + ext/jhighlight-1.0.2.jar + release/modules/ext/jhighlight-1.0.2.jar + + + ext/uimaj-cpe-2.6.0.jar + release/modules/ext/uimaj-cpe-2.6.0.jar ext/log4j-1.2.17.jar release/modules/ext/log4j-1.2.17.jar - ext/commons-lang-2.4-sources.jar - release/modules/ext/commons-lang-2.4-sources.jar - - - ext/tika-core-1.5.jar - release/modules/ext/tika-core-1.5.jar - - - ext/jericho-html-3.3-javadoc.jar - release/modules/ext/jericho-html-3.3-javadoc.jar + ext/ctakes-utils-3.2.2.jar + release/modules/ext/ctakes-utils-3.2.2.jar ext/solr-solrj-6.2.1.jar @@ -305,13 +265,345 @@ ext/apache-mime4j-dom-0.7.2.jar release/modules/ext/apache-mime4j-dom-0.7.2.jar + + ext/commons-compress-1.12.jar + release/modules/ext/commons-compress-1.12.jar + + + ext/openaifsm-0.0.1.jar + release/modules/ext/openaifsm-0.0.1.jar + + + ext/stax2-api-3.1.4.jar + release/modules/ext/stax2-api-3.1.4.jar + + + ext/commons-collections4-4.1.jar + release/modules/ext/commons-collections4-4.1.jar + + + ext/cxf-rt-rs-client-3.0.3.jar + release/modules/ext/cxf-rt-rs-client-3.0.3.jar + + + ext/jackson-annotations-2.5.4.jar + release/modules/ext/jackson-annotations-2.5.4.jar + + + ext/findstructapi-0.0.1.jar + release/modules/ext/findstructapi-0.0.1.jar + + + ext/jcommander-1.35.jar + release/modules/ext/jcommander-1.35.jar + + + ext/sis-metadata-0.6.jar + release/modules/ext/sis-metadata-0.6.jar + + + ext/isoparser-1.1.18.jar + release/modules/ext/isoparser-1.1.18.jar + + + ext/vorbis-java-core-0.8.jar + release/modules/ext/vorbis-java-core-0.8.jar + + + ext/jdom2-2.0.4.jar + release/modules/ext/jdom2-2.0.4.jar + + + ext/java-libpst-0.8.1.jar + release/modules/ext/java-libpst-0.8.1.jar + + + ext/commons-codec-1.10.jar + release/modules/ext/commons-codec-1.10.jar + + + ext/lucene-queries-4.0.0.jar + release/modules/ext/lucene-queries-4.0.0.jar + + + ext/bcprov-jdk15on-1.54.jar + release/modules/ext/bcprov-jdk15on-1.54.jar + + + ext/poi-ooxml-schemas-3.15.jar + release/modules/ext/poi-ooxml-schemas-3.15.jar + + + ext/poi-scratchpad-3.15.jar + release/modules/ext/poi-scratchpad-3.15.jar + + + ext/commons-vfs2-2.0.jar + release/modules/ext/commons-vfs2-2.0.jar + + + ext/jcl-over-slf4j-1.7.7.jar + release/modules/ext/jcl-over-slf4j-1.7.7.jar + + + ext/tika-parsers-1.14.jar + release/modules/ext/tika-parsers-1.14.jar + + + ext/jackcess-encrypt-2.1.1.jar + release/modules/ext/jackcess-encrypt-2.1.1.jar + + + ext/spring-expression-3.1.2.RELEASE.jar + release/modules/ext/spring-expression-3.1.2.RELEASE.jar + + + ext/lucene-analyzers-common-4.0.0.jar + release/modules/ext/lucene-analyzers-common-4.0.0.jar + + + ext/tika-parsers-1.14-sources.jar + release/modules/ext/tika-parsers-1.14-sources.jar + + + ext/javax.ws.rs-api-2.0.1.jar + release/modules/ext/javax.ws.rs-api-2.0.1.jar + + + ext/junrar-0.7.jar + release/modules/ext/junrar-0.7.jar + + + ext/libsvm-3.1.jar + release/modules/ext/libsvm-3.1.jar + + + ext/xmlschema-core-2.1.0.jar + release/modules/ext/xmlschema-core-2.1.0.jar + + + ext/jna-4.1.0.jar + release/modules/ext/jna-4.1.0.jar + + + ext/xz-1.5.jar + release/modules/ext/xz-1.5.jar + + + ext/qdox-1.12.jar + release/modules/ext/qdox-1.12.jar + + + ext/bcpkix-jdk15on-1.54.jar + release/modules/ext/bcpkix-jdk15on-1.54.jar + + + ext/bzip2-0.9.1.jar + release/modules/ext/bzip2-0.9.1.jar + + + ext/grib-4.5.5.jar + release/modules/ext/grib-4.5.5.jar + + + ext/maven-scm-provider-svn-commons-1.4.jar + release/modules/ext/maven-scm-provider-svn-commons-1.4.jar + + + ext/poi-3.15.jar + release/modules/ext/poi-3.15.jar + + + ext/spring-aop-3.1.2.RELEASE.jar + release/modules/ext/spring-aop-3.1.2.RELEASE.jar + + + ext/json-20140107.jar + release/modules/ext/json-20140107.jar + + + ext/uimaj-core-2.5.0.jar + release/modules/ext/uimaj-core-2.5.0.jar + + + ext/pdfbox-2.0.3.jar + release/modules/ext/pdfbox-2.0.3.jar + + + ext/jmatio-1.2.jar + release/modules/ext/jmatio-1.2.jar + + + ext/metadata-extractor-2.9.1.jar + release/modules/ext/metadata-extractor-2.9.1.jar + + + ext/commons-csv-1.0.jar + release/modules/ext/commons-csv-1.0.jar + + + ext/commons-validator-1.5.1-javadoc.jar + release/modules/ext/commons-validator-1.5.1-javadoc.jar + + + ext/solr-solrj-6.2.1-javadoc.jar + release/modules/ext/solr-solrj-6.2.1-javadoc.jar + + + ext/lucene-sandbox-4.0.0.jar + release/modules/ext/lucene-sandbox-4.0.0.jar + + + ext/jericho-html-3.3.jar + release/modules/ext/jericho-html-3.3.jar + + + ext/jsr-275-0.9.3.jar + release/modules/ext/jsr-275-0.9.3.jar + + + ext/httpservices-4.5.5.jar + release/modules/ext/httpservices-4.5.5.jar + + + ext/plexus-utils-1.5.6.jar + release/modules/ext/plexus-utils-1.5.6.jar + + + ext/fontbox-2.0.3.jar + release/modules/ext/fontbox-2.0.3.jar + + + ext/bcmail-jdk15on-1.54.jar + release/modules/ext/bcmail-jdk15on-1.54.jar + + + ext/spring-beans-3.1.2.RELEASE.jar + release/modules/ext/spring-beans-3.1.2.RELEASE.jar + + + ext/asm-all-3.1.jar + release/modules/ext/asm-all-3.1.jar + + + ext/tika-parsers-1.14-javadoc.jar + release/modules/ext/tika-parsers-1.14-javadoc.jar + + + ext/icu4j-3.8.jar + release/modules/ext/icu4j-3.8.jar + + + ext/curvesapi-1.04.jar + release/modules/ext/curvesapi-1.04.jar + + + ext/xmpcore-5.1.2.jar + release/modules/ext/xmpcore-5.1.2.jar + + + ext/sis-referencing-0.6.jar + release/modules/ext/sis-referencing-0.6.jar + + + ext/ctakes-core-res-3.2.2.jar + release/modules/ext/ctakes-core-res-3.2.2.jar + + + ext/joda-time-2.2.jar + release/modules/ext/joda-time-2.2.jar + + + ext/tagsoup-1.2.1.jar + release/modules/ext/tagsoup-1.2.1.jar + + + ext/lucene-core-4.0.0.jar + release/modules/ext/lucene-core-4.0.0.jar + + + ext/asm-5.0.4.jar + release/modules/ext/asm-5.0.4.jar + + + ext/commons-logging-1.2.jar + release/modules/ext/commons-logging-1.2.jar + + + ext/jackson-core-2.8.1.jar + release/modules/ext/jackson-core-2.8.1.jar + + + ext/org.osgi.core-4.0.0.jar + release/modules/ext/org.osgi.core-4.0.0.jar + + + ext/c3p0-0.9.1.1.jar + release/modules/ext/c3p0-0.9.1.1.jar + + + ext/sqlwrapper-0.0.1.jar + release/modules/ext/sqlwrapper-0.0.1.jar + + + ext/jericho-html-3.3-javadoc.jar + release/modules/ext/jericho-html-3.3-javadoc.jar + + + ext/udunits-4.5.5.jar + release/modules/ext/udunits-4.5.5.jar + + + ext/aopalliance-1.0.jar + release/modules/ext/aopalliance-1.0.jar + + + ext/commons-collections-3.2.2.jar + release/modules/ext/commons-collections-3.2.2.jar + + + ext/cxf-rt-frontend-jaxrs-3.0.3.jar + release/modules/ext/cxf-rt-frontend-jaxrs-3.0.3.jar + + + ext/uimaj-document-annotation-2.5.0.jar + release/modules/ext/uimaj-document-annotation-2.5.0.jar + + + ext/woodstox-core-asl-4.4.1.jar + release/modules/ext/woodstox-core-asl-4.4.1.jar + + + ext/poi-ooxml-3.15.jar + release/modules/ext/poi-ooxml-3.15.jar + ext/org.apache.felix.scr.generator-1.1.2.jar release/modules/ext/org.apache.felix.scr.generator-1.1.2.jar - ext/poi-scratchpad-3.10-beta2.jar - release/modules/ext/poi-scratchpad-3.10-beta2.jar + ext/zookeeper-3.4.6.jar + release/modules/ext/zookeeper-3.4.6.jar + + + ext/cxf-rt-transports-http-3.0.3.jar + release/modules/ext/cxf-rt-transports-http-3.0.3.jar + + + ext/pdfbox-debugger-2.0.3.jar + release/modules/ext/pdfbox-debugger-2.0.3.jar + + + ext/jackson-databind-2.5.4.jar + release/modules/ext/jackson-databind-2.5.4.jar + + + ext/spring-core-3.1.2.RELEASE.jar + release/modules/ext/spring-core-3.1.2.RELEASE.jar + + + ext/netcdf4-4.5.5.jar + release/modules/ext/netcdf4-4.5.5.jar ext/httpclient-4.4.1.jar @@ -325,17 +617,29 @@ ext/solr-solrj-6.2.1-sources.jar release/modules/ext/solr-solrj-6.2.1-sources.jar + + ext/spring-asm-3.1.2.RELEASE.jar + release/modules/ext/spring-asm-3.1.2.RELEASE.jar + ext/commons-io-2.5.jar release/modules/ext/commons-io-2.5.jar - ext/netcdf-4.2-min.jar - release/modules/ext/netcdf-4.2-min.jar + ext/junit-4.11.jar + release/modules/ext/junit-4.11.jar - ext/vorbis-java-core-0.1-tests.jar - release/modules/ext/vorbis-java-core-0.1-tests.jar + ext/protobuf-java-2.5.0.jar + release/modules/ext/protobuf-java-2.5.0.jar + + + ext/sis-netcdf-0.6.jar + release/modules/ext/sis-netcdf-0.6.jar + + + ext/javax.annotation-api-1.2.jar + release/modules/ext/javax.annotation-api-1.2.jar ext/httpcore-4.4.1.jar @@ -354,60 +658,112 @@ release/modules/ext/org.apache.felix.scr.annotations-1.6.0.jar - ext/commons-codec-1.5.jar - release/modules/ext/commons-codec-1.5.jar + ext/commons-lang-2.6.jar + release/modules/ext/commons-lang-2.6.jar + + + ext/sqlite-jdbc-3.8.11.2.jar + release/modules/ext/sqlite-jdbc-3.8.11.2.jar + + + ext/jempbox-1.8.12.jar + release/modules/ext/jempbox-1.8.12.jar + + + ext/maven-scm-provider-svnexe-1.4.jar + release/modules/ext/maven-scm-provider-svnexe-1.4.jar + + + ext/opennlp-tools-1.5.3.jar + release/modules/ext/opennlp-tools-1.5.3.jar ext/apache-mime4j-core-0.7.2.jar release/modules/ext/apache-mime4j-core-0.7.2.jar - ext/qdox-1.12.jar - release/modules/ext/qdox-1.12.jar + ext/rome-utils-1.5.1.jar + release/modules/ext/rome-utils-1.5.1.jar + + + ext/pdfbox-tools-2.0.3.jar + release/modules/ext/pdfbox-tools-2.0.3.jar + + + ext/sis-storage-0.6.jar + release/modules/ext/sis-storage-0.6.jar + + + ext/jcip-annotations-1.0.jar + release/modules/ext/jcip-annotations-1.0.jar ext/commons-validator-1.5.1.jar release/modules/ext/commons-validator-1.5.1.jar - ext/commons-lang-2.4.jar - release/modules/ext/commons-lang-2.4.jar + ext/uimafit-core-2.1.0.jar + release/modules/ext/uimafit-core-2.1.0.jar - ext/rome-0.9.jar - release/modules/ext/rome-0.9.jar - - - ext/geronimo-stax-api_1.0_spec-1.0.1.jar - release/modules/ext/geronimo-stax-api_1.0_spec-1.0.1.jar - - - ext/vorbis-java-tika-0.1.jar - release/modules/ext/vorbis-java-tika-0.1.jar + ext/cleartk-util-2.0.0.jar + release/modules/ext/cleartk-util-2.0.0.jar ext/jdom-1.0.jar release/modules/ext/jdom-1.0.jar - ext/poi-ooxml-schemas-3.10-beta2.jar - release/modules/ext/poi-ooxml-schemas-3.10-beta2.jar + ext/cxf-core-3.0.3.jar + release/modules/ext/cxf-core-3.0.3.jar - ext/pdfbox-1.8.4.jar - release/modules/ext/pdfbox-1.8.4.jar + ext/regexp-1.3.jar + release/modules/ext/regexp-1.3.jar - ext/aspectjrt-1.6.11.jar - release/modules/ext/aspectjrt-1.6.11.jar + ext/commons-beanutils-1.9.2.jar + release/modules/ext/commons-beanutils-1.9.2.jar - ext/dom4j-1.6.1.jar - release/modules/ext/dom4j-1.6.1.jar + ext/ehcache-core-2.6.2.jar + release/modules/ext/ehcache-core-2.6.2.jar - ext/bcprov-jdk15-1.45.jar - release/modules/ext/bcprov-jdk15-1.45.jar + ext/spring-context-3.1.2.RELEASE.jar + release/modules/ext/spring-context-3.1.2.RELEASE.jar + + + ext/ctakes-type-system-3.2.2.jar + release/modules/ext/ctakes-type-system-3.2.2.jar + + + ext/rome-1.5.1.jar + release/modules/ext/rome-1.5.1.jar + + + ext/uimaj-adapter-vinci-2.6.0.jar + release/modules/ext/uimaj-adapter-vinci-2.6.0.jar + + + ext/ctakes-core-3.2.2.jar + release/modules/ext/ctakes-core-3.2.2.jar + + + ext/jsoup-1.7.2.jar + release/modules/ext/jsoup-1.7.2.jar + + + ext/commons-exec-1.3.jar + release/modules/ext/commons-exec-1.3.jar + + + ext/uimaj-tools-2.6.0.jar + release/modules/ext/uimaj-tools-2.6.0.jar + + + ext/vorbis-java-tika-0.8.jar + release/modules/ext/vorbis-java-tika-0.8.jar From 664a591a45efa73ef3d7f460bde74b3ec17cc7fa Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 13 Mar 2017 11:53:36 -0400 Subject: [PATCH 04/13] 2347 Changed Jcombobox for Local disk selection to table --- .../casemodule/LocalDiskDSProcessor.java | 25 +- .../autopsy/casemodule/LocalDiskPanel.form | 171 ++++---- .../autopsy/casemodule/LocalDiskPanel.java | 395 ++++++++---------- 3 files changed, 283 insertions(+), 308 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java index d5b926d197..c09a89e489 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-2016 Basis Technology Corp. + * Copyright 2013-2017 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,9 +38,9 @@ import org.sleuthkit.autopsy.framework.AutoIngestDataSourceProcessor; * wizard. It also provides a run method overload to allow it to be used * independently of the wizard. */ -@ServiceProviders(value={ - @ServiceProvider(service=DataSourceProcessor.class), - @ServiceProvider(service=AutoIngestDataSourceProcessor.class)} +@ServiceProviders(value = { + @ServiceProvider(service = DataSourceProcessor.class), + @ServiceProvider(service = AutoIngestDataSourceProcessor.class)} ) public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestDataSourceProcessor { @@ -101,7 +101,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData */ @Override public JPanel getPanel() { - configPanel.select(); + configPanel.refreshTable(); return configPanel; } @@ -138,7 +138,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData drivePath = configPanel.getContentPaths(); timeZone = configPanel.getTimeZone(); ignoreFatOrphanFiles = configPanel.getNoFatOrphans(); - if(configPanel.getImageWriterEnabled()){ + if (configPanel.getImageWriterEnabled()) { imageWriterPath = configPanel.getImageWriterPath(); } } @@ -192,7 +192,6 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData */ @Override public void reset() { - configPanel.reset(); deviceId = null; drivePath = null; timeZone = null; @@ -202,22 +201,22 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData @Override public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException { - + // verify that the data source is not a file or a directory File file = dataSourcePath.toFile(); // ELTODO this needs to be tested more. should I keep isDirectory or just test for isFile? if (file.isFile() || file.isDirectory()) { return 0; } - + // check whether data source is an existing disk or partition // ELTODO this needs to be tested more. do these methods actually work correctly? // or should I use PlatformUtil.getPhysicalDrives() and PlatformUtil.getPartitions() instead? String path = dataSourcePath.toString(); - if ( (DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)) && DriveUtils.driveExists(path) ) { + if ((DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)) && DriveUtils.driveExists(path)) { return 90; } - + return 0; } @@ -227,7 +226,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData this.drivePath = dataSourcePath.toString(); this.timeZone = Calendar.getInstance().getTimeZone().getID(); this.ignoreFatOrphanFiles = false; - setDataSourceOptionsCalled = true; + setDataSourceOptionsCalled = true; run(deviceId, drivePath, timeZone, ignoreFatOrphanFiles, progressMonitor, callBack); } @@ -252,5 +251,5 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData this.ignoreFatOrphanFiles = ignoreFatOrphanFiles; setDataSourceOptionsCalled = true; } - + } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form index 89835246a9..8f3d32b101 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form @@ -1,12 +1,12 @@ -
+ - + - + @@ -26,38 +26,40 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + - - - - - - - - - - + @@ -66,8 +68,8 @@ - - + + @@ -81,15 +83,15 @@ - - - + + + - + @@ -106,22 +108,11 @@ - - - - - - - + + + - - - - - - - - + @@ -193,16 +184,64 @@ + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -214,37 +253,9 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index 2572c0c61d..68b3bfe23e 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2016 Basis Technology Corp. + * Copyright 2011-2017 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,10 +18,6 @@ */ package org.sleuthkit.autopsy.casemodule; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; import java.io.File; import java.nio.file.Paths; import java.util.ArrayList; @@ -31,16 +27,13 @@ import java.util.SimpleTimeZone; import java.util.TimeZone; import java.util.concurrent.CancellationException; import java.util.logging.Level; -import javax.swing.ComboBoxModel; import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JList; import javax.swing.JPanel; -import javax.swing.JSeparator; -import javax.swing.ListCellRenderer; import javax.swing.SwingWorker; -import javax.swing.border.EmptyBorder; -import javax.swing.event.ListDataListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.coreutils.LocalDisk; @@ -58,25 +51,44 @@ final class LocalDiskPanel extends JPanel { private static LocalDiskPanel instance; private static final long serialVersionUID = 1L; private List disks; - private LocalDiskModel model; private boolean enableNext = false; + private final LocalDiskModel model; private final JFileChooser fc = new JFileChooser(); /** * Creates new form LocalDiskPanel */ - public LocalDiskPanel() { + LocalDiskPanel() { + this.model = new LocalDiskModel(); + this.disks = new ArrayList<>(); initComponents(); customInit(); - createTimeZoneList(); + refreshTable(); + diskTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + if (diskTable.getSelectedRow() >= 0 && diskTable.getSelectedRow() < disks.size()) { + enableNext = true; + try { + firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true); + } catch (Exception ex) { + logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); //NON-NLS + MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr"), + NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); + } + + } + } + }); } /** * Get the default instance of this panel. */ - public static synchronized LocalDiskPanel getDefault() { + static synchronized LocalDiskPanel getDefault() { if (instance == null) { instance = new LocalDiskPanel(); } @@ -85,13 +97,9 @@ final class LocalDiskPanel extends JPanel { @SuppressWarnings("unchecked") private void customInit() { - model = new LocalDiskModel(); - diskComboBox.setModel(model); - diskComboBox.setRenderer(model); - errorLabel.setVisible(false); errorLabel.setText(""); - diskComboBox.setEnabled(false); + diskTable.setEnabled(false); imageWriterErrorLabel.setOpaque(true); imageWriterErrorLabel.setText(""); pathTextField.setEnabled(copyImageCheckbox.isSelected()); @@ -108,26 +116,25 @@ final class LocalDiskPanel extends JPanel { private void initComponents() { diskLabel = new javax.swing.JLabel(); - diskComboBox = new javax.swing.JComboBox<>(); errorLabel = new javax.swing.JLabel(); timeZoneLabel = new javax.swing.JLabel(); timeZoneComboBox = new javax.swing.JComboBox<>(); noFatOrphansCheckbox = new javax.swing.JCheckBox(); descLabel = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + diskTable = new javax.swing.JTable(); copyImageCheckbox = new javax.swing.JCheckBox(); - imageWriterErrorLabel = new javax.swing.JLabel(); - jLabel1 = new javax.swing.JLabel(); pathTextField = new javax.swing.JTextField(); browseButton = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + imageWriterErrorLabel = new javax.swing.JLabel(); - setMinimumSize(new java.awt.Dimension(0, 420)); - setPreferredSize(new java.awt.Dimension(485, 410)); + setMinimumSize(new java.awt.Dimension(0, 65)); + setPreferredSize(new java.awt.Dimension(485, 65)); diskLabel.setFont(diskLabel.getFont().deriveFont(diskLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); org.openide.awt.Mnemonics.setLocalizedText(diskLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.diskLabel.text")); // NOI18N - diskComboBox.setFont(diskComboBox.getFont().deriveFont(diskComboBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); - errorLabel.setFont(errorLabel.getFont().deriveFont(errorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); errorLabel.setForeground(new java.awt.Color(255, 0, 0)); org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.errorLabel.text")); // NOI18N @@ -145,74 +152,76 @@ final class LocalDiskPanel extends JPanel { descLabel.setFont(descLabel.getFont().deriveFont(descLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); org.openide.awt.Mnemonics.setLocalizedText(descLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.descLabel.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.text")); // NOI18N + diskTable.setModel(model); + diskTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + jScrollPane1.setViewportView(diskTable); + + org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox1.text")); // NOI18N copyImageCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copyImageCheckboxActionPerformed(evt); } }); - imageWriterErrorLabel.setFont(imageWriterErrorLabel.getFont().deriveFont(imageWriterErrorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); - imageWriterErrorLabel.setForeground(new java.awt.Color(255, 0, 0)); - org.openide.awt.Mnemonics.setLocalizedText(imageWriterErrorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.imageWriterErrorLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.jLabel1.text")); // NOI18N - - pathTextField.setText(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.pathTextField.text")); // NOI18N + pathTextField.setText(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.pathTextField1.text")); // NOI18N pathTextField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { pathTextFieldKeyReleased(evt); } - public void keyTyped(java.awt.event.KeyEvent evt) { - pathTextFieldKeyTyped(evt); - } }); - org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.browseButton.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.browseButton1.text")); // NOI18N browseButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { browseButtonActionPerformed(evt); } }); + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.jLabel2.text")); // NOI18N + + imageWriterErrorLabel.setFont(imageWriterErrorLabel.getFont().deriveFont(imageWriterErrorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); + imageWriterErrorLabel.setForeground(new java.awt.Color(255, 0, 0)); + org.openide.awt.Mnemonics.setLocalizedText(imageWriterErrorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.imageWriterErrorLabel1.text")); // NOI18N + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(diskLabel) .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 362, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(diskLabel) - .addComponent(diskComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(errorLabel) - .addGroup(layout.createSequentialGroup() - .addComponent(timeZoneLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(noFatOrphansCheckbox) + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(errorLabel) + .addGroup(layout.createSequentialGroup() + .addComponent(timeZoneLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(timeZoneComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(noFatOrphansCheckbox) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 461, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(copyImageCheckbox) - .addGroup(layout.createSequentialGroup() - .addGap(21, 21, 21) - .addComponent(descLabel)))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(browseButton)) - .addGroup(layout.createSequentialGroup() - .addGap(21, 21, 21) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 423, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(imageWriterErrorLabel)))) - .addGap(0, 29, Short.MAX_VALUE)) + .addComponent(descLabel)) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(imageWriterErrorLabel) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel1) + .addGroup(layout.createSequentialGroup() + .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 342, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(browseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)))))))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(diskLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(diskComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(13, 13, 13) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(errorLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) @@ -225,17 +234,30 @@ final class LocalDiskPanel extends JPanel { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(copyImageCheckbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(browseButton)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(browseButton) + .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(imageWriterErrorLabel) - .addContainerGap(170, Short.MAX_VALUE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); + + diskLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.diskLabel.AccessibleContext.accessibleName")); // NOI18N + copyImageCheckbox.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.AccessibleContext.accessibleName")); // NOI18N }// //GEN-END:initComponents + private void copyImageCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyImageCheckboxActionPerformed + pathTextField.setEnabled(copyImageCheckbox.isSelected()); + browseButton.setEnabled(copyImageCheckbox.isSelected()); + fireUpdateEvent(); + }//GEN-LAST:event_copyImageCheckboxActionPerformed + + private void pathTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_pathTextFieldKeyReleased + fireUpdateEvent(); + }//GEN-LAST:event_pathTextFieldKeyReleased + private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed String oldText = pathTextField.getText(); // set the current directory of the FileChooser if the ImagePath Field is valid @@ -248,40 +270,27 @@ final class LocalDiskPanel extends JPanel { if (retval == JFileChooser.APPROVE_OPTION) { String path = fc.getSelectedFile().getPath(); pathTextField.setText(path); - } - fireUpdateEvent(); + } + fireUpdateEvent(); }//GEN-LAST:event_browseButtonActionPerformed - private void copyImageCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyImageCheckboxActionPerformed - pathTextField.setEnabled(copyImageCheckbox.isSelected()); - browseButton.setEnabled(copyImageCheckbox.isSelected()); - fireUpdateEvent(); - }//GEN-LAST:event_copyImageCheckboxActionPerformed - - private void pathTextFieldKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_pathTextFieldKeyTyped - - }//GEN-LAST:event_pathTextFieldKeyTyped - - private void pathTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_pathTextFieldKeyReleased - fireUpdateEvent(); - }//GEN-LAST:event_pathTextFieldKeyReleased - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton browseButton; private javax.swing.JCheckBox copyImageCheckbox; private javax.swing.JLabel descLabel; - private javax.swing.JComboBox diskComboBox; private javax.swing.JLabel diskLabel; + private javax.swing.JTable diskTable; private javax.swing.JLabel errorLabel; private javax.swing.JLabel imageWriterErrorLabel; private javax.swing.JLabel jLabel1; + private javax.swing.JScrollPane jScrollPane1; private javax.swing.JCheckBox noFatOrphansCheckbox; private javax.swing.JTextField pathTextField; private javax.swing.JComboBox timeZoneComboBox; private javax.swing.JLabel timeZoneLabel; // End of variables declaration//GEN-END:variables - private void fireUpdateEvent(){ + private void fireUpdateEvent() { try { firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true); } catch (Exception e) { @@ -291,33 +300,23 @@ final class LocalDiskPanel extends JPanel { MessageNotifyUtil.MessageType.ERROR); } } - + /** * Return the currently selected disk path. * * @return String selected disk path */ - public String getContentPaths() { + String getContentPaths() { if (disks.size() > 0) { - LocalDisk selected = (LocalDisk) diskComboBox.getSelectedItem(); + int selectedRow = diskTable.getSelectedRow(); + LocalDisk selected = disks.get(selectedRow); return selected.getPath(); } else { return ""; } } - /** - * Set the selected disk. - */ - public void setContentPath(String s) { - for (int i = 0; i < disks.size(); i++) { - if (disks.get(i).getPath().equals(s)) { - diskComboBox.setSelectedIndex(i); - } - } - } - - public String getTimeZone() { + String getTimeZone() { String tz = timeZoneComboBox.getSelectedItem().toString(); return tz.substring(tz.indexOf(")") + 2).trim(); @@ -326,54 +325,54 @@ final class LocalDiskPanel extends JPanel { boolean getNoFatOrphans() { return noFatOrphansCheckbox.isSelected(); } - - private static String getDefaultImageWriterFolder(){ + + private static String getDefaultImageWriterFolder() { return Paths.get(Case.getCurrentCase().getModuleDirectory(), "Image Writer").toString(); } - - private void setPotentialImageWriterPath(LocalDisk disk){ - + + private void setPotentialImageWriterPath(LocalDisk disk) { + File subDirectory = Paths.get(getDefaultImageWriterFolder()).toFile(); if (!subDirectory.exists()) { subDirectory.mkdirs(); } - + String path = disk.getName().replaceAll("[:]", ""); path += " " + System.currentTimeMillis(); path += ".vhd"; pathTextField.setText(Paths.get(getDefaultImageWriterFolder(), path).toString()); } - - private boolean imageWriterPathIsValid(){ - if(pathTextField.getText().isEmpty()){ + + private boolean imageWriterPathIsValid() { + if (pathTextField.getText().isEmpty()) { imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterEmptyPathError.text")); return false; } - + File f = new File(pathTextField.getText()); - if(((f.getParentFile() != null) && (! f.getParentFile().exists())) || - (f.getParentFile() == null)) { + if (((f.getParentFile() != null) && (!f.getParentFile().exists())) + || (f.getParentFile() == null)) { imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterDirError.text")); return false; } - if(f.isDirectory()){ + if (f.isDirectory()) { imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterIsDirError.text")); return false; } - if(f.exists()){ + if (f.exists()) { imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterFileExistsError.text")); return false; } - + imageWriterErrorLabel.setText(""); return true; } - - boolean getImageWriterEnabled(){ + + boolean getImageWriterEnabled() { return copyImageCheckbox.isSelected(); } - - String getImageWriterPath(){ + + String getImageWriterPath() { return pathTextField.getText(); } @@ -383,24 +382,18 @@ final class LocalDiskPanel extends JPanel { * * @return true if panel is valid */ - public boolean validatePanel() { - if(copyImageCheckbox.isSelected() && - ! imageWriterPathIsValid()){ + boolean validatePanel() { + if (copyImageCheckbox.isSelected() + && !imageWriterPathIsValid()) { return false; } - return enableNext; } - public void reset() { - //nothing to reset - } - /** - * Set the focus to the diskComboBox and refreshes the list of disks. + * Refreshes the list of disks in the table. */ - public void select() { - diskComboBox.requestFocusInWindow(); + public void refreshTable() { model.loadDisks(); } @@ -440,24 +433,18 @@ final class LocalDiskPanel extends JPanel { timeZoneComboBox.setSelectedItem(formatted); } - @SuppressWarnings("rawtypes") - private class LocalDiskModel implements ComboBoxModel, ListCellRenderer { - - private Object selected; + private class LocalDiskModel implements TableModel { + private List physicalDrives = new ArrayList<>(); + private List partitions = new ArrayList<>(); + private LocalDiskThread worker = null; private boolean ready = false; - private volatile boolean loadingDisks = false; - List physicalDrives = new ArrayList<>(); - List partitions = new ArrayList<>(); - //private String SELECT = "Select a local disk:"; private final String LOADING = NbBundle.getMessage(this.getClass(), "LocalDiskPanel.localDiskModel.loading.msg"); private final String NO_DRIVES = NbBundle.getMessage(this.getClass(), "LocalDiskPanel.localDiskModel.nodrives.msg"); - LocalDiskThread worker = null; - private void loadDisks() { // if there is a worker already building the lists, then cancel it first. @@ -467,103 +454,82 @@ final class LocalDiskPanel extends JPanel { // Clear the lists errorLabel.setText(""); - disks = new ArrayList<>(); - physicalDrives = new ArrayList<>(); - partitions = new ArrayList<>(); - diskComboBox.setEnabled(false); + diskTable.setEnabled(false); ready = false; enableNext = false; loadingDisks = true; - worker = new LocalDiskThread(); worker.execute(); + } + + @Override + public int getRowCount() { + if (disks.isEmpty()) { + return 0; + } + return disks.size(); + } + + @Override + public int getColumnCount() { + return 2; } @Override - public void setSelectedItem(Object anItem) { - if (ready) { - selected = (LocalDisk) anItem; - enableNext = true; - setPotentialImageWriterPath((LocalDisk) selected); - fireUpdateEvent(); + public String getColumnName(int columnIndex) { + switch (columnIndex) { + case 0: + return "Disk Name"; //WJS-TODO + case 1: + return "Disk Size"; //WJS-TODO + default: + return "Unnamed"; //NON-NLS } } @Override - public Object getSelectedItem() { + public Class getColumnClass(int columnIndex) { + return String.class; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { if (ready) { if (disks.isEmpty()) { return NO_DRIVES; } - return selected; + switch (columnIndex) { + case 0: + return disks.get(rowIndex).getName(); + case 1: + return disks.get(rowIndex).getReadableSize(); + default: + return disks.get(rowIndex).getPath(); + } } else { return LOADING; } } @Override - public int getSize() { - if (ready) { - if (disks.isEmpty()) { - return 1; - } - return disks.size(); - } else { - return 1; - } + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + //setter does nothing they should not be able to modify table } @Override - public Object getElementAt(int index) { - if (ready) { - if (disks.isEmpty()) { - return NO_DRIVES; - } - return disks.get(index); - } else { - return LOADING; - } + public void addTableModelListener(TableModelListener l) { + } @Override - public void addListDataListener(ListDataListener l) { - } + public void removeTableModelListener(TableModelListener l) { - @Override - public void removeListDataListener(ListDataListener l) { - } - - @SuppressWarnings("rawtypes") - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - JPanel panel = new JPanel(new BorderLayout()); - JLabel label = new JLabel(); - if ((index == physicalDrives.size() - 1) && (physicalDrives.size() > 0)) { - panel.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.SOUTH); - } - - if (isSelected) { - label.setBackground(list.getSelectionBackground()); - label.setForeground(list.getSelectionForeground()); - } else { - label.setBackground(list.getBackground()); - label.setForeground(list.getForeground()); - } - - if (value != null) { - String localDiskString = value.toString(); - label.setText(value.toString()); - if ((localDiskString.equals(LOADING)) || (localDiskString.equals(NO_DRIVES))) { - label.setFont(label.getFont().deriveFont(Font.ITALIC)); - label.setBackground(Color.GRAY); - } - } - label.setOpaque(true); - label.setBorder(new EmptyBorder(2, 2, 2, 2)); - - panel.add(label, BorderLayout.CENTER); - return panel; } class LocalDiskThread extends SwingWorker { @@ -573,9 +539,10 @@ final class LocalDiskPanel extends JPanel { @Override protected Object doInBackground() throws Exception { // Populate the lists + physicalDrives = new ArrayList<>(); + partitions = new ArrayList<>(); physicalDrives = PlatformUtil.getPhysicalDrives(); partitions = PlatformUtil.getPartitions(); - return null; } @@ -592,7 +559,7 @@ final class LocalDiskPanel extends JPanel { errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.drivesNotDetected.toolTipText")); } - diskComboBox.setEnabled(false); + diskTable.setEnabled(false); } else if (physicalDrives.isEmpty()) { errorLabel.setText( NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.someDisksNotDetected.text")); @@ -615,16 +582,14 @@ final class LocalDiskPanel extends JPanel { if (!this.isCancelled()) { enableNext = false; displayErrors(); - worker = null; loadingDisks = false; - + disks = new ArrayList<>(); disks.addAll(physicalDrives); disks.addAll(partitions); - if (disks.size() > 0) { - diskComboBox.setEnabled(true); - diskComboBox.setSelectedIndex(0); + diskTable.setEnabled(true); + diskTable.clearSelection(); } ready = true; } else { From c09085026d86a01b97fb4606304c29da23c4341a Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 13 Mar 2017 12:18:02 -0400 Subject: [PATCH 05/13] 2347 fixed some nbbundle messages for the UI elements in localdiskPanel I broke --- .../autopsy/casemodule/LocalDiskPanel.form | 20 +++++-------------- .../autopsy/casemodule/LocalDiskPanel.java | 13 +++++------- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form index 8f3d32b101..6cfa2e45cb 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form @@ -108,11 +108,6 @@ - - - - - @@ -203,14 +198,9 @@ - + - - - - - @@ -218,7 +208,7 @@ - + @@ -228,7 +218,7 @@ - + @@ -238,7 +228,7 @@ - + @@ -253,7 +243,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index 68b3bfe23e..6e8fa505d9 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -156,32 +156,32 @@ final class LocalDiskPanel extends JPanel { diskTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(diskTable); - org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox1.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.text")); // NOI18N copyImageCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copyImageCheckboxActionPerformed(evt); } }); - pathTextField.setText(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.pathTextField1.text")); // NOI18N + pathTextField.setText(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.pathTextField.text")); // NOI18N pathTextField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { pathTextFieldKeyReleased(evt); } }); - org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.browseButton1.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.browseButton.text")); // NOI18N browseButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { browseButtonActionPerformed(evt); } }); - org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.jLabel2.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.jLabel1.text")); // NOI18N imageWriterErrorLabel.setFont(imageWriterErrorLabel.getFont().deriveFont(imageWriterErrorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); imageWriterErrorLabel.setForeground(new java.awt.Color(255, 0, 0)); - org.openide.awt.Mnemonics.setLocalizedText(imageWriterErrorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.imageWriterErrorLabel1.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(imageWriterErrorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.imageWriterErrorLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -243,9 +243,6 @@ final class LocalDiskPanel extends JPanel { .addComponent(imageWriterErrorLabel) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); - - diskLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.diskLabel.AccessibleContext.accessibleName")); // NOI18N - copyImageCheckbox.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.AccessibleContext.accessibleName")); // NOI18N }// //GEN-END:initComponents private void copyImageCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyImageCheckboxActionPerformed From 01db267b0a9078ffbc496677059ab1b5ee621ac6 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 13 Mar 2017 17:56:27 -0400 Subject: [PATCH 06/13] 2382 tests can now proceed through the DSP selection panel --- .../autopsy/testing/AutopsyTestCases.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java b/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java index d5d17136a6..67fa0495df 100755 --- a/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java +++ b/Testing/src/org/sleuthkit/autopsy/testing/AutopsyTestCases.java @@ -50,12 +50,14 @@ import org.netbeans.jemmy.operators.JListOperator; import org.netbeans.jemmy.operators.JTabbedPaneOperator; import org.netbeans.jemmy.operators.JTableOperator; import org.netbeans.jemmy.operators.JTextFieldOperator; +import org.netbeans.jemmy.operators.JToggleButtonOperator; import org.sleuthkit.autopsy.ingest.IngestManager; public class AutopsyTestCases { private static final Logger logger = Logger.getLogger(AutopsyTestCases.class.getName()); private long start; + /** * This method is used to escape file/directory path. Example: * \\NetworkLocation\foo\bar get escaped to \\\\NetworkLocation\foo\bar so @@ -79,7 +81,7 @@ public class AutopsyTestCases { public AutopsyTestCases () { start = 0; } - + public void testNewCaseWizardOpen(String title) { logger.info("New Case"); NbDialogOperator nbdo = new NbDialogOperator(title); @@ -102,15 +104,19 @@ public class AutopsyTestCases { start = System.currentTimeMillis(); wo.btFinish().clickMouse(); } - + public void testStartAddImageFileDataSource() { logger.info("Starting Add Image process"); WizardOperator wo = new WizardOperator("Add Data"); + //select the toggle button for Disk Image or VM File it will be the first button created and proceed to next panel + JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 0); + jtbo.clickMouse(); + wo.btNext().clickMouse(); JTextFieldOperator jtfo0 = new JTextFieldOperator(wo, 0); String img_path = getEscapedPath(System.getProperty("img_path")); String imageDir = img_path; ((JTextComponent) jtfo0.getSource()).setText(imageDir); - JComboBoxOperator comboBoxOperator = new JComboBoxOperator(wo, 1); + JComboBoxOperator comboBoxOperator = new JComboBoxOperator(wo, 0); comboBoxOperator.setSelectedItem("(GMT-5:00) America/New_York"); wo.btNext().clickMouse(); } @@ -118,9 +124,10 @@ public class AutopsyTestCases { public void testStartAddLogicalFilesDataSource() { logger.info("Starting Add Logical Files process"); WizardOperator wo = new WizardOperator("Add Data"); - JComboBoxOperator comboBoxOperator = new JComboBoxOperator(wo); - // select the item indexed 2 (Logical Files) from the drop-down list. - comboBoxOperator.selectItem(2); + //select the toggle button for Logical Files it will be the third button created and proceed to next panel + JToggleButtonOperator jtbo = new JToggleButtonOperator(wo, 2); + jtbo.clickMouse(); + wo.btNext().clickMouse(); JButtonOperator addButtonOperator = new JButtonOperator(wo, "Add"); addButtonOperator.pushNoBlock(); JFileChooserOperator fileChooserOperator = new JFileChooserOperator(); From 9c50077ee4c9e0b88ca9b476f9124e485234970f Mon Sep 17 00:00:00 2001 From: millmanorama Date: Tue, 14 Mar 2017 12:38:11 +0100 Subject: [PATCH 07/13] disable unused module --- nbproject/platform.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/nbproject/platform.properties b/nbproject/platform.properties index 07a18d325c..9d47f558f0 100644 --- a/nbproject/platform.properties +++ b/nbproject/platform.properties @@ -15,6 +15,7 @@ cluster.path=\ disabled.modules=\ org.apache.tools.ant.module,\ org.netbeans.api.debugger.jpda,\ + org.netbeans.modules.debugger.jpda.jsui,\ org.netbeans.api.java,\ org.netbeans.api.maven,\ org.netbeans.lib.nbjavac,\ From 86886bc6513f7d4ed527edb374d3f445da661627 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 14 Mar 2017 11:09:34 -0400 Subject: [PATCH 08/13] 2347-added comments and @messages to LocalDiskPanel for clarity --- .../autopsy/casemodule/LocalDiskPanel.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index 6e8fa505d9..ba80f075f7 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -71,6 +71,7 @@ final class LocalDiskPanel extends JPanel { public void valueChanged(ListSelectionEvent e) { if (diskTable.getSelectedRow() >= 0 && diskTable.getSelectedRow() < disks.size()) { enableNext = true; + setPotentialImageWriterPath((LocalDisk) disks.get(diskTable.getSelectedRow())); try { firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true); } catch (Exception ex) { @@ -430,6 +431,9 @@ final class LocalDiskPanel extends JPanel { timeZoneComboBox.setSelectedItem(formatted); } + /** + * Table model for displaing information from LocalDisk Objects in a table. + */ private class LocalDiskModel implements TableModel { private List physicalDrives = new ArrayList<>(); @@ -473,13 +477,17 @@ final class LocalDiskPanel extends JPanel { } + @NbBundle.Messages({"LocalDiskPanel.diskTable.column1.title=Disk Name", + "LocalDiskPanel.diskTable.column2.title=Disk Size" + }) + @Override public String getColumnName(int columnIndex) { switch (columnIndex) { case 0: - return "Disk Name"; //WJS-TODO + return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column1"); case 1: - return "Disk Size"; //WJS-TODO + return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column2"); default: return "Unnamed"; //NON-NLS } @@ -529,6 +537,10 @@ final class LocalDiskPanel extends JPanel { } + /** + * Gets the lists of physical drives and partitions and combines them + * into a list of disks. + */ class LocalDiskThread extends SwingWorker { private final Logger logger = Logger.getLogger(LocalDiskThread.class.getName()); @@ -543,6 +555,10 @@ final class LocalDiskPanel extends JPanel { return null; } + /** + * Display any error messages that might of occurred when getting + * the lists of physical drives or partitions. + */ private void displayErrors() { if (physicalDrives.isEmpty() && partitions.isEmpty()) { if (PlatformUtil.isWindowsOS()) { From 4a6f6da03fcd0d754018d316e706972eefb29ec2 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 14 Mar 2017 11:22:06 -0400 Subject: [PATCH 09/13] 2347 fixed error with @messages for local disk panel's table --- Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index ba80f075f7..bb7200b2cc 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -485,9 +485,9 @@ final class LocalDiskPanel extends JPanel { public String getColumnName(int columnIndex) { switch (columnIndex) { case 0: - return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column1"); + return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column1.title"); case 1: - return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column2"); + return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column2.title"); default: return "Unnamed"; //NON-NLS } From 3587783304cd016332e74c9882fb2ba34a067b6d Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 14 Mar 2017 11:52:03 -0400 Subject: [PATCH 10/13] 2347 repaired writer error display for LocalDiskPanel --- .../autopsy/casemodule/LocalDiskPanel.form | 4 ++-- .../autopsy/casemodule/LocalDiskPanel.java | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form index 6cfa2e45cb..a51dc82ef8 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.form @@ -3,10 +3,10 @@
- + - + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index bb7200b2cc..fb8bf43668 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -71,7 +71,7 @@ final class LocalDiskPanel extends JPanel { public void valueChanged(ListSelectionEvent e) { if (diskTable.getSelectedRow() >= 0 && diskTable.getSelectedRow() < disks.size()) { enableNext = true; - setPotentialImageWriterPath((LocalDisk) disks.get(diskTable.getSelectedRow())); + setPotentialImageWriterPath(disks.get(diskTable.getSelectedRow())); try { firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true); } catch (Exception ex) { @@ -101,7 +101,7 @@ final class LocalDiskPanel extends JPanel { errorLabel.setVisible(false); errorLabel.setText(""); diskTable.setEnabled(false); - imageWriterErrorLabel.setOpaque(true); + imageWriterErrorLabel.setVisible(false); imageWriterErrorLabel.setText(""); pathTextField.setEnabled(copyImageCheckbox.isSelected()); browseButton.setEnabled(copyImageCheckbox.isSelected()); @@ -130,8 +130,8 @@ final class LocalDiskPanel extends JPanel { jLabel1 = new javax.swing.JLabel(); imageWriterErrorLabel = new javax.swing.JLabel(); - setMinimumSize(new java.awt.Dimension(0, 65)); - setPreferredSize(new java.awt.Dimension(485, 65)); + setMinimumSize(new java.awt.Dimension(0, 420)); + setPreferredSize(new java.awt.Dimension(485, 410)); diskLabel.setFont(diskLabel.getFont().deriveFont(diskLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); org.openide.awt.Mnemonics.setLocalizedText(diskLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.diskLabel.text")); // NOI18N @@ -343,6 +343,7 @@ final class LocalDiskPanel extends JPanel { private boolean imageWriterPathIsValid() { if (pathTextField.getText().isEmpty()) { + imageWriterErrorLabel.setVisible(true); imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterEmptyPathError.text")); return false; } @@ -350,18 +351,21 @@ final class LocalDiskPanel extends JPanel { File f = new File(pathTextField.getText()); if (((f.getParentFile() != null) && (!f.getParentFile().exists())) || (f.getParentFile() == null)) { + imageWriterErrorLabel.setVisible(true); imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterDirError.text")); return false; } if (f.isDirectory()) { + imageWriterErrorLabel.setVisible(true); imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterIsDirError.text")); return false; } if (f.exists()) { + imageWriterErrorLabel.setVisible(true); imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterFileExistsError.text")); return false; } - + imageWriterErrorLabel.setVisible(false); imageWriterErrorLabel.setText(""); return true; } From b43125664e41f773caf70d2c51f8ddaebbdfcf0b Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dgrove" Date: Tue, 14 Mar 2017 13:14:52 -0400 Subject: [PATCH 11/13] Added code to correctly handle slack file visibility in folder file counts. --- .../DirectoryTreeFilterNode.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java index 8c2595969a..0bea885cf5 100755 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeFilterNode.java @@ -28,6 +28,7 @@ import org.openide.nodes.Node; import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.openide.util.lookup.ProxyLookup; +import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.AbstractContentNode; import org.sleuthkit.autopsy.ingest.runIngestModuleWizard.RunIngestModulesAction; @@ -36,6 +37,7 @@ import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.TskCoreException; +import org.sleuthkit.datamodel.TskData; import org.sleuthkit.datamodel.VirtualDirectory; /** @@ -77,13 +79,14 @@ class DirectoryTreeFilterNode extends FilterNode { AbstractFile file = getLookup().lookup(AbstractFile.class); if (file != null) { try { - final int numChildren = file.getChildrenCount(); + int numVisibleChildren = getVisibleChildCount(file); + /* * Left-to-right marks here are necessary to keep the count * and parens together for mixed right-to-left and * left-to-right names. */ - name = name + " \u200E(\u200E" + numChildren + ")\u200E"; //NON-NLS + name = name + " \u200E(\u200E" + numVisibleChildren + ")\u200E"; //NON-NLS } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error getting children count to display for file: " + file, ex); //NON-NLS @@ -92,6 +95,35 @@ class DirectoryTreeFilterNode extends FilterNode { } return name; } + + /** + * This method gets the number of visible children. Depending on the user + * preferences, slack files will either be included or purged in the count. + * + * @param file The AbstractFile object whose children will be counted. + * + * @return The number of visible children. + */ + private int getVisibleChildCount(AbstractFile file) throws TskCoreException { + int numVisibleChildren = 0; + List childList = file.getChildren(); + + if(UserPreferences.hideSlackFilesInDataSourcesTree()) { + // Purge slack files from the file count + for(int i=0; i < childList.size(); i++) { + AbstractFile childFile = (AbstractFile)childList.get(i); + if(childFile.getType() != TskData.TSK_DB_FILES_TYPE_ENUM.SLACK) { + numVisibleChildren++; + } + } + } + else { + // Include slack files in the file count + numVisibleChildren = file.getChildrenCount(); + } + + return numVisibleChildren; + } /** * Gets the context mneu (right click menu) actions for the node. From 7acb6c4571ba1edc037bc8b6e45646802bffd631 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 14 Mar 2017 15:53:35 -0400 Subject: [PATCH 12/13] Fix corrupted value in bundle.properties for file prop sheet --- Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties index d178b73469..0fabf762e8 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties @@ -12,7 +12,7 @@ AbstractAbstractFileNode.modeColLbl=Mode AbstractAbstractFileNode.useridColLbl=UserID AbstractAbstractFileNode.groupidColLbl=GroupID AbstractAbstractFileNode.metaAddrColLbl=Meta Addr. -AbstractAbstractFileNode.attrAddrColLbl=Attr. Addr.ArtifactStringContent.getStr.err +AbstractAbstractFileNode.attrAddrColLbl=Attr. Addr. AbstractAbstractFileNode.typeDirColLbl=Type(Dir) AbstractAbstractFileNode.typeMetaColLbl=Type(Meta) AbstractAbstractFileNode.knownColLbl=Known From a0c2cfa2a0152245c12459e8096577628bd1feb8 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Wed, 15 Mar 2017 08:38:30 -0400 Subject: [PATCH 13/13] Fix image writer error display on local disk panel --- .../autopsy/casemodule/LocalDiskPanel.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java index fb8bf43668..57676f233f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskPanel.java @@ -261,7 +261,7 @@ final class LocalDiskPanel extends JPanel { // set the current directory of the FileChooser if the ImagePath Field is valid File currentFile = new File(oldText); if ((currentFile.getParentFile() != null) && (currentFile.getParentFile().exists())) { - fc.setCurrentDirectory(currentFile.getParentFile()); + fc.setSelectedFile(currentFile); } int retval = fc.showOpenDialog(this); @@ -335,13 +335,29 @@ final class LocalDiskPanel extends JPanel { subDirectory.mkdirs(); } - String path = disk.getName().replaceAll("[:]", ""); + String path = disk.getName(); + + // Remove all non-ASCII characters + path = path.replaceAll("[^\\p{ASCII}]", ""); //NON-NLS + + // Remove all control characters + path = path.replaceAll("[\\p{Cntrl}]", ""); //NON-NLS + + // Remove / \ : ? ' " + path = path.replaceAll("[/?:'\"\\\\]", ""); //NON-NLS + path += " " + System.currentTimeMillis(); path += ".vhd"; pathTextField.setText(Paths.get(getDefaultImageWriterFolder(), path).toString()); } - private boolean imageWriterPathIsValid() { + private boolean imageWriterPathIsValid() { + if((! copyImageCheckbox.isSelected()) || ! (diskTable.getSelectedRow() >= 0 && diskTable.getSelectedRow() < disks.size())){ + imageWriterErrorLabel.setVisible(false); + imageWriterErrorLabel.setText(""); + return true; + } + if (pathTextField.getText().isEmpty()) { imageWriterErrorLabel.setVisible(true); imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterEmptyPathError.text")); @@ -385,8 +401,7 @@ final class LocalDiskPanel extends JPanel { * @return true if panel is valid */ boolean validatePanel() { - if (copyImageCheckbox.isSelected() - && !imageWriterPathIsValid()) { + if (!imageWriterPathIsValid()) { return false; } return enableNext; @@ -608,6 +623,10 @@ final class LocalDiskPanel extends JPanel { diskTable.setEnabled(true); diskTable.clearSelection(); } + pathTextField.setText(""); + errorLabel.setText(""); + errorLabel.setVisible(false); + fireUpdateEvent(); ready = true; } else { logger.log(Level.INFO, "Loading local disks was canceled, which should not be possible."); //NON-NLS