private ModelDescription transform( View target, ModelRepository repository, Map<Name, ModelDescription> context) { assert target != null; assert repository != null; assert context != null; CreateView ast = target.ast; // 先に外部依存関係を解決してcontextに登録する if (resolveDependency(ast, repository, context) == false) { return null; } Kind kind = ast.getKind(); if (kind == Kind.JOINED) { return transformJoined(target, context); } else if (kind == Kind.SUMMARIZED) { return transformSummarized(target, context); } else { LOG.error("{}は処理できない種類のビューです: {}", ast.name, ast); return null; } }
private boolean resolveDependency( CreateView target, ModelRepository repository, Map<Name, ModelDescription> context) { boolean success = true; for (Name dependency : target.getDependencies()) { LOG.debug("{}の依存先として{}を解決しています", target.name, dependency); if (context.containsKey(dependency)) { if (context.get(dependency) == null) { LOG.warn("{}は依存先の{}が失敗しているため、変換をスキップします", target.name, dependency); return false; } } else { ModelDescription resolved = repository.find(dependency.token); if (resolved == null) { LOG.error("{}は依存先の{}が見つからないため、変換に失敗しました", target.name, dependency); success = false; } else { context.put(dependency, resolved); } } } return success; }