Skip to content

Commit

Permalink
#52: load from file and display only selected (basic) props in HTMLRe…
Browse files Browse the repository at this point in the history
…portTask
  • Loading branch information
FelipeFcosta committed Jan 23, 2023
1 parent d2b1f64 commit b80809e
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="row"><span class="bkmkColLeft bkmkValue labelBorderless clrBkgrnd" width="100%" border="1">%PROPERTY_NAME%</span><span class="bkmkColRight bkmkValue">%PROPERTY_VALUE%</span></div>
23 changes: 9 additions & 14 deletions iped-app/src/main/java/iped/app/ui/ColumnsManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,18 +148,12 @@ static class ColumnState implements Serializable {
ArrayList<String> visibleFields = new ArrayList<String>();
}

static class ColumnsReport implements Serializable {

private static final long serialVersionUID = 1L;
ArrayList<String> selectedCols = new ArrayList<String>();
}

protected void saveReportColumns() {
protected void saveReportSelectedProps() {
try {
ColumnsReport cr = new ColumnsReport();
cr.selectedCols.addAll(getSelectedProperties());
if (cr.selectedCols.size() > 0) {
Util.writeObject(cr, reportCols.getAbsolutePath());
Set<String> reportProps = new HashSet<>();
reportProps.addAll(getSelectedProperties());
if (reportProps.size() > 0) {
Util.writeObject(reportProps, reportCols.getAbsolutePath());
}
} catch (Exception e1) {
e1.printStackTrace();
Expand Down Expand Up @@ -250,15 +244,16 @@ private void loadSavedCols() {
}

protected ArrayList<String> loadReportSelectedFields() {
ColumnsReport cr = new ColumnsReport();
Set<String> columnsReport = new HashSet<>();
ArrayList<String> selectedFields = null;
if (reportCols.exists()) {
try {
cr = (ColumnsReport) Util.readObject(reportCols.getAbsolutePath());
columnsReport = (Set<String>) Util.readObject(reportCols.getAbsolutePath());
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
selectedFields = (ArrayList<String>) cr.selectedCols.clone();
selectedFields = new ArrayList<>();
selectedFields.addAll(columnsReport);
}
return selectedFields;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(combo)) {
updatePanelList();
} else if (e.getSource().equals(okButton)) {
columnsManager.saveReportColumns();
columnsManager.saveReportSelectedProps();
dispose();
} else {
JCheckBox source = (JCheckBox) e.getSource();
Expand All @@ -107,7 +107,7 @@ public void actionPerformed(ActionEvent e) {
}
}

// Updates according to the allCheckBoxesStates variable
// Updates according to the allCheckBoxesStates list
@Override
protected void updatePanelList() {
listPanel.removeAll();
Expand Down
2 changes: 0 additions & 2 deletions iped-app/src/main/java/iped/app/ui/ColumnsManagerUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
Expand Down
95 changes: 78 additions & 17 deletions iped-engine/src/main/java/iped/engine/task/HTMLReportTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
Expand Down Expand Up @@ -73,9 +74,11 @@
import iped.engine.data.ReportInfo;
import iped.engine.localization.CategoryLocalization;
import iped.engine.localization.Messages;
import iped.engine.task.index.IndexItem;
import iped.engine.task.video.VideoThumbTask;
import iped.engine.util.UIPropertyListenerProvider;
import iped.engine.util.Util;
import iped.properties.BasicProps;
import iped.utils.ExternalImageConverter;
import iped.utils.IOUtil;
import iped.utils.ImageUtil;
Expand Down Expand Up @@ -200,6 +203,23 @@ public List<Configurable<?>> getConfigurables() {
return Arrays.asList(new HtmlReportTaskConfig());
}

protected ArrayList<String> loadReportSelectedProps() {
File reportCols = new File(Configuration.getInstance().appRoot, "reportCols.dat");

Set<String> columnsReport = new HashSet<>();
ArrayList<String> selectedFields = null;
if (reportCols.exists()) {
try {
columnsReport = (Set<String>) Util.readObject(reportCols.getAbsolutePath());
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
selectedFields = new ArrayList<>();
selectedFields.addAll(columnsReport);
}
return selectedFields;
}

/**
* Inicializa tarefa, realizando controle de alocação de apenas uma thread
* principal.
Expand Down Expand Up @@ -268,6 +288,8 @@ public void finish() throws Exception {

if (isEnabled() && caseData.containsReport() && info != null) {

ArrayList<String> selectedProperties = loadReportSelectedProps();

String reportRoot = Messages.getString("HTMLReportTask.ReportFileName"); //$NON-NLS-1$
if (new File(reportSubFolder.getParentFile(), reportRoot).exists()) {
logger.error("Html report already exists, report update not implemented yet!"); //$NON-NLS-1$
Expand All @@ -286,6 +308,8 @@ public void finish() throws Exception {
templatesFolder = new File(new File(codePath), "htmlreport/" + localeConf.getLocale().toLanguageTag()); //$NON-NLS-1$
}

if (!selectedProperties.isEmpty())
logger.info("First Selected property: " + selectedProperties.get(0));
logger.info("Report folder: " + reportSubFolder.getAbsolutePath()); //$NON-NLS-1$
logger.info("Template folder: " + templatesFolder.getAbsolutePath()); //$NON-NLS-1$
if (!templatesFolder.exists()) {
Expand Down Expand Up @@ -538,7 +562,8 @@ private void processBookmarks(File templatesFolder) throws Exception {
sortRegs();
StringBuilder modelo = EncodedFile.readFile(new File(templatesFolder, "arq.html"), StandardCharsets.UTF_8).content; //$NON-NLS-1$//$NON-NLS-2$
replace(modelo, "%THUMBSIZE%", String.valueOf(htmlReportConfig.getThumbSize())); //$NON-NLS-1$
StringBuilder item = EncodedFile.readFile(new File(templatesFolder, "item.html"), StandardCharsets.UTF_8).content; //$NON-NLS-1$//$NON-NLS-2$
// StringBuilder item = EncodedFile.readFile(new File(templatesFolder, "item.html"), StandardCharsets.UTF_8).content; //$NON-NLS-1$//$NON-NLS-2$
StringBuilder item = EncodedFile.readFile(new File(templatesFolder, "singleitem.html"), StandardCharsets.UTF_8).content;
int idx = 1;
for (String marcador : entriesByLabel.keySet()) {
String id = String.format("arq%06d", idx); //$NON-NLS-1$
Expand Down Expand Up @@ -657,6 +682,8 @@ private String getPageId(String id, int page) {
private void createBookmarkPage(DateFormat dateFormat, NumberFormat longFormat, String name, String id,
StringBuilder model, StringBuilder item, int pag, int totPags, int totRegs, List<ReportEntry> regs,
boolean isLabel) throws Exception {
ArrayList<String> selectedProperties = loadReportSelectedProps();

File arq = new File(reportSubFolder, getPageId(id, pag));

StringBuilder sb = new StringBuilder();
Expand All @@ -667,7 +694,9 @@ private void createBookmarkPage(DateFormat dateFormat, NumberFormat longFormat,
for (int i = 0; i < regs.size(); i++) {
ReportEntry reg = regs.get(i);
it.delete(0, it.length());
it.append(item);
it.append("<div class='clrBkgrnd bkmkSeparator bkmkValue'></div>");
for (int j = 0; j < selectedProperties.size(); j++)
it.append(item);

if (reg.isImage && htmlReportConfig.isImageThumbsEnabled() && reg.hash != null) {
File thumbFile = getImageThumbFile(reg.hash);
Expand Down Expand Up @@ -724,21 +753,35 @@ private void createBookmarkPage(DateFormat dateFormat, NumberFormat longFormat,
it.append("</a></span></div>\n"); //$NON-NLS-1$
}
}
replace(it, "%SEQ%", reg.hash); //$NON-NLS-1$
replace(it, "%NAME%", reg.name); //$NON-NLS-1$
replace(it, "%PATH%", reg.path); //$NON-NLS-1$
replace(it, "%TYPE%", reg.category); //$NON-NLS-1$
replace(it, "%SIZE%", formatNumber(reg.length, longFormat)); //$NON-NLS-1$
replace(it, "%DELETED%", //$NON-NLS-1$
reg.deleted ? Messages.getString("HTMLReportTask.Yes") : Messages.getString("HTMLReportTask.No")); //$NON-NLS-1$ //$NON-NLS-2$
replace(it, "%CARVED%", //$NON-NLS-1$
reg.carved ? Messages.getString("HTMLReportTask.Yes") : Messages.getString("HTMLReportTask.No")); //$NON-NLS-1$ //$NON-NLS-2$
replace(it, "%HASH%", reg.hash); //$NON-NLS-1$
String export = reg.export == null ? "-" : "<a href=\"../" + reg.export + "\">" + reg.export + "</a>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
replace(it, "%EXPORTED%", export); //$NON-NLS-1$
replace(it, "%CREATED%", formatDate(reg.created, dateFormat)); //$NON-NLS-1$
replace(it, "%MODIFIED%", formatDate(reg.modified, dateFormat)); //$NON-NLS-1$
replace(it, "%ACCESSED%", formatDate(reg.accessed, dateFormat)); //$NON-NLS-1$

// Fill Basic Properties if present
if (selectedProperties.contains(BasicProps.NAME))
fillItemProperty(it, "Name", "<b>" + reg.name + "</b>");
if (selectedProperties.contains(BasicProps.PATH))
fillItemProperty(it, "Path", reg.path);
if (selectedProperties.contains(BasicProps.TYPE))
fillItemProperty(it, "File Type", reg.category);
if (selectedProperties.contains(BasicProps.LENGTH))
fillItemProperty(it, "Logical Size", formatNumber(reg.length, longFormat) + " Bytes");
if (selectedProperties.contains(BasicProps.CREATED))
fillItemProperty(it, "Created Date", formatDate(reg.created, dateFormat));
if (selectedProperties.contains(BasicProps.MODIFIED))
fillItemProperty(it, "Modified Date", formatDate(reg.modified, dateFormat));
if (selectedProperties.contains(BasicProps.ACCESSED))
fillItemProperty(it, "Last Accessed Date", formatDate(reg.accessed, dateFormat));
if (selectedProperties.contains(BasicProps.DELETED))
fillItemProperty(it, "Deleted",
reg.deleted ? Messages.getString("HTMLReportTask.Yes") : Messages.getString("HTMLReportTask.No"));
if (selectedProperties.contains(BasicProps.CARVED))
fillItemProperty(it, "Carved",
reg.carved ? Messages.getString("HTMLReportTask.Yes") : Messages.getString("HTMLReportTask.No"));
if (selectedProperties.contains(BasicProps.HASH))
fillItemProperty(it, "Hash", reg.hash);
if (selectedProperties.contains(IndexItem.ID_IN_SOURCE)) {
String export = reg.export == null ? "-" : "<b><a href=\"../" + reg.export + "\">" + reg.export + "</a></b>";
fillItemProperty(it, "Exported as", export);
}

items.append(it);
}

Expand Down Expand Up @@ -775,6 +818,14 @@ private void createBookmarkPage(DateFormat dateFormat, NumberFormat longFormat,
ef.write();
}

private void fillItemProperty(StringBuilder it, String propertyName, String propertyValue) {
String propNamePlaceHolder = "%PROPERTY_NAME%";
String propValuePlaceHolder = "%PROPERTY_VALUE%";

replaceFirst(it, propNamePlaceHolder, propertyName);
replaceFirst(it, propValuePlaceHolder, propertyValue);
}

private String getComments(String bookmark) {
String comments = labelcomments.get(bookmark);
if (comments == null || comments.trim().isEmpty())
Expand Down Expand Up @@ -947,6 +998,16 @@ private static void replace(StringBuilder sb, String a, String b) {
}
}

private static void replaceFirst(StringBuilder sb, String a, String b) {
int pos = 0;
while ((pos = sb.indexOf(a, pos)) >= 0) {
String rep = b == null ? "-" : b; //$NON-NLS-1$
sb.replace(pos, pos + a.length(), rep);
pos += rep.length();
break;
}
}

private static String formatDate(Date date, DateFormat dateFormat) {
return date == null ? "-" : dateFormat.format(date); //$NON-NLS-1$
}
Expand Down

0 comments on commit b80809e

Please sign in to comment.