package com.constellio.app.entities.modules.locators;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import com.constellio.model.utils.i18n.Utf8ResourceBundles;
public class DefaultModuleResourcesLocator implements ModuleResourcesLocator {
private File pluginsResourcesFolder;
File modulesResources;
private File i18nFolder;
public DefaultModuleResourcesLocator(File pluginsResourcesFolder, File modulesResources, File i18nFolder) {
this.pluginsResourcesFolder = pluginsResourcesFolder;
this.modulesResources = modulesResources;
this.i18nFolder = i18nFolder;
}
@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;
}
File moduleMigrations;
if (module == null) {
moduleMigrations = new File(i18nFolder, "migrations" + File.separator + "core");
} else {
moduleMigrations = new File(i18nFolder, "migrations" + File.separator + module);
}
return new File(moduleMigrations, versionWithUnderscores);
}
@Override
public File getModuleResourcesFolder(String module) {
File pluginResourcesFolder = getPluginResourcesFolder(module);
if (pluginResourcesFolder != null) {
return pluginResourcesFolder;
}
if (module == null) {
return nullIfInexistent(new File(modulesResources, "core"));
} else {
return nullIfInexistent(new File(modulesResources, module));
}
}
@Override
public File getModuleI18nFolder(String module) {
if (module != null) {
File pluginResourcesFolder = getPluginResourcesFolder(module);
if (pluginResourcesFolder != null) {
return nullIfInexistent(new File(pluginResourcesFolder, "i18n"));
}
return null;
} else {
return i18nFolder;
}
}
@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) {
return module == null ? null : nullIfInexistent(new File(pluginsResourcesFolder, module));
}
private File nullIfInexistent(File file) {
return file.exists() ? file : null;
}
private String removeBadSeparators(String path) {
if (File.separator.equals("/")) {
return path.replace("\\", File.separator);
} else {
return path.replace("/", File.separator);
}
}
public static Utf8ResourceBundles getResourceBundle(File folder, String bundleName) {
File properties = new File(folder, bundleName + ".properties");
if (properties.exists()) {
URL[] urls;
try {
urls = new URL[] { folder.toURI().toURL() };
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
return new Utf8ResourceBundles(bundleName, urls);
} else {
return null;
}
}
}