docs: public void actionDeleteCascade() throws JspException {
  
          // save initialized instance of this class in request attribute for included sub-elements
          getJsp().getRequest().setAttribute(SESSION_WORKPLACE_CLASS, this);
          try {
              // list of all resources containing this propertydefinition
              List resourcesWithProperty = getCms().readResourcesWithProperty(getParamPropertyName());
              // list of all resources locked by another user, containing this propertydefinition
              List resourcesLockedByOtherUser = getResourcesLockedByOtherUser(resourcesWithProperty);
              // do the following operations only if all of the resources are not locked by another user
              if (resourcesLockedByOtherUser.isEmpty()) {
                  // save the site root
                  String storedSiteRoot = getCms().getRequestContext().getSiteRoot();
                  try {
                      // change to the root site
                      getCms().getRequestContext().setSiteRoot("/");
  
                      Iterator i = resourcesWithProperty.iterator();
                      while (i.hasNext()) {
                          CmsResource resource = (CmsResource)i.next();
                          // read the property object
                          CmsProperty property = getCms().readPropertyObject(
                              resource.getRootPath(),
                              getParamPropertyName(),
                              false);
                          // try to delete the property if it is not the NULL PROPERTY
                          // if the property is the NULL PROPERTY, it only had a shared
                          // value which was deleted at a sibling which was already processed
                          if (!property.isNullProperty()) {
                              CmsLock lock = getCms().getLock(resource);
                              if (lock.isUnlocked()) {
                                  // lock the resource for the current (Admin) user
                                  getCms().lockResource(resource.getRootPath());
                              }
                              property.setStructureValue(CmsProperty.DELETE_VALUE);
                              property.setResourceValue(CmsProperty.DELETE_VALUE);
                              // write the property with the null value to the resource and cascade it from the definition
                              getCms().writePropertyObject(resource.getRootPath(), property);
                              // unlock the resource
                              getCms().unlockResource(resource.getRootPath());
                          }
                      }
                      // delete the property definition at last
                      getCms().deletePropertyDefinition(getParamPropertyName());
                  } finally {
                      // restore the siteroot
                      getCms().getRequestContext().setSiteRoot(storedSiteRoot);
                      // close the dialog
                      actionCloseDialog();
                  }
              } else {
  
                  StringBuffer reason = new StringBuffer();
                  reason.append(dialogWhiteBoxStart());
                  reason.append(buildResourceList(resourcesLockedByOtherUser, true));
                  reason.append(dialogWhiteBoxEnd());
                  throw new CmsVfsException(
                      Messages.get().container(Messages.ERR_DEL_PROP_RESOURCES_LOCKED_1, reason.toString()));
              }
          } catch (Throwable e) {
              // error while deleting property definition, show error dialog
              includeErrorpage(this, e);
          }
      }