package com.constellio.app.entities.modules.locators; import static com.constellio.app.entities.modules.locators.DefaultModuleResourcesLocator.getResourceBundle; import java.io.File; import com.constellio.model.conf.FoldersLocator; import com.constellio.model.utils.i18n.Utf8ResourceBundles; public class ProjectModeModuleResourcesLocator implements ModuleResourcesLocator { private FoldersLocator foldersLocator = new FoldersLocator(); @Override public Utf8ResourceBundles getModuleI18nBundle(String module) { File folder = getModuleI18nFolder(module); if (folder == null) { return null; } else if (folder.getAbsolutePath().contains(File.separator + module + File.separator)) { return getResourceBundle(folder, module + "_i18n"); } else { return getResourceBundle(folder, "i18n"); } } @Override public Utf8ResourceBundles getModuleMigrationI18nBundle(String module, String version) { String versionWithUnderscores = version.replace(".", "_"); File folder = getModuleMigrationResourcesFolder(module, version); if (folder == null) { return null; } else if (module == null) { return getResourceBundle(folder, "core_" + versionWithUnderscores); } else { return getResourceBundle(folder, module + "_" + versionWithUnderscores); } } @Override public File getModuleMigrationResourcesFolder(String module, String version) { String versionWithUnderscores = version.replace(".", "_"); File pluginResourcesFolder = getPluginResourcesFolder(module); if (pluginResourcesFolder != null) { File migrationFolder = new File(pluginResourcesFolder, "migrations" + File.separator + versionWithUnderscores); return migrationFolder.exists() ? migrationFolder : null; } FoldersLocator foldersLocator = new FoldersLocator(); File moduleMigrations; if (module == null) { moduleMigrations = new File(foldersLocator.getI18nFolder(), "migrations" + File.separator + "core"); } else { moduleMigrations = new File(foldersLocator.getI18nFolder(), "migrations" + File.separator + module); } return new File(moduleMigrations, versionWithUnderscores); } @Override public File getModuleResourcesFolder(String module) { if (module == null) { return foldersLocator.getResourcesFolder(); } else { File pluginFolder = getPluginResourcesFolder(module); return nullIfInexistent(pluginFolder != null ? pluginFolder : foldersLocator.getModuleResourcesFolder(module)); } } private File nullIfInexistent(File file) { return file.exists() ? file : null; } @Override public File getModuleI18nFolder(String module) { File pluginResourcesFolder = getPluginResourcesFolder(module); if (pluginResourcesFolder != null) { return nullIfInexistent(new File(pluginResourcesFolder, "i18n")); } return module == null ? foldersLocator.getI18nFolder() : null; } @Override public File getModuleResource(String module, String resource) { return new File(getModuleResourcesFolder(module), removeBadSeparators(resource)); } @Override public File getModuleMigrationResource(String module, String version, String resource) { return new File(getModuleMigrationResourcesFolder(module, version), removeBadSeparators(resource)); } private File getPluginResourcesFolder(String module) { File constellioPlugins = foldersLocator.getPluginsRepository(); if (constellioPlugins.exists() && constellioPlugins.listFiles() != null) { for (File subFolder : constellioPlugins.listFiles()) { if (subFolder.getName().startsWith("plugin")) { File resourcesFolder = new File(subFolder, "resources" + File.separator + module); if (resourcesFolder.exists()) { return resourcesFolder; } } } } return null; } private String removeBadSeparators(String path) { if (File.separator.equals("/")) { return path.replace("\\", File.separator); } else { return path.replace("/", File.separator); } } }