docs: public Noderef getNoderefFromPathref(
              String layoutOwner,
              String pathref,
              String fname,
              boolean isStructRef,
              org.dom4j.Element layoutElement) {
  
          Validate.notNull(layoutOwner, "Argument 'layoutOwner' cannot be null.");
          Validate.notNull(pathref, "Argument 'pathref' cannot be null.");
  
          if (log.isTraceEnabled()) {
              StringBuilder msg = new StringBuilder();
              msg.append("getDlmNoderef: [layoutOwner='")
                      .append(layoutOwner)
                      .append("', pathref='")
                      .append(pathref)
                      .append("', fname='")
                      .append(fname)
                      .append("', isStructRef='")
                      .append(isStructRef)
                      .append("']");
              log.trace(msg.toString());
              log.trace("getDlmNoderef: user layout document follows...\n" + layoutElement.asXML());
          }
  
          final String[] pathTokens = DLM_PATH_REF_DELIM.split(pathref);
          if (pathTokens.length <= 1) {
              this.log.warn("Invalid DLM PathRef, no delimiter: " + pathref);
              return null;
          }
  
          if (pathTokens[0].equals(layoutOwner)) {
              // This an internal reference (our own layout);  we have to
              // use the layoutExment (instead of load-limited-layout) b/c
              // our layout may not be in the db...
              final org.dom4j.Element target =
                      (org.dom4j.Element) layoutElement.selectSingleNode(pathTokens[1]);
              if (target != null) {
                  return new Noderef(target.valueOf("@ID"));
              }
  
              this.log.warn(
                      "Unable to resolve pathref '"
                              + pathref
                              + "' for layoutOwner '"
                              + layoutOwner
                              + "'");
              return null;
          }
  
          /*
           * We know this Noderef refers to a node on a DLM fragment
           */
  
          final String layoutOwnerName = pathTokens[0];
          final String layoutPath = pathTokens[1];
  
          final Integer layoutOwnerUserId = this.userIdentityStore.getPortalUserId(layoutOwnerName);
          if (layoutOwnerUserId == null) {
              this.log.warn(
                      "Unable to resolve pathref '"
                              + pathref
                              + "' for layoutOwner '"
                              + layoutOwner
                              + "', no userId found for userName: "
                              + layoutOwnerName);
              return null;
          }
  
          final Tuple<String, DistributedUserLayout> userLayoutInfo =
                  getUserLayoutTuple(layoutOwnerName, layoutOwnerUserId);
          final Document userLayout = userLayoutInfo.second.getLayout();
  
          final Node targetNode =
                  this.xPathOperations.evaluate(layoutPath, userLayout, XPathConstants.NODE);
          if (targetNode == null) {
              this.log.warn("No layout node found for pathref: " + pathref);
              return null;
          }
  
          final NamedNodeMap attributes = targetNode.getAttributes();
          if (fname != null) {
              final Node fnameAttr = attributes.getNamedItem("fname");
              if (fnameAttr == null) {
                  this.log.warn("Layout node for pathref does not have fname attribute: " + pathref);
                  return null;
              }
  
              final String nodeFname = fnameAttr.getTextContent();
              if (!fname.equals(nodeFname)) {
                  this.log.warn(
                          "fname '"
                                  + nodeFname
                                  + "' on layout node not match specified fname '"
                                  + fname
                                  + "' for pathref: "
                                  + pathref);
                  return null;
              }
          }
  
          final Node structIdAttr = attributes.getNamedItem("struct-id");
          if (structIdAttr != null) {
              final String structId = structIdAttr.getTextContent();
  
              if (isStructRef) {
                  return new Noderef(
                          layoutOwnerUserId,
                          1 /* TODO:  remove hard-coded layoutId=1 */,
                          "s" + structId);
              }
  
              return new Noderef(
                      layoutOwnerUserId, 1 /* TODO:  remove hard-coded layoutId=1 */, "n" + structId);
          }
  
          final Node idAttr = attributes.getNamedItem("ID");
          return new Noderef(
                  layoutOwnerUserId,
                  1 /* TODO:  remove hard-coded layoutId=1 */,
                  idAttr.getTextContent());
      }