1 package org.kuali.common.devops.jenkins.upgrade; 2 3 import static com.google.common.collect.Maps.newHashMap; 4 import static org.kuali.common.util.base.Precondition.checkNotBlank; 5 6 import java.util.Map; 7 8 import org.kuali.common.aws.s3.model.ObjectSummary; 9 import org.kuali.common.core.io.DiskUsage; 10 11 import com.google.common.base.Predicate; 12 13 public final class S3 { 14 15 public static Predicate<ObjectSummary> startsWith(String prefix) { 16 return new ObjectSummaryStartsWith(prefix); 17 } 18 19 private static class ObjectSummaryStartsWith implements Predicate<ObjectSummary> { 20 21 public ObjectSummaryStartsWith(String prefix) { 22 this.prefix = checkNotBlank(prefix, "prefix"); 23 } 24 25 private final String prefix; 26 27 @Override 28 public boolean apply(ObjectSummary summary) { 29 return summary.getKey().startsWith(prefix); 30 } 31 } 32 33 public static Predicate<ObjectSummary> isDir() { 34 return ObjectSummaryIsDir.INSTANCE; 35 } 36 37 private enum ObjectSummaryIsDir implements Predicate<ObjectSummary> { 38 INSTANCE; 39 @Override 40 public boolean apply(ObjectSummary summary) { 41 return summary.getSize() == 0 && summary.getKey().endsWith("/"); 42 } 43 } 44 45 public static DiskUsage sumFileObjects(Iterable<ObjectSummary> objects) { 46 long sum = 0; 47 long count = 0; 48 for (ObjectSummary object : objects) { 49 String key = object.getKey(); 50 if (!key.endsWith("/")) { 51 count++; 52 sum += object.getSize(); 53 } 54 } 55 return DiskUsage.builder().withCount(count).withSize(sum).build(); 56 } 57 58 public static Map<String, ObjectSummary> objectsAsMap(Iterable<ObjectSummary> objects) { 59 Map<String, ObjectSummary> map = newHashMap(); 60 for (ObjectSummary object : objects) { 61 map.put(object.getKey(), object); 62 } 63 return map; 64 } 65 66 }