code: @Override
      public synchronized boolean updateNode(IUserLayoutNodeDescription node) throws PortalException {
          if (canUpdateNode(node)) {
              String nodeId = node.getId();
              IUserLayoutNodeDescription oldNode = getNode(nodeId);
  
              if (oldNode instanceof IUserLayoutChannelDescription) {
                  IUserLayoutChannelDescription oldChanDesc = (IUserLayoutChannelDescription) oldNode;
                  if (!(node instanceof IUserLayoutChannelDescription)) {
                      throw new PortalException(
                              "Change channel to folder is "
                                      + "not allowed by updateNode() method! Occurred "
                                      + "in layout for "
                                      + owner.getUserName()
                                      + ".");
                  }
                  IUserLayoutChannelDescription newChanDesc = (IUserLayoutChannelDescription) node;
                  updateChannelNode(nodeId, newChanDesc, oldChanDesc);
              } else {
                  // must be a folder
                  IUserLayoutFolderDescription oldFolderDesc = (IUserLayoutFolderDescription) oldNode;
                  if (oldFolderDesc.getId().equals(getRootFolderId()))
                      throw new PortalException("Update of root node is not currently allowed!");
  
                  if (node instanceof IUserLayoutFolderDescription) {
                      IUserLayoutFolderDescription newFolderDesc =
                              (IUserLayoutFolderDescription) node;
                      updateFolderNode(nodeId, newFolderDesc, oldFolderDesc);
                  }
              }
              this.updateCacheKey();
              return true;
          }
          return false;
      }
docs: Handles pushing changes made to the passed-in node into the user's layout. If the node is an
  ILF node then the change is recorded via directives in the PLF if such changes are allowed by
  the owning fragment. If the node is a user owned node then the changes are applied directly
  to the corresponding node in the PLF.