// SettingsFactory.java
//
// Authors:
// Antonio J. Nebro <antonio@lcc.uma.es>
// Juan J. Durillo <durillo@lcc.uma.es>
//
// Copyright (c) 2011 Antonio J. Nebro, Juan J. Durillo
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package jmetal.experiments;
import jmetal.util.Configuration;
import jmetal.util.JMException;
import java.lang.reflect.Constructor;
/**
* This class represents a factory for Setting object
*/
public class SettingsFactory {
/**
* Creates a experiments.settings object
* @param algorithmName Name of the algorithm
* @param params Parameters
* @return The experiments.settings object
* @throws JMException
*/
public Settings getSettingsObject(String algorithmName, Object [] params)
throws JMException {
String base = "jmetal.experiments.settings." + algorithmName + "_Settings";
try {
Class problemClass = Class.forName(base);
Constructor [] constructors = problemClass.getConstructors();
int i = 0;
//find the constructor
while ((i < constructors.length) &&
(constructors[i].getParameterTypes().length!=params.length)) {
i++;
}
// constructors[i] is the selected one constructor
Settings algorithmSettings = (Settings)constructors[i].newInstance(params);
return algorithmSettings;
}// try
catch(Exception e) {
e.printStackTrace() ;
Configuration.logger_.severe("SettingsFactory.getSettingsObject: " +
"Settings '"+ base + "' does not exist. " +
"Please, check the algorithm name in jmetal/metaheuristics") ;
throw new JMException("Exception in " + base + ".getSettingsObject()") ;
} // catch
} // getSttingsObject
} // SettingsFactory