Skip to content

Commit 834e674

Browse files
committed
Support resolving against Strings and non-S3Path Paths
1 parent 3cf0f8b commit 834e674

File tree

1 file changed

+20
-4
lines changed
  • src/main/java/org/carlspring/cloud/storage/s3fs

1 file changed

+20
-4
lines changed

src/main/java/org/carlspring/cloud/storage/s3fs/S3Path.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class S3Path
3232

3333
public static final String PATH_SEPARATOR = "/";
3434
public static final String PATH_OTHER_INSTANCE_MESSAGE = "other must be an instance of %s";
35+
public static final String PATH_OTHER_INSTANCE_OR_RELATIVE_MESSAGE = "other must be an instance of %s or a relative Path";
3536

3637
/**
3738
* S3FileStore which represents the Bucket this path resides in.
@@ -444,16 +445,31 @@ public Path normalize()
444445
@Override
445446
public Path resolve(Path other)
446447
{
448+
String otherUri = "";
447449
if (other.isAbsolute())
448450
{
449451
Preconditions.checkArgument(other instanceof S3Path,
450-
PATH_OTHER_INSTANCE_MESSAGE,
452+
PATH_OTHER_INSTANCE_OR_RELATIVE_MESSAGE,
451453
S3Path.class.getName());
452454

453455
return other;
454456
}
457+
else if (other instanceof S3Path)
458+
{
459+
S3Path otherS3Path = (S3Path) other;
460+
otherUri = otherS3Path.uri;
461+
}
462+
else
463+
{
464+
int nameCount = other.getNameCount();
465+
for (int i = 0; i < nameCount; i++)
466+
{
467+
if (i > 0)
468+
otherUri += PATH_SEPARATOR;
469+
otherUri += other.getName(i);
470+
}
471+
}
455472

456-
S3Path otherS3Path = (S3Path) other;
457473
StringBuilder pathBuilder = new StringBuilder();
458474

459475
if (this.isAbsolute())
@@ -463,9 +479,9 @@ public Path resolve(Path other)
463479

464480
pathBuilder.append(this.uri);
465481

466-
if (!otherS3Path.uri.isEmpty())
482+
if (!otherUri.isEmpty())
467483
{
468-
pathBuilder.append(PATH_SEPARATOR + otherS3Path.uri);
484+
pathBuilder.append(PATH_SEPARATOR + otherUri);
469485
}
470486

471487
return new S3Path(this.fileSystem, pathBuilder.toString());

0 commit comments

Comments
 (0)