List<ExternalIoCommandProvider> commands = Lists.create();
List<ExternalIoStage> prologues = Lists.create();
List<ExternalIoStage> epilogues = Lists.create();
for (Map.Entry<ExternalIoDescriptionProcessor, List<Import>> entry : imports.entrySet()) {
ExternalIoDescriptionProcessor proc = entry.getKey();
List<Import> importGroup = entry.getValue();
List<Export> exportGroup = exports.get(proc);
assert exportGroup != null;
assert importGroup.isEmpty() == false || exportGroup.isEmpty() == false;
IoContext context = createEmitContext(proc, importGroup, exportGroup);
LOG.debug("{}によって外部入出力の記述を生成しています", proc.getClass().getName());
proc.emitPackage(context);
LOG.debug("{}によってインポーターの記述を生成しています", proc.getClass().getName());
prologues.addAll(proc.emitPrologue(context));
LOG.debug("{}によってエクスポーターの記述を生成しています", proc.getClass().getName());
epilogues.addAll(proc.emitEpilogue(context));
commands.add(proc.createCommandProvider(context));
}
return new CompiledJobflow(commands, prologues, epilogues);
}