All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.qcloud.cos.transfer.PersistableResumeDownload Maven / Gradle / Ivy

/*
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 
 * According to cos feature, we modify some class,comment, field name, etc.
 */


package com.qcloud.cos.transfer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * An opaque token that holds some private state and can be used to resume a
 * download operation.
 */
public class PersistableResumeDownload extends PersistableTransfer {

    static final String TYPE = "resumedownload";

    @JsonProperty
    private final String pauseType = TYPE;

    /** The last modified time stamp of the object int Qcloud COS to be downloaded. */
    @JsonProperty
    private final long lastModified;

    /** The contentLength of the object in Qcloud COS to be downloaded. */
    @JsonProperty
    private final String contentLength;

    /** The etag of the object in Qcloud COS to be downloaded. */
    @JsonProperty
    private final String etag;

    /** The crc64ecma header of the object in Qcloud COS to be downloaded. */
    @JsonProperty
    private final String crc64ecma;

    @JsonProperty
    private final HashMap downloadedBlocks;

    private File dumpFile;

    public PersistableResumeDownload() {
        this(0, null, null, null, null);
    }

    public PersistableResumeDownload(
            @JsonProperty(value = "lastModified") long lastModified,
            @JsonProperty(value = "contentLength") String contentLength,
            @JsonProperty(value = "etag") String etag,
            @JsonProperty(value = "crc64ecma") String crc64ecma,
            @JsonProperty(value = "downloadedBlocks") HashMap downloadedBlocks) {
        this.lastModified = lastModified;
        this.contentLength = contentLength;
        this.etag = etag;
        this.crc64ecma = crc64ecma;
        this.downloadedBlocks = downloadedBlocks;
    }

    /**
     * Returns the lastModified of the object.
     */
    long getLastModified() {
        return lastModified;
    }

    /**
     * Returns the content length of the object.
     */
    String getContentLength() {
        return contentLength;
    }

    /**
     * Returns the etag of the object.
     */
    String getEtag() {
        return etag;
    }

    /**
     * Returns the crc64ecma of the object to download.
     */
    String getCrc64ecma() {
        return crc64ecma;
    }

    /**
     * Returns the optional response headers.
     */
    HashMap getDownloadedBlocks() {
        return downloadedBlocks;
    }

    /**
     * Put a downloaded block.
     * @param block
     */
    public synchronized void putDownloadedBlocks(String block) {
        downloadedBlocks.put(block, 1);
    }

    /**
     * Return true if block is in downloadedBlocks, false else.
     * @param block
     * @return
     */
    public synchronized boolean hasDownloadedBlocks(String block) {
        return downloadedBlocks.getOrDefault(block, 0) == 1;
    }

    public synchronized void reset() {
        downloadedBlocks.clear();
    }

    public void setDumpFile(File dumpFile) {
        this.dumpFile = dumpFile;
    }

    public File getDumpFile() {
        return this.dumpFile;
    }

    public synchronized void dump() throws Exception {
        OutputStream out = new FileOutputStream(dumpFile);
        this.serialize(out);
        out.close();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy