/**
* @version $Id: TemplateRecord.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2012/11/26 13:35:11
* @author s.takuro
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.correction.template;
import com.tida_okinawa.corona.correction.parsing.model.PatternRecord;
import com.tida_okinawa.corona.io.IoActivator;
import com.tida_okinawa.corona.io.model.dic.IPattern;
import com.tida_okinawa.corona.io.model.dic.ITemplateItem;
/**
* @author s.takuro
* #187 構文パターン自動生成
* ひな型レコード
*/
public class TemplateRecord extends TemplateContainer {
private ITemplateItem iTemplateItem;
private Template template;
/**
* @param object
* ひな型に登録する情報<br/>
* ・PatternRecord -> パターンからひな型を生成する場合<br/>
* ・TemplateRecord -> ひな型レコードから新たにひな型を生成する場合<br/>
* ・ITemplateItem -> ひな型アイテムからレコードを生成する場合<br/>
* ・nullの場合は空のひな型を生成
*/
public TemplateRecord(Object object) {
super(null);
init(object);
}
private void init(Object object) {
/* null */
if (object == null) {
/* 空データの生成 :ID = UNSAVED_ID(未保存) */
this.iTemplateItem = IoActivator.getTemplateFactory().createTemplate("", "", -99, false); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
/* PatternRecord */
if (object instanceof PatternRecord) {
this.iTemplateItem = convertPatternToTemplate(((PatternRecord) object).getIPattern());
return;
}
/* TemplateRecord */
if (object instanceof TemplateRecord) {
ITemplateItem record = ((TemplateRecord) object).getITemplateItem();
this.iTemplateItem = IoActivator.getTemplateFactory().createTemplate(record.getTemplateId(), record.getName(), record.getText(),
record.getPatternType(), record.isParts());
return;
}
/* ITemplateItem */
if (object instanceof ITemplateItem) {
this.iTemplateItem = ((ITemplateItem) object);
return;
}
}
@Override
protected void createChildren() {
super.createChildren();
/* 読み出したデータがあれば変換 */
template = TemplateUtil.convertFrom(iTemplateItem.getText());
if (template != null) {
/* トップ要素には親が設定されていないので、セットする */
template.setParent(this);
/* 追加イベントが起きてしまうので、直接addしている */
children.add(template);
}
}
/* ****************************************
* プロパティフィールド
*/
/**
* ひな型のID取得
*
* @return ひな型のID
*/
public int getId() {
return iTemplateItem.getId();
}
/**
* ひな型のID設定
*
* @param id
* ひな型のID
*/
public void setId(int id) {
if (iTemplateItem.getId() == id) {
return;
}
iTemplateItem.setId(id);
}
/**
* ひな型のTEMPLATE_ID取得
*
* @return ひな型のTEMPLATE_ID<br/>
* 0:ひな型(デフォルト値)、n>0:パターンID(参照用)
*/
public int getTemplateId() {
return iTemplateItem.getTemplateId();
}
/**
* ひな型のTEMPLATE_ID設定
*
* @param templateId
* ひな型のTEMPLATE_ID<br/>
* 0:ひな型(デフォルト値)、n>0:パターンID(参照用)
*/
public void setTemplateId(int templateId) {
if (iTemplateItem.getTemplateId() == templateId) {
return;
}
iTemplateItem.setTemplateId(templateId);
}
/**
* ひな型名取得
*
* @return ひな型名
*/
public String getName() {
return iTemplateItem.getName();
}
/**
* ひな型名設定
*
* @param name
* ひな型名
*/
public void setName(String name) {
if (iTemplateItem.getName().equals(name)) {
return;
}
iTemplateItem.setName((name == null) ? "" : name); //$NON-NLS-1$
}
/**
* ひな型分類ID取得
*
* @return ひな型分類ID
*/
public int getType() {
return iTemplateItem.getPatternType();
}
/**
* ひな型分類ID設定
*
* @param type
* ひな型分類ID
*/
public void setType(int type) {
if (iTemplateItem.getPatternType() == type) {
return;
}
iTemplateItem.setPatternType(type);
}
/**
* 参照可否フラグ取得
*
* @return 参照可否フラグ
*/
public boolean isPart() {
return iTemplateItem.isParts();
}
/**
* 参照可否フラグ設定
*
* @param part
* 参照可否フラグ
*/
public void setPart(boolean part) {
if (iTemplateItem.isParts() == part) {
return;
}
iTemplateItem.setParts(part);
}
/* ****************************************
* ひな型
*/
/**
* ひな型の取得
*
* @return ひな型(UI表示用)
*/
public Template getTemplate() {
return this.template;
}
/**
* ひな型の設定
*
* @param template
* ひな型(UI表示用)
*/
public void setTemplate(Template template) {
if (this.template == null) {
if (template == null) {
return;
}
} else {
if (this.template.equals(template)) {
return;
}
}
this.template = template;
propertyChanged();
}
/**
* ひな型アイテム取得
*
* @return ひな型アイテム
*/
public ITemplateItem getITemplateItem() {
return iTemplateItem;
}
/* ****************************************
* Pattern
*/
/* パターンからひな型への変換 */
private ITemplateItem convertPatternToTemplate(IPattern iPattern) {
/* パターン文字列(xml形式)からひな型(UI表示用)を生成 */
template = TemplateUtil.convertFrom(iPattern.getText());
setTemplate(template);
/* ひな型(UI表示用)をひな型文字列(xml形式)に変換 */
String text = TemplateUtil.convertFrom(template);
/* ひな型アイテム構築 */
return IoActivator.getTemplateFactory().createTemplate(iPattern.getLabel(), text, iPattern.getPatternType(), iPattern.isParts());
}
/* ****************************************
* 子要素の管理
*/
@Override
public boolean hasChildren() {
if (!childCreated) {
return super.hasChildren();
}
return template != null;
}
/* ****************************************
* 表示更新イベント管理
*/
@Override
protected void propertyChanged(Template own) {
if (!childCreated) {
createChildren();
}
iTemplateItem.setText(TemplateUtil.convertFrom(template));
}
/* ****************************************
* その他
*/
@Override
public String toString() {
return getName();
}
}