package com.yoursway.ide.rails.projects;
import java.util.Iterator;
import com.yoursway.utils.strings.ChainedIterator;
import com.yoursway.utils.strings.RandomStringIterable;
import com.yoursway.utils.strings.StringTupleIterable;
public class ProjectNamingUtils {
private final static RandomStringIterable EXTREMELY = new RandomStringIterable(new String[] { "really",
"extremely", "absolutely" });
private final static RandomStringIterable GREAT = new RandomStringIterable(new String[] { "cool",
"great", "wonderful", "exciting" });
private final static RandomStringIterable RAILS_APP = new RandomStringIterable(new String[] {
"rails_application", "web20_masterpiece" });
@SuppressWarnings("unchecked")
private final static StringTupleIterable ITERABLE = new StringTupleIterable(
(Iterable<String>[]) new Iterable<?>[] { GREAT, RAILS_APP });
@SuppressWarnings("unchecked")
private final static StringTupleIterable ITERABLE_2 = new StringTupleIterable(
(Iterable<String>[]) new Iterable<?>[] { EXTREMELY, GREAT, RAILS_APP });
private final static Iterable<String> PROJECT_NAMES_ITERABLE = new Iterable<String>() {
public Iterator<String> iterator() {
return new ChainedIterator<String>(new NamesIterator(ITERABLE), new ChainedIterator<String>(
new NamesIterator(ITERABLE_2), new DumbNamesIterator()));
}
};
private static final String PREFIX = "my";
private final static class NamesIterator implements Iterator<String> {
private final Iterator<String[]> iterator;
public NamesIterator(StringTupleIterable iterable) {
iterator = iterable.iterator();
}
public boolean hasNext() {
return iterator.hasNext();
}
public String next() {
String[] pieces = iterator.next();
StringBuilder result = new StringBuilder();
result.append(PREFIX);
for (String piece : pieces) {
if (result.length() > 0)
result.append('_');
result.append(piece);
}
return result.toString();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
private final static class DumbNamesIterator implements Iterator<String> {
private int nextIndex = 1;
public boolean hasNext() {
return false;
}
public String next() {
int index = nextIndex++;
return "my_cool_app_" + index;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
public static Iterable<String> getProjectNamesIterable() {
return PROJECT_NAMES_ITERABLE;
}
}