Skip to content

Commit 7655463

Browse files
author
dave
committed
#393 fix embedded java not to need spring
1 parent 10b820a commit 7655463

File tree

9 files changed

+169
-108
lines changed

9 files changed

+169
-108
lines changed

embeddedJavaExample/embeddedJavaExample.emf

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@
172172
"type": "runtimeList",
173173
"item": {
174174
"initialRows": 0,
175+
"listCreationMode": "CUSTOM_RTCALL",
175176
"name": "My List Item",
176177
"variableName": "StatusMyListItem",
177178
"id": 15,
@@ -251,7 +252,6 @@
251252
"embeddedPlatform": "RASPBERRY_PIJ",
252253
"lastDisplayUuid": "59f05a22-8873-4bfe-86d4-73ef874a0283",
253254
"lastInputUuid": "89cd7f70-0457-4884-97c2-0db904ccb0ba",
254-
"lastRemoteUuid": "36f98a10-7ffc-468c-8b6b-3961b5c87cbe",
255255
"lastRemoteUuids": [
256256
"36f98a10-7ffc-468c-8b6b-3961b5c87cbe"
257257
],
@@ -281,8 +281,8 @@
281281
}
282282
],
283283
"namingRecursive": true,
284-
"saveToSrc": false,
285284
"useCppMain": false,
285+
"saveLocation": "ALL_TO_CURRENT",
286286
"usingSizedEEPROMStorage": false,
287287
"eepromDefinition": "",
288288
"authenticatorDefinition": "rom:2:6",
@@ -304,6 +304,8 @@
304304
]
305305
},
306306
"packageNamespace": "com.thecoderscorner.menuexample",
307-
"appIsModular": true
308-
}
307+
"appIsModular": true,
308+
"listOfEmbeddedForms": []
309+
},
310+
"stringLists": []
309311
}

