StandardWordGeneratorConfig.java
package de.slothsoft.random.types.wordgen;
import java.io.IOException;
import java.io.InputStream;
/**
* Standard {@link WordGeneratorConfig}s.
*
* @author Stef Schulz
* @since 2.1.0
*/
public enum StandardWordGeneratorConfig implements WordGeneratorConfig {
/** An even distribution of letters. */
EVEN_DISTRIBUTION {
@Override
WordGeneratorConfig createConfig() {
return new DefaultWordGeneratorConfig();
}
},
/** A English distribution of letters. */
ENGLISH {
@Override
WordGeneratorConfig createConfig() {
return readConfigFile("english.properties");
}
},
/** A German distribution of letters. */
GERMAN {
@Override
WordGeneratorConfig createConfig() {
return readConfigFile("german.properties");
}
};
private WordGeneratorConfig delegate;
private WordGeneratorConfig getDelegate() {
if (this.delegate == null) {
this.delegate = createConfig();
}
return this.delegate;
}
abstract WordGeneratorConfig createConfig();
static WordGeneratorConfig readConfigFile(String fileName) {
try (InputStream input = StandardWordGeneratorConfig.class.getResourceAsStream(fileName)) {
return WordGeneratorConfigUtil.loadConfig(input);
} catch (final IOException | NullPointerException e) {
throw new IllegalArgumentException("Something went very wrong reading the config " + fileName + "!", e);
}
}
@Override
public char[] getSupportedCharacters() {
return getDelegate().getSupportedCharacters();
}
@Override
public double getStandardWordLength() {
return getDelegate().getStandardWordLength();
}
@Override
public double getProbability(char c) {
return getDelegate().getProbability(c);
}
}