Ignore:
Timestamp:
2009-12-10T18:42:41+01:00 (14 years ago)
Author:
Gubaer
Message:

New: JOSM reading, writing, merging changeset attribute
fixed #4090: Add changeset:* search option to JOSM's search engine

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/OsmApi.java

    r2599 r2604  
    1919import java.net.URL;
    2020import java.net.UnknownHostException;
    21 import java.util.ArrayList;
    2221import java.util.Collection;
    2322import java.util.Collections;
     
    3029import org.openstreetmap.josm.data.osm.OsmPrimitive;
    3130import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    32 import org.openstreetmap.josm.data.osm.visitor.CreateOsmChangeVisitor;
    3331import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    3432import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    240238            ret = sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/create", toXml(osm, true),monitor);
    241239            osm.setOsmId(Long.parseLong(ret.trim()), 1);
     240            osm.setChangesetId(getChangeset().getId());
    242241        } catch(NumberFormatException e){
    243242            throw new OsmTransferException(tr("Unexpected format of ID replied by the server. Got ''{0}''.", ret));
     
    260259            ret = sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/" + osm.getId(), toXml(osm, true), monitor);
    261260            osm.setOsmId(osm.getId(), Integer.parseInt(ret.trim()));
     261            osm.setChangesetId(getChangeset().getId());
    262262        } catch(NumberFormatException e) {
    263263            throw new OsmTransferException(tr("Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''.", osm.getId(), ret));
     
    301301            try {
    302302                ret = sendRequest("PUT", "changeset/create", toXml(changeset),progressMonitor);
    303                 changeset.setId(Long.parseLong(ret.trim()));
     303                changeset.setId(Integer.parseInt(ret.trim()));
    304304                changeset.setOpen(true);
    305305            } catch(NumberFormatException e){
     
    398398
    399399            initialize(monitor);
    400             final ArrayList<OsmPrimitive> processed = new ArrayList<OsmPrimitive>();
    401 
    402             CreateOsmChangeVisitor duv = new CreateOsmChangeVisitor(changeset, OsmApi.this);
    403 
    404             monitor.subTask(tr("Preparing..."));
    405             for (OsmPrimitive osm : list) {
    406                 osm.visit(duv);
    407                 monitor.worked(1);
    408             }
    409             monitor.indeterminateSubTask(tr("Uploading..."));
    410 
    411             String diff = duv.getDocument();
    412             String diffresult = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diff,monitor);
    413             DiffResultReader.parseDiffResult(diffresult, list, processed, duv.getNewIdMap(),
    414                     monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    415             return processed;
     400
     401            // prepare upload request
     402            //
     403            OsmChangeBuilder changeBuilder = new OsmChangeBuilder(changeset);
     404            monitor.subTask(tr("Preparing upload request..."));
     405            changeBuilder.start();
     406            changeBuilder.append(list);
     407            changeBuilder.finish();
     408            String diffUploadRequest = changeBuilder.getDocument();
     409
     410            // Upload to the server
     411            //
     412            monitor.indeterminateSubTask(tr("Uploading {0} objects...", list.size()));
     413            String diffUploadResponse = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diffUploadRequest,monitor);
     414
     415            // Process the response from the server
     416            //
     417            DiffResultProcessor reader = new DiffResultProcessor(list);
     418            reader.parse(diffUploadResponse, monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
     419            return reader.postProcess(
     420                    getChangeset(),
     421                    monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)
     422            );
    416423        } catch(OsmTransferException e) {
    417424            throw e;
    418         } catch(Exception e) {
     425        } catch(OsmDataParsingException e) {
    419426            throw new OsmTransferException(e);
    420427        } finally {
Note: See TracChangeset for help on using the changeset viewer.