EnumGenerator.java
package eu.javaexperience.collection.enumerations;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collection;
import java.util.HashSet;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.regex.RegexTools;
import eu.javaexperience.text.StringTools;
public class EnumGenerator
{
public static void main(String[] args) throws Throwable
{
args = new String[]{"/tmp/1"};
GetBy1<String, String> comment = null;
try
(
FileInputStream fis = new FileInputStream(args[0]);
InputStreamReader reader = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(reader);
)
{
generate(System.out, br, comment, false, false);
}
}
/**
* adsfdfsd ááklhkl.-fdgdfg gfddfg 1 6 15 izé => adsfdfsd_ááklhkl_fdgdfg_gfddfg("adsfdfsd ááklhkl.-fdgdfg gfddfg", 1, 6, 15, "izé"),
* @throws IOException
* */
public static void generate(Appendable dst, BufferedReader read, GetBy1<String, String> comment, Boolean... isString) throws IOException
{
HashSet<String> registeredEnumNames = new HashSet<>();
String line = null;
while(null != (line = read.readLine()))
{
String[] elems = RegexTools.TAB.split(line);
if(elems.length < 1)
{
continue;
}
String enumName = enumName(elems[0], registeredEnumNames);
String c = null;
if(null != comment)
{
c = comment.getBy(elems[0]);
if(null != c)
{
dst.append(c);
}
}
dst.append("\t");
dst.append(enumName);
dst.append("(\"");
dst.append(StringTools.escapeToJavaString(elems[0]));
dst.append("\"");
for(int i=1;i<elems.length && i < isString.length+1;++i)
{
dst.append(", ");
if(Boolean.TRUE == isString[i-1])
{
dst.append("\"");
dst.append(StringTools.escapeToJavaString(elems[i]));
dst.append("\"");
}
else if(Boolean.FALSE == isString[i-1])
{
dst.append(elems[i]);
}
}
dst.append("),\n");
}
}
public static String enumName(String str,Collection<String> coll)
{
str = str.trim();
str = str.toUpperCase();
str = str.replace("\\.", "");
str = str.replace("–", "");
str = str.replace(" ", "_");
str = str.replace("-", "_");
str = str.replace(",", "_");
str = str.replace("(", "");
str = str.replace(")", "");
str = StringTools.deAccent(str);
while(true)
{
if(coll.contains(str))
{
str = str+"_";
}
else
{
coll.add(str);
return str;
}
}
}
}