Ignore:
Timestamp:
2009-09-27T16:29:21+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3249: Resolve conflicts between invisible and deleted primitives automatically

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

Legend:

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

    r2181 r2198  
    398398     *
    399399     * @param list the list of changed OSM Primitives
     400     * @param  monitor the progress monitor
    400401     * @return list of processed primitives
    401402     * @throws OsmTransferException if something is wrong
    402403     */
    403     public Collection<OsmPrimitive> uploadDiff(Collection<OsmPrimitive> list, ProgressMonitor progressMonitor) throws OsmTransferException {
     404    public Collection<OsmPrimitive> uploadDiff(Collection<OsmPrimitive> list, ProgressMonitor monitor) throws OsmTransferException {
    404405        try {
    405             progressMonitor.beginTask("", list.size() * 2);
     406            monitor.beginTask("", list.size() * 2);
    406407            if (changeset == null)
    407408                throw new OsmTransferException(tr("No changeset present for diff upload."));
    408409
    409             initialize(progressMonitor);
     410            initialize(monitor);
    410411            final ArrayList<OsmPrimitive> processed = new ArrayList<OsmPrimitive>();
    411412
    412413            CreateOsmChangeVisitor duv = new CreateOsmChangeVisitor(changeset, OsmApi.this);
    413414
    414             progressMonitor.subTask(tr("Preparing..."));
     415            monitor.subTask(tr("Preparing..."));
    415416            for (OsmPrimitive osm : list) {
    416417                osm.visit(duv);
    417                 progressMonitor.worked(1);
     418                monitor.worked(1);
    418419            }
    419             progressMonitor.indeterminateSubTask(tr("Uploading..."));
     420            monitor.indeterminateSubTask(tr("Uploading..."));
    420421
    421422            String diff = duv.getDocument();
    422             String diffresult = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diff,progressMonitor);
     423            String diffresult = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diff,monitor);
    423424            DiffResultReader.parseDiffResult(diffresult, list, processed, duv.getNewIdMap(),
    424                     progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
     425                    monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    425426            return processed;
    426427        } catch(OsmTransferException e) {
     
    429430            throw new OsmTransferException(e);
    430431        } finally {
    431             progressMonitor.finishTask();
    432         }
    433     }
    434 
    435 
     432            monitor.finishTask();
     433        }
     434    }
    436435
    437436    private void sleepAndListen(int retry, ProgressMonitor monitor) throws OsmTransferCancelledException {
     
    548547                activeConnection.disconnect();
    549548
    550                 if (retCode != 200)
    551                     throw new OsmApiException(
    552                             retCode,
    553                             errorHeader == null? null : errorHeader.trim(),
    554                                     responseBody == null ? null : responseBody.toString().trim()
    555                     );
    556 
     549                errorHeader = errorHeader == null? null : errorHeader.trim();
     550                String errorBody = responseBody == null ? null : responseBody.toString().trim();
     551                switch(retCode) {
     552                    case HttpURLConnection.HTTP_OK:
     553                        break; // do nothing
     554                    case HttpURLConnection.HTTP_GONE:
     555                        throw new OsmApiPrimitiveGoneException(errorHeader, errorBody);
     556                    default:
     557                        throw new OsmApiException(retCode, errorHeader, errorBody);
     558
     559                }
    557560                return responseBody.toString();
    558561            } catch (UnknownHostException e) {
  • trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java

    r2181 r2198  
    1313import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1414import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     15import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    1516import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1617
     
    111112     */
    112113    protected void uploadChangesAsDiffUpload(Collection<OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
    113         // upload everything in one changeset
    114         //
    115114        try {
    116115            progressMonitor.beginTask(tr("Starting to upload in one request ..."));
     
    130129     * @param apiVersion version of the data set
    131130     * @param primitives list of objects to send
    132      */
    133     public void uploadOsm(String apiVersion, Collection<OsmPrimitive> primitives, Changeset changeset, boolean closeChangesetAfterUpload, ProgressMonitor progressMonitor) throws OsmTransferException {
     131     * @param changeset the changeset the data is uploaded to. Must not be null.
     132     * @param monitor the progress monitor. If null, assumes {@see NullProgressMonitor#INSTANCE}
     133     * @throws IllegalArgumentException thrown if changeset is null
     134     * @throws OsmTransferException thrown if something goes wrong
     135     */
     136    public void uploadOsm(String apiVersion, Collection<OsmPrimitive> primitives, Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
     137        if (changeset == null)
     138            throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null", "changeset"));
    134139        processed = new LinkedList<OsmPrimitive>();
    135         progressMonitor.beginTask(tr("Uploading data ..."));
    136         api.initialize(progressMonitor);
     140        monitor = monitor == null ? NullProgressMonitor.INSTANCE : monitor;
     141        monitor.beginTask(tr("Uploading data ..."));
    137142        try {
     143            api.initialize(monitor);
    138144            // check whether we can use diff upload
    139145            //
    140             boolean casUseDiffUploads = api.hasSupportForDiffUploads();
     146            boolean canUseDiffUpload = api.hasSupportForDiffUploads();
    141147            if (apiVersion == null) {
    142148                System.out.println(tr("WARNING: no API version defined for data to upload. Falling back to version 0.6"));
     
    144150            }
    145151            boolean useDiffUpload = Main.pref.getBoolean("osm-server.atomic-upload", apiVersion.compareTo("0.6")>=0);
    146             if (useDiffUpload && ! casUseDiffUploads) {
     152            if (useDiffUpload && ! canUseDiffUpload) {
    147153                System.out.println(tr("WARNING: preference ''{0}'' or API version ''{1}'' of dataset requires to use diff uploads, but API is not able to handle them. Ignoring diff upload.", "osm-server.atomic-upload", apiVersion));
    148154                useDiffUpload = false;
    149155            }
    150             if (changeset == null) {
    151                 changeset = new Changeset();
    152             }
    153156            if (changeset.getId() == 0) {
    154                 api.openChangeset(changeset,progressMonitor.createSubTaskMonitor(0, false));
     157                api.openChangeset(changeset,monitor.createSubTaskMonitor(0, false));
    155158            } else {
    156                 api.updateChangeset(changeset,progressMonitor.createSubTaskMonitor(0, false));
     159                api.updateChangeset(changeset,monitor.createSubTaskMonitor(0, false));
    157160            }
    158161            api.setChangeset(changeset);
    159162            if (useDiffUpload) {
    160                 uploadChangesAsDiffUpload(primitives,progressMonitor.createSubTaskMonitor(0,false));
     163                uploadChangesAsDiffUpload(primitives,monitor.createSubTaskMonitor(0,false));
    161164            } else {
    162                 uploadChangesIndividually(primitives,progressMonitor.createSubTaskMonitor(0,false));
     165                uploadChangesIndividually(primitives,monitor.createSubTaskMonitor(0,false));
    163166            }
    164167        } catch(OsmTransferException e) {
     
    167170            throw new OsmTransferException(e);
    168171        } finally {
    169             try {
    170                 if (closeChangesetAfterUpload && api.getChangeset() != null && api.getChangeset().getId() > 0) {
    171                     api.closeChangeset(changeset,progressMonitor.createSubTaskMonitor(0, false));
    172                     api.setChangeset(null);
    173                 }
    174             } catch (Exception ee) {
    175                 OsmChangesetCloseException closeException = new OsmChangesetCloseException(ee);
    176                 closeException.setChangeset(api.getChangeset());
    177                 throw closeException;
    178             } finally {
    179                 progressMonitor.finishTask();
    180             }
     172            monitor.finishTask();
     173            api.setChangeset(null);
    181174        }
    182175    }
Note: See TracChangeset for help on using the changeset viewer.