Changeset 2980 in josm for trunk


Ignore:
Timestamp:
2010-02-14T13:49:15+01:00 (14 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.