package com.adaptrex.tools.framework.javascript;
import java.io.IOException;
import com.adaptrex.tools.Tools;
import com.adaptrex.tools.environment.Environment;
import com.adaptrex.tools.environment.IEnvironmentService;
import com.adaptrex.tools.log.ILogService;
import com.adaptrex.tools.log.Log;
import com.adaptrex.tools.webapp.Page;
import com.adaptrex.tools.webapp.Webapp;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class CompileService implements ICompileService {
private IEnvironmentService environmentService;
private ILogService logService;
@Inject
public CompileService(IEnvironmentService environmentService, ILogService logService) {
this.environmentService = environmentService;
this.logService = logService;
}
@Override
public boolean createBootstrap(Webapp webapp, String framework) throws IOException {
Environment env = environmentService.getEnvironment();
boolean isExt = framework.equals(JavaScriptFramework.EXTJS);
JavaScriptFramework javaScriptFramework = isExt ? webapp.getExt() : webapp.getSenchaTouch();
AdaptrexJS adaptrexJS = webapp.getAdaptrex();
if (adaptrexJS == null) {
logService.log(Log.ERROR, "Generate Bootstrap Error",
"The adaptrex-js folder required to generate your bootstrap file is missing"
);
return false;
}
String sdkFolder = isExt ? "extjs" : "sencha-touch";
String sdkPath = javaScriptFramework.getFullPath();
String adaptrexSdkPath = adaptrexJS.getFullPath() + "/" + sdkFolder;
String dependencyFile = isExt ? "ExtDependencies.js" : "SenchaTouchDependencies.js";
String webappSrcAbsolutePath = webapp.getFullPath() + "/src/main/webapp";
javaScriptFramework.cleanCmdBugs();
try {
String[] cmdString = {env.getCmdPath() + "/sencha",
"-d",
"-sdk=" + sdkPath,
"compile",
"-classpath=" +
adaptrexSdkPath + "/src",
"exclude","-all",
"and","include","-r","-f",dependencyFile,
"and","exclude","-t","core",
"and","include","-na","Adaptrex.override",
"and","exclude","-f",dependencyFile,
"and","concat",webappSrcAbsolutePath + "/adaptrex/" + sdkFolder + "/bootstrap-debug.js",
"and","concat","-compress",webappSrcAbsolutePath + "/adaptrex/" + sdkFolder + "/bootstrap.js"
};
ProcessBuilder processBuilder = new ProcessBuilder(cmdString);
processBuilder.redirectErrorStream();
Process cmd = processBuilder.start();
Tools.StreamGobbler gobbler = new Tools.StreamGobbler(cmd.getInputStream());
gobbler.start();
cmd.waitFor();
String compileOutput = gobbler.getGobblerOutput();
if (compileOutput.contains("[ERR]")) {
logService.log(Log.ERROR, "Unspecified Error", compileOutput);
return false;
}
} catch (Exception e) {
logService.log(Log.ERROR, "Error: " + e.getClass().getName(), e.getMessage());
return false;
} finally {
javaScriptFramework.restoreCmdBugs();
}
logService.log(Log.SUCCESS, "Created bootstrap for " + adaptrexJS.getFolderName() +
" and " + javaScriptFramework.getFolderName());
return true;
}
@Override
public boolean compileWebapp(Webapp webapp) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean compilePage(Webapp webapp, Page page) {
// TODO Auto-generated method stub
return false;
}
}