docs: @Override
      @SuppressWarnings( "unchecked" )
      public NodeTypeTemplate createNodeTypeTemplate( NodeTypeDefinition ntd ) throws RepositoryException {
          NodeTypeTemplate ntt = new JcrNodeTypeTemplate(context(), true);
  
          if (ntd != null) {
              ntt.setName(ntd.getName());
              ntt.setAbstract(ntd.isAbstract());
              ntt.setDeclaredSuperTypeNames(ntd.getDeclaredSupertypeNames());
              ntt.setMixin(ntd.isMixin());
              ntt.setOrderableChildNodes(ntd.hasOrderableChildNodes());
              ntt.setPrimaryItemName(ntd.getPrimaryItemName());
              ntt.setQueryable(ntd.isQueryable());
  
              // copy child nodes and props
              for (NodeDefinition nodeDefinition : ntd.getDeclaredChildNodeDefinitions()) {
                  JcrNodeDefinitionTemplate ndt = new JcrNodeDefinitionTemplate(context());
  
                  ndt.setAutoCreated(nodeDefinition.isAutoCreated());
                  ndt.setDefaultPrimaryTypeName(nodeDefinition.getDefaultPrimaryTypeName());
                  ndt.setMandatory(nodeDefinition.isMandatory());
                  if (nodeDefinition.getName() != null) {
                      ndt.setName(nodeDefinition.getName());
                  }
                  ndt.setOnParentVersion(nodeDefinition.getOnParentVersion());
                  ndt.setProtected(nodeDefinition.isProtected());
                  ndt.setRequiredPrimaryTypeNames(nodeDefinition.getRequiredPrimaryTypeNames());
                  ndt.setSameNameSiblings(nodeDefinition.allowsSameNameSiblings());
  
                  ntt.getNodeDefinitionTemplates().add(ndt);
              }
  
              for (PropertyDefinition propertyDefinition : ntd.getDeclaredPropertyDefinitions()) {
                  JcrPropertyDefinitionTemplate pdt = new JcrPropertyDefinitionTemplate(context());
  
                  pdt.setAutoCreated(propertyDefinition.isAutoCreated());
                  pdt.setAvailableQueryOperators(propertyDefinition.getAvailableQueryOperators());
                  pdt.setDefaultValues(propertyDefinition.getDefaultValues());
                  pdt.setFullTextSearchable(propertyDefinition.isFullTextSearchable());
                  pdt.setMandatory(propertyDefinition.isMandatory());
                  pdt.setMultiple(propertyDefinition.isMultiple());
                  if (propertyDefinition.getName() != null) {
                      pdt.setName(propertyDefinition.getName());
                  }
                  pdt.setOnParentVersion(propertyDefinition.getOnParentVersion());
                  pdt.setProtected(propertyDefinition.isProtected());
                  pdt.setQueryOrderable(propertyDefinition.isQueryOrderable());
                  pdt.setRequiredType(propertyDefinition.getRequiredType());
                  pdt.setValueConstraints(propertyDefinition.getValueConstraints());
  
                  ntt.getPropertyDefinitionTemplates().add(pdt);
              }
          }
  
          return ntt;
      }