public S3HomeFinderService(final Session session) { super(session, new S3PathContainerService()); } }
private void configure(final Map<TransferItem, TransferStatus> files, final ConnectionCallback callback, final boolean enabled) throws BackgroundException { final Set<Path> buckets = new HashSet<>(); for(TransferItem file : files.keySet()) { buckets.add(new S3PathContainerService().getContainer(file.remote)); } for(Path bucket : buckets) { if(enabled) { try { if(this.accelerate(bucket, callback)) { if(log.isInfoEnabled()) { log.info(String.format("Tunnel upload for file %s through accelerated endpoint %s", bucket, accelerationService)); } accelerationService.configure(true, bucket); break; } else { log.warn(String.format("Transfer acceleration disabled for %s", bucket)); } } catch(AccessDeniedException e) { log.warn(String.format("Ignore failure reading S3 accelerate configuration. %s", e.getMessage())); } } else { accelerationService.configure(false, bucket); } } }
@Override public String getKey(final Path file) { final String key = super.getKey(file); if(!file.isRoot() && !this.isContainer(file) && file.isDirectory()) { return key.concat(String.valueOf(Path.DELIMITER)); } return key; } }
public void create(final Path bucket, final String location) throws BackgroundException { // Create bucket if(!ServiceUtils.isBucketNameValidDNSName(bucket.getName())) { throw new InteroperabilityException(LocaleFactory.localizedString("Bucket name is not DNS compatible", "S3")); } AccessControlList acl; if(PreferencesFactory.get().getProperty("s3.bucket.acl.default").equals("public-read")) { acl = GSAccessControlList.REST_CANNED_PUBLIC_READ; } else { acl = GSAccessControlList.REST_CANNED_PRIVATE; } try { session.getClient().createBucket(new S3PathContainerService().getContainer(bucket).getName(), location, acl); } catch(ServiceException e) { throw new S3ExceptionMappingService().map("Cannot create folder {0}", e, bucket); } } }