public static NodeLocationWithParentImpl getNodeLocationWithParentUsingCache(
      Node node, String id, boolean cacheIfPossible, NodeCacheRegistryImpl nodeCache) {
    // nodeCache NO puede ser nulo

    // Se supone que el nodo no ha sido cacheado en el cliente todavía  aunque tenga
    // un id asignado en el servidor (este id puede ser null si no ha sido cacheado en el servidor)
    // por lo que hay que obtener un path, absoluto o relativo respecto a un padre cacheado.

    // Buscamos un nodo padre que esté cacheado para evitar formar un path
    // absoluto que lleva tiempo.

    String parentId = null;
    Node parent = node;

    do {
      parent = parent.getParentNode();
      parentId = nodeCache.getId(parent); // si cachedParent es null devuelve null
    } while ((parentId == null) && (parent != null));

    ClientDocumentStfulDelegateImpl clientDoc = nodeCache.getClientDocumentStfulDelegate();
    String path =
        clientDoc.getStringPathFromNode(
            node,
            parent); // Si cachedParent es null (cachedParentId es null) devuelve un path absoluto

    return new NodeLocationWithParentImpl(
        node, id, path, parent, parentId, cacheIfPossible, clientDoc);
  }