package org.robobinding.attribute; import java.util.Collection; import java.util.List; import java.util.Map; import org.robobinding.util.Lists; import org.robobinding.util.Maps; import org.robobinding.util.Objects; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Robert Taylor * @author Cheng Wei */ public class PendingGroupAttributes { private final Map<String, String> presentAttributeMappings; public PendingGroupAttributes(Map<String, String> presentAttributeMappings) { this.presentAttributeMappings = Maps.newHashMap(presentAttributeMappings); } public Iterable<Map.Entry<String, String>> presentAttributes() { return presentAttributeMappings.entrySet(); } public void assertAttributesArePresent(String... attributeNames) { if (!hasAttributes(attributeNames)) throw new MissingRequiredAttributesException(findAbsentAttributes(attributeNames)); } private boolean hasAttributes(String... attributes) { for (String attribute : attributes) { if (!presentAttributeMappings.containsKey(attribute)) { return false; } } return true; } private Collection<String> findAbsentAttributes(String... attributeNames) { List<String> absentAttributes = Lists.newArrayList(); for (String attributeName : attributeNames) { if (!presentAttributeMappings.containsKey(attributeName)) { absentAttributes.add(attributeName); } } return absentAttributes; } @Override public boolean equals(Object other) { if (this == other) return true; if (!(other instanceof PendingGroupAttributes)) return false; final PendingGroupAttributes that = (PendingGroupAttributes) other; return Objects.equal(presentAttributeMappings, that.presentAttributeMappings); } @Override public int hashCode() { return Objects.hashCode(presentAttributeMappings); } }