// Path: src/main/java/NativeOpt.java
// class NativeOpt {
// 
//     String name;
// 
//     java.util.HashMap <String, Integer> option;
// 
//     NativeOpt(String optionName, String[] optionParm, int[] optionBit) {
// 
//         if (optionParm.length != optionBit.length) {
//             RFLogger.log(Level.SEVERE, "Constructor parameters malformed and of unequal length for:  " + optionName);
//             RFLogger.log(Level.SEVERE, "Please contact technical support.");
//             throw new IllegalArgumentException();
//         }
// 
//         name = optionName;
//         option = new java.util.HashMap <String, Integer> (optionParm.length);
// 
//         for (int i = 0; i < optionParm.length; i++) {
//             option.put(optionParm[i], optionBit[i]);
//         }
//     }
// 
// 
//     int get(String optionParm) {
//         if (!option.containsKey(optionParm)) {
//             RFLogger.log(Level.SEVERE, "Unknown key:  " + optionParm);
//             throw new IllegalArgumentException();
//         }
//         return option.get(optionParm).intValue();
//     }
// 
// 
// }
// 
// Path: src/main/java/RFLogger.java
// public class RFLogger {
// 
//     private String fileName = "./classes/log.properties";
//     private static java.util.logging.Logger logger = null;
//     
//     private static ConsoleHandler consoleHandler;
//     
//     private static SimpleFormatter simpleFormatter;
// 
//     private RFLogger() {
// 
//         // Create the logger.
//         logger = java.util.logging.Logger.getLogger(RFLogger.class.getName());
// 
//         try {
//             java.util.logging.LogManager.getLogManager().readConfiguration(new FileInputStream(fileName));
// 
//         }
//         catch (IOException e) {
//             System.out.println("Unable to configure logging for " + fileName);
// 
//             e.printStackTrace();
// 
//             System.out.println("Resorting to console handler.");
// 
//         
//             //Create consoleHandler.
//             consoleHandler = new ConsoleHandler();
//         
//             //Assigning handler to logger object.
//             logger.addHandler(consoleHandler);
//         
//             //Setting levels to handler and logger.
//             consoleHandler.setLevel(Level.INFO);
//             logger.setLevel(Level.ALL);
//         
//             // Creating SimpleFormatter for human readable format.
//             simpleFormatter = new SimpleFormatter();
// 
//             // Setting formatter to all handlers.
//             consoleHandler.setFormatter(simpleFormatter);
// 
//             // Remove parent handlers in order to respect our formatting only.
//             // logger.setUseParentHandlers(false);
//         }
//     }
//     
//     private static java.util.logging.Logger getLogger() {
//         if(logger == null){
//             new RFLogger();
//         }
//         return logger;
//     }
//     
//     public static void log(Level level, String msg, Throwable thrown){
//         getLogger().log(level, msg, thrown);
//     }
//     
//     public static void log(Level level, String msg){
//         getLogger().log(level, msg);
//     }
// 
// }


