Changeset 2702 in josm for trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
- Timestamp:
- 2009-12-29T23:31:57+01:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
r2563 r2702 9 9 import java.io.File; 10 10 import java.io.IOException; 11 import java.util.ArrayList; 11 12 import java.util.Arrays; 13 import java.util.Collections; 12 14 import java.util.List; 13 15 14 16 import javax.swing.JFileChooser; 15 17 import javax.swing.JOptionPane; 18 import javax.swing.filechooser.FileFilter; 16 19 17 20 import org.openstreetmap.josm.Main; 18 21 import org.openstreetmap.josm.gui.PleaseWaitRunnable; 22 import org.openstreetmap.josm.io.AllFormatsImporter; 19 23 import org.openstreetmap.josm.io.FileImporter; 20 24 import org.openstreetmap.josm.io.IllegalDataException; 21 25 import org.openstreetmap.josm.io.OsmTransferException; 26 import org.openstreetmap.josm.tools.MultiMap; 22 27 import org.openstreetmap.josm.tools.Shortcut; 23 28 import org.xml.sax.SAXException; … … 46 51 return; 47 52 File[] files = fc.getSelectedFiles(); 48 OpenFileTask task = new OpenFileTask(Arrays.asList(files) );53 OpenFileTask task = new OpenFileTask(Arrays.asList(files), fc.getFileFilter()); 49 54 Main.worker.submit(task); 50 55 } … … 55 60 } 56 61 57 static public void openFile(File f) throws IOException, IllegalDataException {58 for (FileImporter importer : ExtensionFileFilter.importers)59 if (importer.acceptFile(f)) {60 importer.importData(f);61 }62 }63 64 62 static public class OpenFileTask extends PleaseWaitRunnable { 65 63 private List<File> files; 64 private FileFilter fileFilter; 66 65 private boolean cancelled; 67 66 68 public OpenFileTask(List<File> files ) {67 public OpenFileTask(List<File> files, FileFilter fileFilter) { 69 68 super(tr("Opening files"), false /* don't ignore exception */); 70 this.files = files; 69 this.files = new ArrayList<File>(files); 70 this.fileFilter = fileFilter; 71 71 } 72 72 @Override … … 83 83 protected void realRun() throws SAXException, IOException, OsmTransferException { 84 84 if (files == null || files.isEmpty()) return; 85 86 /** 87 * Find the importer with the chosen file filter 88 */ 89 FileImporter chosenImporter = null; 90 for (FileImporter importer : ExtensionFileFilter.importers) { 91 if (fileFilter == importer.filter) { 92 chosenImporter = importer; 93 } 94 } 95 /** 96 * If the filter wasn't changed in the dialog, chosenImporter is null now. 97 * When the filter was expicitly set to AllFormatsImporter, treat this the same. 98 */ 99 if (chosenImporter instanceof AllFormatsImporter) { 100 chosenImporter = null; 101 } 85 102 getProgressMonitor().setTicks(files.size()); 86 for (File f : files) { 103 104 if (chosenImporter != null) { // The importer was expicitely chosen, so use it. 105 //System.err.println("Importer: " +chosenImporter.getClass().getName()); 106 for (File f : files) { 107 if (!chosenImporter.acceptFile(f)) { 108 if (f.isDirectory()) { 109 JOptionPane.showMessageDialog( 110 Main.parent, 111 tr("<html>Cannot open directory.<br>Please select a file!"), 112 tr("Open file"), 113 JOptionPane.INFORMATION_MESSAGE 114 ); 115 return; 116 } else 117 throw new IllegalStateException(); 118 } 119 } 120 importData(chosenImporter, files); 121 } 122 else { // find apropriate importer 123 MultiMap<FileImporter, File> map = new MultiMap<FileImporter, File>(); 124 while (! files.isEmpty()) { 125 File f = files.get(0); 126 for (FileImporter importer : ExtensionFileFilter.importers) { 127 if (importer.acceptFile(f)) { 128 map.add(importer, f); 129 files.remove(f); 130 } 131 } 132 if (files.contains(f)) 133 throw new RuntimeException(); // no importer found 134 } 135 List<FileImporter> ims = new ArrayList<FileImporter>(map.keySet()); 136 Collections.sort(ims); 137 Collections.reverse(ims); 138 for (FileImporter importer : ims) { 139 //System.err.println("Using "+importer.getClass().getName()); 140 List<File> files = map.get(importer); 141 //System.err.println("for files: "+files); 142 importData(importer, files); 143 } 144 } 145 } 146 147 public void importData(FileImporter importer, List<File> files) { 148 if (importer.isBatchImporter()) { 87 149 if (cancelled) return; 88 getProgressMonitor().indeterminateSubTask(tr("Opening file ''{0}'' ...", f.getAbsolutePath())); 89 try { 90 System.out.println("Open file: " + f.getAbsolutePath() + " (" + f.length() + " bytes)"); 91 openFile(f); 92 } catch (Exception e) { 93 e.printStackTrace(); 94 JOptionPane.showMessageDialog( 95 Main.parent, 96 tr("<html>Could not read file ''{0}\''.<br> Error is: <br>{1}</html>", f.getName(), e.getMessage()), 97 tr("Error"), 98 JOptionPane.ERROR_MESSAGE 99 ); 150 String msg; 151 if (files.size() == 1) { 152 msg = tr("Opening 1 file..."); 153 } else { 154 msg = tr("Opening {0} files...", files.size()); 100 155 } 101 getProgressMonitor().worked(1); 156 getProgressMonitor().indeterminateSubTask(msg); 157 importer.importDataHandleExceptions(files); 158 getProgressMonitor().worked(files.size()); 159 } else { 160 for (File f : files) { 161 if (cancelled) return; 162 getProgressMonitor().indeterminateSubTask(tr("Opening file ''{0}'' ...", f.getAbsolutePath())); 163 importer.importDataHandleExceptions(f); 164 getProgressMonitor().worked(1); 165 } 102 166 } 103 167 }
Note:
See TracChangeset
for help on using the changeset viewer.