/*
* BrowserParameters.java - keeps track of all the browser parameters.
*
* Copyright (c) 2005 Andrew Krizhanovsky /aka at mail.iias.spb.su/
* Distributed under GNU Public License.
*/
package com.touchgraph.wikibrowser.parameter;
import wikipedia.util.*;
import wikipedia.language.Encodings;
import wikipedia.kleinberg.SessionHolder;
import java.util.Properties;
import java.util.*;
public class BrowserParameters extends Parameters implements Constants {
private SessionHolder session;
/** The selected Wikipedia (selected language) */
private String language;
private String lang_code;
/** Map from language code to Wikipedia MySQL database host */
private Map<String,String> db_host;
/** Map from language code to Wikipedia MySQL database name */
private Map<String,String> db_name;
/** MySQL username */
private Map<String,String> user;
/** MySQL passwords */
private Map<String,String> pass;
/** Wiki site prefix */
private Map<String,String> wiki_url;
/** Start node */
private Map<String,String> node;
/** enabling of dump result of work to log directory */
private boolean b_log_dump2dir;
/** log directory */
private String log_dir;
/** encodings, see wikipedia.util.Encodings */
private String enc_java;
private String enc_ui;
private int radius;
private boolean show_backlinks;
public BrowserParameters() {
super(".wikibrowser.server.props", "WikiBrowser Server Properties");
db_host = new HashMap<String, String>();
db_name = new HashMap<String, String>();
user = new HashMap<String, String>();
pass = new HashMap<String, String>();
wiki_url= new HashMap<String, String>();
node = new HashMap<String, String>();
System.out.print("Loading browser parameters... ");
getParameters();
// decode text parameters (categories, node, etc.) using parameter "java_enc"
// setDefaultsEncoded();
System.out.println("OK.");
}
/** Decode default text values using encoding value,
* extracted from .wikibrowser.server.props file.
*/
public void setDefaultsEncoded() {
String n;
for(int i=0; i<LANG_CODE.length; i++) {
if(LANG_CODE[i].equalsIgnoreCase("en")) {
n = NODE_EN;
} else {
if (LANG_CODE[i].equalsIgnoreCase("eo")) {
n = NODE_EO;
} else {
if (LANG_CODE[i].equalsIgnoreCase("ru")) {
if(null != session) {
n = session.connect.enc.EncodeFromJava(NODE_RU);
} else {
n = Encodings.FromTo(NODE_RU, enc_java, Encodings.enc_int_default);
//n = Encodings.FromTo(NODE_RU, "UTF8", "Cp1251");
//n = Encodings.FromTo(NODE_RU, "UTF8", "Cp1251");
}
} else {
n = "";
}
}
}
node. put( LANG_CODE[i], n);
}
}
protected void setDefaults(Properties defaults) {
//defaults.put("#My land_code comment\nlang_code",LANG_CODE[0]);
defaults.put("lang_code",LANG_CODE[0]);
String h, d, w, n;
defaults.put("enc_ui", ENC_JAVA);
defaults.put("enc_java",ENC_JAVA);
enc_java = ENC_JAVA;
for(int i=0; i<LANG_CODE.length; i++) {
if(LANG_CODE[i].equalsIgnoreCase("en")) {
h = DB_HOST_EN;
d = DB_NAME_EN;
w = WIKI_URL_EN;
n = NODE_EN;
} else {
if (LANG_CODE[i].equalsIgnoreCase("eo")) {
h = DB_HOST_EO;
d = DB_NAME_EO;
w = WIKI_URL_EO;
n = NODE_EO;
} else {
if (LANG_CODE[i].equalsIgnoreCase("ru")) {
h = DB_HOST_RU;
d = DB_NAME_RU;
w = WIKI_URL_RU;
if(null != session) {
n = session.connect.enc.EncodeFromJava(NODE_RU);
} else {
n = Encodings.FromTo(NODE_RU, enc_java, Encodings.enc_int_default);
//n = Encodings.FromTo(NODE_RU, "UTF8", "Cp1251");
//n = Encodings.FromTo(NODE_RU, "UTF8", "Cp1251");
}
} else {
h = "localhost";
d = "";
w = "";
n = "";
}}}
defaults.put("db_host_" + LANG_CODE[i], h);
db_host. put( LANG_CODE[i], h);
defaults.put("db_name_" + LANG_CODE[i], d);
db_name. put( LANG_CODE[i], d);
defaults.put("wiki_url_"+ LANG_CODE[i], w);
wiki_url.put( LANG_CODE[i], w);
defaults.put("node_" + LANG_CODE[i], n);
node. put( LANG_CODE[i], n);
defaults.put("user_" + LANG_CODE[i], USER);
user. put( LANG_CODE[i], USER);
defaults.put("pass_" + LANG_CODE[i], "");
pass. put( LANG_CODE[i], "");
}
defaults.put("b_log_dump2dir", "0"); // disable log by default
defaults.put("log_dir", ""); // System.getProperty("user.home");
defaults.put("radius", new Integer(RADIUS).toString());
Integer k = SHOW_BACKLINKS ? 1 : 0;
defaults.put("show_backlinks", k.toString());
}
protected void updateSettingsFromProperties() {
int i;
try {
lang_code = properties.getProperty("lang_code");
db_host. put(lang_code, properties.getProperty("db_host_"+lang_code));
db_name. put(lang_code, properties.getProperty("db_name_"+lang_code));
user. put(lang_code, properties.getProperty("user_" + lang_code));
pass. put(lang_code, properties.getProperty("pass_" + lang_code));
wiki_url.put(lang_code, properties.getProperty("wiki_url_"+lang_code));
node. put(lang_code, properties.getProperty("node_" + lang_code));
enc_java = properties.getProperty("enc_java");
enc_ui = properties.getProperty("enc_ui");
if(null != session) {
session.connect.enc.SetEncodingJavaSourceCode(enc_java);
session.connect.enc.SetEncodings(
session.connect.enc.GetDBEnc(),
session.connect.enc.GetInternalEnc(),
enc_ui);
}
log_dir = properties.getProperty("log_dir");
radius = Integer.parseInt(properties.getProperty("radius"));
i = Integer.parseInt(properties.getProperty("b_log_dump2dir"));
b_log_dump2dir = (0 == i) ? false : true;
i = Integer.parseInt(properties.getProperty("show_backlinks"));
show_backlinks = (0 == i) ? false : true;
} catch (NumberFormatException e) {
// we don't care if the property was of the wrong format,
// they've all got default values. So catch the exception
// and keep going.
}
}
protected void updatePropertiesFromSettings() {
Integer i;
properties.put("lang_code", lang_code);
properties.put("db_host_"+lang_code, db_host.get(lang_code));
properties.put("db_name_"+lang_code, db_name.get(lang_code));
properties.put("user_"+lang_code, user.get(lang_code));
properties.put("pass_"+lang_code, pass.get(lang_code));
properties.put("node_"+lang_code, node.get(lang_code));
properties.put("wiki_url_"+lang_code, wiki_url.get(lang_code));
properties.put("enc_java", enc_java);
properties.put("enc_ui", enc_ui);
properties.put("log_dir", log_dir);
properties.put("radius", new Integer(radius).toString());
i = b_log_dump2dir ? 1 : 0;
properties.put("b_log_dump2dir", i.toString());
i = show_backlinks ? 1 : 0;
properties.put("show_backlinks", i.toString());
}
/*
public String toString() {
Integer i_log = b_log_dump2dir ? 1 : 0;
Integer i_backlinks = show_backlinks ? 1 : 0;
return "["
+ "wiki_url="+ wiki_url + ","
+ "b_log_dump2dir=" + i_log + ","
+ "log_dir=" + log_dir + ","
+ "node=" + node + ","
+ "radius=" + radius + ","
+ "show_backlinks=" + i_backlinks
+ "]";
}
*/
public void setSessionHolder (SessionHolder s) {
session = s;
}
public String getLangCode() {
return lang_code;
}
public void setLanguage(String s) {
boolean bfound = false;
for(int i=0; i<LANGUAGE.length; i++) {
if(s.equalsIgnoreCase(LANGUAGE[i])) {
language = s;
lang_code = LANG_CODE[i];
bfound = true;
break;
}
}
if(!bfound) {
System.out.println("Error in BrowserParameters.setLanguage("+ s +")");
}
saveParameters();
}
public String getLanguage() {
for(int i=0; i<LANG_CODE.length; i++) {
if(lang_code.equalsIgnoreCase(LANG_CODE[i])) {
return LANGUAGE[i];
}
}
String err_msg = "Error in BrowserParameters.getLanguage()";
System.out.println(err_msg);
return err_msg;
}
/** Gets the selected language index in LANG_CODE[] */
public int getSelectedLanguageIndex() {
for(int i=0; i<LANG_CODE.length; i++) {
if(lang_code.equalsIgnoreCase(LANG_CODE[i])) {
return i;
}
}
System.out.println("Error in BrowserParameters.getSelectedLanguageIndex()");
return 0;
}
public String getDBHost() {return db_host.get(lang_code); }
public void setDBHost(String s){db_host.put(lang_code, s); saveParameters();}
public String getDBName() {return db_name.get(lang_code); }
public void setDBName(String s){db_name.put(lang_code, s); saveParameters();}
public String getUser () {return user. get(lang_code); }
public void setUser (String s){user. put(lang_code, s); saveParameters();}
public String getPass () {return pass. get(lang_code); }
public void setPass (String s){pass. put(lang_code, s); saveParameters();}
public String getNode () {return node. get(lang_code); }
public void setNode (String s){node. put(lang_code, s); saveParameters();}
public String getWikiURL() {return wiki_url.get(lang_code); }
public void setWikiURL(String s){wiki_url.put(lang_code, s);saveParameters();}
public void setEnableLog(boolean enable) {
b_log_dump2dir = enable; saveParameters();
}
public boolean isLogEnabled() {
return b_log_dump2dir;
}
public void setLogDir(String log_dir) {
this.log_dir = log_dir;
saveParameters();
}
public String getLogDir() {
return log_dir;
}
public void updateEncodingsToSession() {
if(null != session) {
session.connect.enc.SetEncodingJavaSourceCode(enc_java);
session.connect.enc.SetEncodings(
session.connect.enc.GetDBEnc(),
session.connect.enc.GetInternalEnc(),
enc_ui);
}
}
public void setEncJava(String enc_java) {
this.enc_java = enc_java;
updateEncodingsToSession();
saveParameters();
}
public void setEncUI(String enc_ui) {
this.enc_ui = enc_ui;
updateEncodingsToSession();
saveParameters();
}
public String getEncJava() { return enc_java; }
public String getEncUI () { return enc_ui; }
public void setRadius(int radius) {
this.radius = radius;
saveParameters();
}
public int getRadius() {
return radius;
}
public void setShowBacklinks(boolean show_backlinks) {
this.show_backlinks = show_backlinks;
saveParameters();
}
public boolean getShowBacklinks() {
return show_backlinks;
}
}