FitnessFunctionDriverFactory.java

/**
 * @(#)FitnessFunctionDriverFactory.java
 * Copyright (C) 2008-2011 delhezi.com
 *
 * This class is released under the:
 * GNU Lesser General Public License (LGPL) version 3 or later.
 * http://www.gnu.org/copyleft/lesser.html
 */
package com.delhezi.ga.fitnessfunction.drivers.factory;

import com.delhezi.ga.exception.GeneticAlgorithmException;
import com.delhezi.ga.fitnessfunction.drivers.IFitnessFunctionDriver;
import com.delhezi.ga.fitnessfunction.drivers.ScriptEngineDriver;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Sparametryzowana metoda wytwórcza sterownika funkcji celu.
 * @version 1.0 2009-06-10
 * @author <a href="mailto:wojciech.wolszczak@delhezi.com">
 * Wojciech Wolszczak</a>
 */
public class FitnessFunctionDriverFactory {

    /** Logger object. */
    private static final Logger LOGGER =
        Logger.getLogger(FitnessFunctionDriverFactory.class.getName());

    /** Delhezi Error Code. */
    private static final String DERC = "1-3.1.1-1-";

    /** Class name. */
    private static final String CLASS_NAME =
        FitnessFunctionDriverFactory.class.getName();


    /**
     * Tworzy nowy obiekt sterownika finkcji celu i zwraca referencję do niego.
     * @param scriptEnginName Nazwa silnika skryptów. Przykładowe wartości:
     *                        [js, rhino, JavaScript, javascript,
     *                        ECMAScript, ecmascript].
     * @param scriptPath  Bezwzględna ścieżka zakończona "/" do katalogu w
     * którym składowane są skrytpy funkcji celu.
     * @param scriptFile  Naza pliku ze skrytem funkcji celu.
     * @return Funkcja celu.
     * @throws GeneticAlgorithmException Propagowany z funkcji
     * ScriptEngineDriver klas implementujących silniki funkcji celu.
     */
    public static IFitnessFunctionDriver getFitnessFunctionEngineDriver(
                                                final String scriptEnginName,
                                                final String scriptPath,
                                                final String scriptFile)
    throws GeneticAlgorithmException {
        LOGGER.entering(CLASS_NAME, "getFitnessFunctionEngineDriver",
                        new Object[] {scriptEnginName, scriptPath,
                                      scriptFile });
        IFitnessFunctionDriver driv =
            new ScriptEngineDriver(scriptEnginName, scriptPath, scriptFile);
        LOGGER.exiting(CLASS_NAME, "getFitnessFunctionEngineDriver", driv);
        return driv;
    }

  /**
   * Zwraca typ sterownika funkcji celu określony dla parametru.
   * @param fitnessFunctionDriver Referencja do obiektu sterownika funkcji celu.
   * @return Typ sterownika funkcji celu.
   * @throws GeneticAlgorithmException DERC-1-3.1.1-1-2
   * @since 1.0
   */
    public static FitnessFunctionDriverType getFitnessFunctionEngineDriverType(
                           final IFitnessFunctionDriver fitnessFunctionDriver)
    throws GeneticAlgorithmException {
        LOGGER.entering(CLASS_NAME, "getFitnessFunctionEngineDriverType",
                        fitnessFunctionDriver);

        String pClassName = fitnessFunctionDriver.getClass().getName();

        if (pClassName.equals("com.delhezi.ga.fitnessfunction.drivers.ScriptEngineDriver")) {
            return FitnessFunctionDriverType.ScriptEngineDriver;
        }

        GeneticAlgorithmException e =
            new GeneticAlgorithmException("DERC-" + DERC +
                                          "2: Parametr fitnessFunctionDriver=" +
                                          pClassName + " is not recognized.");
        LOGGER.log(Level.WARNING, "getFitnessFunctionEngineDriverType", e);
        throw e;
    }
}