Ticket #2361: imr.patch

File imr.patch, 5.0 KB (added by pap, 15 years ago)
  • modules/org.sophie2.main.func.file/src/main/java/org/sophie2/main/func/file/dialogs/FileDialog.java

    ### Eclipse Workspace Patch 1.0
    #P sophie
     
    44import java.awt.Dimension; 
    55import java.awt.Insets; 
    66import java.io.File; 
     7import java.io.IOException; 
    78 
    89import javax.swing.Icon; 
    910import javax.swing.JButton; 
     
    1314import javax.swing.filechooser.FileFilter; 
    1415import javax.swing.filechooser.FileView; 
    1516 
     17import org.sophie2.base.commons.util.OSUtil; 
    1618import org.sophie2.base.dialogs.Dialog; 
    1719import org.sophie2.base.dialogs.DialogManager; 
     20import org.sophie2.core.logging.SophieLog; 
    1821import org.sophie2.main.dialogs.input.ConfirmDialogInput; 
    1922import org.sophie2.main.dialogs.input.DialogUtils; 
    2023import org.sophie2.main.dialogs.input.file.AccessoryData; 
     
    3336public class FileDialog extends Dialog<FileDialogInput, FileContainer> { 
    3437 
    3538        private final JFileChooser fileChooser = new JFileChooser(); 
    36          
     39 
    3740        /** 
    3841         * Constructs {@link FileDialog} with a specific {@link FileView}. 
    3942         */ 
     
    5053 
    5154                int selectionMode = (input.isMultiSelectEnabled()) ? 
    5255                                JFileChooser.FILES_AND_DIRECTORIES : JFileChooser.FILES_ONLY;  
    53                  
     56 
    5457                this.fileChooser.setFileSelectionMode(selectionMode); 
    5558                this.fileChooser.resetChoosableFileFilters(); 
    56                  
     59 
    5760                if (input.getFileAccessory() != null) { 
    5861                        FileAccessory<?> accessory = input.getFileAccessory(); 
    5962                        accessory.setFileChooser(this.fileChooser); 
    60                          
     63 
    6164                        this.fileChooser.setAccessory(accessory.swingComponent().get()); 
    6265                } else { 
    6366                        this.fileChooser.setAccessory(null); 
    6467                } 
    65                  
     68 
    6669                FileFilterInfo filterInfo = input.getFilterInfo(); 
    6770                for (FileFilter filter : filterInfo.getFilters()) { 
    6871                        this.fileChooser.addChoosableFileFilter(filter); 
    6972                } 
    70                  
     73 
    7174                this.fileChooser.setAcceptAllFileFilterUsed(filterInfo.getUseAcceptAllFilter()); 
    72                  
     75 
    7376                if (filterInfo.getFilters().size() > 0) { 
    7477                        this.fileChooser.setFileFilter(filterInfo.getFilters().get(0)); 
    7578                } 
    76                          
     79 
    7780                this.fileChooser.setSelectedFile(new File(input.getFileName())); 
    7881                this.fileChooser.setMultiSelectionEnabled(input.isMultiSelectEnabled()); 
    7982 
     
    9194                        case JFileChooser.APPROVE_OPTION: 
    9295                                File files[] = input.isMultiSelectEnabled() ? this.fileChooser.getSelectedFiles() 
    9396                                                : new File[] { this.fileChooser.getSelectedFile() }; 
     97 
    9498                                if (files.length == 1 && files[0].isDirectory()) { 
    9599                                        this.fileChooser.setCurrentDirectory(files[0]); 
    96100                                        break; 
    97101                                } 
    98                                 FileContainer fileContainer = peformFileCheck(input, files); 
     102                                FileContainer fileContainer = performFileCheck(input, files); 
    99103 
    100104                                if (fileContainer != null) { 
    101105                                        return fileContainer; 
     
    111115                if (input.getFileAccessory() == null) { 
    112116                        return null; 
    113117                } 
    114                  
     118 
    115119                return input.getFileAccessory().getData(); 
    116120        } 
    117          
    118         private final FileContainer peformFileCheck(FileDialogInput input, File[] files) { 
     121 
     122        private final FileContainer performFileCheck(FileDialogInput input, File[] files) { 
    119123                FileDialogInput.Kind inputKind = input.getKind(); 
    120124 
    121125                if (inputKind.equals(FileDialogInput.Kind.SAVE)) { 
    122126                        assert input.isMultiSelectEnabled() == false : "Cannot save in multiple resouces!"; 
     127 
     128                        boolean writable = true; 
     129                        if (OSUtil.isWindows() || OSUtil.isMacOS()) { 
     130                                try { 
     131                                        boolean created = files[0].createNewFile(); 
     132                                        if (created) { 
     133                                                files[0].delete(); 
     134                                        } 
     135                                } catch (IOException e) { 
     136                                        SophieLog.info("File doesn't seem writable", e); 
     137                                        writable = false; 
     138                                } 
     139                        } else { 
     140                                writable = files[0].getParentFile().canWrite(); 
     141                                writable = writable || files[0].exists() && files[0].canWrite(); 
     142                        } 
     143                        if (!writable) { 
     144                                DialogUtils.showErrorDialog(this.fileChooser.getParent(), 
     145                                                "You don't have permissions to write in this directory.",  
     146                                "Permission denied"); 
     147                                return null; 
     148                        } 
     149 
    123150                        if (files[0].exists()) { 
    124151                                ConfirmDialogInput confirmInput = new ConfirmDialogInput(this.fileChooser 
    125152                                                .getParent(), 
     
    145172                // things. The buttons are the ones that display 
    146173                // folder, home, details list and other icons. 
    147174                JComponent buttonsComboBox = (JComponent) upperPanel.getComponent(0); 
    148 //              buttonsComboBox.setPreferredSize(new Dimention(30)) 
     175                //              buttonsComboBox.setPreferredSize(new Dimention(30)) 
    149176                for (Component c : buttonsComboBox.getComponents()) { 
    150177                        if (c instanceof JButton) { 
    151178                                JButton button = (JButton) c; 
     
    185212                        Icon icon = null; 
    186213 
    187214                        FileIconProvider provider = FileFunctionalityModule.get() 
    188                                         .getFileIconProviderPoint().getProvider(file); 
     215                        .getFileIconProviderPoint().getProvider(file); 
    189216 
    190217                        if (provider != null) { 
    191218                                icon = provider.getIcon(file);