/* * 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.eg_gui; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; import org.ensembl.healthcheck.DatabaseRegistry; import org.ensembl.healthcheck.configuration.ConfigureHost; import org.ensembl.healthcheck.configurationmanager.ConfigurationFactory; import org.ensembl.healthcheck.configurationmanager.ConfigurationFactory.ConfigurationType; import org.ensembl.healthcheck.util.DBUtils; public class GuiTestRunnerFrameUtils { /** The logger to use for this class */ protected static Logger logger = Logger.getLogger("HealthCheckLogger"); /** * <p> * Creates a configuration object of type ConfigureHost from the File * passed as a parameter and returns it. * </p> * * @param iniFile * @return config object */ protected static ConfigureHost getHostConfiguration(File iniFile) { List<File> propertyFileNames = new ArrayList<File>(); propertyFileNames.add(iniFile); ConfigurationFactory<ConfigureHost> confFact = new ConfigurationFactory( ConfigureHost.class, propertyFileNames ); ConfigureHost configuration = confFact.getConfiguration(ConfigurationType.Properties); return configuration; } /** * <p> * Iterates over all files in the directories dirWithDbServerConfigs. * Assumes they are inifiles with data to populate a ConfigureHost object. * Creates a ConfigureHost object for every inifile and returns a * List<ConfigureHost>. * </p> * * @param dirsWithDbServerConfigs * @return list of configuration objects */ public static List<ConfigureHost> createDbDetailsConfigurations(String... dirsWithDbServerConfigs) { List<ConfigureHost> dbDetails = new ArrayList<ConfigureHost>(); for (String dirWithDbServerConfigs : dirsWithDbServerConfigs) { File currentDir = new File(dirWithDbServerConfigs); if (currentDir.exists() && currentDir.canRead() && currentDir.isDirectory()) { for ( File f : currentDir.listFiles( // Only use ini files. // new FilenameFilter() { public boolean accept(File arg0, String arg1) { return arg1.endsWith(".ini"); } } ) ) { ConfigureHost configuration = getHostConfiguration(f); dbDetails.add(configuration); } } else { logger.info("Skipping " + currentDir); } } return dbDetails; } /** * * <p> * Returns true, if it can connect to the database server specified in * the dbDetails parameter and finds at least one database one it, false * otherwise. * </p> * * @param dbDetails * @return true if connection succeeds */ protected static boolean canConnectToDbServer(ConfigureHost dbDetails) { DBUtils.initialise(); DBUtils.setHostConfiguration(dbDetails); List<String> regexps = new ArrayList<String>(); regexps.add(".*"); DatabaseRegistry databaseRegistry = new DatabaseRegistry( regexps, null, null, false ); return databaseRegistry.getEntryCount()>0; } /** * <p> * Iterates over the List<ConfigureHost> parameter which is a list of * dbDetails and returns a list of List<ConfigureHost> which are the ones * to which it can connect and that have at least one database on them. * </p> * * @param dbDetails * @return configuration objects */ public static List<ConfigureHost> grepForAvailableServers(List<ConfigureHost> dbDetails) { List<ConfigureHost> availableDbDetails = new ArrayList<ConfigureHost>(); for (ConfigureHost currentDbDetails : dbDetails) { if (canConnectToDbServer(currentDbDetails)) { availableDbDetails.add(currentDbDetails); } else { logger.warning("Can't connect to " + currentDbDetails.getHost() + ":" + currentDbDetails.getPort()); } } return availableDbDetails; } }