On 1/8/2011 3:23 PM, P T Withington wrote:
On 2011-01-08, at 08:23, André Bargull wrote:
This also appears to fix LPP-7278.
Gee, I really ought to pay more attention to the bugs you file! Can't believe
I missed that...
A possible New Year resolution for 2011?! :-)
Parent model fallbacks supersede current model's fallbacks, etc.?
+ if (parentNodeModel != null) {
+ CSSAttributeProperties.putAll(parentNodeModel.CSSAttributeProperties);
+ CSSAttributeTypes.putAll(parentNodeModel.CSSAttributeTypes);
+ CSSAttributeFallbacks.putAll(parentNodeModel.CSSAttributeFallbacks);
+ }
same here...
+ if (parentNodeModel != null) {
+ CSSPropertyExpanders.putAll(parentNodeModel.CSSPropertyExpanders);
+ CSSPropertyInheritable.putAll(parentNodeModel.CSSPropertyInheritable);
+ }
Thanks! Brain-oh on my part. I want set union, but not to replace existing
entries. I guess I need to use something like:
private void inherit(HashMap child, HashMap parent) {
Set missing = parent.keySet();
// Wow Java, you suck. Wouldn't it make more sense to return the
// set than a boolean?
missing.removeAll(child.keySet());
for (Iterator i = missing.iterator(); i.hasNext();) {
String key = (String)i.next();
child.put(key, parent.get(key));
}
}
Unless you know of a primitive operation on Map that does that?
You better don't do it that way, because the key-set is mapped to the
original map, so changes in the key-set are reflected to the map (and
vice-versa). So you either need to iterate over the keySet() (or
entrySet() like below) or copy the parent map, remove all keys from the
copy which are already included in the child and then add the copy to
the child.
private void inherit (Map child, Map parent) {
for (Iterator itr = parent.entrySet().iterator(); itr.hasNext(); ) {
Map.Entry entry = (Map.Entry) itr.next();
if (! child.containsKey(entry.getKey())) {
child.put(entry.getKey(), entry.getValue());
}
}
}