package uk.org.squirm3.model.level; import java.util.Collection; import uk.org.squirm3.engine.generator.GeneratorException; import uk.org.squirm3.engine.generator.LevelConstructor; import uk.org.squirm3.model.Atom; import uk.org.squirm3.model.Configuration; public class ComposedLevel implements Level { private final LevelConstructor levelConstructor; private final LevelMessages messages; private final AtomValidator atomValidator; public ComposedLevel(final LevelConstructor levelConstructor, final LevelMessages messages, final AtomValidator atomValidator) { this.levelConstructor = levelConstructor; this.messages = messages; this.atomValidator = atomValidator; } @Override public String getTitle() { return messages.getTitle(); } @Override public String getChallenge() { return messages.getChallenge(); } @Override public String getHint() { return messages.getHint(); } @Override public Configuration construct() { try { final Configuration configuration = levelConstructor.construct(); atomValidator.setup(configuration.getAtoms()); return configuration; } catch (final GeneratorException e) { throw new RuntimeException(e); } } @Override public String evaluate(final Collection<? extends Atom> atoms) { return atomValidator.evaluate(atoms, messages); } }