1
0
mirror of https://github.com/elisspace/autopsy.git synced 2026-09-06 02:24:30 +00:00

Bug fixes and tweaks to GUI and report framework

Signed-off-by: Alex Ebadirad <aebadirad@42six.com>
This commit is contained in:
Alex Ebadirad
2012-05-15 03:05:55 -07:00
parent a06fb7f142
commit 6594de3e37
9 changed files with 251 additions and 353 deletions

View File

@@ -46,25 +46,23 @@ import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.Log;
import org.sleuthkit.datamodel.BlackboardArtifact;
@ActionID(category = "Tools",
id = "org.sleuthkit.autopsy.report.ReportAction")
@ActionID(category = "Tools", id = "org.sleuthkit.autopsy.report.ReportAction")
@ActionRegistration(displayName = "#CTL_ReportAction")
@ActionReferences({
@ActionReference(path = "Menu/Tools", position = 80)
})
@Messages("CTL_ReportAction=Run Report")
@ActionReferences(value = {
@ActionReference(path = "Menu/Tools", position = 80)})
@Messages(value = "CTL_ReportAction=Run Report")
public final class ReportAction extends CallableSystemAction implements Presenter.Toolbar {
private JButton toolbarButton = new JButton();
private static final String ACTION_NAME = "Generate Report";
static final Logger logger = Logger.getLogger(ReportAction.class.getName());
private JPanel panel;
private ArrayList<JCheckBox> reportList = new ArrayList<JCheckBox>();
private ArrayList<JCheckBox> configList = new ArrayList<JCheckBox>();
public static ArrayList<JCheckBox> reportList = new ArrayList<JCheckBox>();
public static String preview;
public static ReportConfiguration config;
public ReportAction() {
setEnabled(false);
setEnabled(false);
Case.addPropertyChangeListener(new PropertyChangeListener() {
@Override
@@ -86,12 +84,12 @@ public final class ReportAction extends CallableSystemAction implements Presente
Case newCase = (Case) evt.getNewValue();
if (newCase != null) {
boolean exists = (new File(newCase.getCaseDirectory() + "\\Reports")).exists();
boolean exists = (new File(newCase.getCaseDirectory() + File.separator + "Reports")).exists();
if (exists) {
// report directory exists -- don't need to do anything
} else {
// report directory does not exist -- create it
boolean reportCreate = (new File(newCase.getCaseDirectory() + "\\Reports")).mkdirs();
boolean reportCreate = (new File(newCase.getCaseDirectory() + File.separator + "Reports")).mkdirs();
if (!reportCreate) {
logger.log(Level.WARNING, "Could not create Reports directory for case. It does not exist.");
}
@@ -106,38 +104,79 @@ public final class ReportAction extends CallableSystemAction implements Presente
@Override
public void actionPerformed(ActionEvent e) {
ReportAction.this.actionPerformed(e);
ReportPanel.this.actionPerformed(e);
}
});
}
private class reportListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
Object source = e.getItem();
JCheckBox comp = (JCheckBox)source;
String name = comp.getName();
JRadioButton buttan = null;
Component[] comps = comp.getParent().getComponents();
for(Component c : comps)
{
if(c.getName().equals(name+"p"))
{
buttan = (JRadioButton)c;
}
}
if(e.getStateChange() == ItemEvent.DESELECTED)
{
buttan.setEnabled(false);
}
if(e.getStateChange() == ItemEvent.SELECTED)
{
buttan.setEnabled(true);
}
}
};
@Override
public void itemStateChanged(ItemEvent e) {
Object source = e.getItem();
JCheckBox comp = (JCheckBox) source;
String name = comp.getName();
JRadioButton buttan = null;
Component[] comps = comp.getParent().getComponents();
for (Component c : comps) {
if (c.getName().equals(name + "p")) {
buttan = (JRadioButton) c;
}
}
if (e.getStateChange() == ItemEvent.DESELECTED) {
buttan.setEnabled(false);
}
if (e.getStateChange() == ItemEvent.SELECTED) {
buttan.setEnabled(true);
}
}
};
private class configListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
Object source = e.getItem();
JCheckBox comp = (JCheckBox) source;
String name = comp.getName();
BlackboardArtifact.ARTIFACT_TYPE type = BlackboardArtifact.ARTIFACT_TYPE.valueOf(name);
if (e.getStateChange() == ItemEvent.DESELECTED) {
try {
config.setGenArtifactType(type, Boolean.FALSE);
} catch (ReportModuleException ex) {
}
}
if (e.getStateChange() == ItemEvent.SELECTED) {
try {
config.setGenArtifactType(type, Boolean.TRUE);
} catch (ReportModuleException ex) {
}
}
}
};
private class previewListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
Object source = e.getItem();
JRadioButton comp = (JRadioButton) source;
String name = comp.getName();
JRadioButton buttan = new JRadioButton();
Component[] comps = comp.getParent().getComponents();
for (Component c : comps) {
if (c.getName().equals(name)) {
buttan = (JRadioButton) c;
}
}
if (e.getStateChange() == ItemEvent.SELECTED) {
String temp = buttan.getName();
temp = temp.substring(0, temp.length()-1);
preview = temp;
}
}
};
@Override
public void actionPerformed(ActionEvent e) {
@@ -157,6 +196,11 @@ public final class ReportAction extends CallableSystemAction implements Presente
}
});
final reportListener listener = new reportListener();
final configListener clistener = new configListener();
final previewListener plistener = new previewListener();
preview = "";
reportList.clear();
config = new ReportConfiguration();
final JPanel filterpanel = new JPanel(new GridLayout(0, 2, 5, 5));
final JPanel artpanel = new JPanel(new GridLayout(0, 3, 5, 5));
SwingUtilities.invokeLater(new Runnable() {
@@ -170,7 +214,7 @@ public final class ReportAction extends CallableSystemAction implements Presente
filterpanel.setAlignmentY(Component.TOP_ALIGNMENT);
filterpanel.setAlignmentX(Component.LEFT_ALIGNMENT);
filterpanel.setSize(300, 100);
ButtonGroup previewGroup = new ButtonGroup();
ButtonGroup previewGroup = new ButtonGroup();
for (ReportModule m : Lookup.getDefault().lookupAll(ReportModule.class)) {
String name = m.getName();
String desc = m.getReportTypeDescription();
@@ -180,12 +224,14 @@ public final class ReportAction extends CallableSystemAction implements Presente
ch.setName(m.getClass().getName());
ch.setToolTipText(desc);
ch.setSelected(true);
JRadioButton cb = new JRadioButton("Preview");
previewGroup.add(cb);
cb.setName(m.getClass().getName()+"p");
cb.setName(m.getClass().getName() + "p");
cb.addItemListener(plistener);
filterpanel.add(cb, 0);
ch.addItemListener(listener);
reportList.add(ch);
filterpanel.add(ch, 0);
}
Border artborder = BorderFactory.createTitledBorder("Report Data");
@@ -200,6 +246,7 @@ public final class ReportAction extends CallableSystemAction implements Presente
ce.setToolTipText(a.getDisplayName());
ce.setName(a.getLabel());
ce.setSelected(true);
ce.addItemListener(clistener);
artpanel.add(ce);
}
@@ -228,7 +275,7 @@ public final class ReportAction extends CallableSystemAction implements Presente
Log.get(ReportFilterAction.class).log(Level.WARNING, "Error displaying " + ACTION_NAME + " window.", ex);
}
}
@Override
public void performAction() {
}

