/** * Copyright Microsoft Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License 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. */ package com.microsoft.azure.storage.core; import java.security.MessageDigest; /** * RESERVED FOR INTERNAL USE. Represents a stream descriptor that contains the stream size and MD5 hash. */ public final class StreamMd5AndLength { /** * Contains the MD5 hash for the stream data. */ private String streamMd5; /** * Contains the length, in bytes, for the stream. */ private long streamLength; /** * Contains the length, in bytes, that have been downloaded. Used by download resume. */ private long currentOperationByteCount; /** * The MessageDigest, used to calculate MD5. */ private MessageDigest intermediateMD5; /** * @return the intermediateMD5 */ public MessageDigest getDigest() { return this.intermediateMD5; } /** * @return the length */ public long getLength() { return this.streamLength; } /** * @return the currentOperationByteCount */ public long getCurrentOperationByteCount() { return this.currentOperationByteCount; } /** * @return the md5 */ public String getMd5() { if (this.streamMd5 == null && this.intermediateMD5 != null) { this.streamMd5 = Base64.encode(this.intermediateMD5.digest()); } return this.streamMd5; } /** * Sets the MessageDigest, used to calculate MD5 * * @param digest * the digest to set */ public void setDigest(MessageDigest digest) { this.intermediateMD5 = digest; } /** * @param length * the length to set */ public void setLength(final long length) { this.streamLength = length; } /** * @param currentOperationByteCount * the currentOperationByteCount to set */ public void setCurrentOperationByteCount(final long currentOperationByteCount) { this.currentOperationByteCount = currentOperationByteCount; } /** * @param md5 * the md5 to set */ public void setMd5(final String md5) { this.streamMd5 = md5; } }