move FXMConstructor to CoreUtils

This commit is contained in:
jmillman 2014-08-28 15:25:21 -04:00
parent 99fd3c367d
commit 45dfc29cc1
23 changed files with 29 additions and 262 deletions

View File

@ -16,7 +16,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.sleuthkit.autopsy.imageanalyzer; package org.sleuthkit.autopsy.coreutils;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
@ -35,6 +35,9 @@ import org.openide.util.Exceptions;
*/ */
public class FXMLConstructor { public class FXMLConstructor {
private FXMLConstructor() {
}
private static final CachingClassLoader CACHING_CLASS_LOADER = new CachingClassLoader((FXMLLoader.getDefaultClassLoader())); private static final CachingClassLoader CACHING_CLASS_LOADER = new CachingClassLoader((FXMLLoader.getDefaultClassLoader()));
static public void construct(Node n, String fxmlFileName) { static public void construct(Node n, String fxmlFileName) {
@ -65,7 +68,7 @@ public class FXMLConstructor {
*/ */
static public class CachingClassLoader extends ClassLoader { static public class CachingClassLoader extends ClassLoader {
private final Map<String, Class> classes = new HashMap<String, Class>(); private final Map<String, Class<?>> classes = new HashMap<>();
private final ClassLoader parent; private final ClassLoader parent;

View File

@ -1,145 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2013 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.timeline;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import org.openide.util.Exceptions;
/**
* This class support both programmer productivity by abstracting frequently
* used code to load FXML-defined GUI components, and code performance by
* implementing a caching FXMLLoader as described at
* http://stackoverflow.com/questions/11734885/javafx2-very-poor-performance-when-adding-custom-made-fxmlpanels-to-gridpane.
*
* TODO: this code is duplicated in the Image Analyze module, we should move it
* into a centralized places like a JavaFX utils class/package/module in
* Autopsy- jm
*/
public class FXMLConstructor {
private static final CachingClassLoader CACHING_CLASS_LOADER = new CachingClassLoader((FXMLLoader.getDefaultClassLoader()));
static public void construct(Node n, String fxmlFileName) {
FXMLLoader fxmlLoader = new FXMLLoader(n.getClass().getResource(fxmlFileName));
fxmlLoader.setRoot(n);
fxmlLoader.setController(n);
fxmlLoader.setClassLoader(CACHING_CLASS_LOADER);
try {
fxmlLoader.load();
} catch (Exception exception) {
try {
fxmlLoader.setClassLoader(FXMLLoader.getDefaultClassLoader());
fxmlLoader.load();
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}
}
}
/**
* The default FXMLLoader does not cache information about previously loaded
* FXML files. See
* http://stackoverflow.com/questions/11734885/javafx2-very-poor-performance-when-adding-custom-made-fxmlpanels-to-gridpane.
* for more details. As a partial workaround, we cache information on
* previously loaded classes. This does not solve all performance issues,
* but is a big improvement.
*/
static public class CachingClassLoader extends ClassLoader {
private final Map<String, Class<?>> classes = new HashMap<>();
private final ClassLoader parent;
public CachingClassLoader(ClassLoader parent) {
this.parent = parent;
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
Class<?> c = findClass(name);
if (c == null) {
throw new ClassNotFoundException(name);
}
return c;
}
@Override
protected Class<?> findClass(String className) throws ClassNotFoundException {
// System.out.print("try to load " + className);
if (classes.containsKey(className)) {
Class<?> result = classes.get(className);
return result;
} else {
try {
Class<?> result = parent.loadClass(className);
// System.out.println(" -> success!");
classes.put(className, result);
return result;
} catch (ClassNotFoundException ignore) {
// System.out.println();
classes.put(className, null);
return null;
}
}
}
// ========= delegating methods =============
@Override
public URL getResource(String name) {
return parent.getResource(name);
}
@Override
public Enumeration<URL> getResources(String name) throws IOException {
return parent.getResources(name);
}
@Override
public String toString() {
return parent.toString();
}
@Override
public void setDefaultAssertionStatus(boolean enabled) {
parent.setDefaultAssertionStatus(enabled);
}
@Override
public void setPackageAssertionStatus(String packageName, boolean enabled) {
parent.setPackageAssertionStatus(packageName, enabled);
}
@Override
public void setClassAssertionStatus(String className, boolean enabled) {
parent.setClassAssertionStatus(className, enabled);
}
@Override
public void clearAssertionStatus() {
parent.clearAssertionStatus();
}
}
}

View File

@ -1,91 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2013-14 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.timeline.actions;
import javafx.event.ActionEvent;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.MenuElement;
import javax.swing.SwingUtilities;
public class SwingMenuItemAdapter extends MenuItem {
JMenuItem jMenuItem;
SwingMenuItemAdapter(final JMenuItem jMenuItem) {
super(jMenuItem.getText());
this.jMenuItem = jMenuItem;
setOnAction((ActionEvent t) -> {
SwingUtilities.invokeLater(() -> {
jMenuItem.doClick();
});
});
}
public static MenuItem create(MenuElement jmenuItem) {
if (jmenuItem instanceof JMenu) {
return new SwingMenuAdapter((JMenu) jmenuItem);
} else if (jmenuItem instanceof JPopupMenu) {
return new SwingMenuAdapter((JPopupMenu) jmenuItem);
} else {
return new SwingMenuItemAdapter((JMenuItem) jmenuItem);
}
}
}
class SwingMenuAdapter extends Menu {
private final MenuElement jMenu;
SwingMenuAdapter(final JMenu jMenu) {
super(jMenu.getText());
this.jMenu = jMenu;
buildChildren(jMenu);
}
SwingMenuAdapter(JPopupMenu jPopupMenu) {
super(jPopupMenu.getLabel());
this.jMenu = jPopupMenu;
buildChildren(jMenu);
}
private void buildChildren(MenuElement jMenu) {
for (MenuElement menuE : jMenu.getSubElements()) {
if (menuE instanceof JMenu) {
getItems().add(SwingMenuItemAdapter.create((JMenu) menuE));
} else if (menuE instanceof JMenuItem) {
getItems().add(SwingMenuItemAdapter.create((JMenuItem) menuE));
} else if (menuE instanceof JPopupMenu) {
buildChildren(menuE);
} else {
System.out.println(menuE.toString());
// throw new UnsupportedOperationException();
}
}
}
}

View File

@ -25,7 +25,7 @@ import javafx.scene.control.ToolBar;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority; import javafx.scene.layout.Priority;
import javafx.scene.layout.Region; import javafx.scene.layout.Region;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.TimeLineUI; import org.sleuthkit.autopsy.timeline.TimeLineUI;

View File

@ -27,7 +27,7 @@ import javafx.scene.control.RadioButton;
import javafx.scene.control.TitledPane; import javafx.scene.control.TitledPane;
import javafx.scene.control.Toggle; import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
/** /**

View File

@ -67,9 +67,9 @@ import org.controlsfx.control.action.AbstractAction;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.DateTimeZone; import org.joda.time.DateTimeZone;
import org.joda.time.Interval; import org.joda.time.Interval;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.timeline.FXMLConstructor;
import org.sleuthkit.autopsy.coreutils.LoggedTask; import org.sleuthkit.autopsy.coreutils.LoggedTask;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.TimeLineView; import org.sleuthkit.autopsy.timeline.TimeLineView;
import org.sleuthkit.autopsy.timeline.VisualizationMode; import org.sleuthkit.autopsy.timeline.VisualizationMode;

View File

@ -60,8 +60,10 @@ import org.controlsfx.control.action.ActionUtils;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.Interval; import org.joda.time.Interval;
import org.joda.time.Seconds; import org.joda.time.Seconds;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.ColorUtilities;
import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.coreutils.LoggedTask; import org.sleuthkit.autopsy.coreutils.LoggedTask;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.TimeLineView; import org.sleuthkit.autopsy.timeline.TimeLineView;
import org.sleuthkit.autopsy.timeline.actions.Back; import org.sleuthkit.autopsy.timeline.actions.Back;
@ -70,9 +72,7 @@ import org.sleuthkit.autopsy.timeline.events.FilteredEventsModel;
import org.sleuthkit.autopsy.timeline.events.type.EventType; import org.sleuthkit.autopsy.timeline.events.type.EventType;
import org.sleuthkit.autopsy.timeline.events.type.RootEventType; import org.sleuthkit.autopsy.timeline.events.type.RootEventType;
import org.sleuthkit.autopsy.timeline.ui.AbstractVisualization; import org.sleuthkit.autopsy.timeline.ui.AbstractVisualization;
import org.sleuthkit.autopsy.coreutils.ColorUtilities;
import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo; import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo;
import org.sleuthkit.autopsy.coreutils.Logger;
/** /**
* FXML Controller class for a {@link StackedBarChart<String,Number>} based * FXML Controller class for a {@link StackedBarChart<String,Number>} based

View File

@ -60,8 +60,9 @@ import javafx.scene.layout.Priority;
import javafx.scene.layout.Region; import javafx.scene.layout.Region;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.coreutils.LoggedTask; import org.sleuthkit.autopsy.coreutils.LoggedTask;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.events.AggregateEvent; import org.sleuthkit.autopsy.timeline.events.AggregateEvent;
import org.sleuthkit.autopsy.timeline.events.FilteredEventsModel; import org.sleuthkit.autopsy.timeline.events.FilteredEventsModel;
@ -70,7 +71,6 @@ import org.sleuthkit.autopsy.timeline.ui.AbstractVisualization;
import org.sleuthkit.autopsy.timeline.ui.countsview.CountsViewPane; import org.sleuthkit.autopsy.timeline.ui.countsview.CountsViewPane;
import org.sleuthkit.autopsy.timeline.ui.detailview.tree.NavTreeNode; import org.sleuthkit.autopsy.timeline.ui.detailview.tree.NavTreeNode;
import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo; import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo;
import org.sleuthkit.autopsy.coreutils.Logger;
/** /**
* FXML Controller class for a {@link EventDetailChart} based implementation of * FXML Controller class for a {@link EventDetailChart} based implementation of

View File

@ -36,7 +36,7 @@ import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle; import javafx.scene.shape.Rectangle;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.TimeLineView; import org.sleuthkit.autopsy.timeline.TimeLineView;
import org.sleuthkit.autopsy.timeline.events.AggregateEvent; import org.sleuthkit.autopsy.timeline.events.AggregateEvent;

View File

@ -32,7 +32,7 @@ import javafx.scene.control.TreeTableRow;
import javafx.scene.control.TreeTableView; import javafx.scene.control.TreeTableView;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import org.controlsfx.control.action.AbstractAction; import org.controlsfx.control.action.AbstractAction;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.TimeLineView; import org.sleuthkit.autopsy.timeline.TimeLineView;
import org.sleuthkit.autopsy.timeline.actions.DefaultFilters; import org.sleuthkit.autopsy.timeline.actions.DefaultFilters;

View File

@ -30,7 +30,7 @@ import javafx.scene.control.Slider;
import javafx.scene.control.TitledPane; import javafx.scene.control.TitledPane;
import javafx.scene.control.Tooltip; import javafx.scene.control.Tooltip;
import javafx.util.StringConverter; import javafx.util.StringConverter;
import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineController;
import org.sleuthkit.autopsy.timeline.TimeLineView; import org.sleuthkit.autopsy.timeline.TimeLineView;
import org.sleuthkit.autopsy.timeline.VisualizationMode; import org.sleuthkit.autopsy.timeline.VisualizationMode;

View File

@ -21,7 +21,7 @@ package org.sleuthkit.autopsy.imageanalyzer.filtering;
import org.sleuthkit.autopsy.imageanalyzer.filtering.filters.FilterRow; import org.sleuthkit.autopsy.imageanalyzer.filtering.filters.FilterRow;
import org.sleuthkit.autopsy.imageanalyzer.filtering.filters.AtomicFilter; import org.sleuthkit.autopsy.imageanalyzer.filtering.filters.AtomicFilter;
import org.sleuthkit.autopsy.imageanalyzer.filtering.filters.UnionFilter; import org.sleuthkit.autopsy.imageanalyzer.filtering.filters.UnionFilter;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import java.net.URL; import java.net.URL;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;

View File

@ -40,7 +40,7 @@ import javafx.scene.layout.AnchorPane;
import javax.swing.SortOrder; import javax.swing.SortOrder;
import org.sleuthkit.autopsy.coreutils.LoggedTask; import org.sleuthkit.autopsy.coreutils.LoggedTask;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.FileUpdateEvent; import org.sleuthkit.autopsy.imageanalyzer.FileUpdateEvent;
import org.sleuthkit.autopsy.imageanalyzer.FileUpdateListener; import org.sleuthkit.autopsy.imageanalyzer.FileUpdateListener;
import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController; import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController;

View File

@ -4,7 +4,7 @@
*/ */
package org.sleuthkit.autopsy.imageanalyzer.filtering.filters; package org.sleuthkit.autopsy.imageanalyzer.filtering.filters;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute;
import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableFile; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableFile;
import java.net.URL; import java.net.URL;

View File

@ -4,7 +4,7 @@
*/ */
package org.sleuthkit.autopsy.imageanalyzer.filtering.filters; package org.sleuthkit.autopsy.imageanalyzer.filtering.filters;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;

View File

@ -29,7 +29,7 @@ import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.TagUtils; import org.sleuthkit.autopsy.imageanalyzer.TagUtils;
import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.coreutils.ThreadConfined;
import org.sleuthkit.autopsy.coreutils.ThreadConfined.ThreadType; import org.sleuthkit.autopsy.coreutils.ThreadConfined.ThreadType;

View File

@ -96,7 +96,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.directorytree.ExtractAction; import org.sleuthkit.autopsy.directorytree.ExtractAction;
import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController; import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController;
import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerTopComponent; import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerTopComponent;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.FileIDSelectionModel; import org.sleuthkit.autopsy.imageanalyzer.FileIDSelectionModel;
import org.sleuthkit.autopsy.imageanalyzer.TagUtils; import org.sleuthkit.autopsy.imageanalyzer.TagUtils;
import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.coreutils.ThreadConfined;

View File

@ -18,7 +18,7 @@
*/ */
package org.sleuthkit.autopsy.imageanalyzer.gui; package org.sleuthkit.autopsy.imageanalyzer.gui;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.logging.Level; import java.util.logging.Level;

View File

@ -19,7 +19,7 @@
*/ */
package org.sleuthkit.autopsy.imageanalyzer.gui; package org.sleuthkit.autopsy.imageanalyzer.gui;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javafx.fxml.FXML; import javafx.fxml.FXML;

View File

@ -47,7 +47,7 @@ import javafx.scene.layout.Priority;
import javafx.scene.layout.Region; import javafx.scene.layout.Region;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.FileIDSelectionModel; import org.sleuthkit.autopsy.imageanalyzer.FileIDSelectionModel;
import org.sleuthkit.autopsy.imageanalyzer.TagUtils; import org.sleuthkit.autopsy.imageanalyzer.TagUtils;
import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.coreutils.ThreadConfined;

View File

@ -36,7 +36,7 @@ import javafx.util.Pair;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController; import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.datamodel.Category; import org.sleuthkit.autopsy.imageanalyzer.datamodel.Category;
import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskCoreException;

View File

@ -42,7 +42,7 @@ import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javax.swing.SortOrder; import javax.swing.SortOrder;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.FileIDSelectionModel; import org.sleuthkit.autopsy.imageanalyzer.FileIDSelectionModel;
import org.sleuthkit.autopsy.imageanalyzer.IconCache; import org.sleuthkit.autopsy.imageanalyzer.IconCache;
import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController; import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController;

View File

@ -44,7 +44,7 @@ import javafx.scene.layout.VBox;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController; import org.sleuthkit.autopsy.imageanalyzer.ImageAnalyzerController;
import org.sleuthkit.autopsy.imageanalyzer.FXMLConstructor; import org.sleuthkit.autopsy.coreutils.FXMLConstructor;
import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute;
import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute.AttributeName; import org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute.AttributeName;
import static org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute.AttributeName.PATH; import static org.sleuthkit.autopsy.imageanalyzer.datamodel.DrawableAttribute.AttributeName.PATH;