// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/metadata/RuleSystemMetaData.java
// public class RuleSystemMetaData {
//     private final DefaultBuilderRegistry BUILDER_REGISTRY = new DefaultBuilderRegistry();
// 
//     private final String ruleSystemName;
//     private final String tableName;
//     private final List<RuleInputMetaData> inputColumnList;
//     private final String uniqueIdColumnName;
//     private final String uniqueOutputColumnName;
// 
//     public RuleSystemMetaData(
//             String ruleSystemName,
//             String tableName,
//             String uniqueIdColName,
//             String uniqueOutputColName,
//             List<RuleInputMetaData> inputs) {
//         this.ruleSystemName = ruleSystemName;
//         this.tableName = tableName;
//         this.uniqueIdColumnName = uniqueIdColName;
//         this.uniqueOutputColumnName = uniqueOutputColName;
//         this.inputColumnList = inputs;
//     }
// 
//     /**
//      * This method loads default configuration for all rule inputs if no custom override 
//      * is given (in which case it overrides the defaults).
//      * Input and output columns always get default configuration.
//      * 
//      * @param configuration Custom configuration for rule inputs
//      */
//     public void applyCustomConfiguration(RuleInputConfigurator configuration) {
//         RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//             this.uniqueIdColumnName, BUILDER_REGISTRY.getDefaultBuilder(DefaultDataType.STRING.name()));
//         RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//             this.uniqueOutputColumnName, BUILDER_REGISTRY.getDefaultBuilder(DefaultDataType.STRING.name()));
// 
//         if (configuration == null) {
//             for (RuleInputMetaData rimd : inputColumnList) {
//                 RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//                     rimd.getName(), BUILDER_REGISTRY.getDefaultBuilder(rimd.getDataType()));
//             }
//         } else {
//             for (RuleInputMetaData rimd : inputColumnList) {
//                 RuleInputConfiguration inputConfig = configuration.getConfig(rimd.getName());
//                 if (inputConfig != null) {
//                     RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//                         rimd.getName(), inputConfig.getInputValueBuilder());
//                 } else {
//                     RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//                         rimd.getName(), BUILDER_REGISTRY.getDefaultBuilder(rimd.getDataType()));
//                 }
//             }
//         }
//     }
// 
//     public String getTableName() {
//         return tableName;
//     }
// 
//     public String getUniqueIdColumnName() {
//         return uniqueIdColumnName;
//     }
// 
//     public String getUniqueOutputColumnName() {
//         return uniqueOutputColumnName;
//     }
// 
//     public List<RuleInputMetaData> getInputColumnList() {
//         return inputColumnList;
//     }
// 
//     public String getRuleSystemName() {
//         return ruleSystemName;
//     }
// 
//     @Override
//     public String toString() {
//         return "RuleSystemMetaData{" +
//             "ruleSystemName='" + ruleSystemName + '\'' +
//             ", tableName='" + tableName + '\'' +
//             ", inputColumnList=" + inputColumnList +
//             ", uniqueIdColumnName='" + uniqueIdColumnName + '\'' +
//             ", uniqueOutputColumnName='" + uniqueOutputColumnName + '\'' +
//             '}';
//     }
// }
// 
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/metadata/RuleInputMetaData.java
// public class RuleInputMetaData implements Serializable {
//     private static final long serialVersionUID = 7018331311799000825L;
//     private final String name;
//     private final int priority;
//     private final RuleInputType ruleInputType;
//     private final String dataType;
//     private final String rangeLowerBoundFieldName;
//     private final String rangeUpperBoundFieldName;
// 
//     public RuleInputMetaData(String name, int priority, RuleInputType ruleType, String dataType,
//             String rangeLowerBoundFieldName, String rangeUpperBoundFieldName) {
//         this.name = name;
//         this.priority = priority;
//         this.ruleInputType = ruleType;
//         this.dataType = dataType;
//         this.rangeLowerBoundFieldName = rangeLowerBoundFieldName;
//         this.rangeUpperBoundFieldName = rangeUpperBoundFieldName;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public int getPriority() {
//         return priority;
//     }
// 
//     public RuleInputType getRuleInputType() {
//         return ruleInputType;
//     }
// 
//     public String getDataType() {
//         return dataType;
//     }
// 
//     public String getRangeLowerBoundFieldName() {
//         return rangeLowerBoundFieldName;
//     }
// 
//     public String getRangeUpperBoundFieldName() {
//         return rangeUpperBoundFieldName;
//     }
// 
//     @Override
//     public String toString() {
//         return "RuleInputMetaData{" +
//             "name='" + name + '\'' +
//             ", priority=" + priority +
//             ", ruleInputType=" + ruleInputType +
//             ", dataType='" + dataType + '\'' +
//             ", rangeLowerBoundFieldName='" + rangeLowerBoundFieldName + '\'' +
//             ", rangeUpperBoundFieldName='" + rangeUpperBoundFieldName + '\'' +
//             '}';
//     }
// }


import com.github.kislayverma.rulette.core.metadata.RuleSystemMetaData;
import com.github.kislayverma.rulette.core.metadata.RuleInputMetaData;
import java.util.List;
package com.github.kislayverma.rulette.core.gaia;


public class RuleSystemMetaDataMother {
    private static final String ruleSystemName = "gaia_rule_system";
    private static final String tableName = "gaia_table";
    private static final String uniqueIdColumnName = "rule_id";
    private static final String uniqueOutputColumnName = "rule_output_id";

