Changeset 2980 in josm


Ignore:
Timestamp:
Feb 14, 2010 1:49:15 PM (3 years ago)
Author:
Gubaer
Message:

fixed #4269: Exception does not lead to bug report window

Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java

    r2946 r2980  
    1212import java.util.ArrayList; 
    1313import java.util.Arrays; 
     14import java.util.Collection; 
    1415import java.util.Collections; 
     16import java.util.LinkedList; 
    1517import java.util.List; 
    1618 
     
    2022 
    2123import org.openstreetmap.josm.Main; 
     24import org.openstreetmap.josm.gui.HelpAwareOptionPane; 
    2225import org.openstreetmap.josm.gui.PleaseWaitRunnable; 
     26import org.openstreetmap.josm.gui.help.HelpUtil; 
    2327import org.openstreetmap.josm.io.AllFormatsImporter; 
    2428import org.openstreetmap.josm.io.FileImporter; 
     
    8993        } 
    9094 
     95        protected void alertFilesNotMatchingWithImporter(Collection<File> files, FileImporter importer) { 
     96            StringBuffer msg = new StringBuffer(); 
     97            msg.append("<html>"); 
     98            msg.append( 
     99                    trn( 
     100                            "Cannot open {0} file with the file importer ''{1}''. Skipping the following files:", 
     101                            "Cannot open {0} files with the file importer ''{1}''. Skipping the following files:", 
     102                            files.size(), 
     103                            files.size(), 
     104                            importer.filter.getDescription() 
     105                    ) 
     106            ).append("<br>"); 
     107            msg.append("<ul>"); 
     108            for (File f: files) { 
     109                msg.append("<li>").append(f.getAbsolutePath()).append("</li>"); 
     110            } 
     111            msg.append("</ul>"); 
     112 
     113            HelpAwareOptionPane.showOptionDialog( 
     114                    Main.parent, 
     115                    msg.toString(), 
     116                    tr("Warning"), 
     117                    JOptionPane.WARNING_MESSAGE, 
     118                    HelpUtil.ht("/Action/OpenFile#ImporterCantImportFiles") 
     119            ); 
     120        } 
     121 
     122        protected void alertFilesWithUnknownImporter(Collection<File> files) { 
     123            StringBuffer msg = new StringBuffer(); 
     124            msg.append("<html>"); 
     125            msg.append( 
     126                    trn( 
     127                            "Cannot open {0} file because no suitable file importer is available. Skipping the following files:", 
     128                            "Cannot open {0} files because no suitable file importer is available. Skipping the following files:", 
     129                            files.size(), 
     130                            files.size() 
     131                    ) 
     132            ).append("<br>"); 
     133            msg.append("<ul>"); 
     134            for (File f: files) { 
     135                msg.append("<li>").append(f.getAbsolutePath()).append("</li>"); 
     136            } 
     137            msg.append("</ul>"); 
     138 
     139            HelpAwareOptionPane.showOptionDialog( 
     140                    Main.parent, 
     141                    msg.toString(), 
     142                    tr("Warning"), 
     143                    JOptionPane.WARNING_MESSAGE, 
     144                    HelpUtil.ht("/Action/OpenFile#MissingImporterForFiles") 
     145            ); 
     146        } 
     147 
    91148        @Override 
    92149        protected void realRun() throws SAXException, IOException, OsmTransferException { 
     
    111168            getProgressMonitor().setTicksCount(files.size()); 
    112169 
    113             if (chosenImporter != null) { // The importer was expicitely chosen, so use it. 
    114                 //System.err.println("Importer: " +chosenImporter.getClass().getName()); 
     170            if (chosenImporter != null) { 
     171                // The importer was expicitely chosen, so use it. 
     172                List<File> filesNotMatchingWithImporter = new LinkedList<File>(); 
     173                List<File> filesMatchingWithImporter = new LinkedList<File>(); 
    115174                for (File f : files) { 
    116175                    if (!chosenImporter.acceptFile(f)) { 
    117176                        if (f.isDirectory()) { 
    118                             JOptionPane.showMessageDialog( 
    119                                     Main.parent, 
    120                                     tr("<html>Cannot open directory.<br>Please select a file!</html>"), 
    121                                     tr("Open file"), 
    122                                     JOptionPane.INFORMATION_MESSAGE 
    123                             ); 
    124                             return; 
    125                         } else 
    126                             throw new IllegalStateException(); 
     177                            JOptionPane.showMessageDialog(Main.parent, tr( 
     178                                    "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>", f 
     179                                    .getAbsolutePath()), tr("Open file"), JOptionPane.ERROR_MESSAGE); 
     180                        } else { 
     181                            filesNotMatchingWithImporter.add(f); 
     182                        } 
     183                    } else { 
     184                        filesMatchingWithImporter.add(f); 
    127185                    } 
    128186                } 
    129                 importData(chosenImporter, files); 
    130             } 
    131             else {    // find apropriate importer 
     187 
     188                if (!filesNotMatchingWithImporter.isEmpty()) { 
     189                    alertFilesNotMatchingWithImporter(filesNotMatchingWithImporter, chosenImporter); 
     190                } 
     191                if (!filesNotMatchingWithImporter.isEmpty()) { 
     192                    importData(chosenImporter, filesMatchingWithImporter); 
     193                } 
     194            } else { 
     195                // find appropriate importer 
    132196                MultiMap<FileImporter, File> map = new MultiMap<FileImporter, File>(); 
    133                 FILES: 
    134                     for (File f: files) { 
    135                         for (FileImporter importer : ExtensionFileFilter.importers) { 
    136                             if (importer.acceptFile(f)) { 
    137                                 map.put(importer, f); 
    138                                 continue FILES; 
    139                             } 
     197                List<File> filesWithKnownImporter = new LinkedList<File>(); 
     198                List<File> filesWithUnknownImporter = new LinkedList<File>(); 
     199                FILES: for (File f : files) { 
     200                    for (FileImporter importer : ExtensionFileFilter.importers) { 
     201                        if (importer.acceptFile(f)) { 
     202                            map.put(importer, f); 
     203                            filesWithKnownImporter.add(f); 
     204                            continue FILES; 
    140205                        } 
    141                         throw new RuntimeException(); // no importer found 
    142206                    } 
     207                    filesWithUnknownImporter.add(f); 
     208                } 
     209                if (!filesWithUnknownImporter.isEmpty()) { 
     210                    alertFilesWithUnknownImporter(filesWithUnknownImporter); 
     211                } 
    143212                List<FileImporter> ims = new ArrayList<FileImporter>(map.keySet()); 
    144213                Collections.sort(ims); 
    145214                Collections.reverse(ims); 
    146215                for (FileImporter importer : ims) { 
    147                     //System.err.println("Using "+importer.getClass().getName()); 
    148216                    List<File> files = new ArrayList<File>(map.get(importer)); 
    149                     //System.err.println("for files: "+files); 
    150217                    importData(importer, files); 
    151218                } 
     
    162229                    msg = trn("Opening {0} file...", "Opening {0} files...", files.size(), files.size()); 
    163230                } 
     231                getProgressMonitor().setCustomText(msg); 
    164232                getProgressMonitor().indeterminateSubTask(msg); 
    165233                importer.importDataHandleExceptions(files, getProgressMonitor().createSubTaskMonitor(files.size(), false)); 
  • trunk/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java

    r2689 r2980  
    1313import org.openstreetmap.josm.gui.progress.ProgressMonitor.CancelListener; 
    1414import org.openstreetmap.josm.io.OsmTransferException; 
     15import org.openstreetmap.josm.tools.BugReportExceptionHandler; 
    1516import org.openstreetmap.josm.tools.CheckParameterUtil; 
    1617import org.xml.sax.SAXException; 
     
    103104                SwingUtilities.invokeLater(new Runnable() { 
    104105                    public void run() { 
    105                         ExceptionDialogUtil.explainException(e); 
     106                        if (e instanceof RuntimeException) { 
     107                            BugReportExceptionHandler.handleException(e); 
     108                        } else { 
     109                            ExceptionDialogUtil.explainException(e); 
     110                        } 
    106111                    } 
    107112                }); 
Note: See TracChangeset for help on using the changeset viewer.