code: public PropertyIterator getProperties() throws RepositoryException
     {
        long start = 0;
        if (LOG.isDebugEnabled())
        {
           start = System.currentTimeMillis();
           LOG.debug("getProperties() >>>>>");
        }
  
        checkValid();
  
        try
        {
           List<PropertyData> childs = childPropertiesData();
  
           if (session.getAccessManager().hasPermission(nodeData().getACL(), new String[]{PermissionType.READ},
              session.getUserState().getIdentity()))
           {
              if (childs.size() < session.getLazyReadThreshold())
              {
                 // full iterator 
                 List<PropertyImpl> props = new ArrayList<PropertyImpl>();
                 for (int i = 0, length = childs.size(); i < length; i++)
                 {
                    PropertyData child = childs.get(i);
                    PropertyImpl item = (PropertyImpl)dataManager.readItem(child, nodeData(), true, false);
                    session.getActionHandler().postRead(item);
                    props.add(item);
  
                 }
                 return new EntityCollection(props);
              }
              else
              {
                 // lazy iterator
                 return new LazyPropertyIterator(childs);
              }
           }
           else
           {
              // return empty
              return new EntityCollection();
           }
        }
        finally
        {
           if (LOG.isDebugEnabled())
           {
              LOG.debug("getProperties() <<<<< " + ((System.currentTimeMillis() - start) / 1000d) + "sec");
           }
        }
     }
docs: {@inheritDoc}