Changeset 5317 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2012-07-10T13:29:55+02:00 (12 years 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.