19package org.sleuthkit.autopsy.casemodule;
21import java.awt.BorderLayout;
22import java.awt.Component;
23import java.beans.PropertyChangeEvent;
24import java.beans.PropertyChangeListener;
25import java.util.HashMap;
27import java.util.logging.Level;
28import javax.swing.JList;
29import javax.swing.JPanel;
30import javax.swing.JSeparator;
31import javax.swing.ListCellRenderer;
32import org.openide.util.Lookup;
33import org.openide.util.NbBundle;
34import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
35import org.sleuthkit.autopsy.coreutils.Logger;
36import org.sleuthkit.autopsy.python.JythonModuleLoader;
42@SuppressWarnings(
"PMD.SingularField")
43final class AddImageWizardDataSourceSettingsVisual extends JPanel {
45 private static final Logger logger =
Logger.
getLogger(AddImageWizardDataSourceSettingsVisual.class.getName());
47 private final AddImageWizardDataSourceSettingsPanel wizPanel;
49 private JPanel currentPanel;
51 private final Map<String, DataSourceProcessor> datasourceProcessorsMap =
new HashMap<>();
53 private final PanelUpdateListener panelUpdateListener;
55 private String currentDsp;
62 AddImageWizardDataSourceSettingsVisual(AddImageWizardDataSourceSettingsPanel wizPanel) {
64 this.wizPanel = wizPanel;
65 this.panelUpdateListener =
new PanelUpdateListener();
66 typePanel.setLayout(
new BorderLayout());
67 discoverDataSourceProcessors();
75 private void discoverDataSourceProcessors() {
77 if (!datasourceProcessorsMap.containsKey(dsProcessor.getDataSourceType())) {
78 datasourceProcessorsMap.put(dsProcessor.getDataSourceType(), dsProcessor);
80 logger.log(Level.SEVERE,
"discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType());
85 if (!datasourceProcessorsMap.containsKey(dsProcessor.getDataSourceType())) {
86 datasourceProcessorsMap.put(dsProcessor.getDataSourceType(), dsProcessor);
88 logger.log(Level.SEVERE,
"discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType());
100 void setDspSelection(String dsType) {
102 currentPanel = datasourceProcessorsMap.get(dsType).getPanel();
103 updateCurrentPanel(currentPanel);
111 @SuppressWarnings(
"deprecation")
112 private
void updateCurrentPanel(JPanel panel) {
113 cleanupUpdateListener(currentPanel);
114 currentPanel = panel;
115 typePanel.removeAll();
116 typePanel.add(currentPanel, BorderLayout.CENTER);
117 typePanel.validate();
119 cleanupUpdateListener(currentPanel);
120 currentPanel.addPropertyChangeListener(panelUpdateListener);
121 this.wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid());
128 private void cleanupUpdateListener(JPanel panel) {
133 PropertyChangeListener[] listeners = panel.getPropertyChangeListeners();
134 if (listeners ==
null) {
138 for (PropertyChangeListener listener: listeners) {
139 if (listener instanceof PanelUpdateListener) {
140 panel.removePropertyChangeListener(listener);
166 public String getName() {
167 return NbBundle.getMessage(this.getClass(),
"AddImageWizardChooseDataSourceVisual.getName.text");
176 private void initComponents() {
178 typePanel =
new javax.swing.JPanel();
180 setPreferredSize(
new java.awt.Dimension(588, 328));
182 typePanel.setMinimumSize(
new java.awt.Dimension(0, 65));
183 typePanel.setPreferredSize(
new java.awt.Dimension(521, 65));
185 javax.swing.GroupLayout typePanelLayout =
new javax.swing.GroupLayout(typePanel);
186 typePanel.setLayout(typePanelLayout);
187 typePanelLayout.setHorizontalGroup(
188 typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
189 .addGap(0, 588, Short.MAX_VALUE)
191 typePanelLayout.setVerticalGroup(
192 typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
193 .addGap(0, 328, Short.MAX_VALUE)
196 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
197 this.setLayout(layout);
198 layout.setHorizontalGroup(
199 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
200 .addComponent(typePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 588, Short.MAX_VALUE)
202 layout.setVerticalGroup(
203 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204 .addComponent(typePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
208 private javax.swing.JPanel typePanel;
211 @SuppressWarnings(
"rawtypes")
224 @SuppressWarnings(
"unchecked")
227 Component comp =
delegate.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
249 wizPanel.enableNextButton(getCurrentDSProcessor().isPanelValid());
252 wizPanel.moveFocusToNext();
final ListCellRenderer delegate
final JPanel separatorPanel
ComboboxSeparatorRenderer(ListCellRenderer delegate)
abstract boolean addSeparatorAfter(JList list, Object value, int index)
final JSeparator separator
Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
void propertyChange(PropertyChangeEvent evt)
synchronized static Logger getLogger(String name)
static synchronized List< DataSourceProcessor > getDataSourceProcessorModules()