/** * @version $Id: UIWork.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/10/13 10:36:34 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.internal.ui.views.model.impl; import java.text.SimpleDateFormat; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.ui.views.properties.IPropertyDescriptor; import com.tida_okinawa.corona.internal.ui.views.model.IUIContainer; import com.tida_okinawa.corona.internal.ui.views.model.IUIProduct; import com.tida_okinawa.corona.internal.ui.views.model.IUIWork; import com.tida_okinawa.corona.io.IoActivator; import com.tida_okinawa.corona.io.PropertyUtil; import com.tida_okinawa.corona.io.PropertyUtil.PropertyItem; import com.tida_okinawa.corona.io.model.ClaimWorkDataType; import com.tida_okinawa.corona.io.model.IClaimData; import com.tida_okinawa.corona.io.model.IClaimWorkData; import com.tida_okinawa.corona.io.model.table.IFieldHeader; /** * @author kousuke-morishima */ public class UIWork extends UIElement implements IUIWork { private int claimId; private int fieldId; private ClaimWorkDataType type; /* public */UIWork(IUIContainer parent, IClaimWorkData object, IFile resource) { super(parent, object, resource); claimId = object.getClaimId(); fieldId = object.getFieldId(); type = object.getClaimWorkDataType(); } @Override public IClaimWorkData getObject() { IClaimWorkData ret = null; IUIProduct uiProduct = (IUIProduct) CoronaModel.INSTANCE.getUIContainer(IUIProduct.class, parent); ret = uiProduct.getObject().getClaimWorkData(claimId, type, fieldId); return ret; } @Override public IFile getResource() { return (IFile) resource; } /* **************************************** * property view */ @Override public IPropertyDescriptor[] getPropertyDescriptors() { IPropertyDescriptor[] sp = super.getPropertyDescriptors(); int size = 3; boolean isMorp = false; boolean isMis = false; IClaimWorkData work = getObject(); if (work == null) { return new IPropertyDescriptor[0]; } ClaimWorkDataType type = work.getClaimWorkDataType(); switch (type) { case MORPHOLOGICAL: case DEPENDENCY_STRUCTURE: isMorp = true; size += 1; break; case CORRECTION_MISTAKES: size -= 1; isMis = true; break; default: break; } IPropertyDescriptor[] descriptor = new IPropertyDescriptor[sp.length + size]; int i; for (i = 0; i < sp.length; i++) { descriptor[i] = sp[i]; } PropertyUtil prop = new PropertyUtil(); if (!isMis) { descriptor[i++] = prop.getDescriptor(PropertyItem.PROP_INPUT_DATATYPE); } descriptor[i++] = prop.getDescriptor(PropertyItem.PROP_CLAIM_DATA_NAME); descriptor[i++] = prop.getDescriptor(PropertyItem.PROP_FIELDS); if (isMorp) { descriptor[i++] = prop.getDescriptor(PropertyItem.PROP_EXEC_RESULT); } return descriptor; } @Override public Object getPropertyValue(Object id) { if (PropertyItem.PROP_INPUT_DATATYPE.getKey().equals(id)) { IClaimWorkData work = getObject(); ClaimWorkDataType type = work.getClaimWorkDataType(); /*  入力データの表示なので、誤記補正時は表示しない  */ if (ClaimWorkDataType.CORRECTION_MISTAKES.equals(type)) { return PropertyUtil.DEFAULT_VALUE; } if (work.getNote() == null) { return PropertyUtil.DEFAULT_VALUE; } /*  入力データ種別取得(最後から2番目)  */ String[] types = work.getNote().split(","); String dataType = ""; /*  入力データ種別と自分の種別の2つはあるはず  */ if (types.length > 1) { dataType = types[types.length - 2]; } /*  形態素係り受け時はKNPフラグが付加されているので分ける  */ if (dataType.contains(":")) { dataType = dataType.substring(0, dataType.indexOf(":")); } return dataType; } else if (PropertyItem.PROP_CLAIM_DATA_NAME.getKey().equals(id)) { int claimId = getObject().getClaimId(); List<IClaimData> list = IoActivator.getService().getClaimDatas(); /*  自分のclaimIDと同じIDのファイル名を取得する */ String fileName = ""; for (IClaimData data : list) { if (data.getId() == claimId) { fileName = data.getName() + ","; ; } } if (!("").equals(fileName)) { fileName = fileName.substring(0, fileName.lastIndexOf(",")); } return fileName; } else if (PropertyItem.PROP_FIELDS.getKey().equals(id)) { List<IClaimData> list = IoActivator.getService().getClaimDatas(); IClaimWorkData work = getObject(); int fieldId = work.getFieldId(); int claimId = work.getClaimId(); /*  fieldIDの情報から名前を取得する  */ String name = ""; for (IClaimData data : list) { if (data.getId() == claimId) { IFieldHeader header = data.getFieldInformation(fieldId); name = header.getName() + ","; } } if (!("").equals(name)) { name = name.substring(0, name.lastIndexOf(",")); } return name; } else if (PropertyItem.PROP_EXEC_RESULT.getKey().equals(id)) { IClaimWorkData work = getObject(); ClaimWorkDataType type = work.getClaimWorkDataType(); /* 形態素・係り受け解析時以外は表示しない  */ if (!ClaimWorkDataType.DEPENDENCY_STRUCTURE.equals(type)) { return PropertyUtil.DEFAULT_VALUE; } if (work.getNote() == null) { return PropertyUtil.DEFAULT_VALUE; } /*  実行した処理を取得  */ String[] types = work.getNote().split(","); String dataType = types[types.length - 1]; /*  形態素係り受け時はKNPフラグを取得  */ if (dataType.contains(":")) { String doKnp = dataType.substring(dataType.indexOf(":") + 1); if (("true").equals(doKnp)) { return "形態素と係り受け"; } else { return "形態素のみ"; } } } else if (PropertyItem.PROP_LASTMODIFIED.getKey().equals(id)) { IClaimWorkData work = getObject(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); return sdf.format(work.getLasted()); } return super.getPropertyValue(id); } }