/** * Given a map of key -> CompositeAttributeHolder, clone and add all entries to this attributes * map. Overriding b/c we need to put CAH in attributes. * * @param attributeHolders map of key -> CompositeAttributeHolder */ public void setAllAttributeHolders(Map attributeHolders) { if (attributeHolders == null) return; clear(); for (Iterator i = attributeHolders.entrySet().iterator(); i.hasNext(); ) { Map.Entry entry = (Map.Entry) i.next(); String key = (String) entry.getKey(); Object value = entry.getValue(); if (CompositeAttributeHolder.class.isAssignableFrom(value.getClass())) { CompositeAttributeHolder original = (CompositeAttributeHolder) value; CompositeAttributeHolder copy = (CompositeAttributeHolder) original.clone(); getAttributes().put(key, copy); } else if (AttributeHolder.class.isAssignableFrom(value.getClass())) { AttributeHolder original = (AttributeHolder) value; CompositeAttributeHolder copy = new CompositeAttributeHolder(original.getValue()); if (original.isSerializable()) copy.serializable(); if (original.isLocked()) copy.lock(); getAttributes().put(key, copy); } else { set(key, value); } } }
protected AttributeHolder createHolderForValue(AttributeHolder old, Object value) { CompositeAttributeHolder attributeHolder = new CompositeAttributeHolder(value); if (old.isSerializable()) attributeHolder.serializable(); if (CompositeAttributeHolder.class.isAssignableFrom(old.getClass())) { if (((CompositeAttributeHolder) old).isInheritable()) attributeHolder.setInheritable(true); } return attributeHolder; }
/** * Generate a new map of key -> CompsositeAttributeHolder containing all inheritable attributes * * @return map of inheritable attributes */ public Map getAllInheritableAttributeHolders() { Map allInheritable = new HashMap(); for (Iterator i = getAllAttributeHolders().entrySet().iterator(); i.hasNext(); ) { Map.Entry entry = (Map.Entry) i.next(); String key = (String) entry.getKey(); CompositeAttributeHolder attributeHolder = (CompositeAttributeHolder) entry.getValue(); if (attributeHolder.isInheritable()) { allInheritable.put(key, attributeHolder); } } return allInheritable; }