embeddedJavaExample/src/main/java/com/thecoderscorner/menuexample/tcmenu/EmbeddedJavaDemoApp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class EmbeddedJavaDemoApp {
2323
private final TcJettyWebServer webServer;
2424

2525
public EmbeddedJavaDemoApp() {
26-
context = new MenuConfig(null);
26+
context = new MenuConfig();
2727
manager = context.getBean(MenuManagerServer.class);
2828
webServer = context.getBean(TcJettyWebServer.class);
2929
}

embeddedJavaExample/src/main/java/com/thecoderscorner/menuexample/tcmenu/EmbeddedJavaDemoMenu.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.thecoderscorner.menuexample.tcmenu;
22

33
import com.thecoderscorner.menu.domain.*;
4-
import com.thecoderscorner.menu.domain.state.*;
4+
import com.thecoderscorner.menu.domain.state.MenuTree;
55
import com.thecoderscorner.menu.persist.JsonMenuItemSerializer;
66

77
public class EmbeddedJavaDemoMenu {
@@ -176,6 +176,7 @@ public class EmbeddedJavaDemoMenu {
176176
"type": "runtimeList",
177177
"item": {
178178
"initialRows": 0,
179+
"listCreationMode": "CUSTOM_RTCALL",
179180
"name": "My List Item",
180181
"variableName": "StatusMyListItem",
181182
"id": 15,

embeddedJavaExample/src/main/java/com/thecoderscorner/menuexample/tcmenu/MenuConfig.java

Lines changed: 66 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
import com.thecoderscorner.embedcontrol.customization.MenuItemStore;
99
import com.thecoderscorner.embedcontrol.jfx.controlmgr.JfxNavigationHeader;
1010
import com.thecoderscorner.embedcontrol.jfx.controlmgr.JfxNavigationManager;
11+
import com.thecoderscorner.menu.auth.MenuAuthenticator;
1112
import com.thecoderscorner.menu.auth.PropertiesAuthenticator;
1213
import com.thecoderscorner.menu.mgr.MenuManagerServer;
1314
import com.thecoderscorner.menu.persist.LocaleMappingHandler;
1415
import com.thecoderscorner.menu.persist.PropertiesMenuStateSerialiser;
1516
import com.thecoderscorner.menu.persist.VersionInfo;
16-
import com.thecoderscorner.menu.remote.mgrclient.SocketServerConnectionManager;
1717
import com.thecoderscorner.menu.remote.protocol.ConfigurableProtocolConverter;
1818
import com.thecoderscorner.menuexample.tcmenu.plugins.TcJettyWebServer;
1919

@@ -25,65 +25,88 @@
2525

2626
/**
2727
* This class creates an application context out of all these components, and you can request any components that are
28-
* put into the context using getBean(ClassName.class).
28+
* put into the context using getBean(ClassName.class). See the base class BaseMenuConfig for more details. Generally
29+
* don't change the constructor, as it is rebuild each time around. Prefer putting your own code in appCustomConfiguration
2930
*/
3031
public class MenuConfig extends BaseMenuConfig {
31-
public MenuConfig(String env) {
32-
super(null, env);
33-
var executorService = asBean(Executors.newScheduledThreadPool(propAsIntWithDefault("threading.pool.size", 4)));
34-
var menuDef = asBean(new EmbeddedJavaDemoMenu());
35-
36-
asBean(new PropertiesMenuStateSerialiser(menuDef.getMenuTree(), Path.of(resolvedProperties.getProperty("file.menu.storage")).resolve("menuStorage.properties")));
37-
38-
var settings = asBean(new GlobalSettings(new ApplicationThemeManager()));
39-
// load or adjust the settings as needed here. You could use the JDBC components with SQLite to load and store
40-
// these values just like embed control does. See TcPreferencesPersistence and TccDatabaseUtilities.
41-
settings.setDefaultFontSize(14);
42-
settings.setDefaultRecursiveRendering(false);
43-
44-
asBean(new JfxNavigationHeader(executorService, settings));
45-
46-
asBean(new MenuItemStore(settings, menuDef.getMenuTree(), "", 7, 2, settings.isDefaultRecursiveRendering()));
47-
48-
var protocol = asBean(new ConfigurableProtocolConverter(true));
32+
@TcComponent
33+
public JfxNavigationHeader navMgr(ScheduledExecutorService executorService, GlobalSettings settings) {
34+
return new JfxNavigationHeader(executorService, settings);
35+
}
4936

50-
Clock clock = asBean(Clock.systemUTC());
51-
asBean(new TcJettyWebServer(protocol, clock, "./data/www", 8080, false));
37+
@TcComponent
38+
public ConfigurableProtocolConverter protocol() {
39+
return new ConfigurableProtocolConverter(true);
40+
}
5241

53-
var authenticator = asBean(new PropertiesAuthenticator(mandatoryStringProp("file.auth.storage")));
42+
@TcComponent
43+
public MenuManagerServer menuManagerServer(Clock clock, EmbeddedJavaDemoMenu menuDef, ScheduledExecutorService executorService, MenuAuthenticator authenticator) {
44+
return new MenuManagerServer(executorService, menuDef.getMenuTree(), mandatoryStringProp("server.name"), UUID.fromString(mandatoryStringProp("server.uuid")), authenticator, clock);
45+
}
5446

55-
asBean(new MenuManagerServer(executorService, menuDef.getMenuTree(), mandatoryStringProp("server.name"), UUID.fromString(mandatoryStringProp("server.uuid")), authenticator, clock));
47+
@TcComponent
48+
public EmbeddedJavaDemoController menuController() {
49+
return new EmbeddedJavaDemoController(
50+
getBean(EmbeddedJavaDemoMenu.class),
51+
getBean(JfxNavigationManager.class),
52+
getBean(ScheduledExecutorService.class),
53+
getBean(GlobalSettings.class),
54+
getBean(MenuItemStore.class)
55+
);
56+
}
5657

57-
asBean(new SocketServerConnectionManager(protocol, executorService, 3333, clock));
58+
@TcComponent
59+
public MenuItemStore itemStore(GlobalSettings settings, EmbeddedJavaDemoMenu menuDef) {
60+
return new MenuItemStore(settings, menuDef.getMenuTree(), "", 7, 2, settings.isDefaultRecursiveRendering());
61+
}
5862

59-
asBean(createVersionInfo());
63+
@TcComponent
64+
public GlobalSettings globalSettings() {
65+
var settings = new GlobalSettings(new ApplicationThemeManager());
66+
// load or adjust the settings as needed here. You could use the JDBC components with SQLite to load and store
67+
// these values just like embed control does. See TcPreferencesPersistence and TccDatabaseUtilities.
68+
settings.setDefaultFontSize(16);
69+
settings.setDefaultRecursiveRendering(false);
70+
return settings;
71+
}
6072

61-
scanForComponents();
73+
@TcComponent
74+
public MenuAppVersion versionInfo() {
75+
var version = mandatoryStringProp("build.version");
76+
var timestamp = mandatoryStringProp("build.timestamp");
77+
var groupId = mandatoryStringProp("build.groupId");
78+
var artifact = mandatoryStringProp("build.artifactId");
79+
return new MenuAppVersion(new VersionInfo(version), timestamp, groupId, artifact);
6280
}
6381

6482
@TcComponent
65-
LocaleMappingHandler localeHandler() {
83+
public LocaleMappingHandler localeHandler() {
6684
return LocaleMappingHandler.NOOP_IMPLEMENTATION;
6785
}
6886

69-
void appCustomConfiguration() {
70-
asBean(new EmbeddedJavaDemoController(
71-
getBean(EmbeddedJavaDemoMenu.class),
72-
getBean(JfxNavigationManager.class),
73-
getBean(ScheduledExecutorService.class),
74-
getBean(GlobalSettings.class),
75-
getBean(MenuItemStore.class)
76-
));
87+
@TcComponent
88+
public MenuAuthenticator menuAuthenticator() {
89+
return new PropertiesAuthenticator(mandatoryStringProp("file.auth.storage"));
90+
}
91+
92+
@TcComponent
93+
public ConfigurableProtocolConverter tagVal() {
94+
return new ConfigurableProtocolConverter(true);
95+
}
7796

78-
// you can put your configurations here, example:
79-
// var myComponent = asBean(new MyOwnComponent("hello");
80-
// to later access it simple call getBean(MyOwnComponent.class) on the context.
97+
@TcComponent
98+
public TcJettyWebServer webServer(ConfigurableProtocolConverter protocol, Clock clock) {
99+
return new TcJettyWebServer(protocol, clock, "./data/www", 8080, false);
81100
}
82101

83-
public MenuAppVersion createVersionInfo() {
84-
return new MenuAppVersion(new VersionInfo(mandatoryStringProp("build.version")),
85-
mandatoryStringProp("build.timestamp"), mandatoryStringProp("build.groupId"),
86-
mandatoryStringProp("build.artifactId"));
102+
public MenuConfig() {
103+
// Do not change this constructor, it is replaced with each build, put your objects in appCustomConfiguration
104+
super(null, null);
105+
Clock clock = asBean(Clock.systemUTC());
106+
var executorService = asBean(Executors.newScheduledThreadPool(propAsIntWithDefault("threading.pool.size", 4)));
107+
var menuDef = asBean(new EmbeddedJavaDemoMenu());
108+
asBean(new PropertiesMenuStateSerialiser(menuDef.getMenuTree(), Path.of(resolvedProperties.getProperty("file.menu.storage")).resolve("menuStorage.properties")));
109+
scanForComponents();
87110
}
88111

89112
// Auto generated menu callbacks end here. Please do not remove this line or change code after it.

tcMenuGenerator/src/main/java/com/thecoderscorner/menu/editorui/generator/ejava/EmbeddedJavaGenerator.java

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -190,37 +190,50 @@ private void generateMenuAppContext(EmbeddedJavaProject javaProject, String claz
190190
""")
191191
.addStatement(new GeneratedJavaMethod(CONSTRUCTOR_REPLACE)
192192
.withStatement("// Do not change this constructor, it is replaced with each build, put your objects in appCustomConfiguration")
193-
.withStatement("super(env);")
193+
.withStatement("super(null, null);")
194194
.withStatement("Clock clock = asBean(Clock.systemUTC());")
195195
.withStatement("var executorService = asBean(Executors.newScheduledThreadPool(propAsIntWithDefault(\"threading.pool.size\", 4)));")
196-
.withStatement("var menuDef = asBean(new EmbeddedJavaDemoMenu());")
196+
.withStatement("var menuDef = asBean(new " + clazzBaseName + "Menu());")
197197
.withStatement("asBean(new PropertiesMenuStateSerialiser(menuDef.getMenuTree(), Path.of(resolvedProperties.getProperty(\"file.menu.storage\")).resolve(\"menuStorage.properties\")));")
198-
.withStatement("var settings = asBean(new GlobalSettings(new ApplicationThemeManager()));")
199-
.withStatement("// load or adjust the settings as needed here. You could use the JDBC components with SQLite to load and store")
200-
.withStatement("// these values just like embed control does. See TcPreferencesPersistence and TccDatabaseUtilities.")
201-
.withStatement("settings.setDefaultFontSize(16);")
202-
.withStatement("settings.setDefaultRecursiveRendering(false);")
203-
.withStatement("asBean(new JfxNavigationHeader(executorService, settings));")
204-
.withStatement("asBean(new MenuItemStore(settings, menuDef.getMenuTree(), \"\", 7, 2, settings.isDefaultRecursiveRendering()));")
205-
.withStatement("var protocol = asBean(new ConfigurableProtocolConverter(true));")
206-
.withStatement("asBean(new TcJettyWebServer(protocol, clock, \"./data/www\", 8080, false));")
207-
.withStatement("var authenticator = asBean(new PropertiesAuthenticator(mandatoryStringProp(\"file.auth.storage\")));")
208-
.withStatement("asBean(new MenuManagerServer(executorService, menuDef.getMenuTree(), mandatoryStringProp(\"server.name\"), UUID.fromString(mandatoryStringProp(\"server.uuid\")), authenticator, clock));")
209-
.withStatement("asBean(new SocketServerConnectionManager(protocol, executorService, 3333, clock));")
210-
.withStatement("asBean(createVersionInfo());")
211-
.withStatement("appCustomConfiguration();"))
212-
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "void", "appCustomConfiguration")
213-
.withStatement("asBean(new EmbeddedJavaDemoController(")
198+
.withStatement("scanForComponents();"))
199+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "JfxNavigationHeader", "navMgr").withTcComponent()
200+
.withParameter("ScheduledExecutorService executorService")
201+
.withParameter("GlobalSettings settings")
202+
.withStatement("return new JfxNavigationHeader(executorService, settings);"))
203+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "ConfigurableProtocolConverter", "protocol").withTcComponent()
204+
.withStatement("return new ConfigurableProtocolConverter(true);"))
205+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "MenuManagerServer", "menuManagerServer").withTcComponent()
206+
.withParameter("Clock clock")
207+
.withParameter(clazzBaseName + "Menu menuDef")
208+
.withParameter("ScheduledExecutorService executorService")
209+
.withParameter("MenuAuthenticator authenticator")
210+
.withStatement("return new MenuManagerServer(executorService, menuDef.getMenuTree(), mandatoryStringProp(\"server.name\"), UUID.fromString(mandatoryStringProp(\"server.uuid\")), authenticator, clock);"))
211+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, clazzBaseName + "Controller", "menuController").withTcComponent()
212+
.withStatement("return new EmbeddedJavaDemoController(")
214213
.withStatement(" getBean(EmbeddedJavaDemoMenu.class),")
215214
.withStatement(" getBean(JfxNavigationManager.class),")
216215
.withStatement(" getBean(ScheduledExecutorService.class),")
217216
.withStatement(" getBean(GlobalSettings.class),")
218217
.withStatement(" getBean(MenuItemStore.class)")
219-
.withStatement("));")
220-
.withStatement("")
221-
.withStatement("// you can put your configurations here and this method is not replaced , example:")
222-
.withStatement("// var myComponent = asBean(new MyOwnComponent(\"hello\");")
223-
.withStatement("// to later access it simple call getBean(MyOwnComponent.class) on the context."));
218+
.withStatement(");"))
219+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "MenuItemStore", "itemStore").withTcComponent()
220+
.withParameter("GlobalSettings settings")
221+
.withParameter(clazzBaseName + "Menu menuDef")
222+
.withStatement("return new MenuItemStore(settings, menuDef.getMenuTree(), \"\", 7, 2, settings.isDefaultRecursiveRendering());"))
223+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "GlobalSettings", "globalSettings").withTcComponent()
224+
.withStatement("var settings = new GlobalSettings(new ApplicationThemeManager());")
225+
.withStatement("// load or adjust the settings as needed here. You could use the JDBC components with SQLite to load and store")
226+
.withStatement("// these values just like embed control does. See TcPreferencesPersistence and TccDatabaseUtilities.")
227+
.withStatement("settings.setDefaultFontSize(16);")
228+
.withStatement("settings.setDefaultRecursiveRendering(false);")
229+
.withStatement("return settings;"))
230+
.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "MenuAppVersion", "versionInfo").withTcComponent()
231+
.withStatement("var version = mandatoryStringProp(\"build.version\");")
232+
.withStatement("var timestamp = mandatoryStringProp(\"build.timestamp\");")
233+
.withStatement("var groupId = mandatoryStringProp(\"build.groupId\");")
234+
.withStatement("var artifact = mandatoryStringProp(\"build.artifactId\");")
235+
.withStatement("return new MenuAppVersion(new VersionInfo(version), timestamp, groupId, artifact);"));
236+
224237

225238
if(handler.isLocalSupportEnabled()) {
226239
builder.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "LocaleMappingHandler", "localeHandler")
@@ -255,15 +268,15 @@ private void generateMenuApplicationClass(EmbeddedJavaProject javaProject, CodeG
255268
.addPackageImport("com.thecoderscorner.menu.mgr.*")
256269
.addPackageImport("com.thecoderscorner.menu.persist.MenuStateSerialiser")
257270
.addStatement(new GeneratedJavaField("MenuManagerServer", "manager"))
258-
.addStatement(new GeneratedJavaField("ApplicationContext", "context"));
271+
.addStatement(new GeneratedJavaField("MenuConfig", "context"));
259272
for(var cap : javaProject.getAllCodeGeneratorCapables()) {
260273
wrapper.addAppFields(cap, builder);
261274
}
262275
pluginCreator.mapVariables(allPlugins.stream().flatMap(p -> p.getVariables().stream()).distinct().toList(), builder);
263276
pluginCreator.mapImports(allPlugins.stream().flatMap(p -> p.getIncludeFiles().stream()).distinct().toList(), builder);
264277

265278
var constructor = new GeneratedJavaMethod(CONSTRUCTOR_REPLACE)
266-
.withStatement("context = new MenuConfig(null);")
279+
.withStatement("context = new MenuConfig();")
267280
.withStatement("manager = context.getBean(MenuManagerServer.class);");
268281
pluginCreator.mapConstructorStatements(allPlugins.stream().flatMap(p -> p.getVariables().stream()).toList(), constructor);
269282

tcMenuGenerator/src/main/java/com/thecoderscorner/menu/editorui/generator/ejava/JavaCodeGeneratorCapableWrapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ else if(capable instanceof ReadOnlyAuthenticatorDefinition readAuth) {
3333
else if(capable instanceof EepromAuthenticatorDefinition) {
3434
classBuilder.addPackageImport("com.thecoderscorner.menu.auth.*");
3535
classBuilder.addStatement(new GeneratedJavaMethod(METHOD_IF_MISSING, "MenuAuthenticator", "menuAuthenticator")
36-
.withParameter("@Value(\"${file.auth.storage}\") String propsPath")
37-
.withStatement("return new PropertiesAuthenticator(propsPath);").withTcComponent());
36+
.withStatement("return new PropertiesAuthenticator(mandatoryStringProp(\"file.auth.storage\"));")
37+
.withTcComponent());
3838
}
3939
}
4040
}

0 commit comments

Comments
 (0)