use of org.lucee.extension.resource.s3.info.S3BucketWrapper in project extension-s3 by lucee.
the class S3 method setMetaData.
public void setMetaData(String bucketName, String objectName, Struct metadata) throws PageException, S3Exception {
Decision dec = CFMLEngineFactory.getInstance().getDecisionUtil();
Cast cas = CFMLEngineFactory.getInstance().getCastUtil();
Iterator<Entry<Key, Object>> it = metadata.entryIterator();
Entry<Key, Object> e;
ObjectMetadata metadataCopy = new ObjectMetadata();
Map<String, String> data = new ConcurrentHashMap<String, String>();
while (it.hasNext()) {
e = it.next();
metadataCopy.addUserMetadata(toMetaDataKey(e.getKey()), cas.toString(e.getValue()));
}
bucketName = improveBucketName(bucketName);
objectName = improveObjectName(objectName);
if (!Util.isEmpty(objectName)) {
AmazonS3Client client = getAmazonS3(bucketName, null);
try {
S3BucketWrapper bw = get(bucketName);
if (bw == null)
throw new S3Exception("there is no bucket [" + bucketName + "]");
Bucket b = bw.getBucket();
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName).withNewObjectMetadata(metadataCopy);
client.copyObject(request);
flushExists(bucketName, objectName);
} finally {
client.release();
}
} else
// TOOD possible?
throw new S3Exception("cannot set metadata for a bucket");
}
use of org.lucee.extension.resource.s3.info.S3BucketWrapper in project extension-s3 by lucee.
the class S3 method _list.
private ValidUntilMap<S3Info> _list(String bucketName, String objectName, boolean onlyChildren, boolean noCache) throws S3Exception {
try {
String key = toKey(bucketName, objectName);
String nameDir = improveObjectName(objectName, true);
String nameFile = improveObjectName(objectName, false);
boolean hasObjName = !Util.isEmpty(objectName);
// not cached
ValidUntilMap<S3Info> _list = cacheTimeout <= 0 || noCache ? null : objects.get(key);
if (_list == null || _list.validUntil < System.currentTimeMillis()) {
long validUntil = System.currentTimeMillis() + cacheTimeout;
_list = new ValidUntilMap<S3Info>(validUntil);
objects.put(key, _list);
// add bucket
if (!hasObjName && !onlyChildren) {
outer: while (true) {
AmazonS3Client client = getAmazonS3(null, null);
try {
for (Bucket b : client.listBuckets()) {
// TOD is there a more direct way?
if (b.getName().equals(bucketName)) {
_list.put("", new S3BucketWrapper(this, b, validUntil, log));
break outer;
}
}
} finally {
client.release();
}
// should never happen!
throw new S3Exception("could not find bucket [" + bucketName + "]");
}
}
AmazonS3Client client = getAmazonS3(bucketName, null);
ObjectListing list = (hasObjName ? client.listObjects(bucketName, nameFile) : client.listObjects(bucketName));
try {
if (list != null && list.getObjectSummaries() != null) {
while (true) {
List<S3ObjectSummary> kids = list.getObjectSummaries();
StorageObjectWrapper tmp;
String name;
for (S3ObjectSummary kid : kids) {
name = kid.getKey();
tmp = new StorageObjectWrapper(this, kid, validUntil, log);
if (!hasObjName || name.equals(nameFile) || name.startsWith(nameDir))
_list.put(kid.getKey(), tmp);
exists.put(toKey(kid.getBucketName(), name), tmp);
int index;
while ((index = name.lastIndexOf('/')) != -1) {
name = name.substring(0, index);
exists.put(toKey(bucketName, name), new ParentObject(this, bucketName, name, validUntil, log));
}
}
if (list.isTruncated()) {
list = client.listNextBatchOfObjects(list);
} else {
break;
}
}
}
} finally {
client.release();
}
}
return _list;
} catch (AmazonS3Exception ase) {
throw toS3Exception(ase);
}
}
use of org.lucee.extension.resource.s3.info.S3BucketWrapper in project extension-s3 by lucee.
the class S3 method setLastModified.
public void setLastModified(String bucketName, String objectName, long time) throws S3Exception {
bucketName = improveBucketName(bucketName);
objectName = improveObjectName(objectName);
if (!Util.isEmpty(objectName)) {
if (Util.isEmpty(objectName)) {
S3BucketWrapper bw = get(bucketName);
if (bw == null)
throw new S3Exception("there is no bucket [" + bucketName + "]");
Bucket b = bw.getBucket();
// not sure if that is ok that way
b.setCreationDate(new Date(time));
} else {
S3Info info = get(bucketName, objectName);
if (info == null || info.isVirtual())
throw new S3Exception("there is no object [" + objectName + "] in bucket [" + bucketName + "]");
S3ObjectSummary so = ((StorageObjectWrapper) info).getStorageObject();
so.setLastModified(new Date(time));
}
}
// TDOD add for bucket?
}
use of org.lucee.extension.resource.s3.info.S3BucketWrapper in project extension-s3 by lucee.
the class S3 method list.
// https://s3.eu-central-1.wasabisys.com/lucee-ldev0359-43d24e88acb9b5048097f8961fc5b23c/a
public List<S3Info> list(boolean recursive, boolean listPseudoFolder) throws S3Exception {
AmazonS3Client client = null;
try {
// no cache for buckets
if (cacheTimeout <= 0 || buckets == null || buckets.validUntil < System.currentTimeMillis()) {
client = getAmazonS3(null, null);
List<Bucket> s3buckets = client.listBuckets();
long now = System.currentTimeMillis();
buckets = new ValidUntilMap<S3BucketWrapper>(now + cacheTimeout);
for (Bucket s3b : s3buckets) {
buckets.put(s3b.getName(), new S3BucketWrapper(this, s3b, now + cacheTimeout, log));
}
}
List<S3Info> list = new ArrayList<S3Info>();
Iterator<S3BucketWrapper> it = buckets.values().iterator();
S3Info info;
while (it.hasNext()) {
info = it.next();
list.add(info);
if (recursive) {
Iterator<S3Info> iit = list(info.getBucketName(), "", recursive, listPseudoFolder, true).iterator();
while (iit.hasNext()) {
list.add(iit.next());
}
}
}
return list;
} catch (AmazonServiceException se) {
throw toS3Exception(se);
} finally {
if (client != null)
client.release();
}
}
Aggregations