public boolean saveDataflow()

in taverna-file-impl/src/main/java/org/apache/taverna/workbench/file/impl/actions/SaveWorkflowAsAction.java [116:200]


	public boolean saveDataflow(Component parentComponent, WorkflowBundle workflowBundle) {
		fileManager.setCurrentDataflow(workflowBundle);
		JFileChooser fileChooser = new JFileChooser();
		Preferences prefs = Preferences.userNodeForPackage(getClass());
		String curDir = prefs
				.get(PREF_CURRENT_DIR, System.getProperty("user.home"));
		fileChooser.setDialogTitle(SAVE_WORKFLOW_AS);

		fileChooser.resetChoosableFileFilters();
		fileChooser.setAcceptAllFileFilterUsed(false);

		List<FileFilter> fileFilters = fileManager
				.getSaveFileFilters(File.class);
		if (fileFilters.isEmpty()) {
			logger.warn("No file types found for saving workflow "
					+ workflowBundle);
			showMessageDialog(parentComponent,
					"No file types found for saving workflow.", "Error",
					ERROR_MESSAGE);
			return false;
		}
		for (FileFilter fileFilter : fileFilters)
			fileChooser.addChoosableFileFilter(fileFilter);
		fileChooser.setFileFilter(fileFilters.get(0));
		fileChooser.setCurrentDirectory(new File(curDir));

		File possibleName = new File(determineFileName(workflowBundle));
		boolean tryAgain = true;
		while (tryAgain) {
			tryAgain = false;
			fileChooser.setSelectedFile(possibleName);
			int returnVal = fileChooser.showSaveDialog(parentComponent);
			if (returnVal == APPROVE_OPTION) {
				prefs.put(PREF_CURRENT_DIR, fileChooser.getCurrentDirectory()
						.toString());
				File file = fileChooser.getSelectedFile();
				FileTypeFileFilter fileFilter = (FileTypeFileFilter) fileChooser
						.getFileFilter();
				FileType fileType = fileFilter.getFileType();
				String extension = "." + fileType.getExtension();
				if (!file.getName().toLowerCase().endsWith(extension)) {
					String newName = file.getName() + extension;
					file = new File(file.getParentFile(), newName);
				}

				// TODO: Open in separate thread to avoid hanging UI
				try {
					try {
						fileManager.saveDataflow(workflowBundle, fileType,
								file, true);
						logger.info("Saved workflow " + workflowBundle + " to "
								+ file);
						return true;
					} catch (OverwriteException ex) {
						logger.info("File already exists: " + file);
						String msg = "Are you sure you want to overwrite existing file "
								+ file + "?";
						int ret = showConfirmDialog(parentComponent, msg,
								"File already exists", YES_NO_CANCEL_OPTION);
						if (ret == YES_OPTION) {
							fileManager.saveDataflow(workflowBundle, fileType,
									file, false);
							logger.info("Saved workflow " + workflowBundle
									+ " by overwriting " + file);
							return true;
						} else if (ret == NO_OPTION) {
							tryAgain = true;
							continue;
						} else {
							logger.info("Aborted overwrite of " + file);
							return false;
						}
					}
				} catch (SaveException ex) {
					logger.warn("Could not save workflow to " + file, ex);
					showMessageDialog(parentComponent,
							"Could not save workflow to " + file + ": \n\n"
									+ ex.getMessage(), "Warning",
							WARNING_MESSAGE);
					return false;
				}
			}
		}
		return false;
	}