package org.insightech.er.preference;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.insightech.er.Activator;
import org.insightech.er.db.DBManager;
import org.insightech.er.db.DBManagerFactory;
import org.insightech.er.db.impl.standard_sql.StandardSQLDBManager;
import org.insightech.er.editor.model.settings.DBSetting;
import org.insightech.er.editor.model.settings.JDBCDriverSetting;
import org.insightech.er.util.Check;
import org.insightech.er.util.Format;
public class PreferenceInitializer extends AbstractPreferenceInitializer {
public static final String TEMPLATE_FILE_LIST = "template_file_list";
public static final String TRANSLATION_FILE_LIST = "translation_file_list";
private static final String TEMPLATE_DIR = "template";
private static final String TRANSLATION_DIR = "translation";
private static final String JDBC_DRIVER_DB_NAME_PREFIX = "jdbc.driver.db.name.";
private static final String JDBC_DRIVER_PATH_PREFIX = "jdbc.driver.path.";
private static final String JDBC_DRIVER_CLASS_NAME_PREFIX = "jdbc.driver.class.name.";
private static final String JDBC_DRIVER_CLASS_NAME_LIST_NUM = "jdbc.driver.class.name.list.num";
private static final String DB_SETTING_LIST_NUM = "db.setting.list.num";
private static final String DB_SETTING_DBSYSTEM = "db.setting.dbsystem.";
private static final String DB_SETTING_SERVER = "db.setting.server.";
private static final String DB_SETTING_PORT = "db.setting.port.";
private static final String DB_SETTING_DATABASE = "db.setting.database.";
private static final String DB_SETTING_USER = "db.setting.user.";
private static final String DB_SETTING_USE_DEFAULT_DRIVER = "db.setting.use.default.driver.";
private static final String DB_SETTING_URL = "db.setting.url.";
private static final String DB_SETTING_DRIVER_CLASS_NAME = "db.setting.driver.class.name.";
private static final String DB_SETTING_PASSWORD = "setting.password.";
public PreferenceInitializer() {
}
@Override
public void initializeDefaultPreferences() {
}
public static String getTemplatePath(String fileName) {
IPath dataLocation = Activator.getDefault().getStateLocation();
String path = dataLocation.append(PreferenceInitializer.TEMPLATE_DIR)
.append(fileName).toOSString();
return path;
}
public static String getTranslationPath(String fileName) {
IPath dataLocation = Activator.getDefault().getStateLocation();
String path = dataLocation
.append(PreferenceInitializer.TRANSLATION_DIR).append(fileName)
.toOSString();
return path;
}
public static void saveJDBCDriverSettingList(
List<JDBCDriverSetting> driverSettingList) {
clearJDBCDriverInfo();
for (JDBCDriverSetting driverSetting : driverSettingList) {
addJDBCDriver(driverSetting.getDb(), driverSetting.getClassName(),
driverSetting.getPath());
}
}
public static void addJDBCDriver(String db, String className, String path) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
int listSize = store
.getInt(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_LIST_NUM);
store.setValue(PreferenceInitializer.JDBC_DRIVER_DB_NAME_PREFIX
+ listSize, Format.null2blank(db));
store.setValue(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_PREFIX
+ listSize, Format.null2blank(className));
store.setValue(
PreferenceInitializer.JDBC_DRIVER_PATH_PREFIX + listSize,
Format.null2blank(path));
store.setValue(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_LIST_NUM,
listSize + 1);
}
public static List<JDBCDriverSetting> getJDBCDriverSettingList() {
List<JDBCDriverSetting> list = new ArrayList<JDBCDriverSetting>();
List<JDBCDriverSetting> defaultDriverList = new ArrayList<JDBCDriverSetting>();
for (String db : DBManagerFactory.getAllDBList()) {
if (!StandardSQLDBManager.ID.equals(db)) {
DBManager dbManager = DBManagerFactory.getDBManager(db);
JDBCDriverSetting driverSetting = new JDBCDriverSetting(db,
dbManager.getDriverClassName(), null);
defaultDriverList.add(driverSetting);
}
}
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
int listSize = store
.getInt(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_LIST_NUM);
for (int i = 0; i < listSize; i++) {
String db = store
.getString(PreferenceInitializer.JDBC_DRIVER_DB_NAME_PREFIX
+ i);
String className = store
.getString(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_PREFIX
+ i);
String path = store
.getString(PreferenceInitializer.JDBC_DRIVER_PATH_PREFIX
+ i);
JDBCDriverSetting setting = new JDBCDriverSetting(db, className,
path);
list.add(setting);
defaultDriverList.remove(setting);
}
for (JDBCDriverSetting defaultDriverSetting : defaultDriverList) {
list.add(defaultDriverSetting);
}
Collections.sort(list);
return list;
}
public static void clearJDBCDriverInfo() {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
int num = store
.getInt(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_LIST_NUM);
for (int i = 0; i < num; i++) {
store.setValue(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_PREFIX
+ i, "");
store.setValue(PreferenceInitializer.JDBC_DRIVER_PATH_PREFIX + i,
"");
}
store
.setValue(
PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_LIST_NUM,
0);
}
public static String getJDBCDriverPath(String db, String driverClassName) {
String path = null;
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
int listSize = store
.getInt(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_LIST_NUM);
for (int i = 0; i < listSize; i++) {
if (driverClassName
.equals(store
.getString(PreferenceInitializer.JDBC_DRIVER_CLASS_NAME_PREFIX
+ i))) {
path = store
.getString(PreferenceInitializer.JDBC_DRIVER_PATH_PREFIX
+ i);
break;
}
}
return path;
}
public static DBSetting getDBSetting(int no) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
String dbsystem = store
.getString(PreferenceInitializer.DB_SETTING_DBSYSTEM + no);
String server = store.getString(PreferenceInitializer.DB_SETTING_SERVER
+ no);
int portNo = store.getInt(PreferenceInitializer.DB_SETTING_PORT + no);
String database = store
.getString(PreferenceInitializer.DB_SETTING_DATABASE + no);
String user = store.getString(PreferenceInitializer.DB_SETTING_USER
+ no);
String password = store
.getString(PreferenceInitializer.DB_SETTING_PASSWORD + no);
String useDefaultDriverString = store
.getString(PreferenceInitializer.DB_SETTING_USE_DEFAULT_DRIVER
+ no);
String url = store.getString(PreferenceInitializer.DB_SETTING_URL + no);
String driverClassName = store
.getString(PreferenceInitializer.DB_SETTING_DRIVER_CLASS_NAME
+ no);
boolean useDefaultDriver = true;
if ("false".equals(useDefaultDriverString)
|| StandardSQLDBManager.ID.equals(dbsystem)) {
useDefaultDriver = false;
}
return new DBSetting(dbsystem, server, portNo, database, user,
password, useDefaultDriver, url, driverClassName);
}
public static void saveSetting(int no, DBSetting dbSetting) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
store.setValue(PreferenceInitializer.DB_SETTING_DBSYSTEM + no, Format
.null2blank(dbSetting.getDbsystem()));
store.setValue(PreferenceInitializer.DB_SETTING_SERVER + no, Format
.null2blank(dbSetting.getServer()));
store.setValue(PreferenceInitializer.DB_SETTING_PORT + no, dbSetting
.getPort());
store.setValue(PreferenceInitializer.DB_SETTING_DATABASE + no, Format
.null2blank(dbSetting.getDatabase()));
store.setValue(PreferenceInitializer.DB_SETTING_USER + no, Format
.null2blank(dbSetting.getUser()));
store.setValue(PreferenceInitializer.DB_SETTING_PASSWORD + no, Format
.null2blank(dbSetting.getPassword()));
store.setValue(
PreferenceInitializer.DB_SETTING_USE_DEFAULT_DRIVER + no,
dbSetting.isUseDefaultDriver());
store.setValue(PreferenceInitializer.DB_SETTING_URL + no, Format
.null2blank(dbSetting.getUrl()));
store.setValue(PreferenceInitializer.DB_SETTING_DRIVER_CLASS_NAME + no,
Format.null2blank(dbSetting.getDriverClassName()));
}
public static void saveSetting(List<DBSetting> dbSettingList) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
store.setValue(PreferenceInitializer.DB_SETTING_LIST_NUM, dbSettingList
.size());
for (int i = 0; i < dbSettingList.size(); i++) {
DBSetting dbSetting = dbSettingList.get(i);
PreferenceInitializer.saveSetting(i + 1, dbSetting);
}
}
public static List<DBSetting> getDBSettingList(String database) {
List<DBSetting> dbSettingList = new ArrayList<DBSetting>();
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
int num = store.getInt(PreferenceInitializer.DB_SETTING_LIST_NUM);
for (int i = 1; i <= num; i++) {
DBSetting dbSetting = PreferenceInitializer.getDBSetting(i);
if (database != null && !dbSetting.getDbsystem().equals(database)) {
continue;
}
dbSettingList.add(dbSetting);
}
Collections.sort(dbSettingList);
return dbSettingList;
}
public static void addDBSetting(DBSetting dbSetting) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
int num = store.getInt(PreferenceInitializer.DB_SETTING_LIST_NUM);
num++;
store.setValue(PreferenceInitializer.DB_SETTING_LIST_NUM, num);
saveSetting(num, dbSetting);
}
/**
* allTranslations ���擾���܂�.
*
* @return allTranslations
*/
public static List<String> getAllUserTranslations() {
String str = Activator.getDefault().getPreferenceStore().getString(
PreferenceInitializer.TRANSLATION_FILE_LIST);
StringTokenizer st = new StringTokenizer(str, "/");
List<String> list = new ArrayList<String>();
Set<String> names = new HashSet<String>();
while (st.hasMoreElements()) {
String fileName = st.nextToken();
File file = new File(PreferenceInitializer
.getTranslationPath(fileName));
if (file.exists() && !names.contains(fileName)) {
list.add(fileName);
names.add(fileName);
}
}
return list;
}
public static void addPreferenceValue(String value) {
IPreferenceStore preferenceStore = Activator.getDefault()
.getPreferenceStore();
String values = preferenceStore
.getString(PreferenceInitializer.TRANSLATION_FILE_LIST);
if (Check.isEmpty(values)) {
values = value;
} else {
values = values + FileListEditor.VALUE_SEPARATOR + value;
}
preferenceStore.setValue(PreferenceInitializer.TRANSLATION_FILE_LIST,
values);
}
}