19 package org.sleuthkit.autopsy.keywordsearch;
21 import org.openide.util.NbBundle;
23 import java.io.BufferedReader;
24 import java.io.FileInputStream;
25 import java.io.FileNotFoundException;
26 import java.io.IOException;
27 import java.io.InputStreamReader;
28 import java.util.ArrayList;
29 import java.util.Date;
30 import java.util.List;
31 import java.util.logging.Level;
43 class EnCaseKeywordSearchList
extends KeywordSearchList {
45 ArrayList<EncaseFileEntry> entriesUnsorted;
46 EncaseFileEntry rootEntry;
48 public EnCaseKeywordSearchList(String encasePath) {
59 private void doCreateListsFromEntries(EncaseFileEntry entry, String parentPath) {
61 if (parentPath.isEmpty()) {
64 name = parentPath +
"/" + entry.name;
67 List<Keyword> children =
new ArrayList<>();
68 for (EncaseFileEntry child : entry.children) {
71 doCreateListsFromEntries(child, name);
74 if (child.flags.contains(EncaseFlag.pg)) {
77 children.add(
new Keyword(child.value,
true,
true));
82 if (theLists.containsKey(name)) {
84 while (theLists.containsKey(name +
"(" + i +
")")) {
87 name = name +
"(" + i +
")";
90 if (!children.isEmpty()) {
91 KeywordList newList =
new KeywordList(name,
new Date(),
new Date(),
92 true,
true, children);
93 theLists.put(name, newList);
101 private void doCreateEntryStructure(EncaseFileEntry parent) {
102 if (!parent.isFull()) {
103 EncaseFileEntry child = entriesUnsorted.remove(0);
104 child.hasParent =
true;
105 child.parent = parent;
106 parent.addChild(child);
107 if (!child.isFull()) {
108 doCreateEntryStructure(child);
110 if (!parent.isFull()) {
111 doCreateEntryStructure(parent);
114 if (parent.hasParent) {
115 doCreateEntryStructure(parent.parent);
120 public boolean save() {
121 throw new UnsupportedOperationException(
122 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsEncase.save.exception.msg"));
126 public boolean save(
boolean isExport) {
127 throw new UnsupportedOperationException(
128 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsEncase.save2.exception.msg"));
132 public boolean load() {
134 BufferedReader readBuffer =
new BufferedReader(
new InputStreamReader(
new FileInputStream(filePath),
"utf-16"));
137 entriesUnsorted =
new ArrayList<>();
138 for (
int line = 1; line < 6; line++) {
139 readBuffer.readLine();
141 while ((structLine = readBuffer.readLine()) != null && (metaLine = readBuffer.readLine()) != null) {
142 String[] structArr = structLine.split(
"\t");
143 String[] metaArr = metaLine.split(
"\t");
144 EncaseMetaType type = EncaseMetaType.getType(metaArr[0]);
145 String childCount = structArr[1];
146 String name = metaArr[1];
147 String value = metaArr[2];
148 ArrayList<EncaseFlag> flags =
new ArrayList<>();
149 for (
int i = 0; i < 17; i++) {
150 if (metaArr.length < i + 4) {
153 if (!metaArr[i + 3].equals(
"")) {
154 flags.add(EncaseFlag.getFlag(i));
157 entriesUnsorted.add(
new EncaseFileEntry(name, value, Integer.parseInt(childCount),
false, null, type, flags));
159 if (entriesUnsorted.isEmpty()) {
163 this.rootEntry = entriesUnsorted.remove(0);
164 doCreateEntryStructure(this.rootEntry);
165 doCreateListsFromEntries(this.rootEntry,
"");
168 }
catch (FileNotFoundException ex) {
169 LOGGER.log(Level.INFO,
"File at " + filePath +
" does not exist!", ex);
170 }
catch (IOException ex) {
171 LOGGER.log(Level.INFO,
"Failed to read file at " + filePath, ex);
181 if (type.equals(
"5")) {
183 }
else if (type.equals(
"")) {
186 throw new IllegalArgumentException(
187 NbBundle.getMessage(EnCaseKeywordSearchList.class,
188 "KeywordSearchListsEncase.encaseMetaType.exception.msg",
199 pc, pu, pb, p8, p7, pg, an, ph, or, di, um, st,
ww, pr, lo, ta, cp;
214 List<EncaseFileEntry> children;
218 ArrayList<EncaseFlag> flags;
223 this.childCount = childCount;
224 this.children =
new ArrayList<>();
225 this.hasParent = hasParent;
226 this.parent = parent;
232 return children.size() == childCount;
static EncaseFlag getFlag(int i)