public void restoreBackup(String backupSourcePath) throws SQLException {
		String backupTempDirectory = Controller.getProperty(ApplicationProperties.APPLICATION_PATH);
		
		try {
			ZipFile zipFile = new ZipFile(backupSourcePath);
			zipFile.extractAll(backupTempDirectory);
			backupTempDirectory += File.separator + (new File(backupSourcePath)).getName().replace(".zip", "");
			
			closeDatabase();
			String connectionString = getDatabaseUrl() + ";restoreFrom=" + backupTempDirectory + 
					File.separatorChar + DB_NAME;

			dbConnection = DriverManager.getConnection(connectionString);

			log.info("Database has been restored from {}", backupSourcePath);
				
			// Remove the temp directory
			DirUtils.deleteIfExists(new File(backupTempDirectory).toPath());
			// Notify the Observers to allow the GUI update.
			setChanged();
			notifyObservers();
		} catch (SQLException ex) {
			ErrorMessages.databaseRestoreError("Dao.restoreBackup()", ex, backupTempDirectory);
		} catch (ZipException ex) {
			ErrorMessages.databaseRestoreZipError("Dao.restoreBackup()", ex, backupSourcePath);
		} catch (IOException ex) {
			log.warn("The temporary database restore directory couldn't been removed. Error message:\n{}", 
					ex.getLocalizedMessage());
		}
	}