private Map parseInfo()

in server/src/main/java/com/epam/indigoeln/core/chemistry/sdf/SdUnit.java [431:474]


    private Map<String, String> parseInfo(String sdInfo, List<String> origNames) {
        Map<String, String> out = new HashMap<>();

        try {
            String attrPortion = sdInfo.substring(sdInfo.indexOf(MOLECULE_PATTERN) + 6, sdInfo.indexOf("$$$$") + 4).trim();

            String thisName;
            String thisOrigName;
            String thisValue;

            do {
                if (attrPortion.indexOf(">") != 0 || attrPortion.indexOf("<") < 1) {
                    break;
                }

                attrPortion = attrPortion.substring(attrPortion.indexOf("<") + 1);
                thisName = attrPortion.substring(0, attrPortion.indexOf(">")).trim();

                thisOrigName = thisName;
                thisName = thisName.toUpperCase(Locale.getDefault());

                attrPortion = attrPortion.substring(attrPortion.indexOf("\n")).trim();

                if (attrPortion.contains(">")) {
                    thisValue = attrPortion.substring(0, attrPortion.indexOf("\n>")).trim();
                } else if (attrPortion.trim().indexOf(">") == 0 && attrPortion.contains("<")) {
                    thisValue = "";
                } else {
                    thisValue = attrPortion.substring(0, attrPortion.indexOf("$$$$")).trim();
                }

                parseInfoAddOrigNames(out, origNames, thisOrigName, thisName, thisValue);

                if (attrPortion.indexOf(">  <") != 0 && attrPortion.indexOf("> <") != 0
                        && attrPortion.contains("\n>")) {
                    attrPortion = attrPortion.substring(attrPortion.indexOf("\n>") + 1);
                }
            } while (true);
        } catch (Exception e) {
            throw new IllegalArgumentException("Error parsing sdFile attributes", e);
        }

        return out;
    }