// Path: home-core/src/main/java/com/sismics/home/core/constant/ConfigType.java
// public enum ConfigType {
// }
// 
// Path: home-core/src/main/java/com/sismics/home/core/model/dbi/Config.java
// public class Config {
//     /**
//      * Configuration parameter ID.
//      */
//     private ConfigType id;
//     
//     /**
//      * Configuration parameter value.
//      */
//     private String value;
// 
//     public Config() {
//     }
// 
//     public Config(ConfigType id, String value) {
//         this.id = id;
//         this.value = value;
//     }
// 
//     /**
//      * Getter of id.
//      *
//      * @return id
//      */
//     public ConfigType getId() {
//         return id;
//     }
// 
//     /**
//      * Setter of id.
//      *
//      * @param id id
//      */
//     public void setId(ConfigType id) {
//         this.id = id;
//     }
// 
//     /**
//      * Getter of value.
//      *
//      * @return value
//      */
//     public String getValue() {
//         return value;
//     }
// 
//     /**
//      * Setter of value.
//      *
//      * @param value value
//      */
//     public void setValue(String value) {
//         this.value = value;
//     }
//     
//     @Override
//     public String toString() {
//         return Objects.toStringHelper(this)
//                 .add("id", id)
//                 .toString();
//     }
// }
// 
// Path: home-core/src/main/java/com/sismics/util/context/ThreadLocalContext.java
// public class ThreadLocalContext {
//     /**
//      * ThreadLocal to store the context.
//      */
//     public static final ThreadLocal<ThreadLocalContext> threadLocalContext = new ThreadLocal<ThreadLocalContext>();
//     
//     /**
//      * JDBI handle.
//      */
//     private Handle handle;
//     
//     /**
//      * Private constructor.
//      */
//     private ThreadLocalContext() {
//         // NOP
//     }
//     
//     /**
//      * Returns an instance of this thread context.
//      * 
//      * @return Thread local context
//      */
//     public static ThreadLocalContext get() {
//         ThreadLocalContext context = threadLocalContext.get();
//         if (context == null) {
//             context = new ThreadLocalContext();
//             threadLocalContext.set(context);
//         }
//         return context;
//     }
// 
//     /**
//      * Cleans up the instance of this thread context.
//      */
//     public static void cleanup() {
//         threadLocalContext.set(null);
//     }
//     
//     /**
//      * Getter of handle.
//      *
//      * @return handle
//      */
//     public Handle getHandle() {
//         return handle;
//     }
// 
//     /**
//      * Setter of handle.
//      *
//      * @param handle handle
//      */
//     public void setHandle(Handle handle) {
//         this.handle = handle;
//     }
// }


import com.sismics.home.core.constant.ConfigType;
import com.sismics.home.core.model.dbi.Config;
import com.sismics.util.context.ThreadLocalContext;
import org.skife.jdbi.v2.Handle;
package com.sismics.home.core.dao.dbi;


/**
 * Configuration parameter DAO.
 * 
 * @author jtremeaux
 */
public class ConfigDao {
    /**
     * Gets a configuration parameter by its ID.
     * 
     * @param id Configuration parameter ID
     * @return Configuration parameter
     */
    public Config getById(ConfigType id) {
        final Handle handle = ThreadLocalContext.get().getHandle();

        // Prevents from getting parameters outside of a transactional context (e.g. jUnit)
        if (handle == null) {
            return null;
        }
        return handle.createQuery("select CFG_ID_C, CFG_VALUE_C" +
                "  from T_CONFIG" +
                "  where CFG_ID_C = :id")
                .bind("id", id.name())
// Path: home-core/src/main/java/com/sismics/home/core/constant/ConfigType.java
// public enum ConfigType {
// }
// 
// Path: home-core/src/main/java/com/sismics/home/core/model/dbi/Config.java
// public class Config {
//     /**
//      * Configuration parameter ID.
//      */
//     private ConfigType id;
//     
//     /**
//      * Configuration parameter value.
//      */
//     private String value;
// 
//     public Config() {
//     }
// 
//     public Config(ConfigType id, String value) {
//         this.id = id;
//         this.value = value;
//     }
// 
//     /**
//      * Getter of id.
//      *
//      * @return id
//      */
//     public ConfigType getId() {
//         return id;
//     }
// 
//     /**
//      * Setter of id.
//      *
//      * @param id id
//      */
//     public void setId(ConfigType id) {
//         this.id = id;
//     }
// 
//     /**
//      * Getter of value.
//      *
//      * @return value
//      */
//     public String getValue() {
//         return value;
//     }
// 
//     /**
//      * Setter of value.
//      *
//      * @param value value
//      */
//     public void setValue(String value) {
//         this.value = value;
//     }
//     
//     @Override
//     public String toString() {
//         return Objects.toStringHelper(this)
//                 .add("id", id)
//                 .toString();
//     }
// }
// 
// Path: home-core/src/main/java/com/sismics/util/context/ThreadLocalContext.java
// public class ThreadLocalContext {
//     /**
//      * ThreadLocal to store the context.
//      */
//     public static final ThreadLocal<ThreadLocalContext> threadLocalContext = new ThreadLocal<ThreadLocalContext>();
//     
//     /**
//      * JDBI handle.
//      */
//     private Handle handle;
//     
//     /**
//      * Private constructor.
//      */
//     private ThreadLocalContext() {
//         // NOP
//     }
//     
//     /**
//      * Returns an instance of this thread context.
//      * 
//      * @return Thread local context
//      */
//     public static ThreadLocalContext get() {
//         ThreadLocalContext context = threadLocalContext.get();
//         if (context == null) {
//             context = new ThreadLocalContext();
//             threadLocalContext.set(context);
//         }
//         return context;
//     }
// 
//     /**
//      * Cleans up the instance of this thread context.
//      */
//     public static void cleanup() {
//         threadLocalContext.set(null);
//     }
//     
//     /**
//      * Getter of handle.
//      *
//      * @return handle
//      */
//     public Handle getHandle() {
//         return handle;
//     }
// 
//     /**
//      * Setter of handle.
//      *
//      * @param handle handle
//      */
//     public void setHandle(Handle handle) {
//         this.handle = handle;
//     }
// }


// Path: home-core/src/main/java/com/sismics/home/core/dao/dbi/ConfigDao.java
import com.sismics.home.core.constant.ConfigType;
import com.sismics.home.core.model.dbi.Config;
import com.sismics.util.context.ThreadLocalContext;
import org.skife.jdbi.v2.Handle;

package com.sismics.home.core.dao.dbi;


/**
 * Configuration parameter DAO.
 * 
 * @author jtremeaux
 */
public class ConfigDao {
    /**
     * Gets a configuration parameter by its ID.
     * 
     * @param id Configuration parameter ID
     * @return Configuration parameter
     */
    public Config getById(ConfigType id) {
        final Handle handle = ThreadLocalContext.get().getHandle();

        // Prevents from getting parameters outside of a transactional context (e.g. jUnit)
        if (handle == null) {
            return null;
        }
        return handle.createQuery("select CFG_ID_C, CFG_VALUE_C" +
                "  from T_CONFIG" +
                "  where CFG_ID_C = :id")
                .bind("id", id.name())
                .mapTo(Config.class)