package com.sandwich.util.io.directories; import com.sandwich.koan.util.ApplicationUtils; public abstract class DirectoryManager { private DirectoryManager(){} private static DirectorySet production = new ProductionDirectories(); private static DirectorySet instance = production; public static final String FILESYSTEM_SEPARATOR = System.getProperty("file.separator"); public static void setDirectorySet(DirectorySet lInstance){ instance = lInstance; } public static String getMainDir(){ return constructMainDir(instance); } public static String getProdMainDir() { return constructMainDir(production); } private static String constructMainDir(DirectorySet directories){ return injectFileSystemSeparators( directories.getBaseDir(), directories.getProjectDir()); } public static String getConfigDir(){ return injectFileSystemSeparators( instance.getBaseDir(), production.getProjectDir(), instance.getAppDir(), instance.getConfigDir()); } public static String getSourceDir(){ return constructProjectDir(instance, instance.getSourceDir()); } public static String getProdSourceDir(){ return constructProjectDir(production, production.getSourceDir()); } public static String getBinDir(){ return injectFileSystemSeparators( instance.getBaseDir(), production.getProjectDir(), instance.getAppDir(), instance.getBinaryDir()); } public static String getDataDir() { return injectFileSystemSeparators( instance.getBaseDir(), production.getProjectDir(), instance.getAppDir(), instance.getDataDir()); } private static String constructProjectDir(DirectorySet directories, String childDir){ return injectFileSystemSeparators( directories.getBaseDir(), directories.getProjectDir(), childDir); } public static String getProjectLibraryDir(){ return injectFileSystemSeparators( instance.getBaseDir(), production.getProjectDir(), instance.getAppDir(), instance.getLibrariesDir()); } public static String getProjectI18nDir(){ return injectFileSystemSeparators( instance.getBaseDir(), production.getProjectDir(), instance.getAppDir(), instance.getConfigDir(), instance.getI18nDir()); } public static String getProjectDataSourceDir() { return injectFileSystemSeparators(getDataDir(), instance.getSourceDir()); } public static String getDataFile() { return injectFileSystemSeparators(getConfigDir(), "file_hashes.dat"); } /** * Will take "home", "wilford", "liberty" and produce: "/home/wilford/liberty" * * @param folders * @return concatenated folders w/ file separators */ public static String injectFileSystemSeparators(String...folders){ StringBuilder builder = new StringBuilder(); for(String folder : folders){ if(FILESYSTEM_SEPARATOR.equals(folder)){ continue; } builder.append(FILESYSTEM_SEPARATOR); while(folder.startsWith(FILESYSTEM_SEPARATOR)){ folder = folder.substring(1); } while(folder.endsWith(FILESYSTEM_SEPARATOR)){ folder = folder.substring(0, folder.lastIndexOf(FILESYSTEM_SEPARATOR)); } builder.append(folder); } String constructedFolder = builder.toString(); if(ApplicationUtils.isWindows()){ if(constructedFolder.startsWith(FILESYSTEM_SEPARATOR)){ constructedFolder = constructedFolder.substring(1); } constructedFolder = constructedFolder.replace("%20", " "); } return constructedFolder; } }