/** We expected to find a db file, but nothing was there. Ask. */
 private static String getDatabaseLocationWhenExpectedFileWasNotFound(
     final String expectedDatabasePath, final IWindowUtils windowUtils) {
   LOG.warn("Expected database  " + expectedDatabasePath + " not found!");
   final int response =
       windowUtils.showQuestionMessage(
           "Could not find a database file!\nWould you like to initialize a new new (emtpy) one, or locate a database file yourself?\nNote that the database location can be changed at any time.",
           new String[] {"New", "Find Existing"},
           "No Database Found");
   if (response == 0) {
     return expectedDatabasePath;
   } else {
     return chooseDatabaseLocation(windowUtils);
   }
 }
 /**
  * Initializes the database (showing various popups and warnings if the location is not ok) and
  * creates the {@link Injector}
  */
 private static Injector initializeDependencies(
     final String databasePath, final IWindowUtils windowUtils) {
   EmbeddedObjectContainer container = null;
   try {
     container = Db4oEmbedded.openFile(databasePath);
   } catch (final Db4oException e) {
     windowUtils.showErrorMessage(
         "Either your database is currently being used, or is seriouly corrupted, or you didn't choose a database file!\nYou need to either select or create a database.",
         "Database Load Error");
     return initializeDependencies(chooseDatabaseLocation(windowUtils), windowUtils);
   }
   return Guice.createInjector(
       new GuiceConfigBackend(container, databasePath), new GuiceConfigGui());
 }
 /** Uses a {@link JFileChooser} to get a database location */
 private static String chooseDatabaseLocation(final IWindowUtils windowUtils) {
   final JFileChooser fileChooser = new JFileChooser();
   fileChooser.setDialogTitle("Select Database");
   fileChooser.setApproveButtonText("Use this Database");
   final int result = fileChooser.showDialog(null, null);
   if (result == JFileChooser.APPROVE_OPTION) {
     return fileChooser.getSelectedFile().getAbsolutePath();
   } else {
     if (windowUtils.showWarningQuestionMessage(
         "Apprentice needs a database!\nDo you want to go back and select or create a new one?\nOtherwise the program will terminate.",
         "Database")) {
       return chooseDatabaseLocation(windowUtils);
     } else {
       LOG.info("Shut down due to lack of database.");
       System.exit(0);
     }
   }
   return ""; // kinda unreachable
 }