/** * @version $Id: AbstractProject.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/08/03 * @author shingo-takahashi * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.io.model.abstraction; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.eclipse.ui.views.properties.IPropertyDescriptor; import com.tida_okinawa.corona.io.PropertyUtil; import com.tida_okinawa.corona.io.PropertyUtil.PropertyItem; import com.tida_okinawa.corona.io.dam.hibernate.IoService; import com.tida_okinawa.corona.io.model.IClaimData; import com.tida_okinawa.corona.io.model.ICoronaProduct; import com.tida_okinawa.corona.io.model.ICoronaProject; import com.tida_okinawa.corona.io.model.dic.ICoronaDic; /** * @author shingo-takahashi * */ public abstract class AbstractProject extends CoronaObject implements ICoronaProject { protected int _id; protected String _name; protected Map<Integer, ICoronaProduct> _products = new HashMap<Integer, ICoronaProduct>(); protected List<ICoronaDic> _dics; protected List<IClaimData> _cliamDatas = new ArrayList<IClaimData>(); public AbstractProject(String name) { super(); this._name = name; } public AbstractProject(String name, int id) { super(); this._name = name; this._id = id; } @Override public int getId() { return _id; } @Override public String getName() { return _name; } /** * @see com.tida_okinawa.corona.io.model.ICoronaProject#getProducts() */ @Override public List<ICoronaProduct> getProducts() { List<ICoronaProduct> list = new ArrayList<ICoronaProduct>(); for (Entry<Integer, ICoronaProduct> entry : getProductsMap().entrySet()) { list.add(entry.getValue()); } return list; } /** * @see com.tida_okinawa.corona.io.model.ICoronaProject#addProduct(com.tida_okinawa.corona.io.model.AbstractProduct) */ @Override public boolean addProduct(ICoronaProduct product) { return addProductDam(product); } /** * @see com.tida_okinawa.corona.io.model.ICoronaProject#removeProduct(com.tida_okinawa.corona.io.model.AbstractProduct) */ @Override public void removeProduct(ICoronaProduct product) { removeProductDam(product); } /** * @see com.tida_okinawa.corona.io.model.ICoronaProject#addClaimData(int) */ @Override public void addClaimData(int id) { for (IClaimData data : IoService.getInstance().getClaimDatas()) { if (data.getId() == id) { _cliamDatas.add(data); } } } @Override public void addClaimData(IClaimData iClaimData) { _cliamDatas.add(iClaimData); } /** * @see com.tida_okinawa.corona.io.model.ICoronaProject#removeClaimData(int) * * */ @Override public void removeClaimData(int id) { Iterator<IClaimData> i = _cliamDatas.iterator(); while (i.hasNext()) { IClaimData claim = i.next(); if (claim.getId() == id) { i.remove(); break; } } } /** * * 辞書情報取得(プロジェクト単位) * * @param cls * @return List<ICoronaDic> * */ @Override public List<ICoronaDic> getDictionarys(Class<?> cls) { /* 辞書情報を取得 */ return getDictionarysDam(cls, this._id); } /** * * 辞書情報取得(辞書ID) * * @param id * @return ICoronaDic * */ @Override public ICoronaDic getDictionary(int id) { if (_dics == null) { // TODO getDictionarysでやっている辞書の全更新処理を、updateDictionaries()に分離する getDictionarys(ICoronaDic.class); } for (ICoronaDic dic : _dics) { if (dic.getId() == id) { return dic; } } return null; } /** * 辞書情報追加 * (プロジェクトと辞書情報を紐づける) * * @param dic * */ @Override public boolean addDictionary(ICoronaDic dic) { if (addDictionaryDam(dic)) { _dics.add(dic); return true; } return false; } /** * @see com.tida_okinawa.corona.io.model.ICoronaDics#removeDictionary(int) * */ @Override public void removeDictionary(int id) { if (_dics == null) { // TODO getDictionarysでやっている辞書の全更新処理を、updateDictionaries()に分離する getDictionarys(ICoronaDic.class); } removeDictionaryDam(id); for (Iterator<ICoronaDic> itr = _dics.iterator(); itr.hasNext();) { ICoronaDic dic = itr.next(); if (dic.getId() == id) { itr.remove(); break; } } } @Override public void setId(int id) { this._id = id; } @Override public void setName(String name) { this._name = name; } @Override public void saveKnpConfig(ProjectKnpConfig config) { saveKnpConfigDam(config.getKey()); } @Override public ProjectKnpConfig getKnpConfig() { return ProjectKnpConfig.get(getKnpConfigDam()); } abstract protected Map<Integer, ICoronaProduct> getProductsMap(); /** * ターゲット情報登録 * * @param product * @return 登録に成功したらtrue */ abstract protected boolean addProductDam(ICoronaProduct product); abstract protected void removeProductDam(ICoronaProduct product); abstract protected List<ICoronaDic> getDictionarysDam(Class<?> cls, int projectId); abstract protected boolean addDictionaryDam(ICoronaDic dic); abstract protected void removeDictionaryDam(int id); abstract protected void saveKnpConfigDam(int config); abstract protected int getKnpConfigDam(); @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof AbstractProject)) { return false; } AbstractProject p2 = (AbstractProject) obj; return (_id == p2._id) && (_name.equals(p2._name)); } /** * プロジェクトの PropertyDescriptors を返す * * <pre> * 1. 編集可能か * 2. プロジェクト名 * 3. 係り受け解析の有無(コンボボックス) * </pre> */ @Override public IPropertyDescriptor[] getPropertyDescriptors() { PropertyUtil prop = new PropertyUtil(); IPropertyDescriptor[] descriptor = new IPropertyDescriptor[] { prop.getDescriptor(PropertyItem.PROP_EDITABLE), prop.getDescriptor(PropertyItem.PROP_NAME), PropertyUtil.getComboDescriptor(PropertyItem.PROP_DOKNP, ProjectKnpConfig.getConfigDescriptions()), }; return descriptor; } @Override public void setPropertyValue(Object id, Object value) { if (!PropertyItem.PROP_DOKNP.getKey().equals(id)) { return; } saveKnpConfig(ProjectKnpConfig.get(((Integer) value).intValue())); } /** * プロジェクトのプロパティ値を返す * * <pre> * editable : 編集可能か否か。プロジェクトでは常に "true" を返す * name : プロジェクト名を返す。 * doknp : このプロパティは ComboBox なので、初期表示するアイテムのインデックスを返す * </pre> */ @Override public Object getPropertyValue(Object id) { if (PropertyItem.PROP_EDITABLE.getKey().equals(id)) { return "true"; } else if (PropertyItem.PROP_NAME.getKey().equals(id)) { return getName(); } else if (PropertyItem.PROP_DOKNP.getKey().equals(id)) { return getKnpConfig().getKey(); } return PropertyUtil.DEFAULT_VALUE; } }