    public static RuleSystemMetaData getDefaultMetaData() throws Exception {
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/metadata/RuleSystemMetaData.java
// public class RuleSystemMetaData {
//     private final DefaultBuilderRegistry BUILDER_REGISTRY = new DefaultBuilderRegistry();
// 
//     private final String ruleSystemName;
//     private final String tableName;
//     private final List<RuleInputMetaData> inputColumnList;
//     private final String uniqueIdColumnName;
//     private final String uniqueOutputColumnName;
// 
//     public RuleSystemMetaData(
//             String ruleSystemName,
//             String tableName,
//             String uniqueIdColName,
//             String uniqueOutputColName,
//             List<RuleInputMetaData> inputs) {
//         this.ruleSystemName = ruleSystemName;
//         this.tableName = tableName;
//         this.uniqueIdColumnName = uniqueIdColName;
//         this.uniqueOutputColumnName = uniqueOutputColName;
//         this.inputColumnList = inputs;
//     }
// 
//     /**
//      * This method loads default configuration for all rule inputs if no custom override 
//      * is given (in which case it overrides the defaults).
//      * Input and output columns always get default configuration.
//      * 
//      * @param configuration Custom configuration for rule inputs
//      */
//     public void applyCustomConfiguration(RuleInputConfigurator configuration) {
//         RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//             this.uniqueIdColumnName, BUILDER_REGISTRY.getDefaultBuilder(DefaultDataType.STRING.name()));
//         RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//             this.uniqueOutputColumnName, BUILDER_REGISTRY.getDefaultBuilder(DefaultDataType.STRING.name()));
// 
//         if (configuration == null) {
//             for (RuleInputMetaData rimd : inputColumnList) {
//                 RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//                     rimd.getName(), BUILDER_REGISTRY.getDefaultBuilder(rimd.getDataType()));
//             }
//         } else {
//             for (RuleInputMetaData rimd : inputColumnList) {
//                 RuleInputConfiguration inputConfig = configuration.getConfig(rimd.getName());
//                 if (inputConfig != null) {
//                     RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//                         rimd.getName(), inputConfig.getInputValueBuilder());
//                 } else {
//                     RuleInputValueFactory.getInstance().registerRuleInputBuilder(
//                         rimd.getName(), BUILDER_REGISTRY.getDefaultBuilder(rimd.getDataType()));
//                 }
//             }
//         }
//     }
// 
//     public String getTableName() {
//         return tableName;
//     }
// 
//     public String getUniqueIdColumnName() {
//         return uniqueIdColumnName;
//     }
// 
//     public String getUniqueOutputColumnName() {
//         return uniqueOutputColumnName;
//     }
// 
//     public List<RuleInputMetaData> getInputColumnList() {
//         return inputColumnList;
//     }
// 
//     public String getRuleSystemName() {
//         return ruleSystemName;
//     }
// 
//     @Override
//     public String toString() {
//         return "RuleSystemMetaData{" +
//             "ruleSystemName='" + ruleSystemName + '\'' +
//             ", tableName='" + tableName + '\'' +
//             ", inputColumnList=" + inputColumnList +
//             ", uniqueIdColumnName='" + uniqueIdColumnName + '\'' +
//             ", uniqueOutputColumnName='" + uniqueOutputColumnName + '\'' +
//             '}';
//     }
// }
// 
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/metadata/RuleInputMetaData.java
// public class RuleInputMetaData implements Serializable {
//     private static final long serialVersionUID = 7018331311799000825L;
//     private final String name;
//     private final int priority;
//     private final RuleInputType ruleInputType;
//     private final String dataType;
//     private final String rangeLowerBoundFieldName;
//     private final String rangeUpperBoundFieldName;
// 
//     public RuleInputMetaData(String name, int priority, RuleInputType ruleType, String dataType,
//             String rangeLowerBoundFieldName, String rangeUpperBoundFieldName) {
//         this.name = name;
//         this.priority = priority;
//         this.ruleInputType = ruleType;
//         this.dataType = dataType;
//         this.rangeLowerBoundFieldName = rangeLowerBoundFieldName;
//         this.rangeUpperBoundFieldName = rangeUpperBoundFieldName;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public int getPriority() {
//         return priority;
//     }
// 
//     public RuleInputType getRuleInputType() {
//         return ruleInputType;
//     }
// 
//     public String getDataType() {
//         return dataType;
//     }
// 
//     public String getRangeLowerBoundFieldName() {
//         return rangeLowerBoundFieldName;
//     }
// 
//     public String getRangeUpperBoundFieldName() {
//         return rangeUpperBoundFieldName;
//     }
// 
//     @Override
//     public String toString() {
//         return "RuleInputMetaData{" +
//             "name='" + name + '\'' +
//             ", priority=" + priority +
//             ", ruleInputType=" + ruleInputType +
//             ", dataType='" + dataType + '\'' +
//             ", rangeLowerBoundFieldName='" + rangeLowerBoundFieldName + '\'' +
//             ", rangeUpperBoundFieldName='" + rangeUpperBoundFieldName + '\'' +
//             '}';
//     }
// }


// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/gaia/RuleSystemMetaDataMother.java
import com.github.kislayverma.rulette.core.metadata.RuleSystemMetaData;
import com.github.kislayverma.rulette.core.metadata.RuleInputMetaData;
import java.util.List;

package com.github.kislayverma.rulette.core.gaia;


public class RuleSystemMetaDataMother {
    private static final String ruleSystemName = "gaia_rule_system";
    private static final String tableName = "gaia_table";
    private static final String uniqueIdColumnName = "rule_id";
    private static final String uniqueOutputColumnName = "rule_output_id";

    public static RuleSystemMetaData getDefaultMetaData() throws Exception {
        List<RuleInputMetaData> ruleInputs = RuleInputMetaDataMother.getDefaultValueMetaData(5);