private static String validateDetail()

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


    private static String validateDetail(String mol) {
        if (!StringUtils.contains(mol, MOLECULE_PATTERN)) {
            return "Does not contain \"M  END\"";
        }

        String returnString;

        int numAtoms;
        int numBonds;

        try (StringReader sr = new StringReader(mol); BufferedReader br = new BufferedReader(sr)) {
            String line = null;

            for (int i = 0; i < 4; ++i) {
                line = br.readLine();
                if (Objects.isNull(line)) {
                    return "Molecule has too few lines";
                }
            }

            int impossibleNumber = -1;

            numAtoms = validateDetailGetInteger(line, 0, 3);
            if (numAtoms <= impossibleNumber) {
                return "Number of atoms is invalid";
            }

            numBonds = validateDetailGetInteger(line, 3, 6);
            if (numBonds <= impossibleNumber) {
                return "Number of bonds is invalid";
            }

            returnString = validateDetailCoordinates(numAtoms, br);
            if (!StringUtils.equals(returnString, OK_3D)) {
                return returnString;
            }

            returnString = validateDetailAtoms(numBonds, br);
            if (Objects.nonNull(returnString)) {
                return returnString;
            } else {
                returnString = OK_3D;
            }

            line = br.readLine();

            if (Objects.isNull(line)) {
                return "Molecule has too few lines";
            }
        } catch (IOException e) {
            LOGGER.error("Unexpected error parsing molecule", e);
            return "Unexpected error parsing molecule";
        }

        return returnString + " " + Integer.toString(numAtoms);
    }