Package com.splunk.shuttl.archiver.filesystem.glacier

Source Code of com.splunk.shuttl.archiver.filesystem.glacier.FakeArchiveTransferManager$UnknownArchiveIdException

// Copyright (C) 2011 Splunk Inc.
//
// Splunk Inc. licenses this file
// to you 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.splunk.shuttl.archiver.filesystem.glacier;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.UUID;

import org.apache.commons.io.FileUtils;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.glacier.transfer.ArchiveTransferManager;
import com.amazonaws.services.glacier.transfer.UploadResult;

/**
* Fake implementation of the {@link ArchiveTransferManager} that "downloads"
* and "uploads" files to the local file system, instead of the real Glacier
* file system.
*/
public class FakeArchiveTransferManager extends ArchiveTransferManager {

  private final File managedDirectory;
  private final HashMap<String, File> files;

  public FakeArchiveTransferManager(File directory) {
    super(null);
    this.managedDirectory = directory;
    this.files = new HashMap<String, File>();
  }

  @Override
  public UploadResult upload(String vaultName, String archiveDescription,
      File file) throws AmazonServiceException, AmazonClientException,
      FileNotFoundException {
    return upload("fake acount id", vaultName, archiveDescription, file);
  }

  @Override
  public UploadResult upload(String accountId, String vaultName,
      String archiveDescription, File file) throws AmazonServiceException,
      AmazonClientException, FileNotFoundException {
    copyFileToManagedDirectory(file);
    UUID uuid = storeUuidForFile(file);
    return new UploadResult(uuid.toString());
  }

  private void copyFileToManagedDirectory(File file) {
    copyFile(file, fileInManagedDirectory(file));
  }

  private void copyFile(File managedFile, File outputFile) {
    try {
      FileUtils.copyFile(managedFile, outputFile);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  private File fileInManagedDirectory(File file) {
    return new File(managedDirectory, file.getName());
  }

  private UUID storeUuidForFile(File file) {
    UUID uuid = UUID.randomUUID();
    files.put(uuid.toString(), fileInManagedDirectory(file));
    return uuid;
  }

  @Override
  public void download(String arg0, String arg1, String arg2, File arg3)
      throws AmazonServiceException, AmazonClientException {
    throw new UnsupportedOperationException();
  }

  @Override
  public void download(String vaultName, String archiveId, File outputFile)
      throws AmazonServiceException, AmazonClientException {
    if (outputFile.exists())
      throw new RuntimeException("Cannot download file to an "
          + "existing output file: " + outputFile);
    if (!files.containsKey(archiveId))
      throw new UnknownArchiveIdException();
    File managedFile = files.get(archiveId);
    copyFile(managedFile, outputFile);
  }

  /**
   * Gets an uploaded file that is identified by its archiveId.
   */
  public File getFile(String archiveId) {
    return files.get(archiveId);
  }

  public static class UnknownArchiveIdException extends RuntimeException {

    private static final long serialVersionUID = 1L;

  }
}
TOP

Related Classes of com.splunk.shuttl.archiver.filesystem.glacier.FakeArchiveTransferManager$UnknownArchiveIdException

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.