docs: void precheckMappingConditions(MtasParserObject object,
        List<Map<String, String>> mappingConditions,
        Map<String, List<MtasParserObject>> currentList)
        throws MtasParserException {
      for (Map<String, String> mappingCondition : mappingConditions) {
        // condition existence ancestor
        if (mappingCondition.get("type")
            .equals(MtasParserMapping.PARSER_TYPE_EXISTENCE)) {
          int number = 0;
          try {
            number = Integer.parseInt(mappingCondition.get("number"));
          } catch (Exception e) {
            log.debug(e);
          }
          String type = computeTypeFromMappingSource(
              mappingCondition.get(MAPPING_VALUE_SOURCE));
          if (number != currentList.get(type).size()) {
            throw new MtasParserException(
                "condition mapping is " + number + " ancestors of " + type
                    + " (but " + currentList.get(type).size() + " found)");
          }
          // condition unknown ancestors
        } else if (mappingCondition.get("type")
            .equals(MtasParserMapping.PARSER_TYPE_UNKNOWN_ANCESTOR)) {
          int number = 0;
          try {
            number = Integer.parseInt(mappingCondition.get("number"));
          } catch (Exception e) {
            log.debug(e);
          }
          if (number != object.getUnknownAncestorNumber()) {
            throw new MtasParserException(
                "condition mapping is " + number + " unknown ancestors (but "
                    + object.getUnknownAncestorNumber() + " found)");
          }
        } else {
          MtasParserObject[] checkObjects = computeObjectFromMappingValue(object,
              mappingCondition, currentList);
          Boolean notCondition = false;
          if (mappingCondition.get("not") != null) {
            notCondition = true;
          }
          // do checks
          if (checkObjects != null) {
            checkObjectLoop: for (MtasParserObject checkObject : checkObjects) {
              MtasParserType checkType = checkObject.getType();
              // condition on name
              if (mappingCondition.get("type")
                  .equals(MtasParserMapping.PARSER_TYPE_NAME)) {
                if (notCondition && mappingCondition.get(MAPPING_VALUE_CONDITION)
                    .equals(checkType.getName())) {
                  throw new MtasParserException("condition NOT "
                      + mappingCondition.get(MAPPING_VALUE_CONDITION)
                      + " on name not matched (is " + checkType.getName() + ")");
                } else if (!notCondition && mappingCondition
                    .get(MAPPING_VALUE_CONDITION).equals(checkType.getName())) {
                  break checkObjectLoop;
                } else if (!notCondition && !mappingCondition
                    .get(MAPPING_VALUE_CONDITION).equals(checkType.getName())) {
                  throw new MtasParserException("condition "
                      + mappingCondition.get(MAPPING_VALUE_CONDITION)
                      + " on name not matched (is " + checkType.getName() + ")");
                }
                // condition on attribute
              } else if (mappingCondition.get("type")
                  .equals(MtasParserMapping.PARSER_TYPE_ATTRIBUTE)) {
                String attributeCondition = mappingCondition
                    .get(MAPPING_VALUE_CONDITION);
                String namespace = mappingCondition.get(MAPPING_VALUE_NAMESPACE);
                String attributeValue;
                if(namespace==null) {
                  attributeValue = checkObject.getAttribute(mappingCondition.get(MAPPING_VALUE_NAME));
                } else {
                  attributeValue = checkObject.getOtherAttribute(namespace, mappingCondition.get(MAPPING_VALUE_NAME));
                }
                if ((attributeCondition == null) && (attributeValue == null)) {
                  if (!notCondition) {
                    throw new MtasParserException("attribute "
                        + mappingCondition.get("name") + " not available");
                  }
                } else if ((attributeCondition != null)
                    && (attributeValue == null)) {
                  if (!notCondition) {
                    throw new MtasParserException(
                        "condition " + attributeCondition + " on attribute "
                            + mappingCondition.get("name")
                            + " not matched (is null)");
                  }
                } else if (attributeCondition != null) {
                  if (!notCondition
                      && !attributeCondition.equals(attributeValue)) {
                    throw new MtasParserException(
                        "condition " + attributeCondition + " on attribute "
                            + mappingCondition.get("name") + " not matched (is "
                            + attributeValue + ")");
                  } else if (!notCondition
                      && attributeCondition.equals(attributeValue)) {
                    break checkObjectLoop;
                  } else if (notCondition
                      && attributeCondition.equals(attributeValue)) {
                    throw new MtasParserException(
                        "condition NOT " + attributeCondition + " on attribute "
                            + mappingCondition.get("name") + " not matched (is "
                            + attributeValue + ")");
                  }
                }
                // condition on text
              } else if (mappingCondition.get("type")
                  .equals(MtasParserMapping.PARSER_TYPE_TEXT)
                  && object.getType().precheckText()) {
                String textCondition = mappingCondition
                    .get(MAPPING_VALUE_CONDITION);
                String textValue = object.getText();
                if ((textCondition == null)
                    && ((textValue == null) || textValue.equals(""))) {
                  if (!notCondition) {
                    throw new MtasParserException("no text available");
                  }
                } else if ((textCondition != null) && (textValue == null)) {
                  if (!notCondition) {
                    throw new MtasParserException("condition " + textCondition
                        + " on text not matched (is null)");
                  }
                } else if (textCondition != null) {
                  if (!notCondition && !textCondition.equals(textValue)) {
                    throw new MtasParserException("condition " + textCondition
                        + " on text not matched (is " + textValue + ")");
                  } else if (notCondition && textCondition.equals(textValue)) {
                    throw new MtasParserException("condition NOT " + textCondition
                        + " on text not matched (is " + textValue + ")");
                  }
                }
              }
            }
          } else if (!notCondition) {
            throw new MtasParserException(
                "no object found to match condition" + mappingCondition);
          }
        }
      }
    }