/**
* @version $Id: FrequentRecord.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/08/26 10:35:11
* @author kenta-uechi
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.correction.frequent;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
import com.tida_okinawa.corona.io.IoActivator;
import com.tida_okinawa.corona.io.model.dic.IUserDic;
/**
* Frequentの処理結果
*
* 品詞の情報 {@link Term} と頻出数をもつ
*
* 辞書の登録情報はもたない(表示時に動的に生成する)
*
* エディタで編集されることを想定している。
*/
public class FrequentRecord implements Comparable<FrequentRecord>, IPropertySource {
/**
* 品詞情報
*/
final Term term;
/**
* 登場回数
*/
int count = 0;
final static String COUNT_DELIM = "#"; //$NON-NLS-1$
/**
* このレコードが持つ単語を新しく登録する辞書
*/
IUserDic destDic;
private boolean undefine;
/**
* @return この単語が未定義語ならtrue
*/
public boolean isUndefine() {
// TODO (undefine || "未定義語".equals(term.getHinshi()) がいいんじゃないかな
return undefine;
}
/**
* @param undefine
* trueならこの単語を未定義語としてマークする
*/
public void setUndefine(boolean undefine) {
this.undefine = undefine;
}
/**
* @param term
* カウント対象の単語
*/
public FrequentRecord(Term term) {
this.term = term;
}
/**
* @return 単語の原形
*/
public String getGenkei() {
return term.getGenkei();
}
/**
* @param genkei
* 単語に設定する原形
*/
public void setGenkei(String genkei) {
term.setGenkei(genkei);
}
/**
* @return 単語の読み
*/
public String getYomi() {
return term.getYomi();
}
/**
* @param yomi
* 単語に設定するよみ
*/
public void setYomi(String yomi) {
term.setYomi(yomi);
}
/**
* @return 単語の品詞
*/
public String getHinshi() {
return term.getHinshi();
}
/**
* @param hinshi
* 単語に設定する品詞
*/
public void setHinshi(String hinshi) {
term.setHinshi(hinshi);
}
/**
* @return 単語の品詞細分類
*/
public String getHinshiSaibunrui() {
return term.getHinshiSaibunrui();
}
/**
* @param saibunrui
* 単語に設定する品詞細分類
*/
public void setHinshiSaibunrui(String saibunrui) {
term.setHinshiSaibunrui(saibunrui);
}
/**
* @return 単語の活用詳細
*/
public String getCform() {
return term.getCform().getName();
}
/**
* @return 単語の出現頻度
*/
public int getCount() {
return count;
}
/**
* @return このレコードが持つ単語を新しく登録する辞書
*/
public IUserDic getDestDictionary() {
return destDic;
}
/**
* @param destDic
* この単語を登録する辞書
*/
public void setDestDictionary(IUserDic destDic) {
this.destDic = destDic;
}
private String registeredDics = null;
/**
* @return この単語を登録している辞書群(カンマ区切りで複数の辞書名が返る)
*/
public String getRegisteredDics() {
return (registeredDics == null) ? "" : registeredDics; //$NON-NLS-1$
}
/**
* 検索対象の辞書群から、この単語が登録されている辞書を探す
*
* @param searchDics
* 検索対象の辞書群
* @throws SQLException
* 接続が確立できなかった
*/
public void createRegisteredDics(List<IUserDic> searchDics) throws SQLException {
if (registeredDics == null) {
registeredDics = ""; //$NON-NLS-1$
try {
if (!getHinshi().equals(Messages.FrequentRecord_UNDEFINED_WORD)) {
/* 代表語が登録されている辞書を取得 */
Collection<IUserDic> dicList = IoActivator.getService().searchParentDic(searchDics, getGenkei(), getYomi(), getHinshi(),
getHinshiSaibunrui(), getCform());
for (IUserDic dic : dicList) {
registeredDics += dic.getName() + ","; //$NON-NLS-1$
}
}
} catch (SQLException e) {
throw e;
}
}
}
/**
* DBのテキストから
*
* @param text
*/
public FrequentRecord(String text) {
this.term = Term.createTerm(text);
String count_str = text.substring(text.indexOf(COUNT_DELIM) + 1);
this.count = Integer.parseInt(count_str);
}
/**
* DBに登録する形式にする
*
* 空白区切りで、次のように並んでいる<br />
* <p>
* 原型 読み 品詞 品詞詳細 活用関係 出現回数
* </p>
*/
@Override
public String toString() {
return term.toString() + " " + COUNT_DELIM + count; //$NON-NLS-1$
}
@Override
public int compareTo(FrequentRecord o) {
return term.compareTo(o.term);
}
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
IPropertyDescriptor[] descriptor = new IPropertyDescriptor[] {
new TextPropertyDescriptor("token", Messages.FrequentRecord_WORD), new TextPropertyDescriptor("reading", Messages.FrequentRecord_READING), //$NON-NLS-1$ //$NON-NLS-2$
new TextPropertyDescriptor("part", Messages.FrequentRecord_PART), new TextPropertyDescriptor("class", Messages.FrequentRecord_CLASS), new TextPropertyDescriptor("form", Messages.FrequentRecord_FORM), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
new TextPropertyDescriptor("count", Messages.FrequentRecord_COUNT), new TextPropertyDescriptor("dics", Messages.FrequentRecord_DICS), }; //$NON-NLS-1$ //$NON-NLS-2$
return descriptor;
}
@Override
public Object getPropertyValue(Object id) {
if (id.equals("reading")) { //$NON-NLS-1$
return getYomi();
}
if (id.equals("token")) { //$NON-NLS-1$
return getGenkei();
}
if (id.equals("part")) { //$NON-NLS-1$
return getHinshi();
}
if (id.equals("class")) { //$NON-NLS-1$
return getHinshiSaibunrui();
}
if (id.equals("form")) { //$NON-NLS-1$
return getCform();
}
if (id.equals("count")) { //$NON-NLS-1$
return getCount();
}
if (id.equals("dics")) { //$NON-NLS-1$
return getRegisteredDics();
}
return null;
}
@Override
public Object getEditableValue() {
return null;
}
@Override
public boolean isPropertySet(Object id) {
return false;
}
@Override
public void resetPropertyValue(Object id) {
}
@Override
public void setPropertyValue(Object id, Object value) {
}
}