@Transactional
public Status putBucket(Project project, String bucketName, BucketAttributes bucketAttributes,
Map<String, String> userAttributes) throws CloudException {
NamedItemCollection<BucketData> bucketStorage = fileStore.getBuckets(project.getId());
BucketData oldBucket = bucketStorage.find(bucketName);
BucketData.Builder newBucket;
boolean isNew;
if (oldBucket == null) {
newBucket = BucketData.newBuilder();
newBucket.setKey(bucketName);
newBucket.setCreatedAt(Clock.getTimestamp());
NumberedItemCollection<DirectoryData> directoryStorage = getDirectoryStorage(project);
fileStore.getDirectories(project.getId());
DirectoryData.Builder dir = DirectoryData.newBuilder();
DirectoryData created = storeDirectory(directoryStorage, dir);
newBucket.setRootId(created.getId());
isNew = true;
} else {
newBucket = BucketData.newBuilder(oldBucket);
isNew = false;
}
updateAttributes(bucketAttributes, newBucket.getBucketAttributesBuilder());
updateAttributes(userAttributes, newBucket.getAttributesBuilder());
BucketData updated;
if (isNew) {
try {
updated = bucketStorage.create(newBucket);
} catch (DuplicateValueException e) {