// Path: wava-client/src/main/java/org/brutusin/wava/cfg/impl/ConfigImpl.java
// public class ConfigImpl {
// 
//     private String tempFolder;
//     private UICfgImpl uICfg = new UICfgImpl();
//     private SchedulerCfgImpl schedulerCfg = new SchedulerCfgImpl();
//     private ProcessCfgImpl processCfg = new ProcessCfgImpl();
//     private GroupCfgImpl groupCfg = new GroupCfgImpl();
// 
//     public SchedulerCfgImpl getSchedulerCfg() {
//         return schedulerCfg;
//     }
// 
//     public void setSchedulerCfg(SchedulerCfgImpl schedulerCfg) {
//         this.schedulerCfg = schedulerCfg;
//     }
// 
//     public ProcessCfgImpl getProcessCfg() {
//         return processCfg;
//     }
// 
//     public void setProcessCfg(ProcessCfgImpl processCfg) {
//         this.processCfg = processCfg;
//     }
// 
//     public GroupCfgImpl getGroupCfg() {
//         return groupCfg;
//     }
// 
//     public void setGroupCfg(GroupCfgImpl groupCfg) {
//         this.groupCfg = groupCfg;
//     }
// 
//     public UICfgImpl getuICfg() {
//         return uICfg;
//     }
// 
//     public void setuICfg(UICfgImpl uICfg) {
//         this.uICfg = uICfg;
//     }
// 
//     public String getTempFolder() {
//         return tempFolder;
//     }
// 
//     public void setTempFolder(String tempFolder) {
//         this.tempFolder = tempFolder;
//     }
// }
// 
// Path: wava-client/src/main/java/org/brutusin/wava/env/WavaHome.java
// public class WavaHome {
// 
//     private static volatile WavaHome instance;
// 
//     private final File file;
// 
//     public static WavaHome getInstance() {
//         if (instance == null) {
//             synchronized (WavaHome.class) {
//                 if (instance == null) {
//                     instance = new WavaHome();
//                 }
//             }
//         }
//         return instance;
//     }
// 
//     private WavaHome() {
//         String wavaHome = System.getenv(EnvEntry.WAVA_HOME.name());
//         if (wavaHome == null) {
//             throw new WavaHomeNotSetError();
//         }
//         this.file = new File(wavaHome);
//     }
// 
//     public File getFile() {
//         return file;
//     }
// 
//     private static final String removeLeadingAndTrailingSlashes(String path) {
//         if (path.startsWith("/")) {
//             path = path.substring(1);
//         }
//         if (path.endsWith("/")) {
//             path = path.substring(0, path.length() - 1);
//         }
//         return path;
//     }
// 
//     public String getId() {
//         return "wava[" + removeLeadingAndTrailingSlashes(file.getAbsolutePath()).replace("/", ".")+"]";
//     }
// }


import org.brutusin.wava.cfg.impl.ConfigImpl;
import java.io.File;
import java.io.FileInputStream;
import org.brutusin.commons.utils.Miscellaneous;
import org.brutusin.json.spi.JsonCodec;
import org.brutusin.wava.env.WavaHome;

package org.brutusin.wava.cfg;


public class Config {

    private final File tempFolder;
    private static volatile Config instance;
    private final ConfigImpl impl;

    private Config() {
        try {
            File cfgFile = new File(WavaHome.getInstance().getFile(), "cfg/wava.json");
            if (!cfgFile.exists()) {
                throw new RuntimeException("Config file not found " + cfgFile.getAbsolutePath());
            }

// Path: wava-client/src/main/java/org/brutusin/wava/cfg/impl/ConfigImpl.java
// public class ConfigImpl {
// 
//     private String tempFolder;
//     private UICfgImpl uICfg = new UICfgImpl();
//     private SchedulerCfgImpl schedulerCfg = new SchedulerCfgImpl();
//     private ProcessCfgImpl processCfg = new ProcessCfgImpl();
//     private GroupCfgImpl groupCfg = new GroupCfgImpl();
// 
//     public SchedulerCfgImpl getSchedulerCfg() {
//         return schedulerCfg;
//     }
// 
//     public void setSchedulerCfg(SchedulerCfgImpl schedulerCfg) {
//         this.schedulerCfg = schedulerCfg;
//     }
// 
//     public ProcessCfgImpl getProcessCfg() {
//         return processCfg;
//     }
// 
//     public void setProcessCfg(ProcessCfgImpl processCfg) {
//         this.processCfg = processCfg;
//     }
// 
//     public GroupCfgImpl getGroupCfg() {
//         return groupCfg;
//     }
// 
//     public void setGroupCfg(GroupCfgImpl groupCfg) {
//         this.groupCfg = groupCfg;
//     }
// 
//     public UICfgImpl getuICfg() {
//         return uICfg;
//     }
// 
//     public void setuICfg(UICfgImpl uICfg) {
//         this.uICfg = uICfg;
//     }
// 
//     public String getTempFolder() {
//         return tempFolder;
//     }
// 
//     public void setTempFolder(String tempFolder) {
//         this.tempFolder = tempFolder;
//     }
// }
// 
// Path: wava-client/src/main/java/org/brutusin/wava/env/WavaHome.java
// public class WavaHome {
// 
//     private static volatile WavaHome instance;
// 
//     private final File file;
// 
//     public static WavaHome getInstance() {
//         if (instance == null) {
//             synchronized (WavaHome.class) {
//                 if (instance == null) {
//                     instance = new WavaHome();
//                 }
//             }
//         }
//         return instance;
//     }
// 
//     private WavaHome() {
//         String wavaHome = System.getenv(EnvEntry.WAVA_HOME.name());
//         if (wavaHome == null) {
//             throw new WavaHomeNotSetError();
//         }
//         this.file = new File(wavaHome);
//     }
// 
//     public File getFile() {
//         return file;
//     }
// 
//     private static final String removeLeadingAndTrailingSlashes(String path) {
//         if (path.startsWith("/")) {
//             path = path.substring(1);
//         }
//         if (path.endsWith("/")) {
//             path = path.substring(0, path.length() - 1);
//         }
//         return path;
//     }
// 
//     public String getId() {
//         return "wava[" + removeLeadingAndTrailingSlashes(file.getAbsolutePath()).replace("/", ".")+"]";
//     }
// }


// Path: wava-client/src/main/java/org/brutusin/wava/cfg/Config.java
import org.brutusin.wava.cfg.impl.ConfigImpl;
import java.io.File;
import java.io.FileInputStream;
import org.brutusin.commons.utils.Miscellaneous;
import org.brutusin.json.spi.JsonCodec;
import org.brutusin.wava.env.WavaHome;

package org.brutusin.wava.cfg;


public class Config {

    private final File tempFolder;
    private static volatile Config instance;
    private final ConfigImpl impl;

    private Config() {
        try {
            File cfgFile = new File(WavaHome.getInstance().getFile(), "cfg/wava.json");
            if (!cfgFile.exists()) {
                throw new RuntimeException("Config file not found " + cfgFile.getAbsolutePath());
            }

            String str = Miscellaneous.toString(new FileInputStream(cfgFile), "UTF-8");
