/*
* ###
* 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.settings;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.opensymphony.xwork2.Action;
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.Project;
import com.photon.phresco.framework.api.ProjectAdministrator;
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.impl.EnvironmentComparator;
import com.photon.phresco.model.CertificateInfo;
import com.photon.phresco.model.Database;
import com.photon.phresco.model.I18NString;
import com.photon.phresco.model.PropertyInfo;
import com.photon.phresco.model.PropertyTemplate;
import com.photon.phresco.model.Server;
import com.photon.phresco.model.SettingsInfo;
import com.photon.phresco.model.SettingsTemplate;
import com.photon.phresco.util.Constants;
import com.photon.phresco.util.Utility;
public class Settings extends FrameworkBaseAction {
private static final long serialVersionUID = -1748241910381035152L;
private static final Logger S_LOGGER = Logger.getLogger(Settings.class);
private static Boolean debugEnabled = S_LOGGER.isDebugEnabled();
private String settingsName = null;
private String description = null;
private String settingsType = null;
private String oldName = null;
private String oldSettingType = null;
private String[] appliesto = null;
private String connectionAlive = "false";
private String nameError = null;
private String typeError = null;
private String envError = null;
private String dynamicError = null;
private String portError = null;
private String appliesToError = null;
private boolean isValidated = false;
private List<String> projectInfoVersions = null;
private String remoteDeployment = null;
private String envName = null;
private String emailError = null;
Document dom;
public Element rootEle;
// Environemnt delete
private boolean isEnvDeleteSuceess = true;
private String envDeleteMsg = null;
public String list() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.list()");
}
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
List<SettingsInfo> settings = administrator.getSettingsInfos();
getHttpRequest().setAttribute(REQ_SETTINGS, settings);
getHttpRequest().setAttribute(REQ_SELECTED_MENU, SETTINGS);
ProjectAdministrator administratorEnvs = getProjectAdministrator();
List<Environment> envs = administratorEnvs.getEnvironments();
getHttpRequest().setAttribute(ENVIRONMENTS, envs);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.list()"+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Settings list");
}
return SETTINGS_LIST;
}
public String add() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.add()");
}
try {
ProjectAdministrator administrator = getProjectAdministrator();
List<SettingsTemplate> settingsTemplates = administrator.getSettingsTemplates();
getHttpRequest().setAttribute(SESSION_SETTINGS_TEMPLATES, settingsTemplates);
getHttpRequest().setAttribute(REQ_SELECTED_MENU, SETTINGS);
getHttpSession().removeAttribute(REQ_CONFIG_INFO);
getHttpSession().removeAttribute(ERROR_SETTINGS);
getHttpSession().removeAttribute(SETTINGS_PARAMS);
List<Environment> envs = administrator.getEnvironments();
getHttpRequest().setAttribute(ENVIRONMENTS, envs);
Collections.sort(envs, new EnvironmentComparator());
} catch (PhrescoException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.list()"+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Settings add");
}
return SETTINGS_ADD;
}
public String save() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.save()");
}
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
SettingsTemplate selectedSettingTemplate = administrator.getSettingsTemplate(settingsType);
List<PropertyInfo> propertyInfoList = new ArrayList<PropertyInfo>();
List<PropertyTemplate> propertyTemplates = selectedSettingTemplate.getProperties();
String key = null;
String value = null;
for (PropertyTemplate propertyTemplate : propertyTemplates) {
if (propertyTemplate.getKey().equals(Constants.SETTINGS_TEMPLATE_SERVER) || propertyTemplate.getKey().equals(Constants.SETTINGS_TEMPLATE_DB)) {
List<PropertyTemplate> compPropertyTemplates = propertyTemplate.getpropertyTemplates();
for (PropertyTemplate compPropertyTemplate : compPropertyTemplates) {
key = compPropertyTemplate.getKey();
value = getHttpRequest().getParameter(key);
if (propertyTemplate.getKey().equals(Constants.SETTINGS_TEMPLATE_DB) && key.equals("type")) {
value = value.trim().toLowerCase();
propertyInfoList.add(new PropertyInfo(key, value.trim()));
} else {
propertyInfoList.add(new PropertyInfo(key, value.trim()));
}
}
} else {
key = propertyTemplate.getKey();
value = getHttpRequest().getParameter(key);
if(key.equals("remoteDeployment")){
if(value == null){
value="false";
}
}
value = value.trim();
if(key.equals(ADDITIONAL_CONTEXT_PATH)){
String addcontext = value;
if(!addcontext.startsWith("/")) {
value = "/" + value;
}
}
if ("certificate".equals(key)) {
String env = getHttpRequest().getParameter(ENVIRONMENTS);
if (StringUtils.isNotEmpty(value)) {
File file = new File(value);
value = "certificates" + FILE_SEPARATOR + env + "-" + settingsName + ".crt";
if (file.exists()) {
File dstFile = new File(Utility.getProjectHome() + value);
FrameworkUtil.copyFile(file, dstFile);
} else {
saveCertificateFile(value);
}
}
}
propertyInfoList.add(new PropertyInfo(propertyTemplate.getKey(), value));
}
if (S_LOGGER.isDebugEnabled()) {
S_LOGGER.debug("Configuration.save() key " + propertyTemplate.getKey() + "and Value is " + value);
}
}
SettingsInfo settingsInfo = new SettingsInfo(settingsName, description, settingsType);
settingsInfo.setAppliesTo(appliesto != null ? Arrays.asList(appliesto) : null);
settingsInfo.setPropertyInfos(propertyInfoList);
if (S_LOGGER.isDebugEnabled()) {
S_LOGGER.debug("Settings Info object value " + settingsInfo);
}
if (!validate(administrator, null)) {
isValidated = true;
return Action.SUCCESS;
}
String[] selectedEnvs = getHttpRequest().getParameterValues(ENVIRONMENTS);
StringBuilder environments = new StringBuilder();
for (String envs : selectedEnvs) {
if (environments.length() > 0) environments.append(',');
environments.append(envs);
}
List<SettingsTemplate> settingsTemplates = administrator.getSettingsTemplates();
administrator.createSetting(settingsInfo, environments.toString());
if (SERVER.equals(settingsType)){
addActionMessage(getText(SUCCESS_SERVER, Collections.singletonList(settingsName)));
}
else if (DATABASE.equals(settingsType)) {
addActionMessage(getText(SUCCESS_DATABASE, Collections.singletonList(settingsName)));
}
else if (WEBSERVICE.equals(settingsType)) {
addActionMessage(getText(SUCCESS_WEBSERVICE, Collections.singletonList(settingsName)));
}
else {
addActionMessage(getText(SUCCESS_EMAIL, Collections.singletonList(settingsName)));
}
getHttpRequest().setAttribute(SESSION_SETTINGS_TEMPLATES, settingsTemplates);
getHttpRequest().setAttribute(REQ_CONFIG_INFO, settingsInfo);
getHttpRequest().setAttribute(REQ_SELECTED_MENU, SETTINGS);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.save()"+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Settings save");
}
return list();
}
private void saveCertificateFile(String path) throws PhrescoException {
try {
String host = (String)getHttpRequest().getParameter(SERVER_HOST);
int port = Integer.parseInt(getHttpRequest().getParameter(SERVER_PORT));
String certificateName = (String)getHttpRequest().getParameter("certificate");
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
List<CertificateInfo> certificates = administrator.getCertificate(host, port);
if (CollectionUtils.isNotEmpty(certificates)) {
for (CertificateInfo certificate : certificates) {
if (certificate.getDisplayName().equals(certificateName)) {
administrator.addCertificate(certificate, new File(Utility.getProjectHome() + path));
}
}
}
} catch (Exception e) {
throw new PhrescoException(e);
}
}
private boolean validate(ProjectAdministrator administrator, String fromPage)
throws PhrescoException {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.validate(ProjectAdministrator administrator, String fromPage)");
}
if (debugEnabled) {
S_LOGGER.debug("validate() Frompage = "+fromPage);
}
String[] environments = getHttpRequest().getParameterValues(ENVIRONMENTS);
boolean validate = true;
if (StringUtils.isEmpty(settingsName.trim())) {
setNameError(ERROR_NAME);
validate = false;
}
if (ArrayUtils.isEmpty(environments)) {
setEnvError(ERROR_ENV);
return false;
}
if(StringUtils.isNotEmpty(settingsName) && !settingsName.equals(oldName)) {
for (String environment : environments) {
List<SettingsInfo> settingsInfos = administrator.getSettingsInfos(environment);
for (SettingsInfo settingsInfo : settingsInfos) {
if(settingsName.equalsIgnoreCase(settingsInfo.getName())) {
setNameError(ERROR_DUPLICATE_NAME);
validate = false;
}
}
}
}
if (appliesto == null && !settingsType.equals("Browser")) {
setAppliesToError("Applies to not selected");
validate = false;
}
if (StringUtils.isEmpty(fromPage) || (StringUtils.isNotEmpty(fromPage) && !settingsType.equals(oldSettingType))) {
if (settingsType.equals(Constants.SETTINGS_TEMPLATE_SERVER) || settingsType.equals(Constants.SETTINGS_TEMPLATE_EMAIL)) {
for (String env : environments) {
if (appliesto != null) {
List<SettingsInfo> settingsinfos = administrator.getSettingsInfos(env, settingsType, Arrays.asList(appliesto), settingsName );
if(CollectionUtils.isNotEmpty( settingsinfos)) {
setTypeError(SETTINGS_ALREADY_EXIST);
validate = false;
}
}
}
}
}
boolean serverTypeValidation = false;
SettingsTemplate selectedSettingTemplate = administrator.getSettingsTemplate(settingsType);
for (PropertyTemplate propertyTemplate : selectedSettingTemplate.getProperties()) {
String key = null;
String value = null;
boolean isRequired = propertyTemplate.isRequired();
if (propertyTemplate.getKey().equals("Server") || propertyTemplate.getKey().equals("Database")) {
List<PropertyTemplate> compPropertyTemplates = propertyTemplate.getpropertyTemplates();
for (PropertyTemplate compPropertyTemplate : compPropertyTemplates) {
key = compPropertyTemplate.getKey();
value = getHttpRequest().getParameter(key);
//If nodeJs server selected , there should not be validation for deploy dir.
if ("type".equals(key) && "NodeJS".equals(value)) {
serverTypeValidation = true;
}
}
} else {
key = propertyTemplate.getKey();
}
value = getHttpRequest().getParameter(key);
if (serverTypeValidation && "deploy_dir".equals(key)) {
isRequired = false;
}
// check Remotedeployment username and password mandatory
boolean remoteDeplyVal = Boolean.parseBoolean(remoteDeployment);
if(remoteDeplyVal) {
if ("admin_username".equals(key) || "admin_password".equals(key)) {
isRequired = true;
}
if("deploy_dir".equals(key)) {
isRequired = false;
}
}
if (isRequired == true && StringUtils.isEmpty(value.trim())) {
I18NString i18NString = propertyTemplate.getName();
String field = i18NString.get("en-US").getValue();
dynamicError += propertyTemplate.getKey() + ":" + field + " is empty" + ",";
}
}
if(StringUtils.isNotEmpty(dynamicError)){
dynamicError = dynamicError.substring(0, dynamicError.length() - 1);
dynamicError = dynamicError.substring(4);
setDynamicError(dynamicError);
validate = false;
}
if (StringUtils.isNotEmpty(getHttpRequest().getParameter("port"))) {
int value = Integer.parseInt(getHttpRequest().getParameter("port"));
if (validate && (value < 1 || value > 65535)) {
setPortError(ERROR_PORT);
validate = false;
}
}
if (StringUtils.isNotEmpty(getHttpRequest().getParameter("emailid"))) {
String value = getHttpRequest().getParameter("emailid");
Pattern p = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
Matcher m = p.matcher(value);
boolean b = m.matches();
if(!b) {
setEmailError(ERROR_EMAIL);
validate = false;
}
}
return validate;
}
public String edit() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.edit()");
}
try {
ProjectAdministrator administrator = getProjectAdministrator();
SettingsInfo settingsInfo = administrator.getSettingsInfo(oldName, getEnvName());
getHttpSession().setAttribute(oldName, settingsInfo);
getHttpRequest().setAttribute(SESSION_OLD_NAME, oldName);
List<SettingsTemplate> settingsTemplates = administrator.getSettingsTemplates();
getHttpRequest().setAttribute(SESSION_SETTINGS_TEMPLATES, settingsTemplates);
List<Environment> environments = administrator.getEnvironments();
getHttpRequest().setAttribute(ENVIRONMENTS, environments);
getHttpRequest().setAttribute(REQ_FROM_PAGE, FROM_PAGE);
getHttpRequest().setAttribute(REQ_SELECTED_MENU, SETTINGS);
getHttpSession().removeAttribute(ERROR_SETTINGS);
getHttpSession().removeAttribute(SETTINGS_PARAMS);
getHttpRequest().setAttribute("currentEnv", envName);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.edit()"+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Settings edit");
}
return SETTINGS_EDIT;
}
public String update() {
S_LOGGER.debug("Entering Method Settings.update()");
try {
HttpServletRequest request = getHttpRequest();
ProjectAdministrator administrator = PhrescoFrameworkFactory
.getProjectAdministrator();
SettingsTemplate selectedSettingTemplate = administrator
.getSettingsTemplate(settingsType);
List<PropertyInfo> propertyInfoList = new ArrayList<PropertyInfo>();
List<PropertyTemplate> propertyTemplates = selectedSettingTemplate.getProperties();
SettingsInfo newSettingsInfo = new SettingsInfo(settingsName, description, settingsType);
newSettingsInfo.setPropertyInfos(propertyInfoList);
newSettingsInfo.setAppliesTo(appliesto != null ? Arrays
.asList(appliesto) : null);
String key = null;
String value = null;
for (PropertyTemplate propertyTemplate : propertyTemplates) {
if (propertyTemplate.getKey().equals(Constants.SETTINGS_TEMPLATE_SERVER) || propertyTemplate.getKey().equals(Constants.SETTINGS_TEMPLATE_DB)) {
List<PropertyTemplate> compPropertyTemplates = propertyTemplate.getpropertyTemplates();
for (PropertyTemplate compPropertyTemplate : compPropertyTemplates) {
key = compPropertyTemplate.getKey();
value = getHttpRequest().getParameter(key);
if (propertyTemplate.getKey().equals(Constants.SETTINGS_TEMPLATE_DB) && key.equals("type")) {
value = value.trim().toLowerCase();
propertyInfoList.add(new PropertyInfo(key, value.trim()));
} else {
propertyInfoList.add(new PropertyInfo(key, value.trim()));
}
}
} else {
key = propertyTemplate.getKey();
value = getHttpRequest().getParameter(key);
if(key.equals("remoteDeployment")){
if(value == null){
value="false";
}
}
if ("certificate".equals(key)) {
String env = getHttpRequest().getParameter(ENVIRONMENTS);
if (StringUtils.isNotEmpty(value)) {
File file = new File(value);
value = "certificates" + FILE_SEPARATOR + env + "-" + settingsName + ".crt";
if (file.exists()) {
File dstFile = new File(Utility.getProjectHome() + value);
FrameworkUtil.copyFile(file, dstFile);
} else {
saveCertificateFile(value);
}
}
}
value = value.trim();
propertyInfoList.add(new PropertyInfo(propertyTemplate.getKey(), value));
}
if (S_LOGGER.isDebugEnabled()) {
S_LOGGER.debug("Configuration.save() key " + propertyTemplate.getKey() + "and Value is " + value);
}
}
getHttpSession().setAttribute(oldName, newSettingsInfo);
if (!validate(administrator, FROM_PAGE)) {
isValidated = true;
List<SettingsTemplate> settingsTemplates = administrator.getSettingsTemplates();
getHttpRequest().setAttribute(SESSION_SETTINGS_TEMPLATES, settingsTemplates);
request.setAttribute(REQ_FROM_PAGE, FROM_PAGE);
request.setAttribute(REQ_OLD_NAME, oldName);
return Action.SUCCESS;
}
getHttpRequest().setAttribute(REQ_SELECTED_MENU, SETTINGS);
S_LOGGER.debug("Settings Info object value which going to be updated" + newSettingsInfo);
String environment = getHttpRequest().getParameter(ENVIRONMENTS);
administrator.updateSetting(environment, oldName, newSettingsInfo);
if (SERVER.equals(settingsType)){
addActionMessage(getText(SERVER_UPDATE_SUCCESS, Collections.singletonList(settingsName)));
}
else if (DATABASE.equals(settingsType)) {
addActionMessage(getText(DATABASE_UPDATE_SUCCESS, Collections.singletonList(settingsName)));
}
else if (WEBSERVICE.equals(settingsType)) {
addActionMessage(getText(WEBSERVICE_UPDATE_SUCCESS, Collections.singletonList(settingsName)));
}
else {
addActionMessage(getText(EMAIL_UPDATE_SUCCESS, Collections.singletonList(settingsName)));
}
} catch (Exception e) {
S_LOGGER.error("Entered into catch block of Settings.update()"+ FrameworkUtil.getStackTraceAsString(e));
new LogErrorReport(e, "Settings update");
}
return list();
}
public String delete() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.delete()");
}
try {
ProjectAdministrator administrator = getProjectAdministrator();
HttpServletRequest request = getHttpRequest();
List<String> settingNames = new ArrayList<String>();
String[] selectedNames = request.getParameterValues(REQ_SELECTED_ITEMS);
Map<String, List<String>> deleteConfigs = new HashMap<String , List<String>>();
for(int i = 0; i < selectedNames.length; i++){
String[] split = selectedNames[i].split(",");
String envName = split[0];
List<String> configNames = deleteConfigs.get(envName);
if (configNames == null) {
configNames = new ArrayList<String>(3);
}
configNames.add(split[1]);
deleteConfigs.put(envName, configNames);
}
administrator.deleteSettingsInfos(deleteConfigs);
for (String name : selectedNames) {
if (debugEnabled) {
S_LOGGER.debug("To be deleted settings name " + name);
}
settingNames.add(name);
}
addActionMessage(SUCCESS_SETTING_DELETE);
getHttpRequest().setAttribute(REQ_SELECTED_MENU, SETTINGS);
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.delete()"+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Settings delete");
}
return list();
}
public String settingsType() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.settingsType()");
}
try {
ProjectAdministrator administrator = getProjectAdministrator();
SettingsInfo settingsInfo = (SettingsInfo) getHttpSession().getAttribute(REQ_CONFIG_INFO);
if (settingsInfo == null && StringUtils.isNotEmpty(oldName)) {
settingsInfo = administrator.getSettingsInfo(oldName, getEnvName());
getHttpRequest().setAttribute(REQ_OLD_NAME, oldName);
}
SettingsTemplate settingsTemplate = administrator.getSettingsTemplate(settingsType);
if (debugEnabled) {
S_LOGGER.debug("Setting Template object value " + settingsTemplate.toString());
}
if(SERVER.equals(settingsType)) {
List<Server> servers = administrator.getServers();
getHttpRequest().setAttribute(REQ_TEST_SERVERS, servers);
}
if(Constants.SETTINGS_TEMPLATE_DB.equals(settingsType)) {
List<Database> databases = administrator.getDatabases();
getHttpRequest().setAttribute(REQ_PROJECT_INFO_DATABASES, databases);
}
getHttpRequest().setAttribute(REQ_CURRENT_SETTINGS_TEMPLATE, settingsTemplate);
getHttpRequest().setAttribute(REQ_ALL_TECHNOLOGIES, administrator.getAllTechnologies());
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.settingsType()"+ FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "Settings type");
}
return SETTINGS_TYPE;
}
public String connectionAliveCheck() {
if (debugEnabled) {
S_LOGGER.debug("Entering Method Settings.connectionAliveCheck()");
}
try {
connectionAlive = "false";
HttpServletRequest request = getHttpRequest();
String url = request.getParameter(REQ_SERVER_STATUS_URL);
String[] results = url.split(",");
String lprotocol = results[0];
String lhost = results[1];
int lport = Integer.parseInt(results[2]);
boolean tempConnectionAlive = DiagnoseUtil.isConnectionAlive(lprotocol, lhost, lport);
connectionAlive = tempConnectionAlive == true ? "true" : "false";
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Settings.connectionAliveCheck()" + FrameworkUtil.getStackTraceAsString(e));
}
addActionError(e.getLocalizedMessage());
e.printStackTrace();
}
return SUCCESS;
}
public String openSettingsEnvPopup() {
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
getHttpRequest().setAttribute(SETTINGS_FROM_TAB, getHttpRequest().getParameter(SETTINGS_FROM_TAB));
List<Environment> envs = administrator.getEnvironments();
getHttpRequest().setAttribute(ENVIRONMENTS, envs);
} catch (PhrescoException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Configurations.createEnvironment()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "open popup Settings");
}
return APP_ENVIRONMENT;
}
public String createSettingsEnvironment() {
try {
String[] split = null;
String envs = getHttpRequest().getParameter("envs");
String selectedItems = getHttpRequest().getParameter("deletableEnvs");
if(StringUtils.isNotEmpty(selectedItems)){
deleteSettingsEnvironment(selectedItems);
}
List<Environment> environments = new ArrayList<Environment>();
if(StringUtils.isNotEmpty(envs)) {
List<String> listSelectedEnvs = new ArrayList<String>(Arrays.asList(envs.split("#SEP#")));
for (String listSelectedEnv : listSelectedEnvs) {
try {
split = listSelectedEnv.split("#DSEP#");
environments.add(new Environment(split[0], split[1], false));
} catch(ArrayIndexOutOfBoundsException e){
environments.add(new Environment(split[0], "", false));
}
}
}
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
administrator.createEnvironments(environments);
if(StringUtils.isNotEmpty(selectedItems) && CollectionUtils.isNotEmpty(environments)) {
addActionMessage(getText(UPDATE_ENVIRONMENT));
} else if(StringUtils.isNotEmpty(selectedItems) && CollectionUtils.isEmpty(environments)){
addActionMessage(getText(DELETE_ENVIRONMENT));
} else if(CollectionUtils.isNotEmpty(environments) && StringUtils.isEmpty(selectedItems)) {
addActionMessage(getText(CREATE_SUCCESS_ENVIRONMENT));
}
} catch(PhrescoException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Configurations.createEnvironment()" + FrameworkUtil.getStackTraceAsString(e));
}
addActionMessage(getText(CREATE_FAILURE_ENVIRONMENT));
}
return list();
}
public String deleteSettingsEnvironment(String selectedItems) {
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
List<String> envNames = Arrays.asList(selectedItems.split(","));
List<String> deletableEnvs = new ArrayList<String>();
for (String envName : envNames) {
// Check if configurations are already exist
List<SettingsInfo> configurations = administrator.configurationsByEnvName(envName);
if (CollectionUtils.isEmpty(configurations)) {
deletableEnvs.add(envName);
}
}
if (isEnvDeleteSuceess == true) {
// Delete Environment
administrator.deleteEnvironments(deletableEnvs);
}
} catch(Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Configurations.deleteEnvironment()" + FrameworkUtil.getStackTraceAsString(e));
}
}
return SUCCESS;
}
public String checkForRemoveSettings(){
try {
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
String removeItems = getHttpRequest().getParameter(DELETABLE_ENVS);
List<String> envs = Arrays.asList(removeItems.split(","));
List<String> unDeletableEnvs = new ArrayList<String>();
for (String env : envs) {
// Check if configurations are already exist
List<SettingsInfo> configurations = administrator.configurationsByEnvName(env);
if (CollectionUtils.isNotEmpty(configurations)) {
unDeletableEnvs.add(env);
if(unDeletableEnvs.size() > 1){
setEnvError(getText(ERROR_ENVS_REMOVE, Collections.singletonList(unDeletableEnvs)));
} else {
setEnvError(getText(ERROR_ENV_REMOVE, Collections.singletonList(unDeletableEnvs)));
}
}
}
} catch(Exception e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Configurations.checkForRemoveSettings()" + FrameworkUtil.getStackTraceAsString(e));
}
}
return SUCCESS;
}
public String checkDuplicateEnvSettings() {
try {
String envs = getHttpRequest().getParameter(ENVIRONMENT_VALUES);
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
List<Project> projects = administrator.discover(Collections.singletonList(new File(Utility.getProjectHome())));
for (Project project : projects) {
Collection<String> envNames = administrator.getEnvNames(project);
for (String envName : envNames) {
if (envName.equalsIgnoreCase(envs)) {
setEnvError(getText(ERROR_DUPLICATE_NAME_IN_CONFIGURATIONS, Collections.singletonList(project.getProjectInfo().getName())));
}
}
}
Collection<String> envNames = administrator.getEnvNames();
for (String envName : envNames) {
if (envName.equalsIgnoreCase(envs)) {
setEnvError(getText(ERROR_DUPLICATE_NAME_IN_SETTINGS));
}
}
} catch(PhrescoException e) {
if (debugEnabled) {
S_LOGGER.error("Entered into catch block of Configurations.createEnvironment()" + FrameworkUtil.getStackTraceAsString(e));
}
new LogErrorReport(e, "create environment");
}
return SUCCESS;
}
public String fetchSettingProjectInfoVersions() {
try {
String settingType = getHttpRequest().getParameter("settingsType");
String name = getHttpRequest().getParameter("name");
ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();
//Technology technology = project.getProjectInfo().getTechnology();
if ("Server".equals(settingType)) {
List<Server> servers = administrator.getServers();
if (servers != null && CollectionUtils.isNotEmpty(servers)) {
for (Server server : servers) {
if (server.getName().equals(name)) {
setProjectInfoVersions(server.getVersions());
}
}
}
}
if ("Database".equals(settingType)) {
List<Database> databases = administrator.getDatabases();
if (databases != null && CollectionUtils.isNotEmpty(databases)) {
for (Database database : databases) {
if (database.getName().equals(name)) {
setProjectInfoVersions(database.getVersions());
}
}
}
}
} catch (Exception e) {
}
return SUCCESS;
}
public String getSettingsName() {
return settingsName;
}
public void setSettingsName(String settingsName) {
this.settingsName = settingsName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getSettingsType() {
return settingsType;
}
public void setSettingsType(String settingsType) {
this.settingsType = settingsType;
}
public String getOldName() {
return oldName;
}
public void setOldName(String oldName) {
this.oldName = oldName;
}
public String[] getAppliesto() {
return appliesto;
}
public void setAppliesto(String[] appliesto) {
this.appliesto = appliesto;
}
public String getConnectionAlive() {
return connectionAlive;
}
public void setConnectionAlive(String connectionAlive) {
this.connectionAlive = connectionAlive;
}
public String getNameError() {
return nameError;
}
public void setNameError(String nameError) {
this.nameError = nameError;
}
public String getTypeError() {
return typeError;
}
public void setTypeError(String typeError) {
this.typeError = typeError;
}
public String getDynamicError() {
return dynamicError;
}
public void setDynamicError(String dynamicError) {
this.dynamicError = dynamicError;
}
public String getAppliesToError() {
return appliesToError;
}
public void setAppliesToError(String appliesToError) {
this.appliesToError = appliesToError;
}
public boolean isValidated() {
return isValidated;
}
public void setValidated(boolean isValidated) {
this.isValidated = isValidated;
}
public String getEnvName() {
return envName;
}
public void setEnvName(String envName) {
this.envName = envName;
}
public String getEnvError() {
return envError;
}
public void setEnvError(String envError) {
this.envError = envError;
}
public boolean isEnvDeleteSuceess() {
return isEnvDeleteSuceess;
}
public void setEnvDeleteSuceess(boolean isEnvDeleteSuceess) {
this.isEnvDeleteSuceess = isEnvDeleteSuceess;
}
public String getEnvDeleteMsg() {
return envDeleteMsg;
}
public void setEnvDeleteMsg(String envDeleteMsg) {
this.envDeleteMsg = envDeleteMsg;
}
public String getOldSettingType() {
return oldSettingType;
}
public void setOldSettingType(String oldSettingType) {
this.oldSettingType = oldSettingType;
}
public List<String> getProjectInfoVersions() {
return projectInfoVersions;
}
public void setProjectInfoVersions(List<String> projectInfoVersions) {
this.projectInfoVersions = projectInfoVersions;
}
public String getPortError() {
return portError;
}
public void setPortError(String portError) {
this.portError = portError;
}
public String getRemoteDeployment() {
return remoteDeployment;
}
public void setRemoteDeployment(String remoteDeployment) {
this.remoteDeployment = remoteDeployment;
}
public String getEmailError() {
return emailError;
}
public void setEmailError(String emailError) {
this.emailError = emailError;
}
}