View File

@@ -50,7 +50,7 @@ class ReportConfiguration {
try {
ArrayList<BlackboardArtifact.ARTIFACT_TYPE> arttypes = skCase.getBlackboardArtifactTypes();
for (BlackboardArtifact.ARTIFACT_TYPE type : arttypes) {
config.put(type, Boolean.FALSE);
config.put(type, Boolean.TRUE);
}
} catch (Exception ex) {
@@ -73,7 +73,7 @@ class ReportConfiguration {
try {
ArrayList<BlackboardArtifact.ARTIFACT_TYPE> arttypes = skCase.getBlackboardArtifactTypes();
for (BlackboardArtifact.ARTIFACT_TYPE type : arttypes) {
config.put(type, Boolean.FALSE);
config.put(type, Boolean.TRUE);
}
} catch (Exception ex) {

View File

@@ -25,12 +25,7 @@ import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.*;
import javax.swing.border.Border;
import org.openide.util.Lookup;
import org.sleuthkit.autopsy.casemodule.Case;
@@ -157,17 +152,27 @@ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS
cancelButton.setEnabled(true);
progBar.setStringPainted(true);
progBar.setValue(0);
filters.clear();
ReportConfiguration newConfig = ReportAction.config;
String preview = ReportAction.preview;
ArrayList<JCheckBox> reportList = ReportAction.reportList;
ArrayList<String> classList = new ArrayList<String>();
for(JCheckBox box : reportList)
{
if(box.isSelected()){
classList.add(box.getName());
}
}
config.resetGenArtifactTypes();
getReports();
getReports(newConfig, classList, preview);
}//GEN-LAST:event_jButton1ActionPerformed
public void getReports() {
public void getReports(final ReportConfiguration reportConfig, final ArrayList classList, final String preview) {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
rpa.reportGenerate(config, panel);
rpa.reportGenerate(reportConfig, classList, preview, panel);
return null;
}

View File

@@ -20,17 +20,11 @@ package org.sleuthkit.autopsy.report;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.util.logging.Level;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
import org.openide.util.HelpCtx;
import org.openide.util.Lookup;
import org.sleuthkit.autopsy.coreutils.Log;
/**

View File

@@ -36,7 +36,6 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.report.register.ReportRegisterService;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
import org.sleuthkit.datamodel.FsContent;

View File

@@ -24,6 +24,8 @@ import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
@@ -36,127 +38,152 @@ import org.sleuthkit.autopsy.coreutils.Log;
* @author Alex
*/
public class ReportPanelAction {
private static final String ACTION_NAME = "Report Preview";
private StringBuilder viewReport = new StringBuilder();
public ReportPanelAction(){
}
public void reportGenerate(final ReportConfiguration reportconfig, final ReportFilter rr){
try {
//Clear any old reports in the string
viewReport.setLength(0);
private static final String ACTION_NAME = "Report Preview";
private StringBuilder viewReport = new StringBuilder();
public ReportPanelAction() {
}
public void reportGenerate(final ReportConfiguration reportconfig, final ArrayList<String> classList, final String preview, final ReportFilter rr) {
try {
//Clear any old reports in the string
viewReport.setLength(0);
// Generate the reports and create the hashmap
final ReportGen report = new ReportGen();
//see what reports we need to run and run them
//Set progress bar to move while doing this
SwingUtilities.invokeLater(new Runnable() {
final ReportGen report = new ReportGen();
//see what reports we need to run and run them
//Set progress bar to move while doing this
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
rr.progBarStartText();
}});
report.populateReport(reportconfig);
SwingUtilities.invokeLater(new Runnable() {
rr.progBarStartText();
}
});
report.populateReport(reportconfig);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
rr.progBarCount(2*report.Results.size());
}});
//Turn our results into the appropriate xml/html reports
//TODO: add a way for users to select what they will run when
Thread reportThread = new Thread(new Runnable()
{
rr.progBarCount(2 * report.Results.size());
}
});
//Turn our results into the appropriate xml/html reports
//TODO: add a way for users to select what they will run when
Thread reportThread = new Thread(new Runnable() {
@Override
public void run()
{
StopWatch a = new StopWatch();
a.start();
ReportHTML htmlReport = new ReportHTML();
try{
String htmlpath = htmlReport.generateReport(reportconfig, rr);
}
catch(ReportModuleException e){
Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the htmlReport", e);
}
a.stop();
System.out.println("html in milliseconds: " + a.getElapsedTime());
public void run() {
StopWatch s = new StopWatch();
s.start();
ReportXLS xlsReport = new ReportXLS();
try{
xlsReport.generateReport(reportconfig,rr);
}
catch(ReportModuleException e){
Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the XLS Report", e);
}
s.stop();
System.out.println("xls in milliseconds: " + s.getElapsedTime());
StopWatch S = new StopWatch();
S.start();
ReportXML xmlReport = new ReportXML();
try{
xmlReport.generateReport(reportconfig,rr);
}
catch(ReportModuleException e){
Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the XML Report", e);
}
S.stop();
System.out.println("xml in milliseconds: " + S.getElapsedTime());
}
});
// start our threads
reportThread.start();
// display the window
// create the popUp window for it
if(ReportFilter.cancel == false){
final JFrame frame = new JFrame(ACTION_NAME);
final JDialog popUpWindow = new JDialog(frame, ACTION_NAME, true); // to make the popUp Window to be modal
// initialize panel with loaded settings
//Set the temporary label to let the user know its done and is waiting on the report
rr.progBarText();
final ReportPanel panel = new ReportPanel();
panel.setjButton1ActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
popUpWindow.dispose();
for (String s : classList) {
try {
Class reportclass = Class.forName(s);
Object reportObject = reportclass.newInstance();
Class[] argTypes = new Class[] { ReportConfiguration.class, ReportFilter.class};
Method generatereport = reportclass.getDeclaredMethod("generateReport",argTypes);
Object invoke = generatereport.invoke(reportObject,reportconfig,rr);
String path = invoke.toString();
Class[] argTypes2 = new Class[] { String.class};
Method getpreview = reportclass.getMethod("getPreview",argTypes2);
if(s == null ? preview == null : s.equals(preview))
{
getpreview.invoke(reportObject,path);
}
});
// add the panel to the popup window
popUpWindow.add(panel);
popUpWindow.setResizable(true);
popUpWindow.pack();
// set the location of the popUp Window on the center of the screen
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
double w = popUpWindow.getSize().getWidth();
double h = popUpWindow.getSize().getHeight();
popUpWindow.setLocation((int) ((screenDimension.getWidth() - w) / 2), (int) ((screenDimension.getHeight() - h) / 2));
reportThread.join();
rr.progBarDone();
panel.setFinishedReportText();
popUpWindow.setVisible(true);
}
} catch (Exception e) {
}
}
// StopWatch a = new StopWatch();
// a.start();
// ReportHTML htmlReport = new ReportHTML();
// try {
// String htmlpath = htmlReport.generateReport(reportconfig, rr);
// } catch (ReportModuleException e) {
// Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the htmlReport", e);
// }
// a.stop();
// System.out.println("html in milliseconds: " + a.getElapsedTime());
//
// StopWatch s = new StopWatch();
// s.start();
// ReportXLS xlsReport = new ReportXLS();
// try {
// xlsReport.generateReport(reportconfig, rr);
// } catch (ReportModuleException e) {
// Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the XLS Report", e);
// }
// s.stop();
// System.out.println("xls in milliseconds: " + s.getElapsedTime());
//
// StopWatch S = new StopWatch();
// S.start();
// ReportXML xmlReport = new ReportXML();
// try {
// xmlReport.generateReport(reportconfig, rr);
// } catch (ReportModuleException e) {
// Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the XML Report", e);
// }
// S.stop();
// System.out.println("xml in milliseconds: " + S.getElapsedTime());
}
});
// start our threads
reportThread.start();
// display the window
// create the popUp window for it
if (ReportFilter.cancel == false) {
final JFrame frame = new JFrame(ACTION_NAME);
final JDialog popUpWindow = new JDialog(frame, ACTION_NAME, true); // to make the popUp Window to be modal
// initialize panel with loaded settings
//Set the temporary label to let the user know its done and is waiting on the report
rr.progBarText();
final ReportPanel panel = new ReportPanel();
panel.setjButton1ActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
popUpWindow.dispose();
}
});
// add the panel to the popup window
popUpWindow.add(panel);
popUpWindow.setResizable(true);
popUpWindow.pack();
// set the location of the popUp Window on the center of the screen
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
double w = popUpWindow.getSize().getWidth();
double h = popUpWindow.getSize().getHeight();
popUpWindow.setLocation((int) ((screenDimension.getWidth() - w) / 2), (int) ((screenDimension.getHeight() - h) / 2));
reportThread.join();
rr.progBarDone();
panel.setFinishedReportText();
popUpWindow.setVisible(true);
}
} catch (Exception ex) {
Log.get(ReportFilterAction.class).log(Level.WARNING, "Error displaying " + ACTION_NAME + " window.", ex);
}
}
}
}

