BasicAttributeContext implements AttributeContext, Serializable { public void addMissing(Map<String, Attribute> defaultAttributes) { if (defaultAttributes == null) { return; } if (attributes == null) { attributes = new HashMap<String, Attribute>(); if (cascadedAttributes == null || cascadedAttributes.isEmpty()) { attributes.putAll(defaultAttributes); return; } } Set<Map.Entry<String, Attribute>> entries = defaultAttributes.entrySet(); for (Map.Entry<String, Attribute> entry : entries) { String key = entry.getKey(); if (!attributes.containsKey(key) && (cascadedAttributes == null || !cascadedAttributes .containsKey(key))) { attributes.put(entry.getKey(), entry.getValue()); } } } BasicAttributeContext();  BasicAttributeContext(Map<String, Attribute> attributes);  BasicAttributeContext(AttributeContext context);  BasicAttributeContext(BasicAttributeContext context); Attribute getTemplateAttribute(); void setTemplateAttribute(Attribute templateAttribute); String getPreparer(); void setPreparer(String url); void inheritCascadedAttributes(AttributeContext context); void inherit(AttributeContext parent); void inherit(BasicAttributeContext parent); void addAll(Map<String, Attribute> newAttributes); void addMissing(Map<String, Attribute> defaultAttributes); Attribute getAttribute(String name); Attribute getLocalAttribute(String name); Attribute getCascadedAttribute(String name); Set<String> getLocalAttributeNames(); Set<String> getCascadedAttributeNames(); void putAttribute(String name, Attribute value); void putAttribute(String name, Attribute value, boolean cascade); void clear(); @Override boolean equals(Object obj); @Override int hashCode();  }
@Test public void testAddMissing() { Map<String, Attribute> name2attrib = new HashMap<String, Attribute>(); Attribute attribute = new Attribute("Value 1"); name2attrib.put("name1", attribute); attribute = new Attribute("Value 2"); name2attrib.put("name2", attribute); AttributeContext context = new BasicAttributeContext(name2attrib); name2attrib.remove("name2"); name2attrib.put("name1", new Attribute("Value 1a")); name2attrib.put("name3", new Attribute("Value 3")); context.addMissing(name2attrib); attribute = context.getAttribute("name1"); assertNotNull("Attribute name1 not found", attribute); assertEquals("Attribute name1 has not been set correctly", "Value 1", attribute.getValue()); attribute = context.getAttribute("name2"); assertNotNull("Attribute name2 not found", attribute); assertEquals("Attribute name2 has not been set correctly", "Value 2", attribute.getValue()); attribute = context.getAttribute("name3"); assertNotNull("Attribute name3 not found", attribute); assertEquals("Attribute name3 has not been set correctly", "Value 3", attribute.getValue()); context.addMissing(null); attribute = context.getAttribute("name1"); assertNotNull("Attribute name1 not found", attribute); assertEquals("Attribute name1 has not been set correctly", "Value 1", attribute.getValue()); attribute = context.getAttribute("name2"); assertNotNull("Attribute name2 not found", attribute); assertEquals("Attribute name2 has not been set correctly", "Value 2", attribute.getValue()); attribute = context.getAttribute("name3"); assertNotNull("Attribute name3 not found", attribute); assertEquals("Attribute name3 has not been set correctly", "Value 3", attribute.getValue()); context = new BasicAttributeContext(); name2attrib = new HashMap<String, Attribute>(); name2attrib.put("name1", new Attribute("Value 1a")); name2attrib.put("name3", new Attribute("Value 3")); context.addMissing(name2attrib); attribute = context.getAttribute("name1"); assertNotNull("Attribute name1 not found", attribute); assertEquals("Attribute name1 has not been set correctly", "Value 1a", attribute.getValue()); attribute = context.getAttribute("name3"); assertNotNull("Attribute name3 not found", attribute); assertEquals("Attribute name3 has not been set correctly", "Value 3", attribute.getValue()); context = new BasicAttributeContext(); context.putAttribute("name2", new Attribute("Value 2a"), true); name2attrib = new HashMap<String, Attribute>(); name2attrib.put("name1", new Attribute("Value 1a")); name2attrib.put("name3", new Attribute("Value 3")); context.addMissing(name2attrib); attribute = context.getAttribute("name1"); assertNotNull("Attribute name1 not found", attribute); assertEquals("Attribute name1 has not been set correctly", "Value 1a", attribute.getValue()); attribute = context.getAttribute("name2"); assertNotNull("Attribute name2 not found", attribute); assertEquals("Attribute name2 has not been set correctly", "Value 2a", attribute.getValue()); attribute = context.getAttribute("name3"); assertNotNull("Attribute name3 not found", attribute); assertEquals("Attribute name3 has not been set correctly", "Value 3", attribute.getValue()); context = new BasicAttributeContext(); context.putAttribute("name2", new Attribute("Value 2a"), true); name2attrib = new HashMap<String, Attribute>(); name2attrib.put("name2", new Attribute("Value 2b")); name2attrib.put("name3", new Attribute("Value 3")); context.addMissing(name2attrib); attribute = context.getAttribute("name2"); assertNotNull("Attribute name2 not found", attribute); assertEquals("Attribute name2 has not been set correctly", "Value 2a", attribute.getValue()); attribute = context.getAttribute("name3"); assertNotNull("Attribute name3 not found", attribute); assertEquals("Attribute name3 has not been set correctly", "Value 3", attribute.getValue()); }