/**
   * Builds a download task from for a collection of changesets.
   *
   * <p>Ignores null values and changesets with {@link Changeset#isNew()} == true.
   *
   * @param parent the parent component relative to which the {@link PleaseWaitDialog} is displayed.
   *     Must not be null.
   * @param changesets the collection of changesets. Assumes an empty collection if null.
   * @return the download task
   * @throws IllegalArgumentException thrown if parent is null
   */
  public static ChangesetHeaderDownloadTask buildTaskForChangesets(
      Component parent, Collection<Changeset> changesets) {
    CheckParameterUtil.ensureParameterNotNull(parent, "parent");
    if (changesets == null) {
      changesets = Collections.emptyList();
    }

    HashSet<Integer> ids = new HashSet<Integer>();
    for (Changeset cs : changesets) {
      if (cs == null || cs.isNew()) {
        continue;
      }
      ids.add(cs.getId());
    }
    if (parent == null) return new ChangesetHeaderDownloadTask(ids);
    else return new ChangesetHeaderDownloadTask(parent, ids);
  }
 protected String buildChangesetSummary() {
   StringBuffer msg = new StringBuffer();
   if (selectedChangeset == null || selectedChangeset.isNew()) {
     msg.append(tr("Objects are uploaded to a <strong>new changeset</strong>."));
   } else {
     String uploadComment =
         selectedChangeset.get("comment") == null ? "" : selectedChangeset.get("comment");
     msg.append(
         tr(
             "Objects are uploaded to the <strong>open changeset</strong> {0} with upload comment ''{1}''.",
             selectedChangeset.getId(), uploadComment));
   }
   msg.append(" ");
   if (closeChangesetAfterNextUpload) {
     msg.append(tr("The changeset is going to be <strong>closed</strong> after this upload"));
   } else {
     msg.append(tr("The changeset is <strong>left open</strong> after this upload"));
   }
   msg.append(" (<a href=\"urn:changeset-configuration\">" + tr("configure changeset") + "</a>)");
   return msg.toString();
 }
Esempio n. 3
0
  @Override
  protected void realRun() throws SAXException, IOException {
    try {
      uploadloop:
      while (true) {
        try {
          getProgressMonitor()
              .subTask(
                  trn(
                      "Uploading {0} object...",
                      "Uploading {0} objects...", toUpload.getSize(), toUpload.getSize()));
          synchronized (this) {
            writer = new OsmServerWriter();
          }
          writer.uploadOsm(
              strategy,
              toUpload.getPrimitives(),
              changeset,
              getProgressMonitor().createSubTaskMonitor(1, false));

          // if we get here we've successfully uploaded the data. Exit the loop.
          //
          break;
        } catch (OsmTransferCancelledException e) {
          e.printStackTrace();
          uploadCancelled = true;
          break uploadloop;
        } catch (OsmApiPrimitiveGoneException e) {
          // try to recover from  410 Gone
          //
          recoverFromGoneOnServer(e, getProgressMonitor());
        } catch (ChangesetClosedException e) {
          processedPrimitives.addAll(writer.getProcessedPrimitives());
          changeset.setOpen(false);
          switch (e.getSource()) {
            case UNSPECIFIED:
              throw e;
            case UPDATE_CHANGESET:
              // The changeset was closed when we tried to update it. Probably, our
              // local list of open changesets got out of sync with the server state.
              // The user will have to select another open changeset.
              // Rethrow exception - this will be handled later.
              //
              throw e;
            case UPLOAD_DATA:
              // Most likely the changeset is full. Try to recover and continue
              // with a new changeset, but let the user decide first (see
              // recoverFromChangesetFullException)
              //
              if (recoverFromChangesetFullException()) {
                continue;
              }
              lastException = e;
              break uploadloop;
          }
        } finally {
          if (writer != null) {
            processedPrimitives.addAll(writer.getProcessedPrimitives());
          }
          synchronized (this) {
            writer = null;
          }
        }
      }
      // if required close the changeset
      //
      if (strategy.isCloseChangesetAfterUpload()
          && changeset != null
          && !changeset.isNew()
          && changeset.isOpen()) {
        OsmApi.getOsmApi()
            .closeChangeset(changeset, progressMonitor.createSubTaskMonitor(0, false));
      }
    } catch (Exception e) {
      if (uploadCancelled) {
        System.out.println(
            tr(
                "Ignoring caught exception because upload is canceled. Exception is: {0}",
                e.toString()));
      } else {
        lastException = e;
      }
    }
    if (uploadCancelled && processedPrimitives.isEmpty()) return;
    cleanupAfterUpload();
  }