package xmlhandling;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collections;
import java.util.List;
public class CreateLangFiles {
private static final boolean SIMULATE = false;
public static void createLangFile(File pluginbase,String filename
,List<String> list,String propertiesname) throws IOException {
Collections.sort(list);
int i = filename.lastIndexOf('.');
if (i == -1) {
throw new IOException("no file provided");
}
String packagename = filename.substring(0, i);
String classname = filename.substring(i+1);
//1. packagename 2. classname , 3. all strings as commaseparated List
//4. name of properties file
//pluginbase+propertiesname+.properties = propertiesfile
File source = new File("translation/Lang.template");
String langTemplate = read(source);
String concreteLang = String.format(langTemplate
, packagename
, classname
, concat(list,"\n\t\t,","")
, "nl."+propertiesname);
File target = new File(pluginbase,"src/"+packagename.replace(".", "/")+"/"+classname+".java");
write(target,concreteLang);
}
private static String read(File source) throws IOException {
FileReader reader = new FileReader(source);
StringBuilder builder = new StringBuilder();
int c;
while (-1!= (c=reader.read())) {
builder.append((char)c);
}
reader.close();
return builder.toString();
}
private static void write(File target,String contents) throws IOException {
if (SIMULATE) {
System.out.println("writing file "+target);
System.out.println("contents: "+contents);
} else {
if (!target.isFile() || !contents.equals(read(target))) { // check if the file not already exists and contains the same stuff
System.out.print(target.getCanonicalPath());
PrintStream ps = new PrintStream(target);
ps.print(contents);
ps.close();
System.out.println(" ...written");
} else {
// System.out.println(" ...unchanged");
}
}
}
/**
* concatenates each term in collection using .toString()
* and puts between each string "between"
*
* if the map is empty it will return the empty map string instead...
*
*/
public static String concat(Iterable<?> terms,String between,String emptyMap) {
StringBuilder ret = new StringBuilder();
for (Object o: terms) {
if (ret.length() != 0) {
ret.append(between);
}
ret.append(o.toString());
}
if (ret.length() == 0) {
return emptyMap;
} else {
return ret.toString();
}
}
}