Index: . =================================================================== --- . (revision 464242) +++ . (working copy) @@ -16,6 +16,10 @@ */ package org.apache.jackrabbit.core.observation; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + import org.apache.jackrabbit.core.ItemManager; import org.apache.jackrabbit.core.SessionImpl; import org.apache.jackrabbit.core.NodeId; @@ -20,8 +24,10 @@ import org.apache.jackrabbit.core.SessionImpl; import org.apache.jackrabbit.core.NodeId; import org.apache.jackrabbit.core.nodetype.NodeTypeImpl; +import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl; import org.apache.jackrabbit.name.MalformedPathException; import org.apache.jackrabbit.name.Path; +import org.apache.jackrabbit.name.QName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -182,6 +188,16 @@ } } + // get node types for mixins + Set mixinNodeTypes = new HashSet(); + Set mixinNames = eventState.getMixinNames(); + NodeTypeManagerImpl nodeTypeManager = session.getNodeTypeManager(); + for (Iterator iter = mixinNames.iterator(); iter.hasNext();) { + QName mixinName = (QName) iter.next(); + NodeTypeImpl mixinNodeType = nodeTypeManager.getNodeType(mixinName); + mixinNodeTypes.add(mixinNodeType); + } + // check node types if (nodeTypes != null) { boolean match = false; @@ -187,8 +203,12 @@ boolean match = false; for (int i = 0; i < nodeTypes.length && !match; i++) { match |= eventState.getNodeType().getQName().equals(nodeTypes[i].getQName()) - || eventState.getMixinNames().contains(nodeTypes[i].getQName()) || eventState.getNodeType().isDerivedFrom(nodeTypes[i].getQName()); + for (Iterator iter = mixinNodeTypes.iterator(); iter.hasNext();) { + NodeTypeImpl mixinNodeType = (NodeTypeImpl) iter.next(); + match |= mixinNodeType.getQName().equals(nodeTypes[i].getQName()) + || mixinNodeType.isDerivedFrom(nodeTypes[i].getQName()); + } } if (!match) { return true;