メタデータのリポジトリクラス。
データベース上のメタデータの複数行に対する操作を記述する。
package domain;
import java.util.ArrayList;
import java.util.List;
import util.CopyUtil;
import br.CreateMetaDataBusinessRule;
import dao.MetaDataDao;
import entity.MetaData;
/**
* メタデータリポジトリ
*/
public class MetaDataRepository {
/** メタデータDAO */
private MetaDataDao metaDataDao = null;
public MetaDataDao getMetaDataDao() {
return metaDataDao;
}
public void setMetaDataDao(MetaDataDao metaDataDao) {
this.metaDataDao = metaDataDao;
}
/** メタデータドメイン */
private MetaDataDomain metaDataDomain = null;
public MetaDataDomain getMetaDataDomain() {
return metaDataDomain;
}
public void setMetaDataDomain(MetaDataDomain metaDataDomain) {
this.metaDataDomain = metaDataDomain;
}
/**
* ドメインを生成します。
*
* @return 生成したドメイン
*/
public MetaDataDomain createDomain(MetaData metaData) {
// メタデータ新規作成ビジネスルールにより、チェックを行う
CreateMetaDataBusinessRule createMetaDataBusinessRule = new CreateMetaDataBusinessRule(
metaDataDao);
createMetaDataBusinessRule.check(metaData);
// 指定されたデータで登録を行う
metaDataDao.insert(metaData);
// ドメインを取得し、呼び出し側に戻す
return getDomain(metaData.getMetaDataId());
}
/**
* ドメインを取得します。
*
* @param metaDataId
* メタデータID
* @return 取得したドメイン
*/
public MetaDataDomain getDomain(Integer metaDataId) {
// 引数をキーとして、データベースから該当データを取得する
MetaData entity = metaDataDao.get(metaDataId);
// データが見つからなかった場合は、戻り値nullで呼び出し側に復帰する
if (entity == null) {
return null;
}
// ドメインを生成し、エンティティを設定する
MetaDataDomain metaDataDomain = new MetaDataDomain();
CopyUtil.copy(this.metaDataDomain, metaDataDomain);
metaDataDomain.setEntity(entity);
// 生成したドメインを呼び出し側に戻す
return metaDataDomain;
}
/**
* ルートメタを検索します。
*
* @return ルートメタドメインのリスト
*/
public List<MetaDataDomain> findRootMeta() {
// DAOクラスのルートメタ検索を実行する
List<MetaData> metaDataList = metaDataDao.findRootMeta();
// エンティティのリストをドメインのリストに変換する
List<MetaDataDomain> metaDataDomainList = new ArrayList<MetaDataDomain>();
for (MetaData entity : metaDataList) {
metaDataDomainList.add(getDomain(entity.getMetaDataId()));
}
// 作成したドメインのリストを呼び出し側に戻す
return metaDataDomainList;
}
/**
* 子メタを検索します。
*
* @return 子メタドメインのリスト
*/
public List<MetaDataDomain> findChildMeta(Integer metaDataId) {
// DAOクラスの子メタ検索を実行する
List<MetaData> metaDataList = metaDataDao.findChildMeta(metaDataId);
// エンティティのリストをドメインのリストに変換する
List<MetaDataDomain> metaDataDomainList = new ArrayList<MetaDataDomain>();
for (MetaData entity : metaDataList) {
metaDataDomainList.add(getDomain(entity.getMetaDataId()));
}
// 作成したドメインのリストを呼び出し側に戻す
return metaDataDomainList;
}
/**
* 全ての子メタデータを削除します。
*
* @param parent
* 親のメタデータドメイン
*/
public void deleteWithAllChild(MetaDataDomain parent) {
// 子メタを検索する
List<MetaDataDomain> metaDataDomainList = findChildMeta(parent
.getEntity().getMetaDataId());
// 子メタが1つもない場合は自分自身を削除して終了する
if (metaDataDomainList.size() == 0) {
parent.delete();
return;
}
// 検索結果の全ての子メタを処理するまでループ
for (MetaDataDomain metaDataDomain : metaDataDomainList) {
// 当該メタデータドメインの全ての子メタを削除する
deleteWithAllChild(metaDataDomain);
}
// 全ての子メタを削除した後、自分自身も削除する
parent.delete();
}
/**
* データベースの内容を、ファイルに保存します。
*
* @param fileName
* ファイル名
*/
public void saveFile(String fileName) {
// DAOのsaveを呼び出す
metaDataDao.save(fileName);
}
}
0 件のコメント:
コメントを投稿