public string TryGetFromStore(string tag, out bool exists, TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

            ImageBuilder.TraceSource.WriteInfo(
                TraceType,
                "Downloading {0} from store.",
                tag);

            exists = false;
            string value = null;

            string tempFileName = ImageBuilderUtility.GetTempFileName(this.localImageBuilderRoot);

            try
            {
                if (this.ImageStore.DoesContentExist(tag, timeoutHelper.GetRemainingTime()))
                {
                    this.ImageStore.DownloadContent(tag, tempFileName, timeoutHelper.GetRemainingTime(), CopyFlag.AtomicCopy);

                    ImageBuilderUtility.RemoveReadOnlyFlag(tempFileName);
                    value  = ImageBuilderUtility.ReadStringFromFile(tempFileName);
                    exists = true;
                }
            }
            finally
            {
                ImageBuilderUtility.DeleteTempLocation(tempFileName);
            }

            return(value);
        }
        public async Task <T> GetFromStoreAsync <T>(string tag, TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

            ImageBuilder.TraceSource.WriteInfo(
                TraceType,
                "Downloading {0} from store async.",
                tag);

            string tempFileName = ImageBuilderUtility.GetTempFileName(this.localImageBuilderRoot);

            try
            {
                bool doesExist = await this.ImageStore.DoesContentExistAsync(tag, timeoutHelper.GetRemainingTime());

                if (doesExist)
                {
                    await this.ImageStore.DownloadContentAsync(tag, tempFileName, timeoutHelper.GetRemainingTime(), CopyFlag.AtomicCopy);

                    ImageBuilderUtility.RemoveReadOnlyFlag(tempFileName);
                    return(ImageBuilderUtility.ReadXml <T>(tempFileName));
                }
                else
                {
                    throw new FileNotFoundException(
                              string.Format(CultureInfo.CurrentCulture, StringResources.ImageStoreError_FileNotFound, tag));
                }
            }
            finally
            {
                ImageBuilderUtility.DeleteTempLocation(tempFileName);
            }
        }
        public async Task <Tuple <T, bool> > TryGetFromStoreAsync <T>(string tag, TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

            ImageBuilder.TraceSource.WriteInfo(
                TraceType,
                "Downloading {0} from store.",
                tag);

            bool exists = false;
            T    value  = default(T);

            string tempFileName = ImageBuilderUtility.GetTempFileName(this.localImageBuilderRoot);

            try
            {
                if (await this.ImageStore.DoesContentExistAsync(tag, timeoutHelper.GetRemainingTime()))
                {
                    await this.ImageStore.DownloadContentAsync(tag, tempFileName, timeoutHelper.GetRemainingTime(), CopyFlag.AtomicCopy);

                    ImageBuilderUtility.RemoveReadOnlyFlag(tempFileName);
                    value  = ImageBuilderUtility.ReadXml <T>(tempFileName);
                    exists = true;
                }
            }
            finally
            {
                ImageBuilderUtility.DeleteTempLocation(tempFileName);
            }

            return(new Tuple <T, bool>(value, exists));
        }
        public bool DownloadIfContentExists(string source, string destination, IImageStoreProgressHandler progressHandler, TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

            if (this.ImageStore.DoesContentExist(source, timeoutHelper.GetRemainingTime()))
            {
                this.ImageStore.DownloadContent(source, destination, progressHandler, timeoutHelper.GetRemainingTime(), CopyFlag.AtomicCopy);
                ImageBuilderUtility.RemoveReadOnlyFlag(destination);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public string GetFileNameFromStore(string tag, TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

            ImageBuilder.TraceSource.WriteInfo(
                TraceType,
                "Downloading {0} from store.",
                tag);

            string tempFileName = ImageBuilderUtility.GetTempFileName(this.localImageBuilderRoot);

            if (this.ImageStore.DoesContentExist(tag, timeoutHelper.GetRemainingTime()))
            {
                this.ImageStore.DownloadContent(tag, tempFileName, timeoutHelper.GetRemainingTime(), CopyFlag.AtomicCopy);

                ImageBuilderUtility.RemoveReadOnlyFlag(tempFileName);
                return(tempFileName);
            }
            else
            {
                throw new FileNotFoundException(
                          string.Format(CultureInfo.CurrentCulture, StringResources.ImageStoreError_FileNotFound, tag));
            }
        }