RConnector/src/main/java/org/gcube/data/analysis/rconnector/ConfigFileWriter.java

85 lines
2.3 KiB
Java

package org.gcube.data.analysis.rconnector;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
@Singleton
@Slf4j
public class ConfigFileWriter {
public boolean write(Info info, String login, String usersHome, String fileName, String scriptToExecute){
if (!usersHome.endsWith("/"))
usersHome=usersHome+"/";
File userDir = new File(usersHome+login);
File configFile= new File(userDir, fileName);
executeCommandLine(scriptToExecute,login);
return writeFile(info, configFile);
}
private String executeCommandLine(String cmd, String login){
log.debug("executing command "+cmd+" "+login);
Process process = null;
String lastline = "";
try {
ProcessBuilder pb = new ProcessBuilder(cmd, login);
process = pb.start();
try {
process.waitFor();
} catch (InterruptedException e) {
log.warn("interrupt Exception on process",e);
}
BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = br.readLine();
while (line!=null){
lastline += line;
line = br.readLine();
}
} catch (IOException e) {
log.error("error executing command line",e);
}
log.debug("command result line is "+lastline);
return lastline;
}
private boolean writeFile(Info info, File pathToFile){
log.debug("writing config file");
StringBuffer sb = new StringBuffer();
sb.append(info.getTableName()+";");
sb.append(info.getUserTableName()+";");
sb.append(info.getFields());
if (!info.getFields().endsWith(";"))
sb.append(";");
sb.append(info.getQueryColumns());
if (!info.getQueryColumns().endsWith(";"))
sb.append(";");
sb.append(info.getDatabase().getDatabaseAddress()+";");
sb.append(info.getDatabase().getDatabaseName()+";");
sb.append(info.getDatabase().getDatabaseUsername()+";");
sb.append(info.getDatabase().getDatabasePassword()+";");
sb.append(info.getUsername()+";");
sb.append(info.getToken()+"\n");
try(FileWriter fw = new FileWriter(pathToFile,false)){
fw.write(sb.toString());
}catch(Exception e){
log.error("error writing config file",e);
return false;
}
log.debug("file written with line {}",sb.toString());
return true;
}
}