View File

@@ -39,7 +39,6 @@ import org.jdom.Element;
import org.jdom.output.XMLOutputter;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.report.register.ReportRegisterService;
import org.sleuthkit.datamodel.*;
public class ReportXML implements ReportModule {

View File

@@ -1,11 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
<filesystem>
<folder name="Actions">
<folder name="Tools">
<file name="org-sleuthkit-autopsy-report-ReportAction.instance"/>
</folder>
</folder>
<folder name="Menu">
<folder name="Tools">
<file name="org-sleuthkit-autopsy-report-ReportAction.shadow"/>
@@ -15,25 +10,21 @@
<file name="org-sleuthkit-autopsy-report-ReportHTML.instance">
<attr name="instanceOf" stringvalue="org.sleuthkit.autopsy.report.ReportModule"/>
<attr name="instanceCreate" methodvalue="org.sleuthkit.autopsy.report.ReportHTML.getDefault"/>
<attr name="position" intvalue="1000"/>
<attr name="position" intvalue="900"/>
</file>
<file name="org-sleuthkit-autopsy-report-ReportXML.instance">
<attr name="instanceOf" stringvalue="org.sleuthkit.autopsy.report.ReportModule"/>
<attr name="instanceCreate" methodvalue="org.sleuthkit.autopsy.report.ReportXML.getDefault"/>
<attr name="position" intvalue="1000"/>
<attr name="position" intvalue="901"/>
</file>
<file name="org-sleuthkit-autopsy-report-ReportXLS.instance">
<attr name="instanceOf" stringvalue="org.sleuthkit.autopsy.report.ReportModule"/>
<attr name="instanceCreate" methodvalue="org.sleuthkit.autopsy.report.ReportXLS.getDefault"/>
<attr name="position" intvalue="1000"/>
<attr name="position" intvalue="902"/>
</file>
</folder>
</folder>
<folder name="Toolbars">
<!-- <file name="sep2.instance">
<attr name="instanceClass" stringvalue="javax.swing.JToolBar$Separator"/>
<attr name="position" intvalue="600"/>
</file> -->
<folder name="File">
<folder name="File">
<file name="org-sleuthkit-autopsy-report-ReportAction.shadow">
<attr name="displayName" bundlevalue="org.sleuthkit.autopsy.report.Bundle#Toolbars/Reports/org-sleuthkit-autopsy-report-ReportAction.shadow"/>
<attr name="originalFile" stringvalue="Actions/Tools/org-sleuthkit-autopsy-report-ReportAction.instance"/>
@@ -41,5 +32,5 @@
</file>
</folder>
</folder>
</filesystem>
</filesystem>

View File

@@ -1,164 +0,0 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2011 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.report.register;
import java.beans.PropertyChangeListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.sleuthkit.autopsy.ingest.IngestImageWorkerController;
import org.sleuthkit.autopsy.ingest.IngestManagerProxy;
import org.sleuthkit.autopsy.ingest.IngestMessage;
import org.sleuthkit.autopsy.ingest.IngestMessage.MessageType;
import org.sleuthkit.autopsy.ingest.IngestServiceImage;
import org.sleuthkit.datamodel.Image;
/**
* Example implementation of an image ingest service
*
*/
public final class ReportRegisterService implements IngestServiceImage {
private static final Logger logger = Logger.getLogger(ReportRegisterService.class.getName());
private static ReportRegisterService defaultInstance = null;
private IngestManagerProxy managerProxy;
private static int messageId = 0;
//public constructor is required
//as multiple instances are created for processing multiple images simultenously
public ReportRegisterService() {
}
//default instance used for service registration
public static synchronized ReportRegisterService getDefault() {
if (defaultInstance == null) {
defaultInstance = new ReportRegisterService();
}
return defaultInstance;
}
@Override
public void process(Image image, IngestImageWorkerController controller) {
logger.log(Level.INFO, "process() " + this.toString());
managerProxy.postMessage(IngestMessage.createMessage(++messageId, MessageType.INFO, this, "Processing " + image.getName()));
//service specific Image processing code here
//example:
//if we know amount of work units, we can switch to determinate and update progress bar
int filesToProcess = 100;
controller.switchToDeterminate(filesToProcess);
int processedFiles = 0;
while (filesToProcess-- > 0) {
//check if should terminate on every loop iteration
if (controller.isCancelled()) {
return;
}
try {
//do the work
Thread.sleep(500);
//post message to user if found something interesting
managerProxy.postMessage(IngestMessage.createMessage(processedFiles, MessageType.INFO, this, "Processed " + image.getName() + ": " + Integer.toString(processedFiles)));
//update progress
controller.progress(++processedFiles);
} catch (InterruptedException e) {
}
}
}
@Override
public void complete() {
logger.log(Level.INFO, "complete() " + this.toString());
final IngestMessage msg = IngestMessage.createMessage(++messageId, MessageType.INFO, this, "completed image processing");
managerProxy.postMessage(msg);
//service specific cleanup due to completion here
}
@Override
public String getName() {
return "Example Image Service";
}
@Override
public String getDescription() {
return "Example Image Service description";
}
@Override
public void init(IngestManagerProxy managerProxy) {
logger.log(Level.INFO, "init() " + this.toString());
this.managerProxy = managerProxy;
//service specific initialization here
}
@Override
public void stop() {
logger.log(Level.INFO, "stop()");
//service specific cleanup due to interruption here
}
@Override
public ServiceType getType() {
return ServiceType.Image;
}
@Override
public boolean hasSimpleConfiguration() {
return false;
}
@Override
public boolean hasAdvancedConfiguration() {
return false;
}
@Override
public javax.swing.JPanel getSimpleConfiguration() {
return null;
}
@Override
public javax.swing.JPanel getAdvancedConfiguration() {
return null;
}
@Override
public boolean hasBackgroundJobsRunning() {
return false;
}
@Override
public void saveAdvancedConfiguration() {
}
@Override
public void saveSimpleConfiguration() {
}
}