// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser;
/**
* Class representing the state of a single download.
*/
public final class DownloadInfo {
private final String mUrl;
private final String mUserAgent;
private final String mMimeType;
private final String mCookie;
private final String mFileName;
private final String mDescription;
private final String mFilePath;
private final String mReferer;
private final long mContentLength;
private final boolean mHasDownloadId;
private final int mDownloadId;
private final String mContentDisposition;
private final boolean mIsGETRequest;
private final boolean mIsSuccessful;
private final int mPercentCompleted;
private final long mTimeRemainingInMillis;
private DownloadInfo(Builder builder) {
mUrl = builder.mUrl;
mUserAgent = builder.mUserAgent;
mMimeType = builder.mMimeType;
mCookie = builder.mCookie;
mFileName = builder.mFileName;
mDescription = builder.mDescription;
mFilePath = builder.mFilePath;
mReferer = builder.mReferer;
mContentLength = builder.mContentLength;
mHasDownloadId = builder.mHasDownloadId;
mDownloadId = builder.mDownloadId;
mIsSuccessful = builder.mIsSuccessful;
mIsGETRequest = builder.mIsGETRequest;
mContentDisposition = builder.mContentDisposition;
mPercentCompleted = builder.mPercentCompleted;
mTimeRemainingInMillis = builder.mTimeRemainingInMillis;
}
public String getUrl() {
return mUrl;
}
public String getUserAgent() {
return mUserAgent;
}
public String getMimeType() {
return mMimeType;
}
public String getCookie() {
return mCookie;
}
public String getFileName() {
return mFileName;
}
public String getDescription() {
return mDescription;
}
public String getFilePath() {
return mFilePath;
}
public String getReferer() {
return mReferer;
}
public long getContentLength() {
return mContentLength;
}
public boolean isGETRequest() {
return mIsGETRequest;
}
public boolean hasDownloadId() {
return mHasDownloadId;
}
public int getDownloadId() {
return mDownloadId;
}
public boolean isSuccessful() {
return mIsSuccessful;
}
public String getContentDisposition() {
return mContentDisposition;
}
/**
* @return percent completed as an integer, -1 if there is no download progress.
*/
public int getPercentCompleted() {
return mPercentCompleted;
}
public long getTimeRemainingInMillis() {
return mTimeRemainingInMillis;
}
public static class Builder {
private String mUrl;
private String mUserAgent;
private String mMimeType;
private String mCookie;
private String mFileName;
private String mDescription;
private String mFilePath;
private String mReferer;
private long mContentLength;
private boolean mIsGETRequest;
private boolean mHasDownloadId;
private int mDownloadId;
private boolean mIsSuccessful;
private String mContentDisposition;
private int mPercentCompleted = -1;
private long mTimeRemainingInMillis;
public Builder setUrl(String url) {
mUrl = url;
return this;
}
public Builder setUserAgent(String userAgent) {
mUserAgent = userAgent;
return this;
}
public Builder setMimeType(String mimeType) {
mMimeType = mimeType;
return this;
}
public Builder setCookie(String cookie) {
mCookie = cookie;
return this;
}
public Builder setFileName(String fileName) {
mFileName = fileName;
return this;
}
public Builder setDescription(String description) {
mDescription = description;
return this;
}
public Builder setFilePath(String filePath) {
mFilePath = filePath;
return this;
}
public Builder setReferer(String referer) {
mReferer = referer;
return this;
}
public Builder setContentLength(long contentLength) {
mContentLength = contentLength;
return this;
}
public Builder setIsGETRequest(boolean isGETRequest) {
mIsGETRequest = isGETRequest;
return this;
}
public Builder setHasDownloadId(boolean hasDownloadId) {
mHasDownloadId = hasDownloadId;
return this;
}
public Builder setDownloadId(int downloadId) {
mDownloadId = downloadId;
return this;
}
public Builder setIsSuccessful(boolean isSuccessful) {
mIsSuccessful = isSuccessful;
return this;
}
public Builder setContentDisposition(String contentDisposition) {
mContentDisposition = contentDisposition;
return this;
}
public Builder setPercentCompleted(int percentCompleted) {
assert percentCompleted <= 100;
mPercentCompleted = percentCompleted;
return this;
}
public Builder setTimeRemainingInMillis(long timeRemainingInMillis) {
mTimeRemainingInMillis = timeRemainingInMillis;
return this;
}
public DownloadInfo build() {
return new DownloadInfo(this);
}
/**
* Create a builder from the DownloadInfo object.
* @param downloadInfo DownloadInfo object from which builder fields are populated.
* @return A builder initialized with fields from downloadInfo object.
*/
public static Builder fromDownloadInfo(final DownloadInfo downloadInfo) {
Builder builder = new Builder();
builder
.setUrl(downloadInfo.getUrl())
.setUserAgent(downloadInfo.getUserAgent())
.setMimeType(downloadInfo.getMimeType())
.setCookie(downloadInfo.getCookie())
.setFileName(downloadInfo.getFileName())
.setDescription(downloadInfo.getDescription())
.setFilePath(downloadInfo.getFilePath())
.setReferer(downloadInfo.getReferer())
.setContentLength(downloadInfo.getContentLength())
.setHasDownloadId(downloadInfo.hasDownloadId())
.setDownloadId(downloadInfo.getDownloadId())
.setContentDisposition(downloadInfo.getContentDisposition())
.setIsGETRequest(downloadInfo.isGETRequest())
.setIsSuccessful(downloadInfo.isSuccessful())
.setPercentCompleted(downloadInfo.getPercentCompleted())
.setTimeRemainingInMillis(downloadInfo.getTimeRemainingInMillis());
return builder;
}
}
}