/* * Copyright [1999-2015] Wellcome Trust Sanger Institute and the EMBL-European Bioinformatics Institute * Copyright [2016-2017] EMBL-European Bioinformatics Institute * * 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 org.ensembl.healthcheck.configurationmanager; import java.lang.reflect.InvocationHandler; import uk.co.flamingpenguin.jewel.cli.OptionNotPresentException; /** * * A configuration object that gets its information from System properties. * * Use the newInstance method for instantiation. * */ public class ConfigurationBySystemEnvironment<T> extends AbstractAliasAwareWithStanardInvocationHanderConfigurationBacking<T> { /** * <p> * Use this method to create instances of this configuration object. * </p> * * <pre> * ConfigurationUserParameters configuration = (ConfigurationUserParameters) ConfigurationBySystemEnvironment * .newInstance(ConfigurationUserParameters.class); * </pre> * * @param configurationInterfaceToProxy * : The class object of the configuration interface that this * configuration object will proxy * * @return an instance of the configuration class passed. Should be casted * to the type that was requested as shown in the code example * above. * */ public static Object newInstance(Class configurationInterfaceToProxy) { InvocationHandler handler; handler = new ConfigurationBySystemEnvironment( configurationInterfaceToProxy); Object configuration = java.lang.reflect.Proxy.newProxyInstance( configurationInterfaceToProxy.getClassLoader(), new Class[] { configurationInterfaceToProxy }, handler); return configuration; } public ConfigurationBySystemEnvironment(Class<T> configurationClass) { super(configurationClass); } protected String mockDirectGetMethod(String varRequested) { String result = System.getProperty(varRequested); if (result == null) { throw new OptionNotPresentException("varRequested does not exist!"); } return result; } protected boolean mockDirectIsMethod(String varRequested) { boolean result = true; try { mockDirectGetMethod(varRequested); } catch (OptionNotPresentException e) { result = false; } return result; } public String toString() { return this.getClass().getSimpleName(); } }