Code Pretty Print Script

Thursday, November 14, 2013

Mocking Up Text

Do you need to generate a significant ammount of text dynamically? Perhaps you're creating mock data to test your UI; maybe you've been using Lorem Ipsum; perhaps you know about "=rand()" in Word; or you could try a LoremIpsumGenerator.
/*
 * Copyright © 2013 - Elliott Frisch
 * 
 * THIS SOFTWARE IS PROVIDED UNDER THE CREATIVE COMMONS
 * LICENSE 3.0 "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR
 * A PARTICULAR PURPOSE.
 * 
 * To use this software you must agree to the complete
 * license terms available at:
 * http://creativecommons.org/licenses/by/3.0/us/deed.en_US
 * 
 * It is the intent of the author(s) that you may use or
 * modify this software for any purpose (including your own
 * commercial gain) provided that this notice remains in its
 * entirety.
 * 
 * Created by Elliott Frisch - www.frischcode.com
 */
package com.frischcode.util;

import java.security.SecureRandom;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

/**
 * <b>Rationale:</b> You need dynamic text that stresses
 * your application. Or, you just need to fill in a few
 * blanks. Or, you've always loved <a
 * href="http://www.madlibs.com/">mad libs</a>.
 * 
 * @author Elliott Frisch
 */
public class LoremIpsumGenerator {
  public LoremIpsumGenerator() {
    this(false);
  }

  public LoremIpsumGenerator(boolean classic) {
    super();
    random.setSeed(System.currentTimeMillis());
    addAll(colorSet, "red", "white", "blue", "purple",
        "pink", "orange", "green", "yellow");
    addAll(verbSet, "walked", "ran", "talked",
        "jogged", "hiked", "mozied");
    addAll(verbSet2, "passed a", "saw a",
        "didn't see the", "was surprised by a",
        "was startled by a", "was amazed by a",
        "was impressed by a");
    addAll(nounSet, "Tom", "Jim", "Joe", "Bill",
        "Bob", "Jane", "Jill", "Sam");
    addAll(placeSet, "the house", "work", "the store",
        "the gym", "the pool", "the library",
        "the daycare", "Walla Walla, WA");
    addAll(nounSet2, "boat", "car", "house", "plane",
        "bicycle", "moped", "motorcycle");
    addAll(punctSet, "!", "?", ".", "\u203d");
    this.classic = classic;
  }

  public String getText() {
    if (classic) {
      return A_WELL_KNOWN_STRING;
    }
    StringBuilder sb = new StringBuilder();
    sb.append(getRandomEntry(random, nounSet));
    sb.append(" ");
    sb.append(getRandomEntry(random, verbSet));
    sb.append(" to ");
    sb.append(getRandomEntry(random, placeSet));
    sb.append(" and ");
    sb.append(getRandomEntry(random, verbSet2));
    sb.append(" ");
    sb.append(getRandomEntry(random, colorSet));
    sb.append(" ");
    sb.append(getRandomEntry(random, nounSet2));
    sb.append(getRandomEntry(random, punctSet));
    return sb.toString();
  }

  public boolean isClassic() {
    return classic;
  }

  public void setClassic(boolean classic) {
    this.classic = classic;
  }

  public static void main(String[] args) {
    LoremIpsumGenerator lig = new LoremIpsumGenerator(
        false);
    for (int i = 0; i < 10; ++i) {
      System.out.println(lig.getText());
    }
    System.out.flush();
  }

  protected boolean classic = false;

  private Set<String> colorSet = new TreeSet<String>();
  private Set<String> verbSet = new TreeSet<String>();
  private Set<String> verbSet2 = new TreeSet<String>();
  private Set<String> nounSet = new TreeSet<String>();
  private Set<String> nounSet2 = new TreeSet<String>();
  private Set<String> placeSet = new TreeSet<String>();
  private Set<String> punctSet = new TreeSet<String>();
  private Random random = new SecureRandom();

  private static String getRandomEntry(Random random,
      Set<String> set) {
    if (set == null || set.size() == 0) {
      return "";
    }
    Iterator<String> iter = set.iterator();
    int p = random.nextInt(set.size());
    while (p > 0) {
      iter.next();
      --p;
    }
    return iter.next();
  }

  private static void addAll(Set<String> set,
      String... in) {
    for (String t : in) {
      set.add(t);
    }
  }

  private static final String A_WELL_KNOWN_STRING = //
  "Lorem ipsum dolor sit amet, consectetur adipisici elit, "
      + "sed do eiusmod tempor incididunt ut labore et dolore "
      + "magna aliqua. Ut enim ad minim veniam, quis nostrud "
      + "exercitation ullamco laboris nisi ut aliquip ex ea "
      + "commodo consequat. Duis aute irure dolor in "
      + "reprehenderit in voluptate velit esse cillum dolore "
      + "eu fugiat nulla pariatur. Excepteur sint occaecat "
      + "cupidatat non proident, sunt in culpa qui officia "
      + "deserunt mollit anim id est laborum.";
}