### Eclipse Workspace Patch 1.0
#P sophie
Index: modules/org.sophie2.main.func.file/src/main/java/org/sophie2/main/func/file/dialogs/FileDialog.java
===================================================================
--- modules/org.sophie2.main.func.file/src/main/java/org/sophie2/main/func/file/dialogs/FileDialog.java	(revision 8969)
+++ modules/org.sophie2.main.func.file/src/main/java/org/sophie2/main/func/file/dialogs/FileDialog.java	(working copy)
@@ -4,6 +4,7 @@
 import java.awt.Dimension;
 import java.awt.Insets;
 import java.io.File;
+import java.io.IOException;
 
 import javax.swing.Icon;
 import javax.swing.JButton;
@@ -13,8 +14,10 @@
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileView;
 
+import org.sophie2.base.commons.util.OSUtil;
 import org.sophie2.base.dialogs.Dialog;
 import org.sophie2.base.dialogs.DialogManager;
+import org.sophie2.core.logging.SophieLog;
 import org.sophie2.main.dialogs.input.ConfirmDialogInput;
 import org.sophie2.main.dialogs.input.DialogUtils;
 import org.sophie2.main.dialogs.input.file.AccessoryData;
@@ -33,7 +36,7 @@
 public class FileDialog extends Dialog<FileDialogInput, FileContainer> {
 
 	private final JFileChooser fileChooser = new JFileChooser();
-	
+
 	/**
 	 * Constructs {@link FileDialog} with a specific {@link FileView}.
 	 */
@@ -50,30 +53,30 @@
 
 		int selectionMode = (input.isMultiSelectEnabled()) ?
 				JFileChooser.FILES_AND_DIRECTORIES : JFileChooser.FILES_ONLY; 
-		
+
 		this.fileChooser.setFileSelectionMode(selectionMode);
 		this.fileChooser.resetChoosableFileFilters();
-		
+
 		if (input.getFileAccessory() != null) {
 			FileAccessory<?> accessory = input.getFileAccessory();
 			accessory.setFileChooser(this.fileChooser);
-			
+
 			this.fileChooser.setAccessory(accessory.swingComponent().get());
 		} else {
 			this.fileChooser.setAccessory(null);
 		}
-		
+
 		FileFilterInfo filterInfo = input.getFilterInfo();
 		for (FileFilter filter : filterInfo.getFilters()) {
 			this.fileChooser.addChoosableFileFilter(filter);
 		}
-		
+
 		this.fileChooser.setAcceptAllFileFilterUsed(filterInfo.getUseAcceptAllFilter());
-		
+
 		if (filterInfo.getFilters().size() > 0) {
 			this.fileChooser.setFileFilter(filterInfo.getFilters().get(0));
 		}
-			
+
 		this.fileChooser.setSelectedFile(new File(input.getFileName()));
 		this.fileChooser.setMultiSelectionEnabled(input.isMultiSelectEnabled());
 
@@ -91,11 +94,12 @@
 			case JFileChooser.APPROVE_OPTION:
 				File files[] = input.isMultiSelectEnabled() ? this.fileChooser.getSelectedFiles()
 						: new File[] { this.fileChooser.getSelectedFile() };
+
 				if (files.length == 1 && files[0].isDirectory()) {
 					this.fileChooser.setCurrentDirectory(files[0]);
 					break;
 				}
-				FileContainer fileContainer = peformFileCheck(input, files);
+				FileContainer fileContainer = performFileCheck(input, files);
 
 				if (fileContainer != null) {
 					return fileContainer;
@@ -111,15 +115,38 @@
 		if (input.getFileAccessory() == null) {
 			return null;
 		}
-		
+
 		return input.getFileAccessory().getData();
 	}
-	
-	private final FileContainer peformFileCheck(FileDialogInput input, File[] files) {
+
+	private final FileContainer performFileCheck(FileDialogInput input, File[] files) {
 		FileDialogInput.Kind inputKind = input.getKind();
 
 		if (inputKind.equals(FileDialogInput.Kind.SAVE)) {
 			assert input.isMultiSelectEnabled() == false : "Cannot save in multiple resouces!";
+
+			boolean writable = true;
+			if (OSUtil.isWindows() || OSUtil.isMacOS()) {
+				try {
+					boolean created = files[0].createNewFile();
+					if (created) {
+						files[0].delete();
+					}
+				} catch (IOException e) {
+					SophieLog.info("File doesn't seem writable", e);
+					writable = false;
+				}
+			} else {
+				writable = files[0].getParentFile().canWrite();
+				writable = writable || files[0].exists() && files[0].canWrite();
+			}
+			if (!writable) {
+				DialogUtils.showErrorDialog(this.fileChooser.getParent(),
+						"You don't have permissions to write in this directory.", 
+				"Permission denied");
+				return null;
+			}
+
 			if (files[0].exists()) {
 				ConfirmDialogInput confirmInput = new ConfirmDialogInput(this.fileChooser
 						.getParent(),
@@ -145,7 +172,7 @@
 		// things. The buttons are the ones that display
 		// folder, home, details list and other icons.
 		JComponent buttonsComboBox = (JComponent) upperPanel.getComponent(0);
-//		buttonsComboBox.setPreferredSize(new Dimention(30))
+		//		buttonsComboBox.setPreferredSize(new Dimention(30))
 		for (Component c : buttonsComboBox.getComponents()) {
 			if (c instanceof JButton) {
 				JButton button = (JButton) c;
@@ -185,7 +212,7 @@
 			Icon icon = null;
 
 			FileIconProvider provider = FileFunctionalityModule.get()
-					.getFileIconProviderPoint().getProvider(file);
+			.getFileIconProviderPoint().getProvider(file);
 
 			if (provider != null) {
 				icon = provider.getIcon(file);

