19 package org.sleuthkit.autopsy.casemodule;
22 import java.util.HashSet;
23 import java.util.Iterator;
25 import java.util.logging.Level;
26 import javax.swing.event.ChangeEvent;
27 import javax.swing.event.ChangeListener;
28 import org.openide.DialogDescriptor;
29 import org.openide.DialogDisplayer;
30 import org.openide.NotifyDescriptor;
31 import org.openide.WizardDescriptor;
32 import org.openide.WizardValidationException;
33 import org.openide.util.HelpCtx;
34 import org.openide.util.NbBundle;
45 class NewCaseWizardPanel1
implements WizardDescriptor.ValidatingPanel<WizardDescriptor> {
51 private NewCaseVisualPanel1 component;
52 private Boolean isFinish =
false;
53 private static String createdDirectory;
54 private static final String PROP_BASECASE =
"LBL_BaseCase_PATH";
55 private static final Logger logger = Logger.getLogger(NewCaseWizardPanel1.class.getName());
66 public NewCaseVisualPanel1 getComponent() {
67 if (component == null) {
68 component =
new NewCaseVisualPanel1(
this);
80 public HelpCtx getHelp() {
82 return HelpCtx.DEFAULT_HELP;
95 public boolean isValid() {
104 private final Set<ChangeListener> listeners =
new HashSet<>(1);
112 public final void addChangeListener(ChangeListener l) {
113 synchronized (listeners) {
124 public final void removeChangeListener(ChangeListener l) {
125 synchronized (listeners) {
134 protected final void fireChangeEvent() {
135 Iterator<ChangeListener> it;
136 synchronized (listeners) {
137 it =
new HashSet<>(listeners).iterator();
139 ChangeEvent ev =
new ChangeEvent(
this);
140 while (it.hasNext()) {
141 it.next().stateChanged(ev);
151 public void setIsFinish(Boolean isFinish) {
152 this.isFinish = isFinish;
169 public void readSettings(WizardDescriptor settings) {
170 NewCaseVisualPanel1 panel = getComponent();
172 String lastBaseDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, PROP_BASECASE);
173 panel.setCaseParentDir(lastBaseDirectory);
174 panel.readSettings();
175 createdDirectory = (String) settings.getProperty(
"createdDirectory");
176 if (createdDirectory != null && !createdDirectory.isEmpty()) {
177 logger.log(Level.INFO,
"Deleting a case dir in readSettings(): {0}", createdDirectory);
178 FileUtil.deleteDir(
new File(createdDirectory));
180 }
catch (Exception e) {
181 logger.log(Level.WARNING,
"Could not read wizard settings in NewCaseWizardPanel1, ", e);
195 public void storeSettings(WizardDescriptor settings) {
196 CaseType caseType = getComponent().getCaseType();
197 settings.putProperty(
"caseName", getComponent().getCaseName());
198 settings.putProperty(
"caseParentDir", getComponent().getCaseParentDir());
199 settings.putProperty(
"createdDirectory", createdDirectory);
200 settings.putProperty(
"caseType", caseType.ordinal());
201 ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, ModuleSettings.CURRENT_CASE_TYPE, caseType.toString());
202 ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, PROP_BASECASE, getComponent().getCaseParentDir());
206 public void validate() throws WizardValidationException {
212 String caseName = getComponent().getCaseName();
213 if (!Case.isValidName(caseName)) {
214 String errorMsg = NbBundle
215 .getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.errMsg.invalidSymbols");
216 validationError(errorMsg);
219 String caseParentDir = getComponent().getCaseParentDir();
220 String caseDirPath = caseParentDir + caseName;
223 if (
new File(caseDirPath).exists()) {
225 String errorMsg = NbBundle
226 .getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.errMsg.dirExists", caseDirPath);
227 validationError(errorMsg);
230 File baseDir =
new File(caseParentDir);
231 if (baseDir.isAbsolute()) {
233 if (!baseDir.exists()) {
235 String confMsg = NbBundle
236 .getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.confMsg.createDir.msg",
238 NotifyDescriptor d2 =
new NotifyDescriptor.Confirmation(confMsg,
239 NbBundle.getMessage(
this.getClass(),
240 "NewCaseWizardPanel1.validate.confMsg.createDir.title"),
241 NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
242 d2.setValue(NotifyDescriptor.NO_OPTION);
244 Object res2 = DialogDisplayer.getDefault().notify(d2);
245 if (res2 != null && res2 == DialogDescriptor.YES_OPTION) {
248 createDirectory(caseDirPath, getComponent().getCaseType());
249 }
catch (WizardValidationException ex) {
250 String errorMsg = NbBundle.getMessage(this.getClass(),
251 "NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg",
253 logger.log(Level.WARNING, errorMsg, ex);
254 validationError(errorMsg);
257 if (res2 != null && res2 == DialogDescriptor.NO_OPTION) {
259 validationError(NbBundle.getMessage(
this.getClass(),
260 "NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg",
265 createDirectory(caseDirPath, getComponent().getCaseType());
266 }
catch (WizardValidationException ex) {
267 String errorMsg = NbBundle
268 .getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.errMsg.cantCreateDir");
269 logger.log(Level.WARNING, errorMsg, ex);
270 validationError(errorMsg);
275 String errorMsg = NbBundle
276 .getMessage(this.getClass(),
"NewCaseWizardPanel1.validate.errMsg.invalidBaseDir.msg");
277 validationError(errorMsg);
283 private void validationError(String errorMsg)
throws WizardValidationException {
284 throw new WizardValidationException(this.getComponent(), errorMsg, null);
290 private void createDirectory(
final String caseDirPath, CaseType caseType)
throws WizardValidationException {
292 boolean success =
false;
294 Case.createCaseDirectory(caseDirPath, caseType);
296 }
catch (CaseActionException ex) {
297 logger.log(Level.SEVERE,
"Could not createDirectory for the case, ", ex);
304 if (
new File(caseDirPath).exists()) {
305 FileUtil.deleteDir(
new File(caseDirPath));
308 String errorMsg = NbBundle.getMessage(this.getClass(),
309 "NewCaseWizardPanel1.createDir.errMsg.cantCreateDir.msg");
311 validationError(errorMsg);
315 createdDirectory = caseDirPath;
318 StartupWindowProvider.getInstance().close();
319 }
catch (Exception ex) {
320 logger.log(Level.WARNING,
"Startup window didn't close as expected.", ex);