package uk.org.squirm3.model.level; import org.springframework.context.MessageSource; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.convert.ConversionService; import org.springframework.core.io.ResourceLoader; import uk.org.squirm3.engine.generator.AtomBuilder; import uk.org.squirm3.engine.generator.AtomBuilderGonstructor; import uk.org.squirm3.engine.generator.LevelConstructor; public class ComposedLevelFactory implements ResourceLoaderAware { private ResourceLoader resourceLoader; private final ConversionService conversionService; private final MessageSource messageSource; private final AtomBuilder atomBuilder; private ComposedLevelFactory(final ConversionService conversionService, final MessageSource messageSource, final AtomBuilder atomBuilder) { this.conversionService = conversionService; this.messageSource = messageSource; this.atomBuilder = atomBuilder; } public Level create(final String key, final AtomValidator atomValidator) { return create(key, key + ".map", atomValidator); } public Level createRandom(final String key, final AtomValidator atomValidator) { return create(key, "random.map", atomValidator); } private Level create(final String key, final String map, final AtomValidator atomValidator) { final String levelDescription = conversionService.convert( resourceLoader.getResource("classpath:levels/" + map), String.class); final LevelConstructor levelConstructo = new AtomBuilderGonstructor( levelDescription, atomBuilder); final LevelMessages messages = new LevelMessages(key, messageSource); return new ComposedLevel(levelConstructo, messages, atomValidator); } public Level createWithConstructor(final String key, final LevelConstructor levelConstructor, final AtomValidator atomValidator) { final LevelMessages messages = new LevelMessages(key, messageSource); return new ComposedLevel(levelConstructor, messages, atomValidator); } @Override public void setResourceLoader(final ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } }