// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/IInputValue.java
// public interface IInputValue<T> {
//     String getDataType();
//     T getValue();
//     int compareTo(String obj);
//     int compareTo(IInputValue<T> obj);
//     boolean isEmpty();
// }
// 
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/IInputValueBuilder.java
// public interface IInputValueBuilder<T> {
//     IInputValue<T> build(String value);
// }


import com.github.kislayverma.rulette.core.ruleinput.value.IInputValue;
import com.github.kislayverma.rulette.core.ruleinput.value.IInputValueBuilder;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
package com.github.kislayverma.rulette.core.ruleinput;


public class RuleInputValueFactory {
    private static RuleInputValueFactory INSTANCE;
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/IInputValue.java
// public interface IInputValue<T> {
//     String getDataType();
//     T getValue();
//     int compareTo(String obj);
//     int compareTo(IInputValue<T> obj);
//     boolean isEmpty();
// }
// 
// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/value/IInputValueBuilder.java
// public interface IInputValueBuilder<T> {
//     IInputValue<T> build(String value);
// }


// Path: rulette-core/src/main/java/com/github/kislayverma/rulette/core/ruleinput/RuleInputValueFactory.java
import com.github.kislayverma.rulette.core.ruleinput.value.IInputValue;
import com.github.kislayverma.rulette.core.ruleinput.value.IInputValueBuilder;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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


public class RuleInputValueFactory {
    private static RuleInputValueFactory INSTANCE;
    private final Map<String, IInputValueBuilder> builderMap;