/* * ### * 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.File; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.photon.phresco.exception.PhrescoException; import com.photon.phresco.framework.FrameworkConfiguration; 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.FrameworkUtil; import com.photon.phresco.framework.commons.LogErrorReport; import com.photon.phresco.framework.commons.PBXNativeTarget; import com.photon.phresco.util.TechnologyTypes; import com.photon.phresco.util.Utility; import com.phresco.pom.util.PomProcessor; public class Code extends FrameworkBaseAction { private static final long serialVersionUID = 8217209827121703596L; private static final Logger S_LOGGER = Logger.getLogger(Code.class); private String projectCode = null; private String skipTest = null; private String codeTechnology = null; private String report = null; private String validateAgainst = null; private String target = null; private static String FUNCTIONALTEST = "functional"; public String view() { S_LOGGER.debug("Entering Method Code.view()"); try { getHttpRequest().setAttribute(REQ_SELECTED_MENU, APPLICATIONS); ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator(); Project project = administrator.getProject(projectCode); getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode); getHttpRequest().setAttribute(APPLICATION_PROJECT, project); FrameworkConfiguration frameworkConfig = PhrescoFrameworkFactory.getFrameworkConfig(); String serverUrl = ""; if (StringUtils.isNotEmpty(frameworkConfig.getSonarUrl())) { serverUrl = frameworkConfig.getSonarUrl(); } else { serverUrl = getHttpRequest().getRequestURL().toString(); StringBuilder tobeRemoved = new StringBuilder(); tobeRemoved.append(getHttpRequest().getContextPath()); tobeRemoved.append(getHttpRequest().getServletPath()); Pattern pattern = Pattern.compile(tobeRemoved.toString()); Matcher matcher = pattern.matcher(serverUrl); serverUrl = matcher.replaceAll(""); } String sonarReportPath = frameworkConfig.getSonarReportPath(); String[] sonar = sonarReportPath.split("/"); serverUrl = serverUrl.concat(FORWARD_SLASH + sonar[1]); URL sonarURL = new URL(serverUrl); HttpURLConnection connection = null; try { connection = (HttpURLConnection) sonarURL.openConnection(); int responseCode = connection.getResponseCode(); if (responseCode != 200) { getHttpRequest().setAttribute(REQ_ERROR, getText(SONAR_NOT_STARTED)); } } catch(Exception e) { getHttpRequest().setAttribute(REQ_ERROR, getText(SONAR_NOT_STARTED)); } } catch (Exception e) { S_LOGGER.error("Entered into catch block of Code.view()"+ FrameworkUtil.getStackTraceAsString(e)); new LogErrorReport(e, "Code view"); } return APP_CODE; } public String check() { S_LOGGER.debug("Entering Method Code.check()"); StringBuilder sb = new StringBuilder(); String technology = null; try { Properties sysProps = System.getProperties(); S_LOGGER.debug( "Phresco FileServer Value of " + PHRESCO_FILE_SERVER_PORT_NO + " is " + sysProps.getProperty(PHRESCO_FILE_SERVER_PORT_NO) ); String phrescoFileServerNumber = sysProps.getProperty(PHRESCO_FILE_SERVER_PORT_NO); FrameworkConfiguration frameworkConfig = PhrescoFrameworkFactory.getFrameworkConfig(); ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator(); Project project = administrator.getProject(projectCode); technology = project.getProjectInfo().getTechnology().getId(); if (TechnologyTypes.IPHONES.contains(technology)) { StringBuilder codeValidatePath = new StringBuilder(Utility.getProjectHome()); codeValidatePath.append(projectCode); codeValidatePath.append(File.separatorChar); codeValidatePath.append(DO_NOT_CHECKIN_DIR); codeValidatePath.append(File.separatorChar); codeValidatePath.append(STATIC_ANALYSIS_REPORT); codeValidatePath.append(File.separatorChar); codeValidatePath.append(INDEX_HTML); File indexPath = new File(codeValidatePath.toString()); if (indexPath.isFile() && StringUtils.isNotEmpty(phrescoFileServerNumber)) { sb.append(HTTP_PROTOCOL); sb.append(PROTOCOL_POSTFIX); InetAddress thisIp =InetAddress.getLocalHost(); sb.append(thisIp.getHostAddress()); sb.append(COLON); sb.append(phrescoFileServerNumber); sb.append(FORWARD_SLASH); sb.append(projectCode); sb.append(FORWARD_SLASH); sb.append(DO_NOT_CHECKIN_DIR); sb.append(FORWARD_SLASH); sb.append(STATIC_ANALYSIS_REPORT); sb.append(FORWARD_SLASH); sb.append(INDEX_HTML); } else { getHttpRequest().setAttribute(REQ_ERROR, getText(FAILURE_CODE_REVIEW)); } } else { String serverUrl = ""; if (StringUtils.isNotEmpty(frameworkConfig.getSonarUrl())) { serverUrl = frameworkConfig.getSonarUrl(); } else { serverUrl = getHttpRequest().getRequestURL().toString(); StringBuilder tobeRemoved = new StringBuilder(); tobeRemoved.append(getHttpRequest().getContextPath()); tobeRemoved.append(getHttpRequest().getServletPath()); Pattern pattern = Pattern.compile(tobeRemoved.toString()); Matcher matcher = pattern.matcher(serverUrl); serverUrl = matcher.replaceAll(""); } StringBuilder builder = new StringBuilder(Utility.getProjectHome()); builder.append(projectCode); if (StringUtils.isNotEmpty(report) && FUNCTIONALTEST.equals(report)) { FrameworkUtil frameworkUtil = FrameworkUtil.getInstance(); builder.append(frameworkUtil.getFuncitonalTestDir(project.getProjectInfo().getTechnology().getId())); } builder.append(File.separatorChar); builder.append(POM_XML); File pomPath = new File(builder.toString()); PomProcessor processor = new PomProcessor(pomPath); String groupId = processor.getModel().getGroupId(); String artifactId = processor.getModel().getArtifactId(); sb.append(serverUrl); sb.append(frameworkConfig.getSonarReportPath()); sb.append(groupId); sb.append(COLON); sb.append(artifactId); if (StringUtils.isNotEmpty(report) && !SOURCE_DIR.equals(report)) { sb.append(COLON); sb.append(report); } try { URL sonarURL = new URL(sb.toString()); HttpURLConnection connection = (HttpURLConnection) sonarURL.openConnection(); int responseCode = connection.getResponseCode(); S_LOGGER.info("responseCode === " + responseCode); S_LOGGER.debug("Response code value " + responseCode); if (responseCode != 200) { getHttpRequest().setAttribute(REQ_ERROR, getText(FAILURE_CODE_REVIEW)); S_LOGGER.debug("try APP_CODE....... " + APP_CODE); return APP_CODE; } } catch (Exception e) { S_LOGGER.error("Entered into catch block of Code.check()"+ FrameworkUtil.getStackTraceAsString(e)); new LogErrorReport(e, "Code review"); getHttpRequest().setAttribute(REQ_ERROR, getText(FAILURE_CODE_REVIEW)); return APP_CODE; } } } catch (Exception e) { S_LOGGER.error("Entered into catch block of Code.check()"+ FrameworkUtil.getStackTraceAsString(e)); } getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode); getHttpRequest().setAttribute(REQ_TECHNOLOGY, technology); getHttpRequest().setAttribute(REQ_SONAR_PATH, sb.toString()); return APP_CODE; } public String progressValidate() { S_LOGGER.debug("Entering Method Code.progressValidate()"); try { ProjectRuntimeManager runtimeManager; ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator(); Project project = administrator.getProject(projectCode); String technology = project.getProjectInfo().getTechnology().getId(); runtimeManager = PhrescoFrameworkFactory.getProjectRuntimeManager(); Map<String, String> codeValidateMap = new HashMap<String, String>(1); ActionType actionType = null; if (TechnologyTypes.IPHONES.contains(technology)) { codeValidateMap.put(IPHONE_SCHEMA_PARAM, target); actionType = ActionType.IPHONE_CODE_VALIDATE; } else { actionType = ActionType.SONAR; } if (FUNCTIONALTEST.equals(validateAgainst)) { File projectPath = new File(Utility.getProjectHome()+ File.separator + projectCode + File.separator + TEST_DIR + File.separator + FUNCTIONAL); actionType.setWorkingDirectory(projectPath.toString()); actionType.setProfileId(null); codeValidateMap.put(CODE_VALIDATE_PARAM, FUNCTIONAL); validateAgainst(validateAgainst, project, projectCode); } else { actionType.setWorkingDirectory(null); actionType.setProfileId(codeTechnology); } actionType.setSkipTest(Boolean.parseBoolean(skipTest)); BufferedReader reader = runtimeManager.performAction(project, actionType, codeValidateMap, null); getHttpSession().setAttribute(projectCode + REQ_SONAR_PATH, reader); getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode); getHttpRequest().setAttribute(REQ_TEST_TYPE, REQ_SONAR_PATH); } catch (Exception e) { S_LOGGER.error("Entered into catch block of Code.progressValidate()"+ FrameworkUtil.getStackTraceAsString(e)); new LogErrorReport(e, "Code progressValidate"); } return APP_ENVIRONMENT_READER; } private void validateAgainst(String validateAgainst, Project project, String projectCode) throws PhrescoException { File projectPath = new File(Utility.getProjectHome()+ File.separator + projectCode + File.separator + "test" + File.separator+"functional" + File.separator + POM_FILE); editSonarIncludes(projectPath, projectCode); } private static void editSonarIncludes(File projectPath, String projectCode) throws PhrescoException { try { PomProcessor pomprocessor = new PomProcessor(projectPath); pomprocessor.setName(projectCode); pomprocessor.save(); } catch (Exception e) { throw new PhrescoException(e); } } public String showCodeValidatePopUp(){ String technology = null; Project project = null; S_LOGGER.debug("Entering Method Code.progressValidate()"); try { ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator(); project = administrator.getProject(projectCode); technology = project.getProjectInfo().getTechnology().getId(); getHttpRequest().setAttribute(REQ_PROJECT_CODE, projectCode); getHttpRequest().setAttribute(APPLICATION_PROJECT, project); if (TechnologyTypes.IPHONES.contains(technology)) { List<PBXNativeTarget> xcodeConfigs = ApplicationsUtil.getXcodeConfiguration(projectCode); getHttpRequest().setAttribute(REQ_XCODE_CONFIGS, xcodeConfigs); } } catch (Exception e) { S_LOGGER.error("Entered into catch block of Code.progressValidate()"+ FrameworkUtil.getStackTraceAsString(e)); } return APP_SHOW_CODE_VALIDATE_POPUP; } public String getProjectCode() { return projectCode; } public void setProjectCode(String projectCode) { this.projectCode = projectCode; } public String getCodeTechnology() { return codeTechnology; } public void setCodeTechnology(String codeTechnology) { this.codeTechnology = codeTechnology; } public String getReport() { return report; } public void setReport(String report) { this.report = report; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public String getSkipTest() { return skipTest; } public void setSkipTest(String skipTest) { this.skipTest = skipTest; } public String getValidateAgainst() { return validateAgainst; } public void setValidateAgainst(String validateAgainst) { this.validateAgainst = validateAgainst; } }