package uk.org.squirm3.model.level.validators; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import uk.org.squirm3.model.Atom; import uk.org.squirm3.model.level.AtomSelector; import uk.org.squirm3.model.level.AtomValidator; import uk.org.squirm3.model.level.LevelMessages; import uk.org.squirm3.model.type.AtomType; import uk.org.squirm3.model.type.def.BasicType; public class InsertAtomValidator implements AtomValidator { private Atom chainStart; @Override public void setup(final Collection<? extends Atom> atoms) { chainStart = AtomSelector.findUnique(BasicType.A, 4, atoms); } @Override public String evaluate(final Collection<? extends Atom> atoms, final LevelMessages messages) { final LinkedList<Atom> joined = new LinkedList<Atom>(); chainStart.getAllConnectedAtoms(joined); if (joined.size() != 11) { return messages.getError(1); } final int n_bonds[] = {1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1}; final AtomType types[] = {BasicType.E, BasicType.E, BasicType.E, BasicType.E, BasicType.E, BasicType.B, BasicType.E, BasicType.E, BasicType.E, BasicType.E, BasicType.E}; int i = 0; final Iterator<Atom> it = joined.iterator(); while (it.hasNext()) { final Atom a = it.next(); if (a.getBonds().size() != n_bonds[i]) { return messages.getError(2); } if (a.getType() != types[i]) { return messages.getError(3); } i++; } return null; } }