/* * ### * 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.commons; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Type; 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 javax.servlet.http.HttpServletRequest; 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.log4j.Logger; import org.w3c.dom.Document; import org.xml.sax.SAXException; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.photon.phresco.commons.FrameworkConstants; import com.photon.phresco.exception.PhrescoException; import com.photon.phresco.framework.PhrescoFrameworkFactory; import com.photon.phresco.framework.actions.applications.Applications; import com.photon.phresco.framework.api.ProjectAdministrator; import com.photon.phresco.framework.commons.filter.FileListFilter; import com.photon.phresco.model.ApplicationType; import com.photon.phresco.model.Database; import com.photon.phresco.model.Module; import com.photon.phresco.model.ModuleGroup; import com.photon.phresco.model.ProjectInfo; import com.photon.phresco.model.Server; import com.photon.phresco.model.WebService; import com.photon.phresco.util.Utility; import com.phresco.pom.exception.PhrescoPomException; import com.phresco.pom.site.Reports; import com.phresco.pom.util.PomProcessor; import com.sun.jersey.api.client.ClientHandlerException; public class ApplicationsUtil implements FrameworkConstants { private static final Logger S_LOGGER = Logger.getLogger(Applications.class); private static Boolean debugEnabled = S_LOGGER.isDebugEnabled(); private static Map<String, List<ProjectInfo>> mapPilotProjectInfos = new HashMap<String, List<ProjectInfo>>(15); private static Map<String, Collection<String>> mapPilotNames = new HashMap<String, Collection<String>>(15); private static Map<String, List<String>> mapPilotModuleIds = new HashMap<String, List<String>>(15); private static Map<String, List<String>> mapPilotJsLibs = new HashMap<String, List<String>>(15); public static ModuleGroup getSelectedTuple(List<ModuleGroup> moduleGroups, String moduleId, String selectedVersion) { if (debugEnabled) { S_LOGGER.debug("Entering Method ApplicationsUtil.getSelectedTuple(List<TupleBean> tupleBeans, String tupleBeanId)"); S_LOGGER.debug("getSelectedTuple() TupleBeanId = " + moduleId); } try { if (CollectionUtils.isEmpty(moduleGroups)) { return null; } for (ModuleGroup moduleGroup : moduleGroups) { if (moduleGroup.getId().equals(moduleId)) { Module selectedModuleVer = moduleGroup.getVersion(selectedVersion); if (selectedModuleVer != null) { List<Module> moduleVersions = new ArrayList<Module>(15); moduleVersions.add(selectedModuleVer); moduleGroup.setVersions(moduleVersions); } return moduleGroup; } } } catch (Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getSelectedTuple()" + e); } new LogErrorReport(e, "Getting Core and Custom Modules"); } return null; } public static List<ModuleGroup> getSelectedTuples(HttpServletRequest request, List<ModuleGroup> moduleGroups, String moduleIds[]) { if (debugEnabled) { S_LOGGER.debug("Entering Method ApplicationsUtil.getSelectedTuples(List<TupleBean> tupleBeans, String typleBeanIds[])"); } try { if (CollectionUtils.isEmpty(moduleGroups) || moduleIds == null) { return Collections.emptyList(); } List<ModuleGroup> selectedBeans = new ArrayList<ModuleGroup>(moduleGroups.size()); for (String moduleId : moduleIds) { String selectedVersion = request.getParameter(moduleId); ModuleGroup moduleGroup = getSelectedTuple(moduleGroups, moduleId, selectedVersion); if (moduleGroup != null) { selectedBeans.add(moduleGroup); } } return selectedBeans; } catch (Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getSelectedTuples()" + e); } new LogErrorReport(e, "Getting Core and Custom Modules"); } return null; } private static List<ProjectInfo> getPilots(String technologyId, String customerId) { if (debugEnabled) { S_LOGGER.debug("Entering Method ApplicationsUtil.getPilots(String technologyId)"); S_LOGGER.debug("getPilots() TechnologyId = "+technologyId); } try { ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator(); return administrator.getPilots(technologyId, customerId); } catch (ClientHandlerException e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getPilots()" + e); } new LogErrorReport(e, "Getting pilot projects"); } catch (Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getPilots()" + e); } new LogErrorReport(e, "Getting pilot projects"); } return null; } public static Collection<String> getPilotNames(String technologyId, String customerId) { List<ProjectInfo> pilots = mapPilotProjectInfos.get(technologyId); Collection<String> pilotNames = mapPilotNames.get(technologyId); if (pilotNames != null) { return pilotNames; } if (pilots == null) { pilots = getPilots(technologyId, customerId); mapPilotProjectInfos.put(technologyId, pilots); } pilotNames = new ArrayList<String>(15); if (CollectionUtils.isNotEmpty(pilots)) { for (ProjectInfo projectInfo : pilots) { pilotNames.add(projectInfo.getName()); } mapPilotNames.put(technologyId, pilotNames); } return pilotNames; } public static List<String> getPilotModuleIds(String technologyId, String customerId) { List<String> listPilotModules = mapPilotModuleIds.get(technologyId); if (CollectionUtils.isNotEmpty(listPilotModules)) { return listPilotModules; } List<ProjectInfo> pilots = mapPilotProjectInfos.get(technologyId); if (CollectionUtils.isEmpty(pilots)) { pilots = getPilots(technologyId, customerId); } listPilotModules = new ArrayList<String>(); if (CollectionUtils.isNotEmpty(pilots)) { for (ProjectInfo projectInfo : pilots) { List<ModuleGroup> pilotModules = projectInfo.getTechnology().getModules(); if (CollectionUtils.isNotEmpty(pilotModules)) { for (ModuleGroup pilotModule : pilotModules) { List<Module> pilotMods = pilotModule.getVersions(); if (CollectionUtils.isNotEmpty(pilotMods)) { for (Module pilotMod : pilotMods) { listPilotModules.add(pilotMod.getId()); } } } } } } mapPilotModuleIds.put(technologyId, listPilotModules); return listPilotModules; } public static List<String> getPilotJsLibIds(String technologyId, String customerId) { List<String> listPilotJsLibs = mapPilotJsLibs.get(technologyId); if (CollectionUtils.isNotEmpty(listPilotJsLibs)) { return listPilotJsLibs; } List<ProjectInfo> pilots = mapPilotProjectInfos.get(technologyId); if (CollectionUtils.isEmpty(pilots)) { pilots = getPilots(technologyId, customerId); } listPilotJsLibs = new ArrayList<String>(); if (CollectionUtils.isNotEmpty(pilots)) { for (ProjectInfo projectInfo : pilots) { List<ModuleGroup> pilotModules = projectInfo.getTechnology().getJsLibraries(); if (CollectionUtils.isNotEmpty(pilotModules)) { for (ModuleGroup pilotModule : pilotModules) { List<Module> pilotmods = pilotModule.getVersions(); if (CollectionUtils.isNotEmpty(pilotmods)) { for (Module pilotmod : pilotmods) { listPilotJsLibs.add(pilotmod.getId()); } } } } } } mapPilotJsLibs.put(technologyId, listPilotJsLibs); return listPilotJsLibs; } public static ProjectInfo getPilotProjectInfo(String technologyId, String customerId) { List<ProjectInfo> pilots = mapPilotProjectInfos.get(technologyId); ProjectInfo pilotProjectInfo = null; if (pilots != null) { for (ProjectInfo projectInfo : pilots) { pilotProjectInfo = projectInfo; } return pilotProjectInfo; } pilots = getPilots(technologyId, customerId); mapPilotProjectInfos.put(technologyId, pilots); for (ProjectInfo projectInfo : pilots) { pilotProjectInfo = projectInfo; } return pilotProjectInfo; } public static ApplicationType getApplicationType(HttpServletRequest request, String appType, String customerId) throws PhrescoException { ApplicationType applicationtype = null; try{ if (debugEnabled) { S_LOGGER.debug("Selected application type" + appType); } ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator(); applicationtype = administrator.getApplicationType(appType, customerId); } catch(Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of Applications.getApplicationType()" + FrameworkUtil.getStackTraceAsString(e)); } new LogErrorReport(e, "Getting application types"); } return applicationtype; } private static Collection<String> dependentVersions = new ArrayList<String>(1); public static Collection<String> getDependentVersions() { return dependentVersions; } public static Collection<String> getIds(List<ModuleGroup> tupleBeans) { if (S_LOGGER.isDebugEnabled()) S_LOGGER.debug("Entered getIds"); try { Collection<String> ids = new ArrayList<String>(10); if(tupleBeans != null) { for (ModuleGroup tupleBean : tupleBeans) { ids.add(tupleBean.getId()); dependentVersions.add(tupleBean.getVersions().get(0).getVersion()); } } return ids; } catch(Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of Applications.getJsLibrariesIds()"+ FrameworkUtil.getStackTraceAsString(e)); } new LogErrorReport(e, "Getting Ids"); } return null; } public static Map<String, String> getIdAndVersionAsMap(HttpServletRequest request, String[] ids) { Map<String, String> map = new HashMap<String, String>(15); for (String id : ids) { map.put(id, request.getParameter(id)); } return map; } public static Map<String, String> stringToMap(String str) { str = str.substring(1).substring(0, str.length() - 2).trim(); Map<String, String> map = new HashMap<String, String>(5); String[] split = str.split(", "); for (String item : split) { String[] keyValue = item.split("="); map.put(keyValue[0], keyValue[1]); } return map; } public static Map<String, String> getMapFromModuleGroups(List<ModuleGroup> moduleGroups) { Map<String, String> map = new HashMap<String, String>(15); for (ModuleGroup moduleGroup : moduleGroups) { map.put(moduleGroup.getId(), moduleGroup.getVersions().get(0).getVersion()); } return map; } public static String getCsvFromStringArray(String[] selectedIds) { if (selectedIds == null) { return null; } String csv = ""; for (String id : selectedIds) { csv = csv + id + ","; } csv = csv.substring(0, csv.length() - 1); return csv; } public static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException { InputStream fis = null; DocumentBuilder builder = null; try { fis = new FileInputStream(file); DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(false); builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(fis); return doc; } finally { if(fis != null) { fis.close(); } } } public static List getArrayListFromStrArr(String[] strArr) { List list = new ArrayList(); if (strArr != null && strArr.length > 0) { for (int i = 0; i < strArr.length; i++) { list.add(Integer.parseInt(strArr[i])); } } return list; } public static List<Server> getSelectedServers(List<Server> servers, List<String> selectedServer) { if (debugEnabled) { S_LOGGER.debug("Entering Method ApplicationsUtil.getSelectedServers(List<Server> servers, List<String> selectedServerIds[])"); } try { if (CollectionUtils.isEmpty(servers) || selectedServer == null) { return Collections.emptyList(); } List<Server> selectedServers = new ArrayList<Server>(servers.size()); for (String tempServer : selectedServer) { String[] split = tempServer.split("#VSEP#"); List<String> versions = new ArrayList<String>(Arrays.asList(split[1].split(","))); String name = split[0].trim(); for (Server server : servers) { if(name.equals(server.getName())) { Server newServer = new Server(); newServer.setId(server.getId()); newServer.setName(server.getName()); newServer.setDescription(server.getDescription()); newServer.setVersions(versions); selectedServers.add(newServer); } } } return selectedServers; } catch (Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getSelectedServers()" + e); } new LogErrorReport(e, "Getting servers"); } return null; } public static List<Database> getSelectedDatabases(List<Database> databases, List<String> selectedDatabase) { if (debugEnabled) { S_LOGGER.debug("Entering Method ApplicationsUtil.getSelectedDatabases(List<Database> databases, List<Integer> selectedDatabaseIds)"); } try { if (CollectionUtils.isEmpty(databases) || selectedDatabase == null) { return Collections.emptyList(); } List<Database> selectedDatabases = new ArrayList<Database>(databases.size()); for (String tempDatabase : selectedDatabase) { String[] split = tempDatabase.split("#VSEP#"); List<String> versions = new ArrayList<String>(Arrays.asList(split[1].split(","))); String name = split[0].trim(); for (Database database : databases) { if(name.equals(database.getName())) { Database newDatabase = new Database(); newDatabase.setId(database.getId()); newDatabase.setName(database.getName()); newDatabase.setDescription(database.getDescription()); newDatabase.setVersions(versions); selectedDatabases.add(newDatabase); } } } return selectedDatabases; } catch (Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getSelectedDatabases()" + e); } new LogErrorReport(e, "Getting databases"); } return null; } public static List<WebService> getSelectedWebservices(List<WebService> webservices, List<String> selectedWebserviceIds) { if (debugEnabled) { S_LOGGER.debug("Entering Method ApplicationsUtil.getSelectedWebservices(List<WebService> webservices, List<Integer> selectedWebserviceIds)"); } try { if (CollectionUtils.isEmpty(webservices) || selectedWebserviceIds == null) { return Collections.emptyList(); } List<WebService> selectedWebservices = new ArrayList<WebService>(webservices.size()); for (WebService webservice : webservices) { if (selectedWebserviceIds.contains(webservice.getId())) { selectedWebservices.add(webservice); } } return selectedWebservices; } catch (Exception e) { if (debugEnabled) { S_LOGGER.error("Entered into catch block of ApplicationsUtil.getSelectedWebservices()" + e); } new LogErrorReport(e, "Getting webservices"); } return null; } public static String getConfigInfoPath(String projectCode) { StringBuilder builder = new StringBuilder(Utility.getProjectHome()); builder.append(projectCode); builder.append(File.separator); builder.append(".phresco"); builder.append(File.separator); builder.append("config.xml"); return builder.toString(); } public static String getSettingsInfoPath() { StringBuilder builder = new StringBuilder(Utility.getProjectHome()); builder.append("settings.xml"); return builder.toString(); } public static List<PBXNativeTarget> getXcodeConfiguration(String projectCode) throws PhrescoException, JAXBException, IOException, PhrescoPomException { S_LOGGER.debug("Iphone technology target retrivel initiated"); StringBuilder builder = new StringBuilder(Utility.getProjectHome()); builder.append(projectCode); builder.append(File.separatorChar); builder.append(POM_XML); File pomPath = new File(builder.toString()); PomProcessor pomProcessor = new PomProcessor(pomPath); StringBuilder projPath = new StringBuilder(Utility.getProjectHome()); projPath.append(projectCode); projPath.append(pomProcessor.getSourceDirectory()); File file = new File(projPath.toString()); FilenameFilter filter = new FileListFilter("", IPHONE_XCODE_PROJ_EXTN); File[] listFiles = file.listFiles(filter); projPath.append(File.separator); // Get firest xcode proj file name projPath.append(listFiles[0].getName()); S_LOGGER.debug("Iphone technology listFile name" + listFiles[0].getName()); String pbxprojLocation = projPath.toString(); // plutil location in mac File plutilCommandLine = new File("/usr/bin/plutil"); List<PBXNativeTarget> targets = null; S_LOGGER.debug("Before entering plutilCommandLine "); if (!plutilCommandLine.exists()) { S_LOGGER.debug("Invalid path for plutil"); throw new PhrescoException("Invalid path for plutil"); } File xcodeprojJson = new File(pbxprojLocation, "xcodeInfo.json"); S_LOGGER.debug("Before plutil try!!!"); try { String[] commands = {"plutil", "-convert", "json", "-o", xcodeprojJson.getAbsolutePath(), pbxprojLocation + "/project.pbxproj"}; ProcessBuilder probuilder = new ProcessBuilder(commands); probuilder.directory(new File(pbxprojLocation)); probuilder.start(); } catch (Exception e) { S_LOGGER.error("Error While Executing" + e); throw new PhrescoException("Error while executing "); } S_LOGGER.error("Before While loop"); while(!xcodeprojJson.exists()) { } S_LOGGER.error("After While loop Completed"); if (xcodeprojJson.exists()) { S_LOGGER.error("File exists"); XcodeprojParser parser = new XcodeprojParser(xcodeprojJson); try { PBXProject project = parser.parseXcodeFile(); if (project != null) { targets = project.getTargets(); } } catch (Exception e) { throw new PhrescoException(e); } } S_LOGGER.error("File reading completed"); xcodeprojJson.delete(); S_LOGGER.debug("Going to return from applications util"); return targets; } public static void storeAsJSON(File file, List<Reports> reports) throws PhrescoException { try { Gson gson = new Gson(); String json = gson.toJson(reports); FileOutputStream fos = new FileOutputStream(file, false); fos.write(json.getBytes()); fos.close(); } catch (Exception e) { throw new PhrescoException(e); } } public static List<Reports> readReportConfig(File file) throws PhrescoException { try { BufferedReader reader = null; if (file.exists()) { Gson gson = new Gson(); reader = new BufferedReader(new FileReader(file)); Type type = new TypeToken<List<Reports>>(){}.getType(); List<Reports> reports = gson.fromJson(reader, type); reader.close(); return reports; } } catch (Exception e) { throw new PhrescoException(e); } return null; } }