code: @Override
     public Set<HierarchicalProperty> getProperties(boolean namesOnly) throws PathNotFoundException,
        AccessDeniedException, RepositoryException
     {
        Set<HierarchicalProperty> props = super.getProperties(namesOnly);
  
        props.add(namesOnly ? new HierarchicalProperty(GETLASTMODIFIED) : getProperty(GETLASTMODIFIED));
        props.add(namesOnly ? new HierarchicalProperty(GETCONTENTLENGTH) : getProperty(GETCONTENTLENGTH));
        props.add(namesOnly ? new HierarchicalProperty(GETCONTENTTYPE) : getProperty(GETCONTENTTYPE));
  
        QName nodeTypeName = namespaceContext.createQName("jcr:nodeType");
        HierarchicalProperty noneTypeProp =
           new HierarchicalProperty(nodeTypeName, contentNode().getPrimaryNodeType().getName());
        props.add(noneTypeProp);
  
        Set<QName> presents = new HashSet<QName>();
  
        PropertyIterator jcrProps = node.getProperties();
        while (jcrProps.hasNext())
        {
           Property property = jcrProps.nextProperty();
           if (!FILE_SKIP.contains(property.getName()))
           {
              QName name = namespaceContext.createQName(property.getName());
              presents.add(name);
              props.add((namesOnly) ? new HierarchicalProperty(name) : getProperty(name));
              if (name.getLocalPart().equals("isCheckedOut"))
              {
                 QName qname = namespaceContext.createQName("D:checked-in");
                 presents.add(qname);
                 props.add(new HierarchicalProperty(qname));
              }
           }
        }
  
        jcrProps = contentNode().getProperties();
        HierarchicalProperty jcrContentProp =
           new HierarchicalProperty(namespaceContext.createQName(WebDavConst.NodeTypes.JCR_CONTENT));
  
        while (jcrProps.hasNext())
        {
           Property property = jcrProps.nextProperty();
           if (!CONTENT_SKIP.contains(property.getName()))
           {
              QName name = namespaceContext.createQName(property.getName());
  
              if (presents.contains(name))
              {
                 continue;
              }
  
              jcrContentProp.addChild((namesOnly) ? new HierarchicalProperty(name) : getProperty(name));
           }
        }
  
        if (!jcrContentProp.getChildren().isEmpty())
        {
           props.add(jcrContentProp);
        }
        return props;
     }
docs: {@inheritDoc}