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);
}