// 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; } } }