package cologne.eck.all_peas.data;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class PeaProperties {
/**
* The type of the PEA.
* Possible values are:
* "image", "file", "text file" (Notebook PEA), "text" (simple Editor)
*/
private static String fileType; // set in daughter class
// i18n:
private static String language;
private static ResourceBundle languagesBundle;
private static String bundleFileName = "PeaLanguagesBundle";
// special panel for PswDialogView, currently only used in PeaProperties.getFileType():
private static Object typePanel;
/**
* The default character set, used whenever a string
* is converted to an array of bytes
*/
private static final Charset UTF_8 = Charset.forName("UTF-8");
private static String workingMode = ""; // rescue mode or test mode
// private static boolean insideJar = false;
//=================== Language support ========================
/**
* Set the language support for the PEA
*
* @param _language the language to set
* @throws MalformedURLException
*/
public final static void setLanguagesBundle(String _language) throws MalformedURLException {
Locale defaultLocale = Locale.getDefault();
Locale currentLocale;
// i18n:
if (_language == null) {
if (defaultLocale == null) { // openSuse
defaultLocale = new Locale( System.getProperty("user.language") );
}
language = defaultLocale.getLanguage(); // get default language
} else {
language = _language;
}
currentLocale = new Locale(language); // set default language as language
// If PeaControl is not used inside of a pea
// FilePanel uses this bundle
try {
languagesBundle = ResourceBundle.getBundle("resources." + bundleFileName, currentLocale);
} catch (MissingResourceException mre) {
// If called in PeaFactory, not in PEA
try {
//System.out.println("Try to use bundle in folder resources (PeaFactory-Mode)");
File file = new File("resources");
URL[] urls = {file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
languagesBundle = ResourceBundle.getBundle(bundleFileName, currentLocale, loader);
} catch (MissingResourceException mre1) {
System.err.println("Resource Bundle PeaLanguagesBundle "+ currentLocale + " not found");
try{
// for PeaFactory: en
File file = new File("resources");
URL[] urls = {file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
currentLocale = new Locale("en");
language = "en";
languagesBundle = ResourceBundle.getBundle(bundleFileName, currentLocale, loader);
} catch (MissingResourceException mre2) {
// for PEA: en
languagesBundle = ResourceBundle.getBundle("resources." + bundleFileName, new Locale("en"));
}
}
}
}
/**
* Get the current language bundle. If no bundle
* was set before, it is set with default language
*
* @return the current language bundle
*/
public final static ResourceBundle getBundle(){
if (languagesBundle == null) { // set default language
try {
setLanguagesBundle(null);
} catch (MalformedURLException e) {
System.err.println("Language support failed: " + e.toString() + "\n " + e.getMessage());
e.printStackTrace();
}
}
return languagesBundle;
}
/**
* Get the currently used language
*
* @return the language as String
*/
public static String getLanguage() {
return language;
}
/**
* Get the file name of the current resource bundle
*
* @return the bundleFileName
*/
public static String getBundleFileName() {
return bundleFileName;
}
/**
* Set the file name of the resource bundle
*
* @param newBundleFileName the bundleFileName to set
*/
public static void setBundleFileName(String newBundleFileName) {
PeaProperties.bundleFileName = newBundleFileName;
}
/**
* The working mode of the PEA:
* -t test mode
* -r rescue mode
*
* @return the workingMode
*/
public static String getWorkingMode() {
return workingMode;
}
/**
* Set the working mode:
* -t for test mode
* -r for rescue mode
*
* @param workingMode the workingMode to set
*/
public static void setWorkingMode(String workingMode) {
PeaProperties.workingMode = workingMode;
}
/**
* The character set used in all classes
*
* @return the Charset UTF-8
*/
public static Charset getCharset() {
return UTF_8;
}
/**
* Check if the content is stored as file inside the jar archive,
* used in LockFrameImage
*
* @return true if the content is inside the jar file
*/
/* public static boolean isInsideJar() {
return insideJar;
} */
/**
* Set variable to check if the content is located
* inside the jar archive,
* used in ImageControl
*
* @param insideJar
*/
/* public static void setInsideJar(boolean insideJar) {
PeaProperties.insideJar = insideJar;
} */
/**
* Set a String, that indicates the type of the PEA.
* Possible values are:
* "image", "file", "text file" (Notebook PEA), "text" (simple Editor)
*
* @param _fileType
*/
public final static void setFileType(String _fileType) {
fileType = _fileType;
}
/**
* Get a String, that indicates the type of the PEA
*
* @return a String indicating the type of the PEA.
* Possible values are: "image", "file", "text file" (Notebook PEA), "text" (simple Editor)
*/
public final static String getFileType() {
return fileType;
}
/**
* @return the typePanel
*/
public static Object getTypePanel() {
return typePanel;
}
/**
* @param typePanel the typePanel to set
*/
public static void setTypePanel(Object typePanel) {
PeaProperties.typePanel = typePanel;
}
}