2626import org .javawebstack .injector .SimpleInjector ;
2727import org .javawebstack .orm .Repo ;
2828import org .javawebstack .orm .exception .ORMConfigurationException ;
29- import org .javawebstack .orm .wrapper .MySQL ;
30- import org .javawebstack .orm .wrapper .SQL ;
31- import org .javawebstack .orm .wrapper .SQLite ;
29+ import org .javawebstack .orm .wrapper .*;
3230import org .javawebstack .scheduler .job .JobQueue ;
3331import org .javawebstack .scheduler .job .local .LocalJobQueue ;
3432import org .javawebstack .scheduler .job .redis .RedisJobQueue ;
4846public abstract class WebApplication {
4947
5048 private Logger logger = Logger .getLogger ("WebApp" );
51- private final SQL sql ;
49+ private SQL sql ;
5250 private final HTTPServer server ;
5351 private final Injector injector ;
5452 private final Faker faker = new Faker ();
@@ -61,6 +59,7 @@ public abstract class WebApplication {
6159 private final I18N translation = new I18N ();
6260 private JobQueue jobQueue ;
6361 private Schedule schedule ;
62+ private SQLDriverFactory sqlDriverFactory ;
6463
6564 public WebApplication () {
6665 injector = new SimpleInjector ();
@@ -81,29 +80,28 @@ public WebApplication() {
8180 injector .setInstance (Crypt .class , crypt );
8281
8382 modules .forEach (m -> m .setupConfig (this , config ));
84- if (config .get ("database.driver" , "none" ).equalsIgnoreCase ("sqlite" )) {
85- sql = new SQLite (config .get ("database.file" , "db.sqlite" ));
86- } else if (config .get ("database.driver" , "none" ).equalsIgnoreCase ("mysql" )) {
87- sql = new MySQL (
88- config .get ("database.host" , "localhost" ),
89- config .getInt ("database.port" , 3306 ),
90- config .get ("database.name" , "app" ),
91- config .get ("database.user" , "root" ),
92- config .get ("database.password" , "" )
93- );
94- } else {
95- sql = null ;
96- }
97- if (sql != null ) {
98- try {
99- for (Module m : modules )
100- m .beforeSetupModels (this , sql );
101- setupModels (sql );
102- for (Module m : modules )
103- m .setupModels (this , sql );
104- } catch (ORMConfigurationException ex ) {
105- ex .printStackTrace ();
106- }
83+ sqlDriverFactory = new SQLDriverFactory (new HashMap <String , String >() {{
84+ put ("file" , config .get ("database.file" , "sb.sqlite" ));
85+ put ("host" , config .get ("database.host" , "localhost" ));
86+ put ("port" , config .get ("database.port" , "3306" ));
87+ put ("name" , config .get ("database.name" , "app" ));
88+ put ("user" , config .get ("database.user" , "root" ));
89+ put ("password" , config .get ("database.password" , "" ));
90+ }});
91+ modules .forEach (m -> m .setupDriverFactory (this , sqlDriverFactory ));
92+ String driverName = config .get ("database.driver" , "none" );
93+ try {
94+ sql = sqlDriverFactory .getDriver (driverName );
95+
96+ for (Module m : modules )
97+ m .beforeSetupModels (this , sql );
98+ setupModels (sql );
99+ for (Module m : modules )
100+ m .setupModels (this , sql );
101+ } catch (ORMConfigurationException ex ) {
102+ ex .printStackTrace ();
103+ } catch (SQLDriverNotFoundException e ) {
104+ logger .warning ("[SQL] Driver " + driverName + " not found!" );
107105 }
108106 modelBindParamTransformer = new ModelBindParamTransformer ();
109107
0 commit comments