package cloudone.cumulonimbus.later; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; import cloudone.ServiceFullName; import cloudone.internal.ApplicationFullName; /** * @author Martin Mares (martin.mares at oracle.com) */ public class LaterItem { private final String id; private final String contentType; private final String method; private final URI uri; private final ServiceFullName[] serviceFullNames; private final int retentionCount; private final byte[] payload; private final Set<ApplicationFullName> deliveredToApps = new HashSet<>(); LaterItem(String id, String contentType, String method, URI uri, ServiceFullName[] serviceFullNames, int retentionCount, byte[] payload) { this.id = id; this.method = method; this.contentType = contentType; this.uri = uri; this.serviceFullNames = serviceFullNames; this.retentionCount = retentionCount; this.payload = payload; } public String getId() { return id; } public String getMethod() { return method; } public URI getUri() { return uri; } public ServiceFullName[] getServiceFullNames() { return serviceFullNames; } public int getRetentionCount() { return retentionCount; } public byte[] getPayload() { return payload; } public String getPath() { return uri.getPath(); } public String getContentType() { return contentType; } public Collection<ApplicationFullName> filterApps(Collection<ApplicationFullName> apps) { if (serviceFullNames == null || serviceFullNames.length == 0) { return apps; } Collection<ApplicationFullName> result = new ArrayList<>(); for (ApplicationFullName app : apps) { if (!deliveredToApps.contains(app)) { for (ServiceFullName serviceFullName : serviceFullNames) { if (app.getServiceName().accepts(serviceFullName)) { result.add(app); break; } } } } return result; } @Override public String toString() { return "LaterItem{" + "id='" + id + '\'' + ", contentType='" + contentType + '\'' + ", method='" + method + '\'' + ", uri=" + uri + ", serviceFullNames=" + Arrays.toString(serviceFullNames) + ", retentionCount=" + retentionCount + ", payload.size=" + (payload == null ? "null" : String.valueOf(payload.length)) + '}'; } public void deliveredTo(ApplicationFullName application) { deliveredToApps.add(application); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof LaterItem)) { return false; } LaterItem item = (LaterItem) o; return id.equals(item.id); } @Override public int hashCode() { return id.hashCode(); } }