2016-10-03 12:43:47 +02:00
|
|
|
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);
|
2019-01-28 15:20:42 +01:00
|
|
|
executeCommandLine(scriptToExecute,login);
|
|
|
|
return writeFile(info, configFile);
|
2016-10-03 12:43:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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()+";");
|
2016-11-25 15:56:12 +01:00
|
|
|
sb.append(info.getDatabase().getDatabasePassword()+";");
|
|
|
|
sb.append(info.getUsername()+";");
|
|
|
|
sb.append(info.getToken()+"\n");
|
|
|
|
|
|
|
|
try(FileWriter fw = new FileWriter(pathToFile,false)){
|
2016-10-03 12:43:47 +02:00
|
|
|
fw.write(sb.toString());
|
|
|
|
}catch(Exception e){
|
|
|
|
log.error("error writing config file",e);
|
|
|
|
return false;
|
|
|
|
}
|
2016-11-25 15:56:12 +01:00
|
|
|
log.debug("file written with line {}",sb.toString());
|
2016-10-03 12:43:47 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|