/* * Software Name : ATK * * Copyright (C) 2007 - 2012 France Télécom * * 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. * * ------------------------------------------------------------------ * File Name : Configuration.java * * Created : 02/03/2007 * Author(s) : Nicolas MOTEAU */ package com.orange.atk.atkUI.corecli; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Vector; import org.apache.log4j.Logger; import com.orange.atk.atkUI.corecli.utils.FileResolver; import com.orange.atk.atkUI.corecli.utils.SortedProperties; import com.orange.atk.platform.Platform; import com.orange.atk.util.FileUtil; /** * This class represents the configuration parameters. * * @author Nicolas MOTEAU * @since JDK5.0 */ public class Configuration { private static SortedProperties properties = new SortedProperties(); private static Vector<String> defaultPhoneConfigs; private HashMap<String, String> defaultConfig; private static String configFileName = null; /** A file resolver to get back file from URI */ public static FileResolver fileResolver; // properties's valid keys public static final String LOGFILENAME = "logFile"; public static final String PROXYSET = "proxySet"; public static final String REALTIMEGRAPH = "realtime"; public static final String PROXYHOST = "proxyHost"; public static final String PROXYPORT = "proxyPort"; public static final String OUTPUTDIRECTORY = "outputDir"; public static final String INPUTDIRECTORY = "inputDir"; //public static final String CONFIGDIRECTORY = "configDir"; public static final String CSS = "reportCSSFile"; public static final String KEEPREPORT = "keepReport"; public static final String OUTPUTDIRECTORYCONVERTS60 = "outputDirS60"; public static final String SPECIFICADB = "useSpecificADB"; public static final String NETWORKMONITOR = "useNetworkMonitor"; public static final String ADBPATH = "ADBPath"; public static final String SCROTATION = "screenshotRotation"; public static final String BENCHMARKDIRECTORY = "benchmarkDir"; public static final String AROPATH = "aroPath"; // PDF properties name public static final String pdfEncryptionUserPassword = "pdf.encryption.userpasswd"; public static final String pdfEncryptionOwnerPassword = "pdf.encryption.ownerpasswd"; public static final String pdfSignature = "pdf.signature"; public static final String keystore = "pdf.signature.keystore"; public static final String typeKeystore = "pdf.signature.typeKeystore"; public static final String passwordKeystore = "pdf.signature.passwordKeystore"; public static final String aliasCertificate = "pdf.signature.aliasCertificate"; public static final String httpMaxConnectionTime = "httpMaxConnectionTime"; public static final String httpMaxDownloadTime = "httpMaxDownloadTime"; public static final String httpMaxAttempts = "httpMaxAttempts"; public static final String MATOS_VERSION = "matosVersion"; public static final String MATOS_REVISION = "matosRevision"; // valid keys for GUI config properties public static final String GUI_HEIGTH = "gui.height"; public static final String GUI_WIDTH = "gui.width"; public static final String GUI_LOCATION_X = "gui.locationX"; public static final String GUI_LOCATION_Y = "gui.locationY"; private static final String MONITORING_CONFIG_DIR = "ConfigFiles"; private static final Object PHONE_CONFIG_DIR = "AndroidTools"+File.separator+"config"; private static Configuration instance; public static Configuration getInstance() { if (instance == null) { instance = new Configuration(); } return instance; } private Configuration() { defaultConfig = new HashMap<String, String>(); defaultConfig.put("com.orange.atk.phone.android.AndroidDriver", "android.xml"); defaultConfig.put("com.orange.atk.phone.android.AndroidMonkeyDriver", "android.xml"); defaultConfig.put("com.orange.atk.phone.android.AndroidICSDriver", "android.xml"); defaultConfig.put("com.orange.atk.phone.android.AndroidJBDriver", "android.xml"); defaultPhoneConfigs = new Vector<String>(); Iterator<String> configNames = defaultConfig.values().iterator(); while (configNames.hasNext()) { String name = configNames.next(); if (!defaultPhoneConfigs.contains(name)) { defaultPhoneConfigs.add(name); } } } public static String getMonitoringConfigDir(){ return Platform.getInstance().getUserConfigDir()+ File.separator + MONITORING_CONFIG_DIR; } public static String getPhoneConfigDir(){ return Platform.getInstance().getUserConfigDir() + File.separator + PHONE_CONFIG_DIR; } public HashMap<String, String> getDefaultMonitoringConfig() { return defaultConfig; } public Vector<String> defaultMonitoringConfigNames() { return defaultPhoneConfigs; } public static boolean loadConfigurationFile(String configFileName) { String userConfigDirPath = Platform.getInstance().getUserConfigDir(); Configuration.configFileName = userConfigDirPath+Platform.FILE_SEPARATOR+configFileName; String atkPath = Platform.getInstance().getJATKPath(); File atkConfigDir = new File(userConfigDirPath); try { if (!(atkConfigDir.exists())) { // Create configuration directory in user home atkConfigDir.mkdir(); Logger.getLogger(Configuration.class).info("Config directory created in " + atkConfigDir.getPath()); // Copy the main configuration file into it File newFile = new File(userConfigDirPath + Platform.FILE_SEPARATOR + configFileName); File originalFile = new File(atkPath + Platform.FILE_SEPARATOR + configFileName); FileUtil.copyfile(newFile, originalFile); Logger.getLogger(Configuration.class).info(configFileName + " copied into " + atkConfigDir.getPath()); // Create the configFile directory if necessary and copy the config files } Logger.getLogger(Configuration.class).info("Configuration.configFileName= " + Configuration.configFileName); FileInputStream fileInputStream = new FileInputStream(Configuration.configFileName); properties.load(fileInputStream); fileInputStream.close(); fileResolver = new FileResolver(new File(Platform.TMP_DIR), Integer.parseInt(getProperty(httpMaxConnectionTime)), Integer.parseInt(getProperty(httpMaxDownloadTime)), Integer.parseInt(getProperty(httpMaxAttempts)), Boolean.parseBoolean(getProperty(PROXYSET)), getProperty(PROXYHOST), getProperty(PROXYPORT)); String userConfigFilesDirPath = userConfigDirPath + Platform.FILE_SEPARATOR + "ConfigFiles" + Platform.FILE_SEPARATOR ; //properties.getProperty(CONFIGDIRECTORY); File userConfigFilesDir = new File (userConfigFilesDirPath); if((!userConfigFilesDir.exists()) || (!userConfigFilesDir.isDirectory())){ //create the configuration Directory Logger.getLogger(Configuration.class).info("creating ConfigFiles directory in "+userConfigFilesDir.getPath()); if(!userConfigFilesDir.mkdir()){ Logger.getLogger("").debug("The installation folder with the configurations files" + "does not exits.\n It should be under "+userConfigFilesDir.getPath()); } FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".xml"); } }; String atkConfigFilesDirPath = atkPath + Platform.FILE_SEPARATOR + "ConfigFiles" + Platform.FILE_SEPARATOR; String[] listfiles = new File(atkConfigFilesDirPath).list(filter); for(String fileName : listfiles){ File newFile = new File(userConfigFilesDirPath+fileName); File originalFile = new File(atkConfigFilesDirPath+fileName); FileUtil.copyfile(newFile, originalFile); } } return true; } catch (FileNotFoundException fnfe) { Alert.raise(fnfe, "Unable to find configuration file '" + configFileName + "'"); } catch (IOException ioe) { Alert.raise(ioe, "Unable to access configuration file '" + configFileName + "'"); } return false; } /** * Retrieves a config property value by its name. Use static field of this * class as keys. * * @param key * the name of the property * @return the value of the property. * @throws Alert * if the property cannot be found. */ public static String getProperty(String key) { String val = properties.getProperty(key); if (val == null) { Alert.raise(null, "Unable to find config property named '" + key + "' in " + Configuration.configFileName); } return val; } /** * Retrieves a config property value by its name. Use static field of this * class as keys. * * @param key * the name of the property * @param defaultValue * the value to use if the key is not found * @return the value of the property, or the default value. */ public static String getProperty(String key, String defaultValue) { String val = null; try { val = getProperty(key); } catch (Alert a) { val = defaultValue; } return val; } /** * Set a avalue to a property * * @param property * @param value */ public static void setProperty(String property, String value) { properties.setProperty(property, value); } /** * Write properties in the configuration file */ public static void writeProperties() { try { Logger.getLogger(Configuration.class).info("Write properties"); FileOutputStream fileOutputStream = new FileOutputStream(new File(configFileName)); properties.store(fileOutputStream, ""); fileOutputStream.close(); // externalToolParser.writeInFile(externalToolsList, // Configuration.extToolsConfigFileName); } catch (FileNotFoundException fne) { Alert.raise(fne, "Cannot find configuration file: " + fne.getMessage()); } catch (IOException ioe) { Alert.raise(ioe, "Cannot write configuration file: " + ioe.getMessage()); } catch (Exception ex) { Alert.raise(ex, "Cannot write configuration file: " + ex.getMessage()); } } public static String getVersion() { return getProperty("matosVersion"); } public static String getRevision() { return getProperty("matosRevision"); } public static String getConfigFileName() { return Configuration.configFileName; } }