public final Path getPath(final String titleMsg, final FileFilter filter,
			final File initialDirectory) {
		final JFileChooser chooser;
		final JLabel title = new JLabel(titleMsg);
		this.mainFrame.isAlwaysOnTop();
		chooser = new JFileChooser(initialDirectory);
		chooser.setDialogTitle(title.getText());
		chooser.setDialogType(JFileChooser.OPEN_DIALOG);
		chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		chooser.removeChoosableFileFilter(chooser.getChoosableFileFilters()[0]);
		chooser.setFileFilter(filter);
		chooser.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(final ActionEvent e) {
				synchronized (Button.class) {
					if (GUI.this.pressed != null) {
						return;
					}
					if (e.getActionCommand().equals("ApproveSelection")) {
						GUI.this.pressed = Button.YES;
					} else {
						GUI.this.pressed = Button.NO;
					}
					Button.class.notifyAll();
				}
			}
		});

		final boolean aot = this.mainFrame.isAlwaysOnTop();
		this.mainFrame.setAlwaysOnTop(false);
		this.mainFrame.getContentPane().removeAll();
		this.mainFrame.add(chooser);
		this.mainFrame.add(title, BorderLayout.NORTH);

		waitForButton(" TODO getPath()");

		this.mainFrame.setAlwaysOnTop(aot);

		if (this.pressed != Button.YES) {
			return null;
		}
		final File file = chooser.getSelectedFile();
		if (file == null) {
			return null;
		}
		return Path.getPath(file.toString());
	}