/**
* @version $Id: ClaimWorkDataRecordCommitter.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/09/16 09:27:04
* @author imai
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.ui.controllers;
import java.sql.SQLException;
import org.eclipse.core.runtime.IProgressMonitor;
import com.tida_okinawa.corona.correction.controller.IListener;
import com.tida_okinawa.corona.io.IoActivator;
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.ui.data.ClaimWorkDataRecord;
/**
* 中間データをDBに格納する.
*
* @author imai
* @param <TR>
* 出力データ
*
*/
public class ClaimWorkDataRecordCommitter<TR extends ClaimWorkDataRecord> implements IListener<TR> {
final ICoronaProduct product;
final ClaimWorkDataType typeR;
IClaimWorkData claimWorkData;
/**
* @param product
* 処理対象のターゲット
* @param typeR
* 出力データのタイプ
*/
ClaimWorkDataRecordCommitter(ICoronaProduct product, ClaimWorkDataType typeR) {
this.product = product;
this.typeR = typeR;
}
@Override
public void inputChanged(IClaimWorkData newWorkS) {
int claimId = newWorkS.getClaimId();
int fieldId = newWorkS.getFieldId();
claimWorkData = product.getClaimWorkData(claimId, typeR, fieldId);
if (claimWorkData == null) {
/* 新しく作る */
claimWorkData = IoActivator.getModelFactory().createClaimWorkData(claimId, fieldId, typeR, product.getProjectId(), product.getId());
try {
product.addClaimWorkData(claimWorkData);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/* メモリ上の履歴IDを更新 */
claimWorkData.upgreadHistoryId();
// testH25 20130801
/* 旧データのクリア */
claimWorkData.clearWorkData();
/* end でNoteを更新するために、値を入れておく */
claimWorkData.setNote(newWorkS.getNote());
}
@Override
synchronized public void receiveResult(TR record) {
claimWorkData.addClaimWorkData(record.getRecordId(), record.getResult());
}
@Override
public void end(IProgressMonitor monitor) {
StringBuilder note = new StringBuilder(claimWorkData.getNote());
if (note.length() > 0) {
note.append(",");
}
note.append(typeR.getName());
/* DBでの文字数制限 */
if (note.length() > 255) {
note.delete(0, note.length() - 255);
}
claimWorkData.setNote(note.toString());
claimWorkData.commit(monitor);
}
}