/**
* @version $Id: FrequentController.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/10/05 14:37:09
* @author takayuki-matsumoto
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.ui.controllers;
import static com.tida_okinawa.corona.common.CleansingNameVariable.FREQUENT;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import com.tida_okinawa.corona.correction.controller.IListener;
import com.tida_okinawa.corona.correction.frequent.Frequent;
import com.tida_okinawa.corona.correction.frequent.FrequentRecord;
import com.tida_okinawa.corona.io.model.ClaimWorkDataType;
import com.tida_okinawa.corona.io.model.IClaimWorkData;
import com.tida_okinawa.corona.io.model.IClaimWorkFAData;
import com.tida_okinawa.corona.io.model.ICoronaProduct;
import com.tida_okinawa.corona.ui.data.ClaimWorkDataRecord;
import com.tida_okinawa.corona.ui.data.FluctuationRecord;
/**
* @author takayuki-matsumoto
*/
public class FrequentController extends ClaimWorkDataController<FluctuationRecord, ClaimWorkDataRecord> {
/**
* @param product
* 解析対象のターゲット
* @param works
* 問い合わせデータリスト
*/
public FrequentController(ICoronaProduct product, List<IClaimWorkData> works) {
super(FREQUENT, product, works, ClaimWorkDataType.FREQUENTLY_APPERING, null);
}
/**
* @param product
* 解析対象のターゲット
* @param work
* 問い合わせデータ
*/
public FrequentController(ICoronaProduct product, IClaimWorkData work) {
super(FREQUENT, product, work, ClaimWorkDataType.FREQUENTLY_APPERING, null);
}
Frequent frequent_process = new Frequent();
@Override
ClaimWorkDataRecord execImpl(FluctuationRecord record) {
String text = record.getResult();
frequent_process.count(text);
/* クレームレコードごとに処理結果はないので、ダミー */
return record;
}
@Override
FluctuationRecord createRecordImpl(int claimId, int fieldId, int recordId, String text) {
return new FluctuationRecord(claimId, fieldId, recordId, text);
}
@Override
IListener<ClaimWorkDataRecord> createCommitter() {
return new ClaimWorkDataRecordCommitter<ClaimWorkDataRecord>(product, ClaimWorkDataType.FREQUENTLY_APPERING) {
@Override
synchronized public void receiveResult(ClaimWorkDataRecord record) {
/* なにもしない */
}
@Override
public void end(IProgressMonitor monitor) {
Collection<FrequentRecord> records = frequent_process.getRecords();
int total = records.size() + 1;
monitor.beginTask("Commit", total);
/* 前回データをクリアする */
monitor.subTask("Clear");
((IClaimWorkFAData) claimWorkData).clear();
monitor.worked(1);
/* 今回データをコミット */
int recId = 1; /* レコード番号 (クレームのレコードIDではない) */
for (FrequentRecord record : records) {
if (monitor.isCanceled()) {
break;
}
monitor.subTask(getMessage(recId + 1, total));
claimWorkData.addClaimWorkData(recId, record.toString());
recId++;
monitor.worked(1);
}
super.end(monitor);
monitor.done();
}
private String getMessage(int current, int total) {
return new StringBuffer(50).append(current).append("/").append(total).toString();
}
};
}
}