Skip to content

Commit

Permalink
Added methods for getting localised text.
Browse files Browse the repository at this point in the history
Added localised text, words and sentences for EN and PL versions. The generation of latin text, words and sentences moved to differently named methods.
  • Loading branch information
OlgaMaciaszek committed Feb 15, 2015
1 parent 1d687c8 commit b002897
Show file tree
Hide file tree
Showing 8 changed files with 260 additions and 155 deletions.
9 changes: 9 additions & 0 deletions build.gradle
Expand Up @@ -157,6 +157,15 @@ uploadArchives {
role 'developer'
}
}
developer {
id 'olga.maciaszek'
name 'Olga Maciaszek-Sharma'
email 'olga.maciaszek ATT gmail DOTT com'
roles {
role 'developer'
role 'qa engineer'
}
}
}
scm {
connection 'scm:git:git@github.com:Codearte/jfairy.git'
Expand Down
203 changes: 106 additions & 97 deletions src/main/java/eu/codearte/jfairy/producer/text/TextProducer.java
Expand Up @@ -3,108 +3,117 @@
*/
package eu.codearte.jfairy.producer.text;

import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import eu.codearte.jfairy.producer.BaseProducer;
import static eu.codearte.jfairy.producer.text.TextUtils.*;
import static org.apache.commons.lang3.StringUtils.*;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;

import static com.google.common.collect.Lists.newArrayList;
import static org.apache.commons.lang3.StringUtils.capitalize;
import static org.apache.commons.lang3.StringUtils.endsWith;
import static org.apache.commons.lang3.StringUtils.left;
import static org.apache.commons.lang3.StringUtils.removeEnd;
import static eu.codearte.jfairy.producer.text.TextUtils.joinWithSpace;
import eu.codearte.jfairy.producer.BaseProducer;

public class TextProducer {

private static final int DEFAULT_WORD_COUNT = 3;
private static final int DEFAULT_WORD_COUNT_IN_SENTENCE = 3;
private static final int DEFAULT_SENTENCE_COUNT = 3;
private static final int WORD_COUNT_PRECISION_IN_SENTENCE = 6;
private static final int SENTENCE_COUNT_PRECISION_MIN = 1;
private static final int SENTENCE_COUNT_PRECISION_MAX = 3;

private final TextProducerInternal textProducerInternal;
private final BaseProducer baseProducer;

private int limit = 0;

@Inject
public TextProducer(TextProducerInternal textProducerInternal, BaseProducer baseProducer) {
this.textProducerInternal = textProducerInternal;
this.baseProducer = baseProducer;
}

public TextProducer limitedTo(int limit) {
this.limit = limit;
return this;
}

public String result(String result) {
if (limit > 0) {
return left(result, limit);
} else {
return result;
}
}

public String loremIpsum() {
return result(textProducerInternal.getLoremIpsum());
}

public String word() {
return result(word(DEFAULT_WORD_COUNT));
}

public String word(int count) {
return result(textProducerInternal.cleanWords(count));
}

public String sentence() {
return result(sentence(DEFAULT_WORD_COUNT_IN_SENTENCE));
}

public String sentence(int wordCount) {
String randomWords = textProducerInternal.rawWords(wordCount, WORD_COUNT_PRECISION_IN_SENTENCE);
List<String> sentences = newArrayList();
for (String sentence : Splitter.on(". ").split(randomWords)) {
sentences.add(capitalize(sentence));
}
String sentence = capitalize(Joiner.on(". ").join(sentences));
sentence = removeEnd(sentence, ",");
if (!endsWith(sentence, ".")) {
sentence += ".";
}
return result(sentence);
}

private List<String> sentences(int sentenceCount) {
List<String> sentences = new ArrayList<String>(sentenceCount);
for (int i = 0; i < sentenceCount; i++) {
sentences.add(sentence());
}
return sentences;
}

public String paragraph() {
return result(paragraph(DEFAULT_SENTENCE_COUNT));
}

public String paragraph(int sentenceCount) {
return result(joinWithSpace(sentences(sentenceCount +
baseProducer.randomBetween(SENTENCE_COUNT_PRECISION_MIN, SENTENCE_COUNT_PRECISION_MAX))));
}

/**
* Generates random string with desired length
*
* @param charsCount string length
* @return random string
*/
public String randomString(int charsCount) {
return textProducerInternal.randomString(charsCount);
}
private static final int DEFAULT_WORD_COUNT = 3;

private static final int DEFAULT_WORD_COUNT_IN_SENTENCE = 3;

private static final int DEFAULT_SENTENCE_COUNT = 3;

private static final int SENTENCE_COUNT_PRECISION_MIN = 1;

private static final int SENTENCE_COUNT_PRECISION_MAX = 3;

private final TextProducerInternal textProducerInternal;

private final BaseProducer baseProducer;

private int limit = 0;

@Inject
public TextProducer(TextProducerInternal textProducerInternal, BaseProducer baseProducer) {
this.textProducerInternal = textProducerInternal;
this.baseProducer = baseProducer;
}

public TextProducer limitedTo(int limit) {
this.limit = limit;
return this;
}

public String result(String result) {
if (limit > 0) {
return left(result, limit);
} else {
return result;
}
}

public String loremIpsum() {
return result(textProducerInternal.loremIpsum());
}

public String text() {
return result(textProducerInternal.text());
}

public String word() {
return result(word(DEFAULT_WORD_COUNT));
}

public String word(int count) {
return result(textProducerInternal.cleanWords(count));
}

public String latinWord() {
return result(latinWord(DEFAULT_WORD_COUNT));
}

public String latinWord(int count) {
return result(textProducerInternal.cleanLatinWords(count));
}

public String latinSentence() {
return result(latinSentence(DEFAULT_SENTENCE_COUNT));
}

public String latinSentence(int wordCount) {
return result(textProducerInternal.latinSentence(wordCount));
}

public String sentence() {
return result(sentence(DEFAULT_WORD_COUNT_IN_SENTENCE));
}

public String sentence(int wordCount) {
return result(textProducerInternal.sentence(wordCount));

}

private List<String> sentences(int sentenceCount) {
List<String> sentences = new ArrayList<String>(sentenceCount);
for (int i = 0; i < sentenceCount; i++) {
sentences.add(sentence());
}
return sentences;
}

public String paragraph() {
return result(paragraph(DEFAULT_SENTENCE_COUNT));
}

public String paragraph(int sentenceCount) {
return result(joinWithSpace(sentences(sentenceCount +
baseProducer.randomBetween(SENTENCE_COUNT_PRECISION_MIN, SENTENCE_COUNT_PRECISION_MAX))));
}

/**
* Generates random string with desired length
*
* @param charsCount string length
* @return random string
*/
public String randomString(int charsCount) {
return textProducerInternal.randomString(charsCount);
}
}
157 changes: 102 additions & 55 deletions src/main/java/eu/codearte/jfairy/producer/text/TextProducerInternal.java
Expand Up @@ -3,66 +3,113 @@
*/
package eu.codearte.jfairy.producer.text;

import eu.codearte.jfairy.data.DataMaster;
import eu.codearte.jfairy.producer.BaseProducer;
import static com.google.common.collect.Lists.*;
import static java.util.Arrays.asList;
import static org.apache.commons.lang3.StringUtils.*;

import javax.inject.Inject;
import java.util.List;
import javax.inject.Inject;

import static com.google.common.collect.Lists.newArrayList;
import static java.util.Arrays.asList;
import static org.apache.commons.lang3.StringUtils.replaceChars;
import static org.apache.commons.lang3.StringUtils.split;
import static org.apache.commons.lang3.StringUtils.uncapitalize;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import eu.codearte.jfairy.data.DataMaster;
import eu.codearte.jfairy.producer.BaseProducer;

class TextProducerInternal {

private static final String DATA = "text";
private static final String ALPHABET = "alphabet";

private final BaseProducer baseProducer;

private final String loremIpsum;
private final List<String> words;
private final String alphabet;
private final int maxAlphabetIndex;

@Inject
public TextProducerInternal(DataMaster dataMaster, BaseProducer baseProducer) {
this.baseProducer = baseProducer;
loremIpsum = dataMaster.getString(DATA);
words = asList(split(loremIpsum, ' '));
alphabet = dataMaster.getString(ALPHABET);
maxAlphabetIndex = alphabet.length() - 1;
}

public String getLoremIpsum() {
return loremIpsum;
}

public String rawWords(int count, int precision) {
List<String> result = readRawWords(count, precision);
return TextUtils.joinWithSpace(result);
}

public String cleanWords(int count) {
List<String> result = newArrayList();
for (String part : readRawWords(count, 0)) {
result.add(uncapitalize(replaceChars(part, "., ", "")));
}
return TextUtils.joinWithSpace(result);
}

public String randomString(int charsCount) {
StringBuilder sb = new StringBuilder(charsCount);
for (int i = 0; i < charsCount; i++) {
sb.append(alphabet.charAt(baseProducer.randomInt(maxAlphabetIndex)));
}
return sb.toString();
}

private List<String> readRawWords(int count, int precision) {
return baseProducer.randomElements(words, baseProducer.randomBetween(count, count + precision));
}
private static final String LOREM_IPSUM = "loremIpsum";

private static final String TEXT = "text";

private static final String ALPHABET = "alphabet";

private static final int WORD_COUNT_PRECISION_IN_SENTENCE = 6;

private final BaseProducer baseProducer;

private final String loremIpsum;

private final String text;

private final List<String> words;

private final String alphabet;

private final int maxAlphabetIndex;

private final List<String> latinWords;

@Inject
public TextProducerInternal(DataMaster dataMaster, BaseProducer baseProducer) {
this.baseProducer = baseProducer;
loremIpsum = dataMaster.getString(LOREM_IPSUM);
text = dataMaster.getString(TEXT);
words = asList(split(text, ' '));
latinWords = asList(split(loremIpsum, ' '));
alphabet = dataMaster.getString(ALPHABET);
maxAlphabetIndex = alphabet.length() - 1;
}

public String loremIpsum() {
return loremIpsum;
}

public String rawWords(List<String> words, int count, int precision) {
List<String> result = readRawWords(words, count, precision);
return TextUtils.joinWithSpace(result);
}

public String cleanLatinWords(int count) {
return cleanWords(latinWords, count);
}

public String cleanWords(int count) {
return cleanWords(words, count);
}

private String cleanWords(List<String> words, int count) {
List<String> result = newArrayList();
for (String part : readRawWords(words, count, 0)) {
result.add(uncapitalize(replaceChars(part, "., ", "")));
}
return TextUtils.joinWithSpace(result);
}

public String randomString(int charsCount) {
StringBuilder sb = new StringBuilder(charsCount);
for (int i = 0; i < charsCount; i++) {
sb.append(alphabet.charAt(baseProducer.randomInt(maxAlphabetIndex)));
}
return sb.toString();
}

private List<String> readRawWords(List<String> words, int count, int precision) {
return baseProducer.randomElements(words, baseProducer.randomBetween(count, count + precision));
}

public String text() {
return text;
}

public String sentence(int wordCount) {
return sentence(words, wordCount);
}

public String latinSentence(int wordCount) {
return sentence(latinWords, wordCount);
}

private String sentence(List<String> words, int wordCount) {
String randomWords = rawWords(words, wordCount, WORD_COUNT_PRECISION_IN_SENTENCE);
List<String> sentences = newArrayList();
for (String sentence : Splitter.on(". ").split(randomWords)) {
sentences.add(capitalize(sentence));
}
String sentence = capitalize(Joiner.on(". ").join(sentences));
sentence = removeEnd(sentence, ",");
if (!endsWith(sentence, ".")) {
sentence += ".";
}
return sentence;
}
}

0 comments on commit b002897

Please sign in to comment.