/* * 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; import java.net.URL; import java.net.URLClassLoader; import org.ensembl.healthcheck.configuration.ConfigureTestGroups; /** * * A factory class for creating implementations of TestRegistry. Currently supported are the ConfigurationBasedTestRegistry and the * DiscoveryBasedTestRegistry. * * Use the getTestRegistry method for creating a TestRegistry. * */ public class TestRegistryFactory { /** * The kinds of test registries that this factory can produce * */ public static enum TestRegistryType { ConfigurationBased, DiscoveryBased } protected final ConfigureTestGroups configurationUserParameters; public TestRegistryFactory(ConfigureTestGroups configurationUserParameters) { this.configurationUserParameters = configurationUserParameters; } /** * * @param testRegistryType * : An element of the enum TestRegistryType * @return An implementation of TestRegistry * @throws TestRegistryCreationException * * Use for creating different kinds of configuration objects, use the enum TestRegistryType for specifying which kind * you want. * */ public TestRegistry getTestRegistry(TestRegistryType testRegistryType) throws TestRegistryCreationException { TestRegistry testRegistry = null; if (testRegistryType == TestRegistryType.ConfigurationBased) { testRegistry = createConfigurationBasedTestRegistry(); } if (testRegistryType == TestRegistryType.DiscoveryBased) { testRegistry = createDiscoveryBasedTestRegistry(); } return testRegistry; } /** * @return An instance of a ConfigurationBasedTestRegistry * @throws TestRegistryCreationException * * Creates a ConfigurationBasedTestRegistry, the configurationUserParameters must be set for this or a * TestRegistryCreationException will be thrown. * */ protected ConfigurationBasedTestRegistry createConfigurationBasedTestRegistry() throws TestRegistryCreationException { ConfigurationBasedTestRegistry testRegistry = null; ConfigureTestGroups configurationUserParameters = this.configurationUserParameters; if (configurationUserParameters == null) { throw new TestRegistryCreationException("configurationUserParameters attribute is null!"); } try { testRegistry = new ConfigurationBasedTestRegistry(configurationUserParameters); } catch (InstantiationException e) { throw new TestRegistryCreationException(e.getMessage()); } catch (IllegalAccessException e) { throw new TestRegistryCreationException(e.getMessage()); } catch (UnknownTestTypeException e) { throw new TestRegistryCreationException(e.getMessage()); } catch (ClassNotFoundException e) { throw new TestRegistryCreationException("\n--------------------------------------------------\n" + "The following class could not be found:\n" + e.getMessage() + "\n\n" + "The current classpath is:\n" + printClasspath() + "\n--------------------------------------------------\n"); } return testRegistry; } /** * @return An instance of a ConfigurationBasedTestRegistry * */ protected DiscoveryBasedTestRegistry createDiscoveryBasedTestRegistry() { return new DiscoveryBasedTestRegistry(); } /** * @return A string with the classpath * * Copied the relevant code from http://www.java-tips.org/java-se-tips/java.lang/how-to-print-classpath.html * */ protected String printClasspath() { // Get the System Classloader ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader(); StringBuffer buf = new StringBuffer(); // Get the URLs URL[] urls = ((URLClassLoader) sysClassLoader).getURLs(); for (int i = 0; i < urls.length; i++) { buf.append(urls[i].getFile()); buf.append("\n"); } return buf.toString(); } }