diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index d3257f0..015baa7 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -57,6 +57,7 @@ public static final String _for = "For"; private static String mainTypeName = null; private static ILanguageSpecific langSpec = null; + private static IPlatformSpecific platformSpec = null; public static String getMainTypeName() { return mainTypeName; @@ -134,33 +135,34 @@ * @param langSpec specified language * @return source codes */ - public ArrayList generateCode(DataTransferModel model, DataFlowGraph flowGraph, ILanguageSpecific langSpec) { + public ArrayList generateCode(DataTransferModel model, DataFlowGraph flowGraph, IPlatformSpecific platformSpec, ILanguageSpecific langSpec) { CodeGenerator.langSpec = langSpec; + CodeGenerator.platformSpec = platformSpec; ArrayList codes = new ArrayList<>(); - // Get the dependency among root nodes. - Map> dependedRootComponentGraph = getDependedRootComponentGraph(model); - - // Sort the all components. - ArrayList components = determineComponentOrder(flowGraph, dependedRootComponentGraph); - - // Add the main component. - if (mainTypeName == null) { - mainTypeName = langSpec.getMainComponentName(); + Map> dependedRootComponentGraph = null; + Collection components = null; + if (platformSpec.isMonolithic()) { + // To build monolithic application, the dependency of the components should be resolved in advance. + + // Get the dependency among root nodes. + dependedRootComponentGraph = getDependedRootComponentGraph(model); + + // Sort the all components. + components = determineComponentOrder(flowGraph, dependedRootComponentGraph); + } else { + // Get the all components. + components = flowGraph.getResourceNodes(); } - TypeDeclaration mainComponent = langSpec.newTypeDeclaration(mainTypeName); - MethodDeclaration mainConstructor = mainComponent.createConstructor(); - CompilationUnit mainCU = langSpec.newCompilationUnit(mainComponent); - codes.add(mainCU); // Generate the other components. - generateCodeFromFlowGraph(model, flowGraph, components, dependedRootComponentGraph, mainComponent, mainConstructor, codes, langSpec); + generateCodeFromFlowGraph(model, flowGraph, components, codes, dependedRootComponentGraph, platformSpec, langSpec); return codes; } - public abstract void generateCodeFromFlowGraph(DataTransferModel model, DataFlowGraph flowGraph, ArrayList components, Map> dependedRootComponentGraph, - TypeDeclaration mainComponent, MethodDeclaration mainConstructor, ArrayList codes, ILanguageSpecific langSpec); + public abstract void generateCodeFromFlowGraph(DataTransferModel model, DataFlowGraph flowGraph, Collection components, ArrayList codes, + Map> dependedRootComponentGraph, IPlatformSpecific platformSpec, ILanguageSpecific langSpec); private static Map> getDependedRootComponentGraph(DataTransferModel model) { Map> dependedComponentGraph = new HashMap<>();