/*
* ###
* Framework Web Archive
*
* Copyright (C) 1999 - 2012 Photon Infotech Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ###
*/
package com.photon.phresco.framework.actions.applications;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.codehaus.plexus.util.cli.CommandLineException;
import org.codehaus.plexus.util.cli.Commandline;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionContext;
import com.photon.phresco.commons.AndroidConstants;
import com.photon.phresco.commons.BuildInfo;
import com.photon.phresco.commons.PluginProperties;
import com.photon.phresco.commons.XCodeConstants;
import com.photon.phresco.configuration.Environment;
import com.photon.phresco.exception.PhrescoException;
import com.photon.phresco.framework.PhrescoFrameworkFactory;
import com.photon.phresco.framework.actions.FrameworkBaseAction;
import com.photon.phresco.framework.api.ActionType;
import com.photon.phresco.framework.api.Project;
import com.photon.phresco.framework.api.ProjectAdministrator;
import com.photon.phresco.framework.api.ProjectRuntimeManager;
import com.photon.phresco.framework.commons.ApplicationsUtil;
import com.photon.phresco.framework.commons.DiagnoseUtil;
import com.photon.phresco.framework.commons.FrameworkUtil;
import com.photon.phresco.framework.commons.LogErrorReport;
import com.photon.phresco.framework.commons.PBXNativeTarget;
import com.photon.phresco.model.SettingsInfo;
import com.photon.phresco.model.Technology;
import com.photon.phresco.util.Constants;
import com.photon.phresco.util.IosSdkUtil;
import com.photon.phresco.util.IosSdkUtil.MacSdkType;
import com.photon.phresco.util.TechnologyTypes;
import com.photon.phresco.util.Utility;
import com.phresco.pom.android.AndroidProfile;
import com.phresco.pom.model.Plugin;
import com.phresco.pom.model.PluginExecution;
import com.phresco.pom.model.PluginExecution.Configuration;
import com.phresco.pom.model.PluginExecution.Goals;
import com.phresco.pom.util.AndroidPomProcessor;
import com.phresco.pom.util.PomProcessor;
public class Build extends FrameworkBaseAction {
private static final long serialVersionUID = -9172394838984622961L;
private static final Logger S_LOGGER = Logger.getLogger(Build.class);
private static Boolean debugEnabled = S_LOGGER.isDebugEnabled();
private String showSettings = null;
private String database = null;
private String server = null;
private String email = null;
private String webservice = null;
private String importSql = null;
private String showError = null;
private String hideLog = null;
private String skipTest = null;
private String showDebug = null;
private InputStream fileInputStream;
private String fileName = "";
private String connectionAlive = "false";
private String projectCode = null;
private String sdk = null;
private String target = "";
private String mode = null;
private String androidVersion = null;
private String environments = null;
private String serialNumber = null;
private String proguard = null;
private String projectModule = null;
private String mainClassName = null;
private String jarName = null;
// Iphone deploy option
private String deployTo = "";
private String userBuildName = null;
private String userBuildNumber = null;
// Create profile
private String keystore = null;
private String storepass = null;
private String keypass = null;
private String alias = null;
private boolean profileCreationStatus = false;
private String profileCreationMessage = null;
private String profileAvailable = null;
private String signing = null;
private List<String> databases = null;
private List<String> sqlFiles = null;
private static Map<String, List<String>> projectModuleMap = Collections
.synchronizedMap(new HashMap<String, List<String>>(8));
/* minify */
private String fileType = null;
private String fileorfolder = null;
private String selectedJs = null;
private String jsFinalName = null;
private String browseLocation = null;
private String fileLocation = null;
private static Map<String, String> sqlFolderPathMap = new HashMap<String, String>();
// DbWithSqlFiles
private String DbWithSqlFiles = null;
static {
initDbPathMap();
}
public String view() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.view()");
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
List<BuildInfo> builds = administrator.getBuildInfos(project);
getHttpRequest().setAttribute(REQ_SELECTED_APP_TYPE, project.getProjectInfo().getTechnology().getId());
getHttpRequest().setAttribute(REQ_BUILD, builds);
getHttpRequest().setAttribute(REQ_PROJECT, project);
String techId = project.getProjectInfo().getTechnology().getId();
String readLogFile = "";
boolean tempConnectionAlive = false;
int serverPort = 0;
if (TechnologyTypes.NODE_JS_WEBSERVICE.equals(techId)) {
String serverProtocol = (String) getHttpSession().getAttribute(
projectCode + SESSION_NODEJS_SERVER_PROTOCOL_VALUE);
String serverHost = (String) getHttpSession().getAttribute(
projectCode + SESSION_NODEJS_SERVER_HOST_VALUE);
String serverPortStr = (String) getHttpSession().getAttribute(
projectCode + SESSION_NODEJS_SERVER_PORT_VALUE);
if (serverProtocol == null && serverHost == null && serverPortStr == null) {
String runAgainstInfoEnv = readRunAgainstInfo(projectCode);
if (runAgainstInfoEnv != null && !runAgainstInfoEnv.isEmpty()) {
List<SettingsInfo> settingsInfos = administrator.getSettingsInfos(
Constants.SETTINGS_TEMPLATE_SERVER, projectCode, runAgainstInfoEnv);
if (settingsInfos != null && CollectionUtils.isNotEmpty(settingsInfos)) {
for (SettingsInfo settingsInfo : settingsInfos) {
serverProtocol = settingsInfo.getPropertyInfo(Constants.SERVER_PROTOCOL).getValue();
serverHost = settingsInfo.getPropertyInfo(Constants.SERVER_HOST).getValue();
serverPortStr = settingsInfo.getPropertyInfo(Constants.SERVER_PORT).getValue();
readLogFile = "";
}
}
}
}
if (serverPortStr != null) {
serverPort = Integer.parseInt(serverPortStr);
}
if (serverProtocol != null && serverHost != null && serverPort != 0) {
tempConnectionAlive = DiagnoseUtil.isConnectionAlive(serverProtocol, serverHost, serverPort);
getHttpSession().setAttribute(projectCode + SESSION_NODEJS_SERVER_STATUS, tempConnectionAlive);
}
if (tempConnectionAlive) {
readLogFile = readLogFile(project, READ_LOG_VIEW);
} else {
deleteNodejsLogFile(projectCode);
readLogFile = "";
}
}
if (TechnologyTypes.HTML5_MOBILE_WIDGET.equals(techId) || TechnologyTypes.HTML5_WIDGET.equals(techId)
|| TechnologyTypes.JAVA_WEBSERVICE.equals(techId)
|| TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET.equals(techId)) {
String serverProtocol = (String) getHttpSession().getAttribute(
projectCode + SESSION_JAVA_SERVER_PROTOCOL_VALUE);
String serverHost = (String) getHttpSession()
.getAttribute(projectCode + SESSION_JAVA_SERVER_HOST_VALUE);
String serverPortStr = (String) getHttpSession().getAttribute(
projectCode + SESSION_JAVA_SERVER_PORT_VALUE);
if (serverProtocol == null && serverHost == null && serverPortStr == null) {
String runAgainstInfoEnv = readRunAgainstInfo(projectCode);
if (runAgainstInfoEnv != null && !runAgainstInfoEnv.isEmpty()) {
List<SettingsInfo> settingsInfos = administrator.getSettingsInfos(
Constants.SETTINGS_TEMPLATE_SERVER, projectCode, runAgainstInfoEnv);
if (settingsInfos != null && CollectionUtils.isNotEmpty(settingsInfos)) {
for (SettingsInfo settingsInfo : settingsInfos) {
serverProtocol = settingsInfo.getPropertyInfo(Constants.SERVER_PROTOCOL).getValue();
serverHost = settingsInfo.getPropertyInfo(Constants.SERVER_HOST).getValue();
serverPortStr = settingsInfo.getPropertyInfo(Constants.SERVER_PORT).getValue();
readLogFile = "";
}
}
}
}
if (serverPortStr != null) {
serverPort = Integer.parseInt(serverPortStr);
}
if (serverProtocol != null && serverHost != null && serverPort != 0) {
boolean connectionAlive = DiagnoseUtil.isConnectionAlive(serverProtocol, serverHost, serverPort);
if (connectionAlive) {
readLogFile = javaReadLogFile();
} else {
readLogFile = "";
}
getHttpSession().setAttribute(projectCode + SESSION_JAVA_SERVER_STATUS, connectionAlive);
}
}
getHttpRequest().setAttribute(REQ_SERVER_LOG, readLogFile);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.view()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Build view");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_BUILD;
}
public String generateBuild() {
S_LOGGER.debug("Entering Method Build.generateBuild()");
String technology = null;
String from = null;
Project project = null;
List<String> projectModules = null;
String buildNumber = null;
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
project = administrator.getProject(projectCode);
technology = project.getProjectInfo().getTechnology().getId();
from = getHttpRequest().getParameter(REQ_BUILD_FROM);
importSqlFlag(project);
buildNumber = getHttpRequest().getParameter(REQ_DEPLOY_BUILD_NUMBER);
if (DEPLOY.equals(from)) {
BuildInfo buildInfo = administrator.getBuildInfo(project, Integer.parseInt(buildNumber));
List<String> buildInfoEnvs = buildInfo.getEnvironments();
getHttpRequest().setAttribute(BUILD_INFO_ENVS, buildInfoEnvs);
} else {
List<Environment> environments = administrator.getEnvironments(project);
getHttpRequest().setAttribute(REQ_ENVIRONMENTS, environments);
}
// Get xcode targets
if (TechnologyTypes.IPHONES.contains(technology)) {
List<PBXNativeTarget> xcodeConfigs = ApplicationsUtil.getXcodeConfiguration(projectCode);
for (PBXNativeTarget xcodeConfig : xcodeConfigs) {
S_LOGGER.debug("Iphone technology terget name" + xcodeConfig.getName());
}
getHttpRequest().setAttribute(REQ_XCODE_CONFIGS, xcodeConfigs);
// get list of sdks
List<String> iphoneSdks = IosSdkUtil.getMacSdks(MacSdkType.iphoneos);
iphoneSdks.addAll(IosSdkUtil.getMacSdks(MacSdkType.iphonesimulator));
iphoneSdks.addAll(IosSdkUtil.getMacSdks(MacSdkType.macosx));
getHttpRequest().setAttribute(REQ_IPHONE_SDKS, iphoneSdks);
}
// get has signing info from android pom
if (TechnologyTypes.ANDROIDS.contains(technology)) {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separatorChar);
builder.append(POM_XML);
File pomPath = new File(builder.toString());
AndroidPomProcessor processor = new AndroidPomProcessor(pomPath);
if (pomPath.exists() && processor.hasSigning()) {
getHttpRequest().setAttribute(REQ_ANDROID_HAS_SIGNING, true);
} else {
getHttpRequest().setAttribute(REQ_ANDROID_HAS_SIGNING, false);
}
}
projectModules = projectModuleMap.get(projectCode);
if (CollectionUtils.isEmpty(projectModules)) {
projectModules = getWarProjectModules(projectCode);
projectModuleMap.put(projectCode, projectModules);
}
if (TechnologyTypes.JAVA_STANDALONE.equals(technology)) {
getValueFromJavaStdAlonePom();
}
if (TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET.equals(technology) ||
TechnologyTypes.HTML5_JQUERY_MOBILE_WIDGET.equals(technology) ||
TechnologyTypes.HTML5_MOBILE_WIDGET.equals(technology) ||
TechnologyTypes.HTML5_WIDGET.equals(technology)){
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separatorChar);
builder.append(POM_XML);
File pomPath = new File(builder.toString());
PomProcessor processor = new PomProcessor(pomPath);
com.phresco.pom.model.Plugin.Configuration pluginConfig = processor.getPlugin(MINIFY_PLUGIN_GROUPID,MINIFY_PLUGIN_ARTFACTID).getConfiguration();
List<Element> elements = pluginConfig.getAny();
for (Element element : elements) {
includesFiles(element);
}
}
} catch (Exception e) {
S_LOGGER.error("Entered into catch block of Build.generateBuild()" + FrameworkUtil.getStackTraceAsString(e));
}
if (CollectionUtils.isNotEmpty(projectModules)) {
getHttpRequest().setAttribute(REQ_PROJECT_MODULES, projectModules);
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_PROJECT, project);
getHttpRequest().setAttribute(REQ_BUILD_FROM, from);
getHttpRequest().setAttribute(REQ_TECHNOLOGY, technology);
getHttpRequest().setAttribute(REQ_DEPLOY_BUILD_NUMBER, buildNumber);
return APP_GENERATE_BUILD;
}
private void includesFiles(Element element) {
try {
Map<String, String> map = new HashMap<String, String>();
String opFileLoc = "";
if (POM_AGGREGATIONS.equals(element.getNodeName())){
NodeList aggregationList = element.getElementsByTagName(POM_AGGREGATION);
for (int i = 0; i < aggregationList.getLength(); i++) {
Element childNode = (Element) aggregationList.item(i);
NodeList includeList = childNode.getElementsByTagName(POM_INCLUDES).item(0).getChildNodes();
StringBuilder sb = new StringBuilder();
String sep = "";
for (int j = 0; j < includeList.getLength()-1; j++) {
Element include = (Element) includeList.item(j);
String file = include.getTextContent().substring(include.getTextContent().lastIndexOf("/")+1);
sb.append(sep);
sb.append(file);
sep = ",";
}
Element outputElement = (Element) childNode.getElementsByTagName(POM_OUTPUT).item(0);
String opFileName = outputElement.getTextContent().substring(
outputElement.getTextContent().lastIndexOf("/")+1);
String compressName = opFileName.substring(0, opFileName.indexOf("."));
map.put(compressName, sb.toString());
opFileLoc = outputElement.getTextContent().substring(0,
outputElement.getTextContent().lastIndexOf("/")+1);
getHttpRequest().setAttribute(REQ_MINIFY_MAP, map);
}
opFileLoc = opFileLoc.replace(MINIFY_OUTPUT_DIRECTORY, projectCode);
getHttpRequest().setAttribute(REQ_FILE_LOC, opFileLoc);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String builds() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.builds()");
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Map<String, Object> sessionMap = ActionContext.getContext().getSession();
Project project = administrator.getProject(projectCode);
List<BuildInfo> builds = administrator.getBuildInfos(project);
getHttpRequest().setAttribute(REQ_BUILD, builds);
getHttpRequest().setAttribute(REQ_PROJECT, project);
sessionMap.remove(SESSION_PROPERTY_INFO_LIST);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.builds()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Getting builds info");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_BUILDS;
}
public String build() {
S_LOGGER.debug("Entering Method Build.build()");
try {
ActionType actionType = null;
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
String technology = project.getProjectInfo().getTechnology().getId();
Map<String, String> settingsInfoMap = new HashMap<String, String>(2);
if(TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET.equals(technology) ||
TechnologyTypes.HTML5_JQUERY_MOBILE_WIDGET.equals(technology) ||
TechnologyTypes.HTML5_MOBILE_WIDGET.equals(technology) ||
TechnologyTypes.HTML5_WIDGET.equals(technology)){
minification();
}
if (StringUtils.isNotEmpty(environments)) {
settingsInfoMap.put(ENVIRONMENT_NAME, environments);
}
if (StringUtils.isNotEmpty(userBuildName)) {
settingsInfoMap.put(BUILD_NAME, userBuildName);
}
if (StringUtils.isNotEmpty(userBuildNumber)) {
settingsInfoMap.put(BUILD_NUMBER, userBuildNumber);
}
if (StringUtils.isNotEmpty(androidVersion)) {
settingsInfoMap.put(AndroidConstants.ANDROID_VERSION_MVN_PARAM, androidVersion);
}
if (TechnologyTypes.JAVA_STANDALONE.contains(technology)) {
settingsInfoMap.put(MAINCLASSNAME, mainClassName);
settingsInfoMap.put(JARNAME, jarName);
}
if (TechnologyTypes.IPHONES.contains(technology)) {
settingsInfoMap.put(IPHONE_SDK, sdk);
settingsInfoMap.put(IPHONE_CONFIGURATION, mode);
settingsInfoMap.put(IPHONE_TARGET_NAME, target);
if (TechnologyTypes.IPHONE_HYBRID.equals(technology)) {
settingsInfoMap.put(IPHONE_PLISTFILE, XCodeConstants.HYBRID_PLIST);
settingsInfoMap.put(ENCRYPT, FALSE);
} else if (TechnologyTypes.IPHONE_NATIVE.equals(technology)) {
settingsInfoMap.put(IPHONE_PLISTFILE, XCodeConstants.NATIVE_PLIST);
settingsInfoMap.put(ENCRYPT, TRUE);
}
}
if (TechnologyTypes.ANDROIDS.contains(technology)) {
actionType = ActionType.MOBILE_COMMON_COMMAND;
actionType.setSkipTest(true);
actionType.setProfileId("");
if (StringUtils.isNotEmpty(signing) && StringUtils.isNotEmpty(profileAvailable)) {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separatorChar);
builder.append(POM_XML);
File pomPath = new File(builder.toString());
AndroidPomProcessor processor = new AndroidPomProcessor(pomPath);
if (pomPath.exists() && processor.hasSigning()) {
actionType.setProfileId(processor.getSigningProfile());
}
}
if (StringUtils.isEmpty(proguard)) {
// if the checkbox is selected value should be set to false
// otherwise true
proguard = TRUE;
}
settingsInfoMap.put(ANDROID_PROGUARD_SKIP, proguard);
// settingsInfoMap.put(SKIPTESTS, TRUE);
} else if (TechnologyTypes.IPHONES.contains(technology)) {
actionType = ActionType.IPHONE_BUILD_UNIT_TEST;
} else {
actionType = ActionType.BUILD;
}
if (StringUtils.isNotEmpty(projectModule)) {
settingsInfoMap.put(MODULE_NAME, projectModule);
actionType.setWorkingDirectory(Utility.getProjectHome() + project.getProjectInfo().getCode()
+ File.separatorChar + projectModule);
} else {
actionType.setWorkingDirectory(null);
}
actionType.setHideLog(Boolean.parseBoolean(hideLog));
actionType.setShowError(Boolean.parseBoolean(showError));
actionType.setShowDebug(Boolean.parseBoolean(showDebug));
actionType.setSkipTest(Boolean.parseBoolean(skipTest));
BufferedReader reader = runtimeManager.performAction(project, actionType, settingsInfoMap, null);
getHttpSession().setAttribute(projectCode + REQ_BUILD, reader);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_BUILD);
} catch (Exception e) {
S_LOGGER.error("Entered into catch block of Build.build()" + FrameworkUtil.getStackTraceAsString(e));
new LogErrorReport(e, "Building ");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_ENVIRONMENT_READER;
}
private File isFileExists(Project project) throws IOException {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
builder.append(File.separator);
builder.append("do_not_checkin");
builder.append(File.separator);
builder.append("temp");
File tempFolder = new File(builder.toString());
if (!tempFolder.exists()) {
tempFolder.mkdir();
}
builder.append(File.separator);
builder.append("importsql.property");
File configFile = new File(builder.toString());
if (!configFile.exists()) {
configFile.createNewFile();
}
return configFile;
}
private void updateImportSqlConfig(Project project) throws PhrescoException {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.checkImportsqlConfig(Project project)");
}
if (debugEnabled) {
S_LOGGER.debug("adaptImportsqlConfig ProjectInfo = " + project.getProjectInfo());
}
InputStream is = null;
FileWriter fw = null;
try {
File configFile = isFileExists(project);
is = new FileInputStream(configFile);
PluginProperties configProps = new PluginProperties();
configProps.load(is);
fw = new FileWriter(configFile);
fw.write("build.import.sql.first.time=" + importSql);
fw.flush();
} catch (FileNotFoundException e) {
throw new PhrescoException(e);
} catch (IOException e) {
throw new PhrescoException(e);
} finally {
try {
if (fw != null) {
fw.close();
}
if (is != null) {
is.close();
}
} catch (IOException e) {
}
}
}
private void importSqlFlag(Project project) throws PhrescoException {
String technology = project.getProjectInfo().getTechnology().getId();
InputStream is = null;
String importSqlElement;
try {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
builder.append(File.separator);
builder.append(DO_NOT_CHECKIN_DIR);
builder.append(File.separator);
builder.append(TEMP_FOLDER);
builder.append(File.separator);
builder.append(IMPORT_PROPERTY);
File configFile = new File(builder.toString());
if (!configFile.exists() && !TechnologyTypes.IPHONES.contains(technology)
|| !TechnologyTypes.ANDROIDS.contains(technology)) {
getHttpRequest().setAttribute(REQ_IMPORT_SQL, Boolean.TRUE.toString());
}
if (configFile.exists()) {
is = new FileInputStream(configFile);
PluginProperties configProps = new PluginProperties();
configProps.load(is);
@SuppressWarnings("rawtypes")
Enumeration enumProps = configProps.keys();
while (enumProps.hasMoreElements()) {
importSqlElement = (String) enumProps.nextElement();
String importSqlProps = (String) configProps.get(importSqlElement);
getHttpRequest().setAttribute(REQ_IMPORT_SQL, importSqlProps);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public String delete() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.delete()");
}
String[] buildNumbers = getHttpRequest().getParameterValues(REQ_BUILD_NUMBER);
if (buildNumbers == null || buildNumbers.length == 0) {
// TODO: Warn the user
}
int[] buildInts = new int[buildNumbers.length];
for (int i = 0; i < buildNumbers.length; i++) {
if (debugEnabled) {
S_LOGGER.debug("To be deleted build numbers " + buildNumbers[i]);
}
buildInts[i] = Integer.parseInt(buildNumbers[i]);
}
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
administrator.deleteBuildInfos(project, buildInts);
getHttpRequest().setAttribute(REQ_PROJECT, project);
addActionMessage(getText(SUCCESS_BUILD_DELETE));
} catch (PhrescoException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.delete()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Deleting build");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return view();
}
public String deploy() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.deploy()");
}
String buildNumber = getHttpRequest().getParameter(REQ_DEPLOY_BUILD_NUMBER);
String simulatorVersion = getHttpRequest().getParameter(REQ_DEPLOY_IPHONE_SIMULATOR_VERSION);
try {
if (StringUtils.isNotEmpty(importSql)) {
configureSqlExecution();
}
ActionType actionType = null;
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
BuildInfo buildInfo = administrator.getBuildInfo(project, Integer.parseInt(buildNumber));
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
Map<String, String> valuesMap = new HashMap<String, String>(2);
String techId = project.getProjectInfo().getTechnology().getId();
if (TechnologyTypes.IPHONES.contains(techId)) {
valuesMap.put(IPHONE_BUILD_NAME, buildInfo.getBuildName());
// if deploy to device is selected we have to pass device deploy
// param as additional param
if (StringUtils.isNotEmpty(deployTo) && deployTo.equals(REQ_IPHONE_SIMULATOR)) {
valuesMap.put(IPHONE_SIMULATOR_VERSION, simulatorVersion);
} else {
valuesMap.put(DEVICE_DEPLOY, TRUE);
}
} else {
valuesMap.put(DEPLOY_BUILD_NAME, buildInfo.getBuildName());
}
if (!(TechnologyTypes.IPHONES.contains(techId) || TechnologyTypes.ANDROIDS.contains(techId) || TechnologyTypes.SHAREPOINT
.equals(techId))
&& StringUtils.isNotEmpty(importSql)) {
valuesMap.put(DEPLOY_IMPORT_SQL, importSql);
}
if (StringUtils.isNotEmpty(environments)) {
valuesMap.put(ENVIRONMENT_NAME, environments);
}
if (TechnologyTypes.SHAREPOINT.equals(project.getProjectInfo().getTechnology().getId())) {
valuesMap.put(DEPLOY_SERVERNAME, buildInfo.getServerName());
}
if (debugEnabled) {
S_LOGGER.debug("To be deployed build name" + buildInfo.getBuildName());
S_LOGGER.debug("To be deployed build location" + buildInfo.getDeployLocation());
S_LOGGER.debug("To be deployed build context" + buildInfo.getContext());
}
Technology technology = project.getProjectInfo().getTechnology();
if (TechnologyTypes.ANDROIDS.contains(technology.getId())) {
String device = getHttpRequest().getParameter(REQ_ANDROID_DEVICE);
if (device.equals(SERIAL_NUMBER)) {
device = serialNumber;
}
if (debugEnabled) {
S_LOGGER.debug("To be deployed Android device name" + device);
}
valuesMap.put(DEPLOY_ANDROID_DEVICE_MODE, device); // TODO: Need
// to be
// changed
valuesMap.put(DEPLOY_ANDROID_EMULATOR_AVD, REQ_ANDROID_DEFAULT);
// valuesMap.put(AndroidConstants.ANDROID_VERSION_MVN_PARAM,
// androidVersion);
}
if (TechnologyTypes.IPHONES.contains(technology) || TechnologyTypes.ANDROIDS.contains(technology)) {
actionType = ActionType.MOBILE_COMMON_COMMAND;
} else {
actionType = ActionType.DEPLOY;
}
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
if (StringUtils.isNotEmpty(buildInfo.getModuleName())) {
builder.append(File.separator);
builder.append(buildInfo.getModuleName());
}
actionType.setWorkingDirectory(builder.toString());
actionType.setHideLog(Boolean.parseBoolean(hideLog));
actionType.setShowError(Boolean.parseBoolean(showError));
actionType.setShowDebug(Boolean.parseBoolean(showDebug));
actionType.setSkipTest(Boolean.parseBoolean(skipTest));
BufferedReader reader = runtimeManager.performAction(project, actionType, valuesMap, null);
getHttpSession().setAttribute(projectCode + REQ_FROM_TAB_DEPLOY, reader);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_FROM_TAB_DEPLOY);
// This is for first time to check import Sql checkbox, and not
// required for the below technologies
if (!(TechnologyTypes.IPHONES.contains(technology) || TechnologyTypes.ANDROIDS.contains(technology) || TechnologyTypes.SHAREPOINT
.equals(technology))) {
updateImportSqlConfig(project);
}
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.deploy()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Deploying");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_ENVIRONMENT_READER;
}
public String deployAndroid() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.deployAndroid()");
}
try {
String buildNumber = getHttpRequest().getParameter(REQ_DEPLOY_BUILD_NUMBER);
if (debugEnabled) {
S_LOGGER.debug("Deploy Android build number" + buildNumber);
}
getHttpRequest().setAttribute("projectCode", projectCode);
getHttpRequest().setAttribute(REQ_DEPLOY_BUILD_NUMBER, buildNumber);
getHttpRequest().setAttribute(REQ_FROM_TAB, REQ_FROM_TAB_DEPLOY);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.deployAndroid()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Deploying android");
}
return APP_DEPLOY_ANDROID;
}
public String deployIphone() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.deployIphone()");
}
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
String buildNumber = getHttpRequest().getParameter(REQ_DEPLOY_BUILD_NUMBER);
BuildInfo buildInfo = administrator.getBuildInfo(project, Integer.parseInt(buildNumber));
boolean createIpa = MapUtils.getBooleanValue(buildInfo.getOptions(), CAN_CREATE_IPA);
boolean deviceDeploy = MapUtils.getBooleanValue(buildInfo.getOptions(), DEPLOY_TO_DEVICE);
getHttpRequest().setAttribute(REQ_DEPLOY_BUILD_NUMBER, buildNumber);
if (debugEnabled) {
S_LOGGER.debug("Deploy IPhone build number" + buildNumber);
}
getHttpRequest().setAttribute("projectCode", projectCode);
getHttpRequest().setAttribute(REQ_HIDE_DEPLOY_TO_SIMULATOR,
new Boolean(!createIpa && !deviceDeploy ? true : false));
getHttpRequest().setAttribute(REQ_HIDE_DEPLOY_TO_DEVICE,
new Boolean(createIpa && deviceDeploy ? true : false));
getHttpRequest().setAttribute(REQ_FROM_TAB, REQ_FROM_TAB_DEPLOY);
// get list of sdk versions
List<String> iphoneSimulatorSdks = IosSdkUtil.getMacSdksVersions(MacSdkType.iphonesimulator);
getHttpRequest().setAttribute(REQ_IPHONE_SIMULATOR_SDKS, iphoneSimulatorSdks);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.Iphone()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Deploying Iphone");
}
return APP_DEPLOY_IPHONE;
}
public String download() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.download()");
}
String buildNumber = getHttpRequest().getParameter(REQ_DEPLOY_BUILD_NUMBER);
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
builder.append(File.separator);
String moduleName = administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getModuleName();
if (StringUtils.isNotEmpty(moduleName)) {
builder.append(moduleName);
builder.append(File.separator);
}
builder.append(BUILD_DIR);
builder.append(File.separator);
builder.append(administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName());
if (debugEnabled) {
S_LOGGER.debug("Download build number " + buildNumber + " Download location " + builder.toString());
}
if (TechnologyTypes.IPHONES.contains(project.getProjectInfo().getTechnology().getId())) {
String path = administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getDeliverables();
fileInputStream = new FileInputStream(new File(path));
fileName = administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName();
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
} else {
fileInputStream = new FileInputStream(new File(builder.toString()));
fileName = administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName();
}
return SUCCESS;
} catch (FileNotFoundException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.download()" + e);
}
new LogErrorReport(e, "Download builds");
} catch (Exception e1) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.download()" + FrameworkUtil.getStackTraceAsString(e1));
}
new LogErrorReport(e1, "Download builds");
}
return view();
}
public String downloadIpa() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.downloadIPA()");
}
String buildNumber = getHttpRequest().getParameter(REQ_DEPLOY_BUILD_NUMBER);
try {
ActionType actionType = ActionType.IPHONE_DOWNLOADIPA_COMMAND;
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
Project project = administrator.getProject(projectCode);
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
builder.append(File.separator);
builder.append(BUILD_DIR);
builder.append(File.separator);
builder.append(administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName());
String buildName = administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName();
String buildNameSubstring = buildName.substring(0, buildName.lastIndexOf("/"));
String appBuildName = buildNameSubstring.substring(buildNameSubstring.lastIndexOf("/") + 1);
Map<String, String> valuesMap = new HashMap<String, String>(2);
valuesMap.put("application.name", projectCode);
valuesMap
.put("app.path", administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName());
valuesMap.put("build.name", appBuildName);
BufferedReader reader = runtimeManager.performAction(project, actionType, valuesMap, null);
while (reader.readLine() != null) {
System.out.println("reader.readLine() ======> " + reader.readLine());
}
String ipaPath = administrator.getBuildInfo(project, Integer.parseInt(buildNumber)).getBuildName();
ipaPath = ipaPath.substring(0, ipaPath.lastIndexOf("/")) + FILE_SEPARATOR + projectCode + ".ipa";
fileInputStream = new FileInputStream(new File(ipaPath));
fileName = projectCode + ".ipa";
return SUCCESS;
} catch (FileNotFoundException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.download()" + e);
}
new LogErrorReport(e, "Download builds");
} catch (Exception e1) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.downloadIpa()"
+ FrameworkUtil.getStackTraceAsString(e1));
}
new LogErrorReport(e1, "Download buildsIPA");
}
return view();
}
public String NodeJSRunAgainstSource() throws PhrescoException {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.runAgainstSource()");
String serverHost = null;
String serverProtocol = null;
int serverPort = 0;
try {
if (StringUtils.isNotEmpty(importSql)) {
configureSqlExecution();
}
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
String projectCode = project.getProjectInfo().getCode();
String importSQL = (String) getHttpRequest().getParameter(IMPORT_SQL);
getHttpSession().setAttribute(projectCode + SESSION_NODEJS_IMPORTSQL_VALUE, importSQL);
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
List<SettingsInfo> serverDetails = administrator.getSettingsInfos(Constants.SETTINGS_TEMPLATE_SERVER,
projectCode, environments);
for (SettingsInfo settingsInfo : serverDetails) {
serverHost = settingsInfo.getPropertyInfo(Constants.SERVER_HOST).getValue();
serverProtocol = settingsInfo.getPropertyInfo(Constants.SERVER_PROTOCOL).getValue();
serverPort = Integer.parseInt(settingsInfo.getPropertyInfo(Constants.SERVER_PORT).getValue());
}
boolean tempConnectionAlive = DiagnoseUtil.isConnectionAlive(serverProtocol, serverHost, serverPort);
if (!tempConnectionAlive) {
deleteNodejsLogFile(projectCode);
}
Map<String, String> valueMap = new HashMap<String, String>(2);
valueMap.put(ENVIRONMENT_NAME, environments);
valueMap.put(IMPORT_SQL, importSQL);
ActionType nodeStart = ActionType.START_SERVER;
BufferedReader reader = runtimeManager.performAction(project, nodeStart, valueMap, null);
String line;
line = reader.readLine();
while (!line.startsWith("[INFO] server started") && !line.startsWith("[INFO] server startup failed")) {
line = reader.readLine();
}
waitForTime(2);
readLogFile(project, "");
tempConnectionAlive = DiagnoseUtil.isConnectionAlive(serverProtocol, serverHost, serverPort);
getHttpSession().setAttribute(projectCode + SESSION_NODEJS_SERVER_PROTOCOL_VALUE, serverProtocol);
getHttpSession().setAttribute(projectCode + SESSION_NODEJS_SERVER_HOST_VALUE, serverHost);
getHttpSession().setAttribute(projectCode + SESSION_NODEJS_SERVER_PORT_VALUE,
new Integer(serverPort).toString());
getHttpSession().setAttribute(projectCode + SESSION_NODEJS_SERVER_STATUS, tempConnectionAlive);
getHttpSession().setAttribute(projectCode + SESSION_ENV_NAME, environments);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.runAgainstSource()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(new PhrescoException("Server Startup Failed"), "NodeJS run against source");
}
return APP_ENVIRONMENT_READER;
}
public String restartNodeJSServer() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.restartNodeJSServer()");
stopNodeJSServer();
startNodeJSServer();
return APP_ENVIRONMENT_READER;
}
public String startNodeJSServer() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.startNodeJSServer()");
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
String importSql = (String) getHttpSession().getAttribute(projectCode + SESSION_NODEJS_IMPORTSQL_VALUE);
environments = (String) getHttpSession()
.getAttribute(project.getProjectInfo().getCode() + SESSION_ENV_NAME);
if (debugEnabled) {
S_LOGGER.debug("startNodeJSServer Environment name " + environments);
}
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
Map<String, String> valueMap = new HashMap<String, String>(2);
valueMap.put(ENVIRONMENT_NAME, environments);
valueMap.put(IMPORT_SQL, importSql);
ActionType nodeStart = ActionType.START_SERVER;
BufferedReader reader = runtimeManager.performAction(project, nodeStart, valueMap, null);
String line;
line = reader.readLine();
while (!line.startsWith("[INFO] server started") && !line.startsWith("[INFO] server startup failed")) {
line = reader.readLine();
}
readLogFile(project, "");
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.startNodeJSServer()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Start nodejs server");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_ENVIRONMENT_READER;
}
public String stopNodeJSServer() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.stopNodeJSServer()");
try {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separator);
builder.append(FOLDER_DOT_PHRESCO);
builder.append(File.separator);
builder.append(RUN_AGS_ENV_FILE);
File envFile = new File(builder.toString());
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
ActionType nodeStop = ActionType.STOP_SERVER;
BufferedReader reader = runtimeManager.performAction(project, nodeStop, null, null);
String line;
line = reader.readLine();
while (!line.startsWith("[INFO] BUILD SUCCESS")) {
line = reader.readLine();
}
readLogFile(project, "");
if (envFile.exists()) {
envFile.delete();
}
getHttpSession().removeAttribute(project.getProjectInfo().getCode() + SESSION_NODEJS_SERVER_STATUS);
getHttpSession().removeAttribute(project.getProjectInfo().getCode() + SESSION_NODEJS_IMPORTSQL_VALUE);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_PROJECT, project);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.stopNodeJSServer()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Stop nodejs server");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_ENVIRONMENT_READER;
}
// Second parameter is used to specify this method should return only string
// to view method
public String readLogFile(Project project, String fromNodejs) {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
builder.append(File.separator);
builder.append(DO_NOT_CHECKIN_DIR);
builder.append(File.separator);
builder.append(LOG_DIR);
builder.append(File.separator);
builder.append(LOG_FILE);
BufferedReader reader = null;
StringBuffer contents = new StringBuffer();
try {
File file = new File(builder.toString());
// It executed when file not exist and view method called
if (!file.exists() && fromNodejs.equals(READ_LOG_VIEW)) {
return "";
}
// It executed when file exist and view method called
if (file.exists() && fromNodejs.equals(READ_LOG_VIEW)) {
reader = new BufferedReader(new FileReader(file));
String text = null;
while ((text = reader.readLine()) != null) {
contents.append(text).append(System.getProperty(LINE_SEPERATOR));
}
return contents.toString();
}
// It executed when file not exist and return reader
if (!file.exists()) {
StringReader sb = new StringReader("Server startup failed");
reader = new BufferedReader(sb);
// getHttpSession().setAttribute(REQ_READER, reader);
getHttpSession().setAttribute(projectCode + REQ_READ_LOG_FILE, reader);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_READ_LOG_FILE);
}
// It executed when file existence and return reader
if (file.exists()) {
reader = new BufferedReader(new FileReader(file));
getHttpSession().setAttribute(projectCode + REQ_READ_LOG_FILE, reader);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_READ_LOG_FILE);
}
} catch (FileNotFoundException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.readLogFile()"
+ FrameworkUtil.getStackTraceAsString(e));
}
} catch (IOException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.readLogFile()"
+ FrameworkUtil.getStackTraceAsString(e));
}
}
return null;
}
public String runAgainstSource() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.javaRunAgainstSource()");
try {
if (StringUtils.isNotEmpty(importSql)) {
configureSqlExecution();
}
String importSQL = (String) getHttpRequest().getParameter(IMPORT_SQL);
handleRunAgainstSrc(environments, importSQL);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.javaRunAgainstSource()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Java run against source");
}
return APP_ENVIRONMENT_READER;
}
private void handleRunAgainstSrc(String environments, String importSQL) {
String serverHost = "";
String serverProtocol = "";
int serverPort = 0;
BufferedReader fileReader = null;
String line = "";
try {
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
getHttpSession().setAttribute(projectCode + IMPORT_SQL, importSQL);
Map<String, String> javaMap = new HashMap<String, String>(2);
List<SettingsInfo> serverDetails = administrator.getSettingsInfos(Constants.SETTINGS_TEMPLATE_SERVER,
projectCode, environments);
for (SettingsInfo settingsInfo : serverDetails) {
serverHost = settingsInfo.getPropertyInfo(Constants.SERVER_HOST).getValue();
serverProtocol = settingsInfo.getPropertyInfo(Constants.SERVER_PROTOCOL).getValue();
serverPort = Integer.parseInt(settingsInfo.getPropertyInfo(Constants.SERVER_PORT).getValue());
break;
}
try {
compileProject();
fileReader = new BufferedReader(new FileReader(getLogFilePath()));
line = fileReader.readLine();
while (line != null && !line.startsWith("[INFO] BUILD FAILURE")) {
line = fileReader.readLine();
}
} finally {
if (fileReader != null) {
fileReader.close();
}
}
if (line != null && line.startsWith("[INFO] BUILD FAILURE")) {
getHttpSession().setAttribute(projectCode + REQ_JAVA_START,
new BufferedReader(new FileReader(getLogFilePath())));
} else {
// TODO: delete the server.log and create empty server.log file
deleteLogFile();
javaMap.put(ENVIRONMENT_NAME, environments);
javaMap.put(IMPORT_SQL, importSQL);
ActionType serverStart = ActionType.START_SERVER;
BufferedReader reader = runtimeManager.performAction(project, serverStart, javaMap, null);
getHttpSession().setAttribute(projectCode + REQ_JAVA_START, reader);
}
boolean connectionAlive = DiagnoseUtil.isConnectionAlive(serverProtocol, serverHost, serverPort);
getHttpSession().setAttribute(projectCode + SESSION_JAVA_SERVER_PROTOCOL_VALUE, serverProtocol);
getHttpSession().setAttribute(projectCode + SESSION_JAVA_SERVER_HOST_VALUE, serverHost);
getHttpSession().setAttribute(projectCode + SESSION_JAVA_SERVER_PORT_VALUE,new Integer(serverPort).toString());
getHttpSession().setAttribute(projectCode + SESSION_JAVA_SERVER_STATUS, connectionAlive);
getHttpSession().setAttribute(projectCode + SESSION_ENV_NAME, environments);
getHttpSession().setAttribute(projectCode + IMPORT_SQL, importSQL);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_JAVA_START);
} catch (Exception e) {
e.printStackTrace();
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.javaRunAgainstSource()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Java run against source");
}
}
private BufferedReader compileProject() {
BufferedReader reader = null;
try {
Commandline cl = new Commandline("mvn clean compile");
String projectDir = Utility.getProjectHome() + projectCode;
cl.setWorkingDirectory(projectDir);
Process process = cl.execute();
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
writeLog(reader);
} catch (CommandLineException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.installProject()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Java run against source");
}
return reader;
}
private void writeLog(BufferedReader in) {
String line = null;
FileWriter fstream = null;
BufferedWriter out = null;
try {
String logFolderPath = getLogFolderPath();
File logfolder = new File(logFolderPath);
if (!logfolder.exists()) {
logfolder.mkdirs();
}
fstream = new FileWriter(getLogFilePath());
out = new BufferedWriter(fstream);
while ((line = in.readLine()) != null) {
out.write(line + "\n");
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (fstream != null) {
fstream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void deleteLogFile() throws IOException {
File logFile = new File(getLogFilePath());
if (logFile.isFile() && logFile.exists()) {
boolean delete = logFile.delete();
}
if (!logFile.exists()) {
logFile.createNewFile();
}
}
private String getLogFolderPath() {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separator);
builder.append(DO_NOT_CHECKIN_DIR);
builder.append(File.separator);
builder.append(LOG_DIR);
return builder.toString();
}
private String getLogFilePath() {
StringBuilder builder = new StringBuilder(getLogFolderPath());
builder.append(File.separator);
builder.append(LOG_FILE);
return builder.toString();
}
public String restartServer() {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.restartServer()");
stopServer();
waitForTime(10);
startServer();
return APP_ENVIRONMENT_READER;
}
public String startServer() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Build.startNodeJSServer()");
}
try {
environments = (String) getHttpSession().getAttribute(projectCode + SESSION_ENV_NAME);
String importSql = (String) getHttpSession().getAttribute(projectCode + IMPORT_SQL);
handleRunAgainstSrc(environments, importSql);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.javaStartServer()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Java start server");
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS);
return APP_ENVIRONMENT_READER;
}
public String stopServer() {
handleJavaStop(false);
return APP_ENVIRONMENT_READER;
}
private void handleJavaStop(boolean readData) {
if (debugEnabled)
S_LOGGER.debug("Entering Method Build.javaStopServer()");
try {
ProjectRuntimeManager runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager();
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
environments = (String) getHttpSession().getAttribute(projectCode + SESSION_ENV_NAME);
if (environments == null) {
environments = readRunAgainstInfo(projectCode);
}
Map<String, String> javaMap = new HashMap<String, String>(2);
javaMap.put(ENVIRONMENT_NAME, environments);
ActionType serverStop = ActionType.STOP_SERVER;
BufferedReader reader = runtimeManager.performAction(project, serverStop, javaMap, null);
if (readData) {
String line = null;
while ((line = reader.readLine()) != null) {
}
}
getHttpSession().removeAttribute(project.getProjectInfo().getCode() + SESSION_JAVA_SERVER_STATUS);
getHttpSession().removeAttribute(project.getProjectInfo().getCode() + IMPORT_SQL);
getHttpSession().setAttribute(projectCode + REQ_JAVA_STOP, reader);
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_JAVA_STOP);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.javaStopServer()"
+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Java stop server");
}
}
public String javaReadLogFile() throws InterruptedException {
String logMsg = "";
BufferedReader input = null;
try {
File logFile = null;
File dir = new File(javaLogFileDir());
if (dir.isDirectory()) {
for (File child : dir.listFiles()) {
if (child.getName().startsWith(CATALINA_FILE_START_NAME)) {
logFile = child;
input = new BufferedReader(new FileReader(logFile));
String line = null;
while ((line = input.readLine()) != null) {
logMsg = logMsg + line + "<br/>";
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (input != null) {
input.close();
}
} catch (IOException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.javaReadLogFile()"
+ FrameworkUtil.getStackTraceAsString(e));
}
}
}
return logMsg;
}
public String javaLogFileDir() {
StringBuilder builder = null;
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
builder = new StringBuilder(Utility.getProjectHome());
Project project = administrator.getProject(projectCode);
builder.append(project.getProjectInfo().getCode());
builder.append(File.separator);
builder.append(DO_NOT_CHECKIN_DIR);
builder.append(File.separator);
builder.append(TARGET_DIR);
builder.append(File.separator);
builder.append(TOMCAT_DIR);
builder.append(File.separator);
builder.append(TOMCAT_LOGS_DIR);
builder.append(File.separator);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Build.javaLogFileDir()"
+ FrameworkUtil.getStackTraceAsString(e));
}
}
return builder.toString();
}
public File getLogFile(File dir) {
waitForTime(1);
File javaReadLogFile = null;
for (File child : dir.listFiles()) {
if (child.getName().startsWith(CATALINA_FILE_START_NAME)) {
waitForTime(5);
javaReadLogFile = child;
}
}
return javaReadLogFile;
}
public void deleteLogFile(File dir) {
for (File child : dir.listFiles()) {
child.delete();
}
dir.delete();
}
public void waitForTime(int waitSec) {
long startTime = 0;
startTime = new Date().getTime();
while (new Date().getTime() < startTime + waitSec * 1000) {
// Dont do anything for some seconds. It waits till the log is
// written to file
}
}
private String readRunAgainstInfo(String projectCode) throws PhrescoException {
String env = null;
BufferedReader reader = null;
try {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separator);
builder.append(FOLDER_DOT_PHRESCO);
builder.append(File.separator);
builder.append(RUN_AGS_ENV_FILE);
File envFile = new File(builder.toString());
if (envFile.exists()) {
reader = new BufferedReader(new FileReader(builder.toString()));
env = reader.readLine();
}
} catch (IOException e) {
throw new PhrescoException(e);
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
throw new PhrescoException(e);
}
}
return env;
}
private void deleteNodejsLogFile(String projectcode) {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectcode);
builder.append(File.separator);
builder.append(DO_NOT_CHECKIN_DIR);
builder.append(File.separator);
builder.append(LOG_DIR);
builder.append(File.separator);
builder.append(LOG_FILE);
File nodejsLogFile = new File(builder.toString());
if (nodejsLogFile.exists()) {
nodejsLogFile.delete();
}
}
private void getValueFromJavaStdAlonePom() throws PhrescoException {
try {
File file = new File(Utility.getProjectHome() + File.separator + projectCode + File.separator + POM_FILE);
PomProcessor pomProcessor = new PomProcessor(file);
String finalName = pomProcessor.getFinalName();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document document = dBuilder.parse(file);
document.getDocumentElement().normalize();
NodeList nodeList = document.getElementsByTagName(JAVA_POM_MANIFEST);
String mainClassValue = "";
for (int temp = 0; temp < nodeList.getLength(); temp++) {
Node node = nodeList.item(temp);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element mainClassElement = (Element) node;
mainClassValue = mainClassElement.getElementsByTagName(JAVA_POM_MAINCLASS).item(0).getTextContent();
break;
}
}
getHttpRequest().setAttribute(FINAL_NAME, finalName);
getHttpRequest().setAttribute(MAIN_CLASS_VALUE, mainClassValue);
} catch (JAXBException e) {
throw new PhrescoException(e);
} catch (IOException e) {
throw new PhrescoException(e);
} catch (ParserConfigurationException e) {
throw new PhrescoException(e);
} catch (SAXException e) {
throw new PhrescoException(e);
}
}
/* minification */
public String jsFileBrowser() {
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
String technology = project.getProjectInfo().getTechnology().getId();
getHttpRequest().setAttribute(REQ_TECHNOLOGY, technology);
getHttpRequest().setAttribute(FILE_TYPES, fileType);
getHttpRequest().setAttribute(FILE_BROWSE, fileorfolder);
String projectLocation = Utility.getProjectHome() + projectCode;
getHttpRequest().setAttribute(REQ_PROJECT_LOCATION, projectLocation.replace(File.separator, FORWARD_SLASH));
getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode);
getHttpRequest().setAttribute(REQ_BUILD_FROM, getHttpRequest().getParameter(REQ_BUILD_FROM));
getHttpRequest().setAttribute(REQ_COMPRESS_NAME,getHttpRequest().getParameter(REQ_COMPRESS_NAME));
getHttpRequest().setAttribute(REQ_SELECTED_FILES,getHttpRequest().getParameter(REQ_SELECTED_FILES));
} catch (Exception e){
S_LOGGER.error("Entered into catch block of Build.jsFileBrowser()" + FrameworkUtil.getStackTraceAsString(e));
}
return SUCCESS;
}
public String selectJsFilesToMinify() {
try {
String[] jsFiles = getHttpRequest().getParameterValues(REQ_CHECKED_FILE_LIST);
StringBuilder sb = new StringBuilder();
String sep = "";
for (String jsFile : jsFiles) {
sb.append(sep);
sb.append(jsFile);
sep = ",";
}
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
String techId = project.getProjectInfo().getTechnology().getId();
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
getHttpRequest().setAttribute(REQ_BUILD_FROM, getHttpRequest().getParameter(REQ_BUILD_FROM));
getHttpRequest().setAttribute(REQ_TECHNOLOGY, techId);
setSelectedJs(sb.toString());
} catch (Exception e){
S_LOGGER.error("Entered into catch block of Build.selectJsFilesToMinify()" + FrameworkUtil.getStackTraceAsString(e));
}
return SUCCESS;
}
private void minification(){
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(project.getProjectInfo().getCode());
File systemPath = new File(builder.toString() + File.separator + POM_FILE);
PomProcessor processor = new PomProcessor(systemPath);
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
List<Element> configList = new ArrayList<Element>();
String[] jsFileNames = getHttpRequest().getParameterValues(REQ_SELECTED_FILE_NAMES);
if(!ArrayUtils.isEmpty(jsFileNames)) {
configList.add(createElement(doc, POM_SOURCEDIR, POM_SOURCE_DIRECTORY));
configList.add(createElement(doc, POM_OUTPUTDIR, POM_OUTPUT_DIRECTORY));
configList.add(createElement(doc, POM_FORCE, POM_VALUE_TRUE));
configList.add(createElement(doc, POM_JS_WARN, POM_VALUE_FALSE));
configList.add(createElement(doc, POM_NO_SUFFIX, POM_VALUE_TRUE));
Element excludesElement = doc.createElement(POM_EXCLUDES);
appendChildElement(doc, excludesElement, POM_EXCLUDE, POM_EXCLUDE_CSS);
appendChildElement(doc, excludesElement, POM_EXCLUDE, POM_EXCLUDE_JS);
configList.add(excludesElement);
Element aggregationsElement = doc.createElement(POM_AGGREGATIONS);
for (String jsFileName : jsFileNames) {
String csvJsFile = getHttpRequest().getParameter(jsFileName);
List<String> jsFiles = Arrays.asList(csvJsFile.split("\\s*,\\s*"));
Element agrigationElement = appendChildElement(doc, aggregationsElement, POM_AGGREGATION, null);
appendChildElement(doc, agrigationElement, POM_INPUTDIR, POM_INPUT_DIRECTORY);
Element includesElement = doc.createElement(POM_INCLUDES);
for (String jsFile : jsFiles) {
appendChildElement(doc, includesElement, POM_INCLUDE, "**/" + jsFile);
agrigationElement.appendChild(includesElement);
}
String[] splitted = fileLocation.split(projectCode);
String minificationDir = "";
minificationDir = splitted[1];
appendChildElement(doc, agrigationElement, POM_OUTPUT, MINIFY_OUTPUT_DIRECTORY + minificationDir + jsFileName + MINIFY_FILE_EXT);
}
configList.add(aggregationsElement);
} else {
configList.add(createElement(doc, POM_SKIP, POM_VALUE_TRUE));
}
processor.addConfiguration(MINIFY_PLUGIN_GROUPID, MINIFY_PLUGIN_ARTFACTID, configList);
processor.save();
} catch (Exception e) {
S_LOGGER.error("Entered into catch block of Build.minification()"
+ FrameworkUtil.getStackTraceAsString(e));
new LogErrorReport(e, "Building ");
}
}
private Element createElement(Document doc, String elementName, String textContent) {
Element element = doc.createElement(elementName);
if (StringUtils.isNotEmpty(textContent)) {
element.setTextContent(textContent);
}
return element;
}
private Element appendChildElement(Document doc, Element parent, String elementName, String textContent) {
Element childElement = createElement(doc, elementName, textContent);
parent.appendChild(childElement);
return childElement;
}
/* minification end */
public String advancedBuildSettings() {
S_LOGGER.debug("Entering Method Build.advancedBuildSettings()");
AndroidProfile androidProfile = null;
try {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separatorChar);
builder.append(POM_XML);
File pomPath = new File(builder.toString());
AndroidPomProcessor processor = new AndroidPomProcessor(pomPath);
if (pomPath.exists() && processor.hasSigning()) {
String signingProfileid = processor.getSigningProfile();
androidProfile = processor.getProfileElement(signingProfileid);
}
} catch (Exception e) {
S_LOGGER.error("Entered into catch block of Build.advancedBuildSettings()"
+ FrameworkUtil.getStackTraceAsString(e));
}
getHttpRequest().setAttribute("projectCode", projectCode);
getHttpRequest().setAttribute(REQ_ANDROID_PROFILE_DET, androidProfile);
getHttpRequest().setAttribute(REQ_FROM_TAB, REQ_FROM_TAB_DEPLOY);
return SUCCESS;
}
public String createAndroidProfile() throws IOException {
S_LOGGER.debug("Entering Method Build.createAndroidProfile()");
boolean hasSigning = false;
try {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
builder.append(File.separatorChar);
builder.append(POM_XML);
File pomPath = new File(builder.toString());
AndroidPomProcessor processor = new AndroidPomProcessor(pomPath);
hasSigning = processor.hasSigning();
String profileId = PROFILE_ID;
String defaultGoal = GOAL_INSTALL;
Plugin plugin = new Plugin();
plugin.setGroupId(ANDROID_PROFILE_PLUGIN_GROUP_ID);
plugin.setArtifactId(ANDROID_PROFILE_PLUGIN_ARTIFACT_ID);
plugin.setVersion(ANDROID_PROFILE_PLUGIN_VERSION);
PluginExecution execution = new PluginExecution();
execution.setId(ANDROID_EXECUTION_ID);
Goals goal = new Goals();
goal.getGoal().add(GOAL_SIGN);
execution.setGoals(goal);
execution.setPhase(PHASE_PACKAGE);
execution.setInherited(TRUE);
AndroidProfile androidProfile = new AndroidProfile();
androidProfile.setKeystore(keystore);
androidProfile.setStorepass(storepass);
androidProfile.setKeypass(keypass);
androidProfile.setAlias(alias);
androidProfile.setVerbose(true);
androidProfile.setVerify(true);
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
List<Element> executionConfig = new ArrayList<Element>();
executionConfig.add(doc.createElement(ELEMENT_ARCHIVE_DIR));
Element removeExistSignature = doc.createElement(ELEMENT_REMOVE_EXIST_SIGN);
Element includeElement = doc.createElement(ELEMENT_INCLUDES);
Element doNotCheckInBuildInclude = doc.createElement(ELEMENT_INCLUDE);
doNotCheckInBuildInclude.setTextContent(ELEMENT_BUILD);
Element doNotCheckinTargetInclude = doc.createElement(ELEMENT_INCLUDE);
doNotCheckinTargetInclude.setTextContent(ELEMENT_TARGET);
includeElement.appendChild(doNotCheckInBuildInclude);
includeElement.appendChild(doNotCheckinTargetInclude);
executionConfig.add(includeElement);
removeExistSignature.setTextContent(TRUE);
executionConfig.add(removeExistSignature);
// verboss
Element verbos = doc.createElement(ELEMENT_VERBOS);
verbos.setTextContent(TRUE);
executionConfig.add(verbos);
// verify
Element verify = doc.createElement(ELEMENT_VERIFY);
verbos.setTextContent(TRUE);
executionConfig.add(verify);
Configuration configValues = new Configuration();
configValues.getAny().addAll(executionConfig);
execution.setConfiguration(configValues);
List<Element> additionalConfigs = new ArrayList<Element>();
processor.setProfile(profileId, defaultGoal, plugin, androidProfile, execution, null,
additionalConfigs);
processor.save();
profileCreationStatus = true;
if (hasSigning) {
profileCreationMessage = getText(PROFILE_UPDATE_SUCCESS);
} else {
profileCreationMessage = getText(PROFILE_CREATE_SUCCESS);
}
} catch (Exception e) {
S_LOGGER.error("Entered into catch block of Build.createAndroidProfile()"
+ FrameworkUtil.getStackTraceAsString(e));
profileCreationStatus = false;
if (hasSigning) {
profileCreationMessage = getText(PROFILE_UPDATE_ERROR);
} else {
profileCreationMessage = getText(PROFILE_CREATE_ERROR);
}
}
return SUCCESS;
}
public String getSqlDatabases() {
String dbtype = "";
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
databases = new ArrayList<String>();
List<SettingsInfo> databaseDetails = administrator.getSettingsInfos(Constants.SETTINGS_TEMPLATE_DB,
projectCode, environments);
if (CollectionUtils.isNotEmpty(databaseDetails)) {
for (SettingsInfo databasedetail : databaseDetails) {
dbtype = databasedetail.getPropertyInfo(Constants.DB_TYPE).getValue();
if (!databases.contains(dbtype)) {
databases.add(dbtype);
}
}
}
} catch (PhrescoException e) {
S_LOGGER.error("Entered into catch block of Build.configSQL()" + FrameworkUtil.getStackTraceAsString(e));
}
return SUCCESS;
}
public String fetchSQLFiles() {
String dbtype = null;
String dbversion = null;
String path = null;
String sqlFileName = null;
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
Project project = administrator.getProject(projectCode);
sqlFiles = new ArrayList<String>();
String techId = project.getProjectInfo().getTechnology().getId();
String selectedDb = getHttpRequest().getParameter("selectedDb");
String sqlPath = sqlFolderPathMap.get(techId);
List<SettingsInfo> databaseDetails = administrator.getSettingsInfos( Constants.SETTINGS_TEMPLATE_DB,
projectCode, environments);
for (SettingsInfo databasedetail : databaseDetails) {
dbtype = databasedetail.getPropertyInfo(Constants.DB_TYPE).getValue();
if (selectedDb.equals(dbtype)) {
dbversion = databasedetail.getPropertyInfo(Constants.DB_VERSION).getValue();
File[] dbSqlFiles = new File(Utility.getProjectHome() + projectCode + sqlPath + selectedDb + File.separator + dbversion).listFiles();
for (int i = 0; i < dbSqlFiles.length; i++) {
sqlFileName = dbSqlFiles[i].getName();
path = sqlPath + selectedDb + FILE_SEPARATOR + dbversion + "#SEP#" + sqlFileName ;
sqlFiles.add(path);
}
}
}
} catch (PhrescoException e) {
S_LOGGER.error("Entered into catch block of Build.getSQLFiles()" + FrameworkUtil.getStackTraceAsString(e));
}
return SUCCESS;
}
private static void initDbPathMap() {
sqlFolderPathMap.put(TechnologyTypes.PHP, "/source/sql/");
sqlFolderPathMap.put(TechnologyTypes.PHP_DRUPAL6, "/source/sql/");
sqlFolderPathMap.put(TechnologyTypes.PHP_DRUPAL7, "/source/sql/");
sqlFolderPathMap.put(TechnologyTypes.NODE_JS_WEBSERVICE, "/source/sql/");
sqlFolderPathMap.put(TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET, "/src/sql/");
sqlFolderPathMap.put(TechnologyTypes.HTML5_MOBILE_WIDGET, "/src/sql/");
sqlFolderPathMap.put(TechnologyTypes.HTML5_WIDGET, "/src/sql/");
sqlFolderPathMap.put(TechnologyTypes.JAVA_WEBSERVICE, "/src/sql/");
sqlFolderPathMap.put(TechnologyTypes.WORDPRESS, "/source/sql/");
}
public void configureSqlExecution() {
Map<String, List<String>> dbsWithSqlFiles = new HashMap<String, List<String>>();
String[] dbWithSqlFiles = DbWithSqlFiles.split("#SEP#");
for (String dbWithSqlFile : dbWithSqlFiles) {
String[] sqlFiles = dbWithSqlFile.split("#VSEP#");
String[] sqlFileWithName = sqlFiles[1].split("#NAME#");
if (dbsWithSqlFiles.containsKey(sqlFiles[0])) {
List<String> sqlFilesList = dbsWithSqlFiles.get(sqlFiles[0]);
sqlFilesList.add(sqlFileWithName[0]);
dbsWithSqlFiles.put(sqlFiles[0], sqlFilesList);
} else {
List<String> sqlFilesList = new ArrayList<String>();
sqlFilesList.add(sqlFileWithName[0]);
dbsWithSqlFiles.put(sqlFiles[0], sqlFilesList);
}
}
FileWriter writer = null;
try {
File sqlInfoFilePath = new File(Utility.getProjectHome() + projectCode + Constants.JSON_PATH);
String json = new Gson().toJson(dbsWithSqlFiles);
writer = new FileWriter(new File(sqlInfoFilePath.getPath()));
writer.write(json);
} catch (IOException e) {
S_LOGGER.error("Entered into catch block of Build.configureSqlExecution()"
+ FrameworkUtil.getStackTraceAsString(e));
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
S_LOGGER.error("Entered into catch block of Build.configureSqlExecution()"
+ FrameworkUtil.getStackTraceAsString(e));
}
}
}
public String getShowSettings() {
return showSettings;
}
public void setShowSettings(String showSettings) {
this.showSettings = showSettings;
}
public InputStream getFileInputStream() {
return fileInputStream;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getWebservice() {
return webservice;
}
public void setWebservice(String webservice) {
this.webservice = webservice;
}
public String getImportSql() {
return importSql;
}
public void setImportSql(String importSql) {
this.importSql = importSql;
}
public String getShowError() {
return showError;
}
public void setShowError(String showError) {
this.showError = showError;
}
public String getConnectionAlive() {
return connectionAlive;
}
public void setConnectionAlive(String connectionAlive) {
this.connectionAlive = connectionAlive;
}
public String getProjectCode() {
return projectCode;
}
public void setProjectCode(String projectCode) {
this.projectCode = projectCode;
}
public String getSdk() {
return sdk;
}
public void setSdk(String sdk) {
this.sdk = sdk;
}
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
public String getAndroidVersion() {
return androidVersion;
}
public void setAndroidVersion(String androidVersion) {
this.androidVersion = androidVersion;
}
public String getEnvironments() {
return environments;
}
public void setEnvironments(String environments) {
this.environments = environments;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getProguard() {
return proguard;
}
public void setProguard(String proguard) {
this.proguard = proguard;
}
public String getHideLog() {
return hideLog;
}
public void setHideLog(String hideLog) {
this.hideLog = hideLog;
}
public String getProjectModule() {
return projectModule;
}
public void setProjectModule(String projectModule) {
this.projectModule = projectModule;
}
public String getDeployTo() {
return deployTo;
}
public void setDeployTo(String deployTo) {
this.deployTo = deployTo;
}
public String getSkipTest() {
return skipTest;
}
public void setSkipTest(String skipTest) {
this.skipTest = skipTest;
}
public String getShowDebug() {
return showDebug;
}
public void setShowDebug(String showDebug) {
this.showDebug = showDebug;
}
public String getUserBuildName() {
return userBuildName;
}
public void setUserBuildName(String userBuildName) {
this.userBuildName = userBuildName;
}
public String getUserBuildNumber() {
return userBuildNumber;
}
public void setUserBuildNumber(String userBuildNumber) {
this.userBuildNumber = userBuildNumber;
}
public String getMainClassName() {
return mainClassName;
}
public void setMainClassName(String mainClassName) {
this.mainClassName = mainClassName;
}
public String getJarName() {
return jarName;
}
public void setJarName(String jarName) {
this.jarName = jarName;
}
public String getKeystore() {
return keystore;
}
public void setKeystore(String keystore) {
this.keystore = keystore;
}
public String getStorepass() {
return storepass;
}
public void setStorepass(String storepass) {
this.storepass = storepass;
}
public String getKeypass() {
return keypass;
}
public void setKeypass(String keypass) {
this.keypass = keypass;
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public boolean isProfileCreationStatus() {
return profileCreationStatus;
}
public void setProfileCreationStatus(boolean profileCreationStatus) {
this.profileCreationStatus = profileCreationStatus;
}
public String getProfileCreationMessage() {
return profileCreationMessage;
}
public void setProfileCreationMessage(String profileCreationMessage) {
this.profileCreationMessage = profileCreationMessage;
}
public String getProfileAvailable() {
return profileAvailable;
}
public void setProfileAvailable(String profileAvailable) {
this.profileAvailable = profileAvailable;
}
public String getSigning() {
return signing;
}
public void setSigning(String signing) {
this.signing = signing;
}
public List<String> getSqlFiles() {
return sqlFiles;
}
public void setSqlFiles(List<String> sqlFiles) {
this.sqlFiles = sqlFiles;
}
public List<String> getDatabases() {
return databases;
}
public void setDatabases(List<String> databases) {
this.databases = databases;
}
public String getDbWithSqlFiles() {
return DbWithSqlFiles;
}
public void setDbWithSqlFiles(String dbWithSqlFiles) {
DbWithSqlFiles = dbWithSqlFiles;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getFileorfolder() {
return fileorfolder;
}
public void setFileorfolder(String fileorfolder) {
this.fileorfolder = fileorfolder;
}
public String getSelectedJs() {
return selectedJs;
}
public void setSelectedJs(String selectedJs) {
this.selectedJs = selectedJs;
}
public String getJsFinalName() {
return jsFinalName;
}
public void setJsFinalName(String jsFinalName) {
this.jsFinalName = jsFinalName;
}
public void setBrowseLocation(String browseLocation) {
this.browseLocation = browseLocation;
}
public String getBrowseLocation() {
return browseLocation;
}
public void setFileLocation(String fileLocation) {
this.fileLocation = fileLocation;
}
public String getFileLocation() {
return fileLocation;
}
}