Java tutorial
/******************************************************************************* * Copyright 2014 The Trustees of Indiana University * * 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 edu.indiana.d2i.sloan; import java.util.HashMap; import java.util.Map; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.XMLConfiguration; import org.apache.log4j.Logger; public final class Configuration { private static Configuration instance = null; private static Logger logger = Logger.getLogger(Configuration.class); private void loadConfigurations(String xmlPath) { try { XMLConfiguration config = new XMLConfiguration(xmlPath); int size = config.getList("property.name").size(); for (int i = 0; i < size; i++) { HierarchicalConfiguration sub = config.configurationAt(String.format("property(%d)", i)); String name = sub.getString("name"); String val = sub.getString("value"); properties.put(name, val); } } catch (ConfigurationException cex) { throw new RuntimeException(cex); } } private Configuration() { properties = new HashMap<String, String>(); loadConfigurations("default.xml"); loadConfigurations("sites.xml"); logger.info(properties.toString()); } private Map<String, String> properties = null; public static class PropertyName { // classes serve as resources public static final String RESOURCES_NAMES = "sloan.ws.resources.names"; // optional properties public static final String WORKER_POOL_SIZE = "sloan.ws.hyper.workers"; public static final String MAX_RETRY = "sloan.ws.hyper.maxretry"; public static final String OPERATION_TIMEOUT_MS = "sloan.ws.hyper.timeout.sec"; public static final String VOLUME_SIZE_IN_GB = "sloan.ws.volume.size.gb"; // user related properties public static final String USER_DISK_QUOTA_IN_GB = "user.disk.quota.in.gb"; public static final String USER_CPU_QUOTA_IN_NUM = "user.cpu.quota.in.num"; public static final String USER_MEMORY_QUOTA_IN_MB = "user.memory.quota.in.mb"; // scheduler related properties public static final String SCHEDULER_IMPL_CLASS = "scheduler.impl.class"; public static final String SCHEDULER_MAX_NUM_ATTEMPTS = "scheduler.max.num.attempts"; // mandatory properties public static final String DB_DRIVER_CLASS = "sloan.ws.db.driverclass"; public static final String JDBC_URL = "sloan.ws.db.jdbcurl"; public static final String DB_USER = "sloan.ws.db.user"; public static final String DB_PWD = "sloan.ws.db.pwd"; public static final String PORT_RANGE_MIN = "sloan.ws.port.range.min"; public static final String PORT_RANGE_MAX = "sloan.ws.port.range.max"; public static final String HOSTS = "sloan.ws.hosts"; // hypervisor related properties /* credentials for ssh */ public static final String SSH_USERNAME = "host.ssh.username"; public static final String SSH_PASSWD = "host.ssh.passwd"; public static final String SSH_PRIVATE_KEY_PATH = "host.ssh.private.key.path"; /* timeout in milliseconds */ public static final String HYPERVISOR_TASK_TIMEOUT = "hypervisor.task.timeout.in.ms"; /* hypervisor commands */ public static final String CMD_CREATE_VM = "cmd.create.vm"; public static final String CMD_LAUNCH_VM = "cmd.launch.vm"; public static final String CMD_QUERY_VM = "cmd.query.vm"; public static final String CMD_SWITCH_VM = "cmd.switch.vm"; public static final String CMD_STOP_VM = "cmd.stop.vm"; public static final String CMD_DELETE_VM = "cmd.delete.vm"; /* hypervisor fire wall policy */ public static final String MAINTENANCE_FIREWALL_POLICY = "hypervisor.fw.maintenance"; public static final String SECURE_FIREWALL_POLICY = "hypervisor.fw.secure"; /* delimiter used for the key-value pair by internal API response */ public static final String RESP_KV_DELIMITER = "resp.kv.delimiter"; public static final String RESP_VM_STATUS_KEY = "resp.vm.status.key"; /* properties related with retriable task */ public static final String USE_RETRY_TASK = "use.retry.task"; public static final String RETRY_TASK_WAIT_IN_MILLIS = "retry.task.wait.in.millis"; public static final String RETRY_TASK_MAX_ATTEMPT = "retry.task.max.attempt"; /* * semicolon separated list of fully qualified class names of exceptions * that can be retried */ public static final String RETRY_TASK_RETRIABLE_EXPS = "retry.task.retriable.exps"; /* properties for random fail hypervisor */ /* value between [0.0 1.0] */ public static final String RFHYPER_RANDOM_FAIL_PROB = "rfhyper.random.fail.prob"; /* value between [0.0 1.0] */ public static final String RFHYPER_RANDOM_EXP_PROB = "rfhyper.random.exp.prob"; public static final String HYPERVISOR_FULL_CLASS_NAME = "hypervisor.full.class.name"; /* vm working directory prefix */ public static final String DEFAULT_VM_WORKDIR_PREFIX = "sloan.ws.vm.workdir.prefix"; /* email setting */ public static final String EMAIL_SENDERNAME = "email.sendername"; public static final String EMAIL_PASSWORD = "email.password"; public static final String EMAIL_SMTP_HOST = "email.smtp.host"; public static final String EMAIL_SMTP_PORT = "email.smtp.port"; /* result relative */ public static final String RESULT_DOWNLOAD_URL_PREFIX = "result.download.prefix"; public static final String RESULT_EXPIRE_IN_SECOND = "result.expire.sec"; } public static synchronized Configuration getInstance() { if (instance == null) { instance = new Configuration(); } return instance; } public String getString(String name) { return properties.get(name); } public String getString(String name, String defaultVal) { String res = properties.get(name); return (res == null) ? defaultVal : res; } public int getInt(String name) { return Integer.valueOf(getString(name)); } public int getInt(String name, int defaultVal) { return Integer.valueOf(getString(name, String.valueOf(defaultVal))); } public long getLong(String name) { return Long.valueOf(getString(name)); } public long getLong(String name, long defaultVal) { return Long.valueOf(getString(name, String.valueOf(defaultVal))); } public boolean getBoolean(String name) { return Boolean.valueOf(getString(name)); } public boolean getBoolean(String name, boolean defaultVal) { return Boolean.valueOf(getString(name, String.valueOf(defaultVal))); } /** unit test purpose */ public void setProperty(String name, String value) { properties.put(name, value); } }