3.4. 用途と制約¶
辞書項目やエイリアスそのものは、メタデータとして存在するだけで利用価値はありません。 これらに用途を指定することで、単純なメタデータではなく様々なアプリケーションから 利用できる存在に成ります。
現在用意している用途は
- データ
- 制約
の2種類です。
データ用途は、対象のメタデータの形式、例えばデータベースのスキーマを生成するための情報などを 管理できます。
制約用途は、対象のメタデータのバリデーションを行うための情報を管理できます。
3.4.1. 用途の参照¶
3.4.1.1. REST-API¶
メソッド GET URI %ベースURL%/api/repository/dictionary/usages
3.4.1.2. JavaEE開発モデル¶
Dictionary dictionary = RepositoryServiceProvider.getInstance().getDictionaryService().getCurrent(); // 辞書項目、エイリアスの順に用途を取得する Item item = dictionary.find(ItemId.of("%辞書項目のID%"); Alias alias = dictionary.find(AliasId.of("%エイリアスのID%"); Usages usages = null; if (item != null) { usages = item.getUsages(); } else if (alias != null) { usages = alias.getUsages(); }
3.4.2. 制約の確認方法¶
3.4.2.1. REST-API¶
メソッド GET URI %ベースURL%/api/repository/dictionary/usages
3.4.2.2. JavaEE開発モデル¶
Dictionary dictionary = RepositoryServiceProvider.getInstance().getDictionaryService().getCurrent(); // 辞書項目、エイリアスの順に用途を取得する Item item = dictionary.find(ItemId.of("%辞書項目のID%"); Alias alias = dictionary.find(AliasId.of("%エイリアスのID%"); Usages usages = null; if (item != null) { usages = item.getUsages(); } else if (alias != null) { usages = alias.getUsages(); } // 制約の一覧を取得する RestrictionUsage restrictionUsage = usages.get("制約用途のID文字列"); List<Restriction> list = restrictionUsage.getRestrictions();
3.4.3. 制約用途に指定した制約に適合するかどうかを確認する¶
3.4.3.1. 辞書項目の設定¶
3.4.3.2. JavaEE開発モデル¶
次のような実装を行うことで、上記の制約に基づいたバリデーションを行うことができます。
/** * 辞書項目IDと値の組み合わせで以下のような結果が返ります。 */ public void someMethod() throws DictionaryServiceException { this.validate("sample-dictionary-item", 0); // true this.validate("sample-dictionary-item", 100); // true this.validate("sample-dictionary-item", -1); // false this.validate("sample-dictionary-item", 101); // false } /** * 指定した辞書項目の制約を用いて、対象の値が適合するかどうかを確認します。 * * @param itemId 辞書項目ID * @param target 対象の値。ここでは数値が制約に合致するかどうかを確認することとします。 * @return 適合する場合は true を、適合しない場合は false を返します。 * @throws DictionaryServiceException 辞書サービスでエラーが発生した場合にスローされます。 */ public boolean validate(final String itemId, final Double target) throws DictionaryServiceException { final Dictionary dictionary = RepositoryServiceProvider.getInstance().getDictionaryService().getCurrent(); final Item item = dictionary.find(ItemId.of(itemId)); if (item != null) { final Usages usages = item.getUsages(); final RestrictionUsage restrictionUsage = usages.get(UsageId.of(RestrictionUsage.ID)); for (final Restriction restriction : restrictionUsage.getRestrictions()) { // validate の第一引数はバリデーションエラーのメッセージに含める名称です。 // 現在提供している制約のエラーメッセージでは使用されていません。 final ValidateResult validationResult = restriction.validate("名前", target); if (validationResult.getInvalidParams().size() > 0) { return false; } } } return true; }