package ilarkesto.mda.model.processor;
import ilarkesto.core.logging.Log;
import ilarkesto.mda.generator.GwtComponentBaseGenerator;
import ilarkesto.mda.generator.GwtComponentReflectorGenerator;
import ilarkesto.mda.generator.GwtComponentTemplateGenerator;
import ilarkesto.mda.generator.GwtComponentsReflectorGenerator;
import ilarkesto.mda.generator.GwtEventGenerator;
import ilarkesto.mda.generator.GwtEventHandlerGenerator;
import ilarkesto.mda.generator.GwtServiceAsyncInterfaceGenerator;
import ilarkesto.mda.generator.GwtServiceCallGenerator;
import ilarkesto.mda.generator.GwtServiceImplGenerator;
import ilarkesto.mda.generator.GwtServiceInterfaceGenerator;
import ilarkesto.mda.generator.GwtTextBundleGenerator;
import ilarkesto.mda.model.Model;
import ilarkesto.mda.model.ModelProcessor;
import ilarkesto.mda.model.Node;
import ilarkesto.mda.model.NodeTypes;
public class GwtClassesGenerator implements ModelProcessor, NodeTypes {
private static Log log = Log.get(GwtClassesGenerator.class);
private String genSrcPath;
private String implSrcPath;
private GwtComponentsReflectorGenerator componentsReflectorGenerator;
public GwtClassesGenerator() {
genSrcPath = "src/generated/java";
implSrcPath = "src/main/java";
}
@Override
public void processModel(Model model) {
for (Node module : model.getRoot().getChildrenByType(GwtModule)) {
processModule(module);
}
}
private void processModule(Node module) {
log.info(module);
componentsReflectorGenerator = new GwtComponentsReflectorGenerator(genSrcPath, module);
for (Node package_ : module.getChildrenByType(Package)) {
processPackage(package_);
}
componentsReflectorGenerator.generate();
new GwtServiceInterfaceGenerator(genSrcPath, module).generate();
new GwtServiceAsyncInterfaceGenerator(genSrcPath, module).generate();
new GwtServiceImplGenerator(genSrcPath, module).generate();
for (Node textBundle : module.getChildrenByType(TextBundle)) {
new GwtTextBundleGenerator(genSrcPath, textBundle).generate();
}
}
private void processPackage(Node package_) {
log.info(package_);
for (Node component : package_.getChildrenByType(Component)) {
processComponent(component);
}
for (Node event : package_.getChildrenByType(Event)) {
processEvent(event);
}
for (Node call : package_.getChildrenByType(ServiceCall)) {
processServiceCall(call);
}
}
private void processServiceCall(Node call) {
log.info("ServiceCall:", call);
new GwtServiceCallGenerator(genSrcPath, call).generate();
}
private void processEvent(Node event) {
log.info("Event:", event);
new GwtEventHandlerGenerator(genSrcPath, event).generate();
new GwtEventGenerator(genSrcPath, event).generate();
}
private void processComponent(Node component) {
log.info("Component:", component);
new GwtComponentBaseGenerator(genSrcPath, component).generate();
new GwtComponentReflectorGenerator(genSrcPath, component).generate();
new GwtComponentTemplateGenerator(implSrcPath, component).generate();
componentsReflectorGenerator.addComponent(component);
}
}