code: public void visit(NodeData node) throws RepositoryException
     {
        try
        {
           entering(node, currentLevel);
           if ((maxLevel == -1) || (currentLevel < maxLevel))
           {
              currentLevel++;
  
              List<PropertyData> properies = new ArrayList<PropertyData>(dataManager.getChildPropertiesData(node));
              // Sorting properties
              Collections.sort(properies, new PropertyDataOrderComparator());
  
              for (PropertyData data : properies)
              {
                 InternalQName propName = data.getQPath().getName();
  
                 // 7.3.3 Respecting Property Semantics
                 // When an element or attribute representing such a property is
                 // encountered, an implementation may either skip it or respect it.
                 if (Constants.JCR_LOCKISDEEP.equals(propName) || Constants.JCR_LOCKOWNER.equals(propName))
                 {
                    continue;
                 }
                 data.accept(this);
              }
              if (!isNoRecurse() && (currentLevel > 0))
              {
                 List<NodeData> nodes = new ArrayList<NodeData>(dataManager.getChildNodesData(node));
                 // Sorting nodes
                 Collections.sort(nodes, new NodeDataOrderComparator());
                 for (NodeData data : nodes)
                 {
                    data.accept(this);
                 }
              }
              currentLevel--;
           }
           leaving(node, currentLevel);
        }
        catch (RepositoryException re)
        {
           currentLevel = 0;
           throw re;
        }
  
     }
docs: {@inheritDoc}