use of org.qi4j.bootstrap.ApplicationAssembler in project qi4j-sdk by Qi4j.
the class ApplicationBuilder method newApplication.
/**
* Create and activate a new Application.
* @return Activated Application
* @throws AssemblyException if the assembly failed
* @throws ActivationException if the activation failed
*/
public Application newApplication() throws AssemblyException, ActivationException {
Energy4Java qi4j = new Energy4Java();
ApplicationDescriptor model = qi4j.newApplicationModel(new ApplicationAssembler() {
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory factory) throws AssemblyException {
ApplicationAssembly assembly = factory.newApplicationAssembly();
assembly.setName(applicationName);
HashMap<String, LayerAssembly> createdLayers = new HashMap<>();
for (Map.Entry<String, LayerDeclaration> entry : layers.entrySet()) {
LayerAssembly layer = entry.getValue().createLayer(assembly);
createdLayers.put(entry.getKey(), layer);
}
for (LayerDeclaration layer : layers.values()) {
layer.initialize(createdLayers);
}
return assembly;
}
});
Application application = model.newInstance(qi4j.api());
for (ActivationEventListener activationListener : activationListeners) {
application.registerActivationEventListener(activationListener);
}
beforeActivation();
application.activate();
afterActivation();
return application;
}
use of org.qi4j.bootstrap.ApplicationAssembler in project qi4j-sdk by Qi4j.
the class VisitableDetailTest method visit.
@Test
public void visit() throws AssemblyException, ActivationException {
ApplicationDescriptor application = new Energy4Java().newApplicationModel(new ApplicationAssembler() {
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
ApplicationAssembly app = applicationFactory.newApplicationAssembly();
app.setName("UnderTestApp");
app.withActivators(ApplicationActivator.class);
LayerAssembly layer = app.layer("LayerName");
layer.withActivators(LayerActivator.class);
ModuleAssembly module = layer.module("ModuleName");
module.withActivators(ModuleActivator.class);
return app;
}
});
ApplicationDetailDescriptor detail = createApplicationDetailDescriptor(application);
Visitor visitor = new Visitor();
detail.accept(visitor);
assertThat(visitor.events, equalTo(Arrays.asList(// Application
"visitEnter( UnderTestApp )", "visit( " + ApplicationActivator.class.getName() + " )", // Layer
"visitEnter( LayerName )", "visit( " + LayerActivator.class.getName() + " )", // Module
"visitEnter( ModuleName )", "visit( " + ModuleActivator.class.getName() + " )", // Leaving Structure
"visitLeave( ModuleName )", "visitLeave( LayerName )", "visitLeave( UnderTestApp )")));
}
use of org.qi4j.bootstrap.ApplicationAssembler in project qi4j-sdk by Qi4j.
the class ApplicationDocs method main.
public static void main(String[] args) throws Exception {
qi4j = new Energy4Java();
ApplicationDescriptor model = qi4j.newApplicationModel(new ApplicationAssembler() {
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
return createAssembly(applicationFactory);
}
});
Application application = model.newInstance(qi4j.spi());
}
use of org.qi4j.bootstrap.ApplicationAssembler in project qi4j-sdk by Qi4j.
the class StructureTest method createApplicationUsingApplicationAssembly.
@Test
public void createApplicationUsingApplicationAssembly() throws AssemblyException {
Energy4Java boot = new Energy4Java();
boot.newApplication(new ApplicationAssembler() {
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
ApplicationAssembly applicationAssembly = applicationFactory.newApplicationAssembly();
// Application Layer
LayerAssembly applicationLayer = applicationAssembly.layer("Application");
ModuleAssembly applicationModule = applicationLayer.module("Application");
new DomainApplicationAssembler().assemble(applicationModule);
// View Layer
LayerAssembly viewLayer = applicationAssembly.layer("View");
ModuleAssembly viewModule = viewLayer.module("View");
new ViewAssembler().assemble(viewModule);
viewLayer.uses(applicationLayer);
return applicationAssembly;
}
});
}
use of org.qi4j.bootstrap.ApplicationAssembler in project qi4j-sdk by Qi4j.
the class QuikitServlet method createApplicationAssembler.
private ApplicationAssembler createApplicationAssembler(ServletConfig config) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
String assemblerClassname = config.getInitParameter("qi4j-assembler");
ClassLoader loader = getClass().getClassLoader();
Class<?> assemblerClass = loader.loadClass(assemblerClassname);
ApplicationAssembler assembler;
Constructor cons = assemblerClass.getConstructor(Application.Mode.class);
if (cons == null) {
assembler = (ApplicationAssembler) assemblerClass.newInstance();
} else {
Application.Mode mode;
String modeSetting = config.getInitParameter("qi4j-application-mode");
if (modeSetting == null) {
mode = Application.Mode.development;
} else {
mode = Application.Mode.valueOf(modeSetting);
}
assembler = (ApplicationAssembler) cons.newInstance(mode);
}
return assembler;
}
Aggregations