package com.google.code.joto.util;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public class NameGenerator {
private static class IdGenerator {
private String namePrefix;
int idGenerator = 0;
public IdGenerator(String namePrefix) {
this.namePrefix = namePrefix;
}
public String generateId() {
int id = idGenerator++;
String res = namePrefix;
if (id > 0) {
char lastChar = res.charAt(res.length() - 1);
if (Character.isDigit(lastChar)) {
res += "_";
}
res += id;
}
return res;
}
}
private Map<Class<?>,String> classAlias = new HashMap<Class<?>,String>();
private Map<String,IdGenerator> prefixToIdGenerator =
new HashMap<String,IdGenerator>();
// -------------------------------------------------------------------------
public NameGenerator() {
super();
}
// -------------------------------------------------------------------------
public String newName(Class<?> clss) {
String prefix = classToAlias(clss);
return newName(prefix);
}
public String newName(String prefix) {
return nameToIdGenerator(prefix).generateId();
}
// -------------------------------------------------------------------------
protected IdGenerator nameToIdGenerator(String prefix) {
IdGenerator res = prefixToIdGenerator.get(prefix);
if (res == null) {
res = new IdGenerator(prefix);
prefixToIdGenerator.put(prefix, res);
}
return res;
}
public String classToAlias(Class<?> clss) {
String res = classAlias.get(clss);
if (res == null) {
res = clss.getSimpleName();
// use lower case for first letter
res = Character.toLowerCase(res.charAt(0)) + ((res.length()> 1)? res.substring(1): "");
classAlias.put(clss, res);
}
return res;
}
}