// Path: src/main/java/de/jeha/s3srv/common/errors/BadDigestException.java
// public class BadDigestException extends Exception {
// 
//     public BadDigestException(String message) {
//         super(message);
//     }
// 
// }
// 
// Path: src/main/java/de/jeha/s3srv/model/S3Bucket.java
// public class S3Bucket {
// 
//     private final S3User owner;
//     private final String name;
//     private final Instant creationDate;
// 
//     public S3Bucket(S3User owner, String name) {
//         this.owner = owner;
//         this.name = name;
//         this.creationDate = Instant.now();
//     }
// 
//     public S3User getOwner() {
//         return owner;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Instant getCreationDate() {
//         return creationDate;
//     }
// 
//     public boolean isOwnedBy(S3User user) {
//         return owner.getId().equals(user.getId());
//     }
// 
// }
// 
// Path: src/main/java/de/jeha/s3srv/model/S3Object.java
// public class S3Object {
// 
//     private final S3Bucket bucket;
//     private final String key;
//     private final String md5;
//     private final String eTag;
//     private final Integer size;
//     private final Instant lastModified;
//     private final InputStreamCallback inputStreamCallback;
//     private final String contentType;
// 
//     public S3Object(S3Bucket bucket, String key, String md5, String eTag, Integer size, Instant lastModified,
//                     InputStreamCallback inputStreamCallback, String contentType) {
//         this.bucket = bucket;
//         this.key = key;
//         this.md5 = md5;
//         this.eTag = eTag;
//         this.size = size;
//         this.lastModified = lastModified;
//         this.inputStreamCallback = inputStreamCallback;
//         this.contentType = contentType;
//     }
// 
//     public S3Bucket getBucket() {
//         return bucket;
//     }
// 
//     public String getKey() {
//         return key;
//     }
// 
//     public String getMD5() {
//         return md5;
//     }
// 
//     public String getETag() {
//         return eTag;
//     }
// 
//     public Integer getSize() {
//         return size;
//     }
// 
//     public Instant getLastModified() {
//         return lastModified;
//     }
// 
//     public InputStream getInputStream() {
//         return inputStreamCallback.getInputStream();
//     }
// 
//     public String getContentType() {
//         return contentType;
//     }
// 
// }
// 
// Path: src/main/java/de/jeha/s3srv/model/S3User.java
// public class S3User {
// 
//     private final String id;
//     private final String displayName;
//     private final Credentials credentials;
// 
//     public S3User(String id, String displayName, Credentials credentials) {
//         this.id = id;
//         this.displayName = displayName;
//         this.credentials = credentials;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public String getDisplayName() {
//         return displayName;
//     }
// 
//     public Credentials getCredentials() {
//         return credentials;
//     }
// 
// }


import de.jeha.s3srv.common.errors.BadDigestException;
import de.jeha.s3srv.model.S3Bucket;
import de.jeha.s3srv.model.S3Object;
import de.jeha.s3srv.model.S3User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
package de.jeha.s3srv.storage;



/**
 * @author jenshadlich@googlemail.com
 */
public interface StorageBackend extends HealthAware {

    List<S3Bucket> listBuckets();

    void createBucket(S3User user, String bucket);

    boolean doesBucketExist(String bucket);

// Path: src/main/java/de/jeha/s3srv/common/errors/BadDigestException.java
// public class BadDigestException extends Exception {
// 
//     public BadDigestException(String message) {
//         super(message);
//     }
// 
// }
// 
// Path: src/main/java/de/jeha/s3srv/model/S3Bucket.java
// public class S3Bucket {
// 
//     private final S3User owner;
//     private final String name;
//     private final Instant creationDate;
// 
//     public S3Bucket(S3User owner, String name) {
//         this.owner = owner;
//         this.name = name;
//         this.creationDate = Instant.now();
//     }
// 
//     public S3User getOwner() {
//         return owner;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Instant getCreationDate() {
//         return creationDate;
//     }
// 
//     public boolean isOwnedBy(S3User user) {
//         return owner.getId().equals(user.getId());
//     }
// 
// }
// 
// Path: src/main/java/de/jeha/s3srv/model/S3Object.java
// public class S3Object {
// 
//     private final S3Bucket bucket;
//     private final String key;
//     private final String md5;
//     private final String eTag;
//     private final Integer size;
//     private final Instant lastModified;
//     private final InputStreamCallback inputStreamCallback;
//     private final String contentType;
// 
//     public S3Object(S3Bucket bucket, String key, String md5, String eTag, Integer size, Instant lastModified,
//                     InputStreamCallback inputStreamCallback, String contentType) {
//         this.bucket = bucket;
//         this.key = key;
//         this.md5 = md5;
//         this.eTag = eTag;
//         this.size = size;
//         this.lastModified = lastModified;
//         this.inputStreamCallback = inputStreamCallback;
//         this.contentType = contentType;
//     }
// 
//     public S3Bucket getBucket() {
//         return bucket;
//     }
// 
//     public String getKey() {
//         return key;
//     }
// 
//     public String getMD5() {
//         return md5;
//     }
// 
//     public String getETag() {
//         return eTag;
//     }
// 
//     public Integer getSize() {
//         return size;
//     }
// 
//     public Instant getLastModified() {
//         return lastModified;
//     }
// 
//     public InputStream getInputStream() {
//         return inputStreamCallback.getInputStream();
//     }
// 
//     public String getContentType() {
//         return contentType;
//     }
// 
// }
// 
// Path: src/main/java/de/jeha/s3srv/model/S3User.java
// public class S3User {
// 
//     private final String id;
//     private final String displayName;
//     private final Credentials credentials;
// 
//     public S3User(String id, String displayName, Credentials credentials) {
//         this.id = id;
//         this.displayName = displayName;
//         this.credentials = credentials;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public String getDisplayName() {
//         return displayName;
//     }
// 
//     public Credentials getCredentials() {
//         return credentials;
//     }
// 
// }


// Path: src/main/java/de/jeha/s3srv/storage/StorageBackend.java
import de.jeha.s3srv.common.errors.BadDigestException;
import de.jeha.s3srv.model.S3Bucket;
import de.jeha.s3srv.model.S3Object;
import de.jeha.s3srv.model.S3User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

package de.jeha.s3srv.storage;



/**
 * @author jenshadlich@googlemail.com
 */
public interface StorageBackend extends HealthAware {

    List<S3Bucket> listBuckets();

    void createBucket(S3User user, String bucket);

    boolean doesBucketExist(String bucket);

    S3Bucket getBucket(String bucket);