import com.kogalur.randomforest.NativeOpt;
import com.kogalur.randomforest.RFLogger;
import java.util.logging.Level;
import java.util.List;
            ensembleList.put("predictionType",
                             new NativeOpt("predictionType",
                                           new String[] {"default"},
                                           new int[] {0}));

        }
        else if (family.equals("RF-U")) {
            ensembleArg.put("errorType", "no");
            ensembleList.put("errorType",
                             new NativeOpt("errorType",
                                           new String[] {"no"},
                                           new int[] {0}));

            ensembleArg.put("predictionType", "no");
            ensembleList.put("predictionType",
                             new NativeOpt("predictionType",
                                           new String[] {"no"},
                                           new int[] {0}));

        }
        
    }

    void set(String key, String value) {
        if (ensembleList.containsKey(key)) {

            boolean setFlag = true;
        
            // The following keys have restrictions.
            if (key.equals("forest")) {
// Path: src/main/java/NativeOpt.java
// class NativeOpt {
// 
//     String name;
// 
//     java.util.HashMap <String, Integer> option;
// 
//     NativeOpt(String optionName, String[] optionParm, int[] optionBit) {
// 
//         if (optionParm.length != optionBit.length) {
//             RFLogger.log(Level.SEVERE, "Constructor parameters malformed and of unequal length for:  " + optionName);
//             RFLogger.log(Level.SEVERE, "Please contact technical support.");
//             throw new IllegalArgumentException();
//         }
// 
//         name = optionName;
//         option = new java.util.HashMap <String, Integer> (optionParm.length);
// 
//         for (int i = 0; i < optionParm.length; i++) {
//             option.put(optionParm[i], optionBit[i]);
//         }
//     }
// 
// 
//     int get(String optionParm) {
//         if (!option.containsKey(optionParm)) {
//             RFLogger.log(Level.SEVERE, "Unknown key:  " + optionParm);
//             throw new IllegalArgumentException();
//         }
//         return option.get(optionParm).intValue();
//     }
// 
// 
// }
// 
// Path: src/main/java/RFLogger.java
// public class RFLogger {
// 
//     private String fileName = "./classes/log.properties";
//     private static java.util.logging.Logger logger = null;
//     
//     private static ConsoleHandler consoleHandler;
//     
//     private static SimpleFormatter simpleFormatter;
// 
//     private RFLogger() {
// 
//         // Create the logger.
//         logger = java.util.logging.Logger.getLogger(RFLogger.class.getName());
// 
//         try {
//             java.util.logging.LogManager.getLogManager().readConfiguration(new FileInputStream(fileName));
// 
//         }
//         catch (IOException e) {
//             System.out.println("Unable to configure logging for " + fileName);
// 
//             e.printStackTrace();
// 
//             System.out.println("Resorting to console handler.");
// 
//         
//             //Create consoleHandler.
//             consoleHandler = new ConsoleHandler();
//         
//             //Assigning handler to logger object.
//             logger.addHandler(consoleHandler);
//         
//             //Setting levels to handler and logger.
//             consoleHandler.setLevel(Level.INFO);
//             logger.setLevel(Level.ALL);
//         
//             // Creating SimpleFormatter for human readable format.
//             simpleFormatter = new SimpleFormatter();
// 
//             // Setting formatter to all handlers.
//             consoleHandler.setFormatter(simpleFormatter);
// 
//             // Remove parent handlers in order to respect our formatting only.
//             // logger.setUseParentHandlers(false);
//         }
//     }
//     
//     private static java.util.logging.Logger getLogger() {
//         if(logger == null){
//             new RFLogger();
//         }
//         return logger;
//     }
//     
//     public static void log(Level level, String msg, Throwable thrown){
//         getLogger().log(level, msg, thrown);
//     }
//     
//     public static void log(Level level, String msg){
//         getLogger().log(level, msg);
//     }
// 
// }


// Path: src/main/java/EnsembleArg.java
import com.kogalur.randomforest.NativeOpt;
import com.kogalur.randomforest.RFLogger;
import java.util.logging.Level;
import java.util.List;

            ensembleList.put("predictionType",
                             new NativeOpt("predictionType",
                                           new String[] {"default"},
                                           new int[] {0}));

        }
        else if (family.equals("RF-U")) {
            ensembleArg.put("errorType", "no");
            ensembleList.put("errorType",
                             new NativeOpt("errorType",
                                           new String[] {"no"},
                                           new int[] {0}));

            ensembleArg.put("predictionType", "no");
            ensembleList.put("predictionType",
                             new NativeOpt("predictionType",
                                           new String[] {"no"},
                                           new int[] {0}));

        }
        
    }

    void set(String key, String value) {
        if (ensembleList.containsKey(key)) {

            boolean setFlag = true;
        
            // The following keys have restrictions.
            if (key.equals("forest")) {
                RFLogger.log(Level.WARNING, "forest ensemble cannot be modified.");