diff --git a/data/src/main/java/org/cryptomator/data/cloud/s3/S3CloudNodeFactory.java b/data/src/main/java/org/cryptomator/data/cloud/s3/S3CloudNodeFactory.java index 88c2e439..9a24d710 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/s3/S3CloudNodeFactory.java +++ b/data/src/main/java/org/cryptomator/data/cloud/s3/S3CloudNodeFactory.java @@ -1,25 +1,35 @@ package org.cryptomator.data.cloud.s3; +import com.amazonaws.services.s3.model.PutObjectResult; import com.amazonaws.services.s3.model.S3ObjectSummary; import org.cryptomator.util.Optional; class S3CloudNodeFactory { + private static final String SUFFIX = "/"; + public static S3File file(S3Folder parent, S3ObjectSummary file) { - return new S3File(parent, file.getKey(), getNodePath(parent, file.getKey()), Optional.ofNullable(file.getSize()), Optional.ofNullable(file.getLastModified())); + String name = getNameFromKey(file.getKey()); + return new S3File(parent, name, getNodePath(parent, name), Optional.ofNullable(file.getSize()), Optional.ofNullable(file.getLastModified())); } + public static S3File file(S3Folder parent, String name, PutObjectResult file) { + return new S3File(parent, name, getNodePath(parent, name), Optional.ofNullable(file.getMetadata().getContentLength()), Optional.ofNullable(file.getMetadata().getLastModified())); + } + + public static S3File file(S3Folder parent, String name, Optional size) { return new S3File(parent, name, getNodePath(parent, name), size, Optional.empty()); } - public static S3File file(S3Folder folder, String name, Optional size, String path) { - return new S3File(folder, name, path, size, Optional.empty()); + public static S3File file(S3Folder parent, String name, Optional size, String path) { + return new S3File(parent, name, path, size, Optional.empty()); } public static S3Folder folder(S3Folder parent, S3ObjectSummary folder) { - return new S3Folder(parent, folder.getKey(), getNodePath(parent, folder.getKey())); + String name = getNameFromKey(folder.getKey()); + return new S3Folder(parent, name, getNodePath(parent, name)); } public static S3Folder folder(S3Folder parent, String name) { @@ -30,12 +40,16 @@ class S3CloudNodeFactory { return new S3Folder(parent, name, path); } - public static String getNodePath(S3Folder parent, String name) { - return parent.getPath() + "/" + name; + private static String getNodePath(S3Folder parent, String name) { + return parent.getPath() + SUFFIX + name; + } + + private static String getNameFromKey(String key) { + return key.substring(key.lastIndexOf(SUFFIX) + 1); } public static S3Node from(S3Folder parent, S3ObjectSummary objectSummary) { - if (objectSummary.getKey().endsWith("/")) { + if (objectSummary.getKey().endsWith(SUFFIX)) { return folder(parent, objectSummary); } else { return file(parent, objectSummary);