docs: private String[] computeValueFromMappingValues(MtasParserObject object,
        List<Map<String, String>> mappingValues,
        Map<String, List<MtasParserObject>> currentList,
        boolean containsVariables)
        throws MtasParserException, MtasConfigException {
      String[] value = { "" };
      for (Map<String, String> mappingValue : mappingValues) {
        // directly
        if (mappingValue.get(MAPPING_VALUE_SOURCE)
            .equals(MtasParserMapping.SOURCE_STRING)) {
          if (mappingValue.get("type")
              .equals(MtasParserMapping.PARSER_TYPE_STRING)) {
            String subvalue = computeFilteredPrefixedValue(
                mappingValue.get(MAPPING_VALUE_TYPE),
                mappingValue.get(MAPPING_VALUE_TEXT), null, null);
            if (subvalue != null) {
              for (int i = 0; i < value.length; i++) {
                value[i] = addAndEncodeValue(value[i], subvalue,
                    containsVariables);
              }
            }
          }
          // from objects
        } else {
          MtasParserObject[] checkObjects = computeObjectFromMappingValue(object,
              mappingValue, currentList);
          // create value
          if (checkObjects != null && checkObjects.length > 0) {
            MtasParserType checkType = checkObjects[0].getType();
            // add name to value
            if (mappingValue.get(MAPPING_VALUE_TYPE)
                .equals(MtasParserMapping.PARSER_TYPE_NAME)) {
              String subvalue = computeFilteredPrefixedValue(
                  mappingValue.get(MAPPING_VALUE_TYPE), checkType.getName(),
                  mappingValue.get(MAPPING_VALUE_FILTER),
                  mappingValue.get(MAPPING_VALUE_PREFIX) == null
                      || mappingValue.get(MAPPING_VALUE_PREFIX).isEmpty() ? null
                          : mappingValue.get(MAPPING_VALUE_PREFIX));
              if (subvalue != null) {
                for (int i = 0; i < value.length; i++) {
                  value[i] = addAndEncodeValue(value[i], subvalue,
                      containsVariables);
                }
              }
              // add attribute to value
            } else if (mappingValue.get(MAPPING_VALUE_TYPE)
                .equals(MtasParserMapping.PARSER_TYPE_ATTRIBUTE)) {
              String tmpValue = null;    
              if (mappingValue.get(MAPPING_VALUE_NAME).equals("#")) {
                tmpValue = checkObjects[0].getId();
              } else {
                String namespace = mappingValue.get(MAPPING_VALUE_NAMESPACE); 
                if(namespace==null) {
                  tmpValue = checkObjects[0]
                    .getAttribute(mappingValue.get(MAPPING_VALUE_NAME));
                } else {
                  tmpValue = checkObjects[0]
                      .getOtherAttribute(namespace, mappingValue.get(MAPPING_VALUE_NAME));
                }
              }
              String subvalue = computeFilteredPrefixedValue(
                  mappingValue.get(MAPPING_VALUE_TYPE), tmpValue,
                  mappingValue.get(MAPPING_VALUE_FILTER),
                  mappingValue.get(MAPPING_VALUE_PREFIX) == null
                      || mappingValue.get(MAPPING_VALUE_PREFIX).isEmpty() ? null
                          : mappingValue.get(MAPPING_VALUE_PREFIX));
              if (subvalue != null) {
                for (int i = 0; i < value.length; i++) {
                  value[i] = addAndEncodeValue(value[i], subvalue,
                      containsVariables);
                }
              }
              // value from text
            } else if (mappingValue.get("type")
                .equals(MtasParserMapping.PARSER_TYPE_TEXT)) {
              String subvalue = computeFilteredPrefixedValue(
                  mappingValue.get(MAPPING_VALUE_TYPE), checkObjects[0].getText(),
                  mappingValue.get(MAPPING_VALUE_FILTER),
                  mappingValue.get(MAPPING_VALUE_PREFIX) == null
                      || mappingValue.get(MAPPING_VALUE_PREFIX).isEmpty() ? null
                          : mappingValue.get(MAPPING_VALUE_PREFIX));
              if (subvalue != null) {
                for (int i = 0; i < value.length; i++) {
                  value[i] = addAndEncodeValue(value[i], subvalue,
                      containsVariables);
                }
              }
            } else if (mappingValue.get("type")
                .equals(MtasParserMapping.PARSER_TYPE_TEXT_SPLIT)) {
              String[] textValues = checkObjects[0].getText()
                  .split(Pattern.quote(mappingValue.get(MAPPING_VALUE_SPLIT)));
              textValues = computeFilteredSplitValues(textValues,
                  mappingValue.get(MAPPING_VALUE_FILTER));
              if (textValues != null && textValues.length > 0) {
                String[] nextValue = new String[value.length * textValues.length];
                boolean nullValue = false;
                int number = 0;
                for (int k = 0; k < textValues.length; k++) {
                  String subvalue = computeFilteredPrefixedValue(
                      mappingValue.get(MAPPING_VALUE_TYPE), textValues[k],
                      mappingValue.get(MAPPING_VALUE_FILTER),
                      mappingValue.get(MAPPING_VALUE_PREFIX) == null
                          || mappingValue.get(MAPPING_VALUE_PREFIX).isEmpty()
                              ? null : mappingValue.get(MAPPING_VALUE_PREFIX));
                  if (subvalue != null) {
                    for (int i = 0; i < value.length; i++) {
                      nextValue[number] = addAndEncodeValue(value[i], subvalue,
                          containsVariables);
                      number++;
                    }
                  } else if (!nullValue) {
                    for (int i = 0; i < value.length; i++) {
                      nextValue[number] = value[i];
                      number++;
                    }
                    nullValue = true;
                  }
                }
                value = new String[number];
                System.arraycopy(nextValue, 0, value, 0, number);
              }
            } else if (mappingValue.get("type")
                .equals(MtasParserMapping.PARSER_TYPE_VARIABLE)) {
              if (containsVariables) {
                String variableName = mappingValue.get(MAPPING_VALUE_NAME);
                String variableValue = mappingValue.get(MAPPING_VALUE_VALUE);
                String prefix = mappingValue.get(MAPPING_VALUE_PREFIX);
                if (variableName != null && variableValue != null
                    && mappingValue.get(MAPPING_VALUE_SOURCE)
                        .equals(MtasParserMapping.SOURCE_OWN)) {
                  String subvalue = object.getAttribute(variableValue);
                  if (subvalue != null && subvalue.startsWith("#")) {
                    subvalue = subvalue.substring(1);
                  }
                  if (subvalue != null) {
                    for (int i = 0; i < value.length; i++) {
                      if (prefix != null && !prefix.isEmpty()) {
                        value[i] = addAndEncodeValue(value[i], prefix,
                            containsVariables);
                      }
                      value[i] = addAndEncodeVariable(value[i], variableName,
                          subvalue, containsVariables);
                    }
                  }
                }
              } else {
                throw new MtasParserException("unexpected variable");
              }
            } else {
              throw new MtasParserException(
                  "unknown type " + mappingValue.get("type"));
            }
          }
        }
      }
      if (value.length == 1 && value[0].isEmpty()) {
        return new String[] {};
      } else {
        return value;
      }
    }