Ignore:
Timestamp:
2009-12-04T15:53:55+01:00 (14 years ago)
Author:
Gubaer
Message:

fixed #3684: Add "chunked" upload mode
Removed support for API "0.5" when uploading (there are still 0.5-files around, but I'm not aware of any 0.5-servers)

File:
1 edited

Legend:

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

    r2512 r2569  
    1212import java.util.regex.Pattern;
    1313
     14/**
     15 * A ChangesetClosedException is thrown if the server replies with a HTTP
     16 * return code 409 (Conflict) with the error header {@see #ERROR_HEADER_PATTERN}.
     17 *
     18 * Depending on the context the exception is thrown in we have to react differently.
     19 * <ul>
     20 *   <li>if it is thrown when we try to update a changeset, the changeset was most
     21 *   likely closed before, either explicitly by the user or because of a timeout</li>
     22 *   <li>if it is thrown when we try to upload data to the changeset, the changeset
     23 *   was most likely closed because we reached the servers capability limit for the size
     24 *   of a changeset.</li>
     25 *  </ul>
     26 */
    1427public class ChangesetClosedException extends OsmTransferException {
     28    /** the error header pattern for in case of HTTP response 409 indicating
     29     * that a changeset was closed
     30     */
     31    final static public String ERROR_HEADER_PATTERN = "The changeset (\\d+) was closed at (.*)";
     32
     33    static enum Source {
     34        /**
     35         * The exception was thrown when a changeset was updated. This most likely means
     36         * that the changeset was closed before.
     37         */
     38        UPDATE_CHANGESET,
     39        /**
     40         * The exception was thrown when data was uploaded to the changeset. This most
     41         * likely means that the servers capability limits for a changeset have been
     42         * exceeded.
     43         */
     44        UPLOAD_DATA,
     45        /**
     46         * Unspecified source
     47         */
     48        UNSPECIFIED
     49    }
     50
     51    /**
     52     * Replies true if <code>errorHeader</code> matches with {@see #ERROR_HEADER_PATTERN}
     53     *
     54     * @param errorHeader the error header
     55     * @return true if <code>errorHeader</code> matches with {@see #ERROR_HEADER_PATTERN}
     56     */
     57    static public boolean errorHeaderMatchesPattern(String errorHeader) {
     58        if (errorHeader == null)
     59            return false;
     60        Pattern p = Pattern.compile(ERROR_HEADER_PATTERN);
     61        Matcher m = p.matcher(errorHeader);
     62        return m.matches();
     63    }
    1564
    1665    /** the changeset id */
     
    1867    /** the date on which the changeset was closed */
    1968    private Date closedOn;
     69    /** the source */
     70    private Source source;
    2071
    2172    protected void parseErrorHeader(String errorHeader) {
    22         String pattern = "The changeset (\\d+) was closed at (.*)";
    23         Pattern p = Pattern.compile(pattern);
     73        Pattern p = Pattern.compile(ERROR_HEADER_PATTERN);
    2474        Matcher m = p.matcher(errorHeader);
    2575        if (m.matches()) {
     
    3989    }
    4090
     91    /**
     92     * Creates the exception with the given <code>errorHeader</code>
     93     *
     94     * @param errorHeader the error header
     95     */
    4196    public ChangesetClosedException(String errorHeader) {
    4297        super(errorHeader);
    4398        parseErrorHeader(errorHeader);
     99        this.source = Source.UNSPECIFIED;
    44100    }
    45101
     102    /**
     103     * Creates the exception with the given error header and the given
     104     * source.
     105     *
     106     * @param errorHeader the error header
     107     * @param source the source for the exception
     108     */
     109    public ChangesetClosedException(String errorHeader, Source source) {
     110        super(errorHeader);
     111        parseErrorHeader(errorHeader);
     112        this.source = source == null ? Source.UNSPECIFIED : source;
     113    }
     114
     115    /**
     116     * Replies the id of the changeset which was closed
     117     *
     118     * @return the id of the changeset which was closed
     119     */
    46120    public long getChangesetId() {
    47121        return changesetId;
    48122    }
    49123
     124    /**
     125     * Replies the date the changeset was closed
     126     *
     127     * @return the date the changeset was closed. May be null if the date isn't known.
     128     */
    50129    public Date getClosedOn() {
    51130        return closedOn;
    52131    }
     132
     133    /**
     134     * Replies the source where the exception was thrown
     135     *
     136     * @return the source
     137     */
     138    public Source getSource() {
     139        return source;
     140    }
    53141}
Note: See TracChangeset for help on using the changeset viewer.