/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package util.builders; import java.util.Collection; import java.util.List; import java.util.Set; import models.ACLs; import org.apache.commons.lang.StringUtils; import com.emc.storageos.model.auth.ACLAssignmentChanges; import com.emc.storageos.model.auth.ACLEntry; import com.google.common.collect.Sets; public class ACLUpdateBuilder { private List<ACLEntry> entries; private ACLAssignmentChanges changes; public ACLUpdateBuilder(List<ACLEntry> entries) { this.entries = entries; this.changes = new ACLAssignmentChanges(); } public ACLAssignmentChanges getACLUpdate() { return changes; } public void setTenants(Collection<String> tenants) { Set<String> newTenants = Sets.newHashSet(tenants); Set<ACLEntry> remove = Sets.newHashSet(); for (ACLEntry entry : getTenantACLs()) { // If the tenant is not in the set, remove the entry if (!tenants.contains(entry.getTenant())) { remove.add(entry); } // Otherwise remove the tenant from the 'newTenants' set else { newTenants.remove(entry.getTenant()); } } // Create ACLs for any remaining 'new' tenants Set<ACLEntry> add = createTenantACLs(newTenants); // Update the ACL changes changes.getAdd().addAll(add); changes.getRemove().addAll(remove); } private Set<ACLEntry> getTenantACLs() { Set<ACLEntry> tenantACLs = Sets.newHashSet(); for (ACLEntry entry : entries) { if (StringUtils.isNotBlank(entry.getTenant())) { tenantACLs.add(entry); } } return tenantACLs; } private Set<ACLEntry> createTenantACLs(Set<String> tenants) { Set<ACLEntry> entries = Sets.newHashSet(); for (String tenant : tenants) { ACLEntry entry = new ACLEntry(); entry.setTenant(tenant); entry.getAces().add(ACLs.USE); entries.add(entry); } return entries; } }