docs: private List<String[]> getPropertyValues() {
  
          // check if list has to be generated
          if (m_propertyValues == null) {
  
              // get currently active tab
              String activeTab = getActiveTabName();
              String structurePanelName = key(Messages.GUI_PROPERTIES_INDIVIDUAL_0);
  
              // get all properties for the resource
              List<CmsPropertyDefinition> propertyDef = new ArrayList<CmsPropertyDefinition>();
              try {
                  propertyDef = getCms().readAllPropertyDefinitions();
              } catch (CmsException e) {
                  // should usually never happen
                  if (LOG.isInfoEnabled()) {
                      LOG.info(e.getLocalizedMessage());
                  }
              }
              m_propertyValues = new ArrayList<String[]>(propertyDef.size());
  
              // get all used properties for the resource
              Map<String, CmsProperty> activeProperties = getActiveProperties();
  
              // iterate over all possible properties for the resource
              Iterator<CmsPropertyDefinition> i = propertyDef.iterator();
              while (i.hasNext()) {
                  CmsPropertyDefinition currentPropertyDef = i.next();
                  String propName = CmsEncoder.escapeXml(currentPropertyDef.getName());
                  String propValue = "";
                  String valueStructure = "";
                  String valueResource = "";
                  if (m_tabSwitched) {
                      // switched the tab, get values from hidden fields
                      if (structurePanelName.equals(activeTab)) {
                          // structure form
                          propValue = getJsp().getRequest().getParameter(PREFIX_STRUCTURE + propName);
                          valueStructure = getJsp().getRequest().getParameter(PREFIX_STRUCTURE + propName);
                          if (!isEditable()) {
                              // values from disabled fields are not posted
                              valueResource = getJsp().getRequest().getParameter(PREFIX_RESOURCE + propName);
                          } else {
                              valueResource = getJsp().getRequest().getParameter(PREFIX_VALUE + propName);
                          }
                      } else {
                          // resource form
                          propValue = getJsp().getRequest().getParameter(PREFIX_RESOURCE + propName);
                          if (!isEditable()) {
                              // values from disabled fields are not posted
                              valueStructure = getJsp().getRequest().getParameter(PREFIX_STRUCTURE + propName);
                          } else {
                              valueStructure = getJsp().getRequest().getParameter(PREFIX_VALUE + propName);
                          }
                          valueResource = getJsp().getRequest().getParameter(PREFIX_RESOURCE + propName);
                          if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(valueStructure)
                              && valueStructure.equals(valueResource)) {
                              // the resource value was shown in the input field, set structure value to empty String
                              valueStructure = "";
                          }
                      }
                  } else {
                      // initial call of edit form, get property values from database
                      CmsProperty currentProperty = activeProperties.get(propName);
                      if (currentProperty == null) {
                          currentProperty = new CmsProperty();
                      }
                      if (structurePanelName.equals(activeTab)) {
                          // show the structure properties
                          propValue = currentProperty.getStructureValue();
                      } else {
                          // show the resource properties
                          propValue = currentProperty.getResourceValue();
                      }
                      valueStructure = currentProperty.getStructureValue();
                      valueResource = currentProperty.getResourceValue();
                  }
                  // check values for null
                  if (propValue == null) {
                      propValue = "";
                  }
                  if (valueStructure == null) {
                      valueStructure = "";
                  }
                  if (valueResource == null) {
                      valueResource = "";
                  }
  
                  // remove unnecessary blanks from values
                  propValue = propValue.trim();
                  valueStructure = valueStructure.trim();
                  valueResource = valueResource.trim();
                  String[] property = new String[] {propName, propValue, valueStructure, valueResource};
                  m_propertyValues.add(property);
              }
          }
          // return the filled list
          return m_propertyValues;
      }