/**
* @version $Id: SynonymController.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/09/12 01:36:11
* @author imai-yoshikazu
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.ui.controllers;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import com.tida_okinawa.corona.CoronaActivator;
import com.tida_okinawa.corona.common.CleansingNameVariable;
import com.tida_okinawa.corona.correction.controller.IListener;
import com.tida_okinawa.corona.correction.morphem.SyntaxStructure;
import com.tida_okinawa.corona.correction.synonym.SynonymCorrector;
import com.tida_okinawa.corona.io.model.ClaimWorkDataType;
import com.tida_okinawa.corona.io.model.IClaimWorkData;
import com.tida_okinawa.corona.io.model.ICoronaProduct;
import com.tida_okinawa.corona.io.model.dic.ICoronaDic;
import com.tida_okinawa.corona.ui.UIActivator;
import com.tida_okinawa.corona.ui.data.MorphemeRecord;
import com.tida_okinawa.corona.ui.data.SynonymRecord;
/**
* ゆらぎ・同義語補正のコントローラクラス
*
* @author kyohei-miyazato
*/
public class SynonymController extends ClaimWorkDataController<MorphemeRecord, SynonymRecord> {
final SynonymCorrector corrector;
List<ICoronaDic> dics;
/**
* @param product
* 解析対象のターゲット
* @param works
* 解析対象データ
* @param listener
* 処理結果を受け取るリスナー
* @param dics
* 辞書一覧
*/
public SynonymController(ICoronaProduct product, List<IClaimWorkData> works, IListener<SynonymRecord> listener, List<ICoronaDic> dics) {
super(CleansingNameVariable.FLUC_SYNONYM, product, works, ClaimWorkDataType.CORRECTION_SYNONYM, listener);
this.dics = dics;
corrector = new SynonymCorrector(null);
}
/**
* @param product
* 解析対象のターゲット
* @param work
* 解析対象データ
* @param listener
* 処理結果を受け取るリスナー
* @param dics
* 辞書一覧
*/
public SynonymController(ICoronaProduct product, IClaimWorkData work, IListener<SynonymRecord> listener, List<ICoronaDic> dics) {
super(CleansingNameVariable.FLUC_SYNONYM, product, work, ClaimWorkDataType.CORRECTION_SYNONYM, listener);
this.dics = dics;
corrector = new SynonymCorrector(null);
}
@Override
void startImpl(IProgressMonitor monitor) throws InterruptedException {
if (dics.size() > 0) {
corrector.init(dics, monitor);
if (monitor.isCanceled()) {
throwException("辞書に単語が登録されていないため、処理を中断します。");
}
} else {
throwException("ゆらぎ・同義語辞書がないため、処理を中断します。");
}
}
private static void throwException(String message) throws InterruptedException {
CoronaActivator.log(new Status(IStatus.INFO, UIActivator.PLUGIN_ID, message, null), true);
throw new InterruptedException(message);
}
@Override
MorphemeRecord createRecordImpl(int claimId, int fieldId, int recordId, String text) {
return new MorphemeRecord(claimId, fieldId, recordId, text);
}
@Override
SynonymRecord execImpl(MorphemeRecord record) {
SyntaxStructure ss = new SyntaxStructure(record.getResult());
corrector.process(ss);
return new SynonymRecord(record.getClaimId(), record.getFieldId(), record.getRecordId(), ss.getText(), ss.toString());
}
}