/**
* @version $Id: PreferenceUtils.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/12/21 15:18:13
* @author shingo-takahashi
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.internal.ui.util;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.StringConverter;
import com.tida_okinawa.corona.CoronaActivator;
import com.tida_okinawa.corona.correction.morphem.preference.MorphemePreference;
import com.tida_okinawa.corona.io.IoActivator;
import com.tida_okinawa.corona.ui.PreferenceInitializer;
import com.tida_okinawa.corona.ui.UIActivator;
import com.tida_okinawa.corona.ui.data.ConnectionParameter;
/**
* @author shingo-takahashi
*/
public class PreferenceUtils {
static IPreferenceStore store = UIActivator.getDefault().getPreferenceStore();
/**
* 接続パラメータ取得
*
* <pre>
* 接続情報を取得できなかった場合、エラーログを出力して空のリストを返す
* </pre>
*
* @return 接続パラメータリスト
*/
public static List<ConnectionParameter> getConnectionParameters() {
try {
List<ConnectionParameter> cpList = new ArrayList<ConnectionParameter>();
String[] nameList = asArray(store.getString(PreferenceInitializer.PREF_DB_NAME));
String[] urlList = asArray(store.getString(PreferenceInitializer.PREF_DB_CONNECTER));
String[] userList = asArray(store.getString(PreferenceInitializer.PREF_DB_USER));
String[] passwdList = asArray(store.getString(PreferenceInitializer.PREF_DB_PW));
for (int i = 0; i < nameList.length; i++) {
cpList.add(new ConnectionParameter(nameList[i], urlList[i], userList[i], passwdList[i]));
}
return cpList;
} catch (Exception e) {
CoronaActivator.log(new Status(IStatus.ERROR, IoActivator.PLUGIN_ID, "データベース接続情報を取得できませんでした。", e), false);
return new ArrayList<ConnectionParameter>();
}
}
public static ConnectionParameter getCurrentConnectionParameter() {
List<ConnectionParameter> parameters = getConnectionParameters();
int connectionIndex = getConnectionIndex();
if (parameters.size() > connectionIndex) {
return parameters.get(connectionIndex);
}
return null;
}
/**
* @return
*/
public static List<ConnectionParameter> getDefaultConnectionParameters() {
List<ConnectionParameter> cpList = new ArrayList<ConnectionParameter>();
String[] nameList = StringConverter.asArray(store.getDefaultString(PreferenceInitializer.PREF_DB_NAME));
String[] urlList = StringConverter.asArray(store.getDefaultString(PreferenceInitializer.PREF_DB_CONNECTER));
String[] userList = StringConverter.asArray(store.getDefaultString(PreferenceInitializer.PREF_DB_USER));
String[] passwdList = StringConverter.asArray(store.getDefaultString(PreferenceInitializer.PREF_DB_PW));
for (int i = 0; i < nameList.length; i++) {
cpList.add(new ConnectionParameter(nameList[i], urlList[i], userList[i], passwdList[i]));
}
return cpList;
}
/**
* @param cpList
* 接続パラメータリスト
*/
public static void setConnectionParameters(List<ConnectionParameter> cpList) {
StringBuilder name = new StringBuilder(128);
StringBuilder param = new StringBuilder(128);
StringBuilder user = new StringBuilder(128);
StringBuilder pass = new StringBuilder(128);
if (cpList.size() > 0) {
for (ConnectionParameter cp : cpList) {
name.append(",").append(cp.name);
param.append(",").append(cp.url);
user.append(",").append(cp.user);
pass.append(",").append(cp.passwd);
}
/* 先頭のカンマを削る */
name.deleteCharAt(0);
param.deleteCharAt(0);
user.deleteCharAt(0);
pass.deleteCharAt(0);
}
store.setValue(PreferenceInitializer.PREF_DB_NAME, name.toString());
store.setValue(PreferenceInitializer.PREF_DB_CONNECTER, param.toString());
store.setValue(PreferenceInitializer.PREF_DB_USER, user.toString());
store.setValue(PreferenceInitializer.PREF_DB_PW, pass.toString());
}
/**
* 接続パラメータインデックス取得
*
* @return アクティブな接続パラメータのインデックス
*/
public static int getConnectionIndex() {
return store.getInt(PreferenceInitializer.PREF_DB_INDEX);
}
/**
*
* @return 接続パラメータのインデックス
*/
public static int getDefaultConnectionIndex() {
return store.getDefaultInt(PreferenceInitializer.PREF_DB_INDEX);
}
/**
* 接続パラメータインデックス設定
*
* @param index
*/
public static void setConnectionIndex(int index) {
store.setValue(PreferenceInitializer.PREF_DB_INDEX, index);
}
/**
* ワークスペース設定で係り受け解析を行うかどうかチェックする
*
* @return 係り受け解析を行う設定であれば TRUE
*/
public static boolean isDoKnp() {
return MorphemePreference.doKnp();
}
/**
* 配列変換
*
* @param value
* @return
*/
private static String[] asArray(String value) {
/* パスワードに空白入力を許容するため、StringTokenizerからsplitに変えた */
String[] splits = value.split(",", -1);
return splits;
}
}