Changeset 5317 in josm


Ignore:
Timestamp:
Jul 10, 2012 1:29:55 PM (11 months ago)
Author:
Don-vip
Message:

see #7843 - Allow to open remote *.osm.bz/*.osm.bz2 files

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
4 edited

Legend:

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

    r4996 r5317  
    2323import org.openstreetmap.josm.Main; 
    2424import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask; 
     25import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmBzip2Task; 
    2526import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmChangeTask; 
    2627import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 
     
    5556        addDownloadTaskClass(DownloadOsmChangeTask.class); 
    5657        addDownloadTaskClass(DownloadOsmUrlTask.class); 
     58        addDownloadTaskClass(DownloadOsmBzip2Task.class); 
    5759    } 
    5860 
  • trunk/src/org/openstreetmap/josm/io/OsmBzip2Importer.java

    r3083 r5317  
    88import java.io.FileInputStream; 
    99import java.io.IOException; 
     10import java.io.InputStream; 
    1011 
    1112import org.apache.tools.bzip2.CBZip2InputStream; 
     
    2223    @Override 
    2324    public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException { 
    24         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); 
     25        importData(getBZip2InputStream(new FileInputStream(file)), file); 
     26    } 
     27     
     28    public static CBZip2InputStream getBZip2InputStream(InputStream in) throws IOException { 
     29        if (in == null) { 
     30            return null; 
     31        } 
     32        BufferedInputStream bis = new BufferedInputStream(in); 
    2533        int b = bis.read(); 
    2634        if (b != 'B') 
     
    2937        if (b != 'Z') 
    3038            throw new IOException(tr("Invalid bz2 file.")); 
    31         CBZip2InputStream in = new CBZip2InputStream(bis); 
    32         importData(in, file); 
     39        return new CBZip2InputStream(bis); 
    3340    } 
    3441} 
  • trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java

    r4530 r5317  
    44import static org.openstreetmap.josm.tools.I18n.tr; 
    55 
     6import java.io.IOException; 
    67import java.io.InputStream; 
    78 
     9import org.apache.tools.bzip2.CBZip2InputStream; 
    810import org.openstreetmap.josm.data.gpx.GpxData; 
    911import org.openstreetmap.josm.data.osm.DataSet; 
    1012import org.openstreetmap.josm.gui.progress.ProgressMonitor; 
     13import org.xml.sax.SAXException; 
    1114 
    1215public class OsmServerLocationReader extends OsmServerReader { 
    1316 
    14     String url; 
     17    protected final String url; 
    1518 
    1619    public OsmServerLocationReader(String url) { 
     
    1821    } 
    1922 
    20     /** 
    21      * Method to download OSM files from somewhere 
    22      */ 
    23     @Override 
    24     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException { 
    25         InputStream in = null; 
     23    protected abstract class Parser<T> { 
     24        public InputStream in = null; 
     25        public abstract T parse() throws OsmTransferException, IllegalDataException, IOException, SAXException; 
     26    } 
     27 
     28    protected final <T> T doParse(Parser<T> parser, final ProgressMonitor progressMonitor) throws OsmTransferException { 
    2629        progressMonitor.beginTask(tr("Contacting Server...", 10)); 
    2730        try { 
    28             in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false)); 
    29             if (in == null) 
    30                 return null; 
    31             progressMonitor.subTask(tr("Downloading OSM data...")); 
    32             return OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false)); 
     31            return parser.parse(); 
    3332        } catch(OsmTransferException e) { 
    3433            throw e; 
     
    4140            try { 
    4241                activeConnection = null; 
    43                 if (in != null) { 
    44                     in.close(); 
     42                if (parser.in != null) { 
     43                    parser.in.close(); 
     44                    parser.in = null; 
    4545                } 
    4646            } catch(Exception e) {/* ignore it */} 
    4747        } 
     48    } 
     49 
     50    /** 
     51     * Method to download OSM files from somewhere 
     52     */ 
     53    @Override 
     54    public DataSet parseOsm(final ProgressMonitor progressMonitor) throws OsmTransferException { 
     55        return doParse(new Parser<DataSet>() { 
     56            @Override 
     57            public DataSet parse() throws OsmTransferException, IllegalDataException { 
     58                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false)); 
     59                if (in == null) 
     60                    return null; 
     61                progressMonitor.subTask(tr("Downloading OSM data...")); 
     62                return OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false)); 
     63            } 
     64        }, progressMonitor); 
     65    } 
     66 
     67    /** 
     68     * Method to download BZip2-compressed OSM files from somewhere 
     69     */ 
     70    @Override 
     71    public DataSet parseOsmBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException { 
     72        return doParse(new Parser<DataSet>() { 
     73            @Override 
     74            public DataSet parse() throws OsmTransferException, IllegalDataException, IOException { 
     75                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false)); 
     76                if (in == null) 
     77                    return null; 
     78                CBZip2InputStream bzin = OsmBzip2Importer.getBZip2InputStream(in); 
     79                progressMonitor.subTask(tr("Downloading OSM data...")); 
     80                return OsmReader.parseDataSet(bzin, progressMonitor.createSubTaskMonitor(1, false)); 
     81            } 
     82        }, progressMonitor); 
    4883    } 
    4984 
     
    5287     */ 
    5388    @Override 
    54     public DataSet parseOsmChange(ProgressMonitor progressMonitor) 
     89    public DataSet parseOsmChange(final ProgressMonitor progressMonitor) 
    5590            throws OsmTransferException { 
    56         InputStream in = null; 
    57         progressMonitor.beginTask(tr("Contacting Server...", 10)); 
    58         try { 
    59             in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false)); 
    60             if (in == null) 
    61                 return null; 
    62             progressMonitor.subTask(tr("Downloading OSM data...")); 
    63             return OsmChangeReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false)); 
    64         } catch(OsmTransferException e) { 
    65             throw e; 
    66         } catch (Exception e) { 
    67             if (cancel) 
    68                 return null; 
    69             throw new OsmTransferException(e); 
    70         } finally { 
    71             progressMonitor.finishTask(); 
    72             try { 
    73                 activeConnection = null; 
    74                 if (in != null) { 
    75                     in.close(); 
    76                 } 
    77             } catch(Exception e) {/* ignore it */} 
    78         } 
     91        return doParse(new Parser<DataSet>() { 
     92            @Override 
     93            public DataSet parse() throws OsmTransferException, IllegalDataException { 
     94                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(9, false)); 
     95                if (in == null) 
     96                    return null; 
     97                progressMonitor.subTask(tr("Downloading OSM data...")); 
     98                return OsmChangeReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false)); 
     99            } 
     100        }, progressMonitor); 
    79101    } 
    80102 
    81103    @Override 
    82     public GpxData parseRawGps(ProgressMonitor progressMonitor) throws OsmTransferException { 
    83         InputStream in = null; 
    84         progressMonitor.beginTask(tr("Contacting Server...", 10)); 
    85         try { 
    86             in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(1, true)); 
    87             if (in == null) 
    88                 return null; 
    89             progressMonitor.subTask(tr("Downloading OSM data...")); 
    90             GpxReader reader = new GpxReader(in); 
    91             reader.parse(false); 
    92             GpxData result = reader.data; 
    93             result.fromServer = true; 
    94             return result; 
    95         } catch(OsmTransferException e) { 
    96             throw e; 
    97         } catch (Exception e) { 
    98             if (cancel) 
    99                 return null; 
    100             throw new OsmTransferException(e); 
    101         } finally { 
    102             progressMonitor.finishTask(); 
    103             try { 
    104                 activeConnection = null; 
    105                 if (in != null) { 
    106                     in.close(); 
    107                 } 
    108             } catch(Exception e) {/* ignore it */} 
    109         } 
     104    public GpxData parseRawGps(final ProgressMonitor progressMonitor) throws OsmTransferException { 
     105        return doParse(new Parser<GpxData>() { 
     106            @Override 
     107            public GpxData parse() throws OsmTransferException, IllegalDataException, IOException, SAXException { 
     108                in = getInputStreamRaw(url, progressMonitor.createSubTaskMonitor(1, true)); 
     109                if (in == null) 
     110                    return null; 
     111                progressMonitor.subTask(tr("Downloading OSM data...")); 
     112                GpxReader reader = new GpxReader(in); 
     113                reader.parse(false); 
     114                GpxData result = reader.data; 
     115                result.fromServer = true; 
     116                return result; 
     117            } 
     118        }, progressMonitor); 
    110119    } 
    111120} 
  • trunk/src/org/openstreetmap/josm/io/OsmServerReader.java

    r5097 r5317  
    144144    } 
    145145 
    146     public abstract DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException; 
     146    public abstract DataSet parseOsm(final ProgressMonitor progressMonitor) throws OsmTransferException; 
    147147 
    148     public DataSet parseOsmChange(ProgressMonitor progressMonitor) throws OsmTransferException { 
     148    public DataSet parseOsmChange(final ProgressMonitor progressMonitor) throws OsmTransferException { 
    149149        return null; 
    150150    } 
    151151     
    152     public GpxData parseRawGps(ProgressMonitor progressMonitor) throws OsmTransferException { 
     152    public GpxData parseRawGps(final ProgressMonitor progressMonitor) throws OsmTransferException { 
     153        return null; 
     154    } 
     155 
     156    public DataSet parseOsmBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException { 
    153157        return null; 
    154158    } 
Note: See TracChangeset for help on using the changeset viewer.