Skip to content
Snippets Groups Projects
Commit f3749a4d authored by Sven Graupner's avatar Sven Graupner
Browse files

changed RepositoryBuilder injection in AppBuilder.

parent 50d1d354
No related branches found
No related tags found
No related merge requests found
......@@ -2,3 +2,5 @@
.project
.settings
target
data*
addOn*
......@@ -4,6 +4,7 @@ import static com.application.se2.AppConfigurator.LoggerTopics;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import com.application.se2.components.AppComp;
import com.application.se2.components.ArticleCatalogComp;
......@@ -42,12 +43,15 @@ class AppBuilder implements BuilderIntf {
private final List<ComponentBase> appComponents;
private Optional<RepositoryBuilder> repositoryBuilder;
/**
* Private constructor according to the singleton pattern.
*/
private AppBuilder() {
this.appComponents = new ArrayList<ComponentBase>();
this.repositoryBuilder = Optional.empty();
}
......@@ -64,6 +68,15 @@ class AppBuilder implements BuilderIntf {
}
/**
* Inject reference to RepositoryBuilder.
* @param repositoryBuilder reference to singleton RepositoryBuilder instance.
*/
public void inject( RepositoryBuilder repositoryBuilder ) {
this.repositoryBuilder = Optional.of( repositoryBuilder );
}
/**
* Build code returning a runner instance.
*
......@@ -96,20 +109,20 @@ class AppBuilder implements BuilderIntf {
appComponents.add( customerManager );
appComponents.add( articleCatalog );
repositoryBuilder.ifPresent( repositoryBuilder -> {
final RepositoryBuilder repositoryBuilder = RepositoryBuilder.getInstance();
final RepositoryRunner repositoryRunner = repositoryBuilder.build();
final RepositoryRunner repositoryRunner = repositoryBuilder.build();
// "wire" customer repository into customerManager.
repositoryRunner.<Customer>getRepository( Customer.class ).ifPresent( customerRepository -> {
customerManager.inject( customerRepository );
});
// "wire" customer repository into customerManager.
repositoryRunner.<Customer>getRepository( Customer.class ).ifPresent( customerRepository -> {
customerManager.inject( customerRepository );
});
repositoryRunner.<Article>getRepository( Article.class ).ifPresent( articleRepository -> {
articleCatalog.inject( articleRepository );
repositoryRunner.<Article>getRepository( Article.class ).ifPresent( articleRepository -> {
articleCatalog.inject( articleRepository );
});
});
final AppRunner appRunner = new AppRunner( this, app );
app.inject( appRunner );
......
......@@ -35,6 +35,7 @@ public class Application {
@Autowired
private ApplicationContext applicationContext;
/**
* Protected constructor for Spring Boot to create an Application instance.
* Application instances must be created by Spring, never by "new".
......@@ -95,11 +96,18 @@ public class Application {
isRunningAsTest? 0 : 2 // Test runs have no GUI, hence no need to wait before exit.
);
/*
* RepositoryBuilder is a Spring @Component that builds repositories.
*/
final RepositoryBuilder repositoryBuilder = RepositoryBuilder.getInstance();
/*
* AppBuilder builds applications components and returns a startable Runner instance.
*/
AppBuilder appBuilder = AppBuilder.getInstance();
RunnerIntf appRunner = appBuilder.build();
final AppBuilder appBuilder = AppBuilder.getInstance();
appBuilder.inject( repositoryBuilder );
final RunnerIntf appRunner = appBuilder.build();
/*
* Use (hidden) JavaFX Builder to build the JavaFX GUI also returning a startable FXRunner instance.
......@@ -121,7 +129,6 @@ public class Application {
onStart -> {
logger.log( LoggerTopics.Info, appName + " starting..." );
final RepositoryBuilder repositoryBuilder = RepositoryBuilder.getInstance();
repositoryBuilder.startup();
/*
......@@ -201,7 +208,6 @@ public class Application {
logger.log( LoggerTopics.Info, appName + " running..." );
waitForExit.await();
final RepositoryBuilder repositoryBuilder = RepositoryBuilder.getInstance();
repositoryBuilder.shutdown();
} catch( InterruptedException e ) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment