44import org .javawebstack .abstractdata .AbstractElement ;
55import org .javawebstack .framework .bind .ModelBindParamTransformer ;
66import org .javawebstack .framework .bind .ModelBindTransformer ;
7+ import org .javawebstack .framework .commands .HelpCommand ;
8+ import org .javawebstack .framework .commands .StartWebServerCommand ;
79import org .javawebstack .framework .config .Config ;
810import org .javawebstack .framework .module .Module ;
911import org .javawebstack .framework .seed .AllSeeder ;
1618import org .javawebstack .orm .wrapper .SQLDriverNotFoundException ;
1719import org .javawebstack .webutils .*;
1820import org .javawebstack .webutils .crypt .Crypt ;
21+ import picocli .CommandLine ;
1922
2023import java .io .IOException ;
24+ import java .io .PrintWriter ;
25+ import java .io .Reader ;
2126import java .util .*;
27+ import java .util .concurrent .Callable ;
2228import java .util .logging .Logger ;
2329
2430public abstract class WebApplication {
@@ -36,11 +42,9 @@ public abstract class WebApplication {
3642 private SQLDriverFactory sqlDriverFactory ;
3743
3844 public WebApplication () {
39-
4045 setupModules ();
4146 modules .forEach (m -> m .beforeSetupConfig (this , config ));
4247 setupConfig (config );
43-
4448 crypt = new Crypt (config .has ("crypt.key" ) ? config .get ("crypt.key" ) : Crypt .generateKey ());
4549
4650 modules .forEach (m -> m .setupConfig (this , config ));
@@ -165,18 +169,29 @@ public I18N getTranslation() {
165169 return translation ;
166170 }
167171
168- protected void setupModules () {
169- }
172+ protected void setupModules () { }
170173
171174 protected abstract void setupConfig (Config config );
172175
173- protected void setupSeeding () {
174- }
176+ protected void setupSeeding () { }
177+
178+ void setupCommands (CommandLine commandLine ) { }
175179
176180 protected abstract void setupModels (SQL sql ) throws ORMConfigurationException ;
177181
178182 protected abstract void setupServer (HTTPServer server );
179183
184+ public void run (String [] args ){
185+ HelpCommand help = new HelpCommand ();
186+
187+ CommandLine commandLine = new CommandLine (help );
188+ help .setCommandLine (commandLine );
189+ commandLine .addSubcommand (new StartWebServerCommand (this ));
190+ setupCommands (commandLine );
191+
192+ commandLine .execute (args );
193+ }
194+
180195 public void start () {
181196 server .start ();
182197 server .join ();
0 commit comments