code: private NodeImpl obtainParent(ArchivePath path) {
          if (path == null) {
              return null;
          }
  
          NodeImpl node = content.get(path);
  
          // If the node exists, just return it
          if (node != null) {
              // if the node is an asset, throw an exception
              if (node.getAsset() != null) {
                  throw new IllegalArchivePathException("Could not create node under " + path.getParent()
                      + ". It points to an asset.");
              }
  
              return node;
          }
  
          // If the node doesn't exists, create it. Also create all possible non-existing
          // parents
          node = new NodeImpl(path);
          NodeImpl parentNode = obtainParent(path.getParent());
  
          if (parentNode != null) {
              parentNode.addChild(node);
          }
  
          // Add the node to the contents of the archive
          content.put(path, node);
  
          return node;
      }
docs: Used to retrieve a {@link Node} from the content of the {@link Archive}. If the {@link Node} doesn�t exists in
  the specified location, it is created and added to the {@link Archive}. The same happens to all its non-existing
  parents. However, if the {@link Node} is an asset, an IllegalArchivePathException is thrown.
  
  @param path
  The {@link ArchivePath} from which we are obtaining the {@link Node}
  @return The {@link Node} in the specified path
  @throws IllegalArchivePathException
  if the node is an {@link Asset}