package pt.ist.fenixframework.pstm.dml;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import dml.CompilerArgs;
import dml.DomainModel;
public class FenixCodeGeneratorReadFromRsWithConverterClassParamOneBoxPerObject extends FenixCodeGeneratorOneBoxPerObject {
private static final Map<String, File> packageMapper = new HashMap<String, File>();
public FenixCodeGeneratorReadFromRsWithConverterClassParamOneBoxPerObject(final CompilerArgs compilerArgs, final DomainModel domainModel) {
super(compilerArgs, domainModel);
InputStream inputStream;
try {
inputStream = getClass().getResourceAsStream("/.dmlProjectPackageMapper");
final String contents = read(new InputStreamReader(inputStream));
for (final String line : contents.split("\n")) {
final int sindex = line.indexOf(' ');
final String packageName = line.substring(0, sindex);
final String packageDir = packageName.replace('.', File.separatorChar);
final String srcDir = postProcessSrcDir(line.substring(sindex + 1));
final String domainSrcDir = srcDir + File.separatorChar + packageDir;
final File file = new File(domainSrcDir);
packageMapper.put(packageName, file);
}
} catch (IOException e) {
}
}
protected String postProcessSrcDir(final String srcDir) {
return srcDir;
}
public static String read(final InputStreamReader fileReader) throws IOException {
try {
char[] buffer = new char[4096];
final StringBuilder fileContents = new StringBuilder();
for (int n = 0; (n = fileReader.read(buffer)) != -1; fileContents.append(buffer, 0, n))
;
return fileContents.toString();
} finally {
fileReader.close();
}
}
@Override
protected File getDirectoryFor(String packageName) {
final File dir = getPackageDir(packageName);
return dir == null ? super.getDirectoryFor(packageName) : dir;
}
private File getPackageDir(final String packageName) {
final File file = packageMapper.get(packageName);
if (file == null) {
final int i = packageName.lastIndexOf('.');
final String parentPackageName = packageName.substring(0, i);
final File dir = getPackageDir(parentPackageName);
return dir == null ? null : new File(dir.getAbsolutePath() + File.separator + packageName.substring(i + 1));
}
return file;
}
}