package openmods.words;
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import java.util.Random;
public abstract class Sequence implements IGenerator {
protected final List<IGenerator> parts;
public Sequence(IGenerator... parts) {
this.parts = ImmutableList.copyOf(parts);
}
protected List<String> generateParts(Random random, Map<String, String> params) {
List<String> result = Lists.newArrayList();
for (IGenerator part : parts)
result.add(part.generate(random, params));
return result;
}
@Override
public BigInteger count() {
BigInteger result = BigInteger.ONE;
for (IGenerator part : parts)
result = result.multiply(part.count());
return result;
}
public static class Phrase extends Sequence {
public Phrase(IGenerator... parts) {
super(parts);
}
@Override
public String generate(Random random, Map<String, String> params) {
List<String> results = Lists.newArrayList();
for (IGenerator part : parts) {
String result = part.generate(random, params);
if (!Strings.isNullOrEmpty(result)) results.add(result);
}
return Joiner.on(' ').join(results);
}
}
public static class Word extends Sequence {
public Word(IGenerator... parts) {
super(parts);
}
@Override
public String generate(Random random, Map<String, String> params) {
StringBuilder builder = new StringBuilder();
for (IGenerator part : parts)
builder.append(part.generate(random, params));
return builder.toString();
}
}
}