Skip to content

Commit 8edfb83

Browse files
dmealingclaude
andcommitted
refactor(java): retire FileMetaDataLoader + loader/file/; migrate to unified MetaDataLoader factories
Deletes the entire com.metaobjects.loader.file package (FileMetaDataLoader, FileMetaDataSources, LocalFileMetaDataSources, URIFileMetaDataSources, FileLoaderOptions) and the old createFromURIs / createFromResources aliases on MetaDataLoader. All callsites — production (core-spring MetaDataLoaderConfiguration) and tests (omdb, omdb-ktx, maven-plugin, codegen-mustache, metadata gson + proxy tests) — migrate to MetaDataLoader.fromResources / fromUris. Bundle-file XML loading in om/OMXMLTest is replaced with a stub @ignore test (the original Apple test data is already commented out). CoreTypeInitializer drops the dead Class.forName(FileMetaDataLoader) warm-up (FileMetaDataLoader had no static block to trigger). LoaderOptions header doc updated to describe the unified loader, not the old file-only loader. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 5847c6b commit 8edfb83

27 files changed

Lines changed: 50 additions & 1064 deletions

File tree

server/java/codegen-base/src/main/java/com/metaobjects/generator/direct/metadata/html/MetaDataHtmlDocumentationWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ private void generateOverviewSection() {
464464
writer.println(" <h3>Architecture Patterns</h3>");
465465
writer.println(" <div class=\"code-block\">");
466466
writer.println("// MetaDataLoader operates like Java ClassLoader - load once, read many");
467-
writer.println("MetaDataLoader loader = MetaDataLoader.createFromResources(\"myApp\", sources);");
467+
writer.println("MetaDataLoader loader = MetaDataLoader.fromResources(\"myApp\", sources);");
468468
writer.println("loader.init(); // Heavy initialization, permanent in memory");
469469
writer.println("");
470470
writer.println("// Runtime access is O(1) cached lookup - no synchronization needed");

server/java/codegen-base/src/test/java/com/metaobjects/generator/direct/metadata/html/HtmlDocumentationGeneratorExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void demonstrateGeneratorConfiguration() {
6060
* </goals>
6161
* <configuration>
6262
* <loader>
63-
* <classname>com.metaobjects.loader.file.FileMetaDataLoader</classname>
63+
* <classname>com.metaobjects.loader.MetaDataLoader</classname>
6464
* <name>html-doc-generator</name>
6565
* <sources/>
6666
* </loader>

server/java/codegen-mustache/src/test/java/com/metaobjects/generator/mustache/MustacheTemplateEngineTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void setUp() throws Exception {
2626
engine = new MustacheTemplateEngine();
2727

2828
// Load test metadata using MetaDataLoader directly
29-
loader = MetaDataLoader.createFromURIs("mustache-test",
29+
loader = MetaDataLoader.fromUris("mustache-test",
3030
Arrays.asList(URIHelper.toURI("model:resource:mustache-test-metadata.json")));
3131

3232
// Get the User MetaObject

server/java/core-spring/src/main/java/com/metaobjects/spring/MetaDataLoaderConfiguration.java

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.metaobjects.spring;
22

3-
import com.metaobjects.loader.LoaderOptions;
43
import com.metaobjects.loader.MetaDataLoader;
54

65
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -35,16 +34,12 @@
3534
* <pre>{@code
3635
* @Configuration
3736
* public class MyMetaDataConfig {
38-
*
37+
*
3938
* @Bean
4039
* public MetaDataLoader userMetaDataLoader() {
41-
* MetaDataLoader loader = new MetaDataLoader(
42-
* LoaderOptions.create(false, false, true), MetaDataLoader.SUBTYPE_MANUAL, "userLoader");
43-
* loader.setSourceURIs(Arrays.asList(
40+
* return MetaDataLoader.fromUris("userLoader", List.of(
4441
* URI.create("classpath:metadata/users.json")
4542
* ));
46-
* loader.init();
47-
* return loader;
4843
* }
4944
* }
5045
* }</pre>
@@ -83,16 +78,9 @@ public MetaDataLoader applicationMetaDataLoader() throws Exception {
8378
for (String source : metadataSources) {
8479
sourceURIs.add(URI.create(source));
8580
}
86-
87-
// Create and configure loader
88-
MetaDataLoader loader = new MetaDataLoader(
89-
LoaderOptions.create(false, false, true),
90-
MetaDataLoader.SUBTYPE_MANUAL, "applicationLoader");
91-
92-
loader.setSourceURIs(sourceURIs);
93-
loader.init();
9481

95-
return loader;
82+
// Build a loader via the unified factory (init + load + register in one call).
83+
return MetaDataLoader.fromUris("applicationLoader", sourceURIs);
9684
}
9785

9886
/**
@@ -113,10 +101,7 @@ public MetaDataLoader applicationMetaDataLoader() throws Exception {
113101
// @Bean
114102
// @ConditionalOnProperty("metaobjects.external-path")
115103
// public MetaDataLoader externalMetaDataLoader(@Value("${metaobjects.external-path}") String path) {
116-
// FileMetaDataLoader loader = new FileMetaDataLoader("externalLoader");
117-
// loader.setSourceURIs(Arrays.asList(URI.create("file:" + path)));
118-
// loader.init();
119-
// return loader;
104+
// return MetaDataLoader.fromUris("externalLoader", List.of(URI.create("file:" + path)));
120105
// }
121106

122107
/**

server/java/examples/basic-example/src/main/java/com/metaobjects/examples/basic/BasicMetaObjectsExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public static void main(String[] args) {
175175
// 7. Simple vs Complex pattern comparison
176176
System.out.println("\n7. When to use simple vs complex patterns...");
177177
System.out.println(" SIMPLE PATTERN (this example):");
178-
System.out.println(" - Single MetaDataLoader (MetaDataLoader.createFromResources or setSourceURIs + init)");
178+
System.out.println(" - Single MetaDataLoader (MetaDataLoader.fromResources or setSourceURIs + init)");
179179
System.out.println(" - Direct loader.getMetaObjectByName() or MetaDataUtil.findMetaObjectByName(loader, ...)");
180180
System.out.println(" - No registry complexity needed");
181181
System.out.println(" COMPLEX PATTERN (see spring-example, osgi-example):");

server/java/maven-plugin/src/main/java/com/metaobjects/mojo/LoaderParam.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public String getClassname() {
5252

5353
/**
5454
* Set the fully qualified classname of the loader implementation
55-
* @param classname Loader classname (e.g., "com.metaobjects.loader.file.FileMetaDataLoader")
55+
* @param classname Loader classname (e.g., "com.metaobjects.loader.MetaDataLoader")
5656
*/
5757
public void setClassname(String classname) {
5858
this.classname = classname;

server/java/maven-plugin/src/test/java/com/metaobjects/mojo/MetaDataMigrateMojoTest.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.metaobjects.mojo;
22

33
import com.metaobjects.loader.MetaDataLoader;
4-
import com.metaobjects.loader.file.FileLoaderOptions;
5-
import com.metaobjects.loader.file.FileMetaDataLoader;
6-
import com.metaobjects.loader.file.LocalFileMetaDataSources;
74
import org.apache.maven.plugin.MojoExecutionException;
85
import org.apache.maven.plugin.MojoFailureException;
96
import org.codehaus.plexus.PlexusTestCase;
@@ -28,7 +25,7 @@
2825
* {@link org.apache.maven.project.MavenProject} context that the maven-plugin-testing-harness
2926
* cannot trivially provide for a mojo with JDBC + engine wiring, this test uses a
3027
* <em>focused direct-instantiation</em> approach: it subclasses {@code MetaDataMigrateMojo},
31-
* overrides {@code createLoader} to build a {@link FileMetaDataLoader} from the test fixture
28+
* overrides {@code createLoader} to build a {@link MetaDataLoader} from the test fixture
3229
* without touching the Maven classpath machinery, and drives the engine end-to-end against an
3330
* in-memory Derby database. The {@code SchemaMigrationEngine} and {@code DerbyDriver} are the
3431
* real implementations — nothing is mocked or faked.
@@ -75,23 +72,15 @@ static class TestableMigrateMojo extends MetaDataMigrateMojo {
7572

7673
/**
7774
* Bypass {@code MetaDataMigrateMojo.createLoader} (needs loaderConfig + MavenProject).
78-
* Uses a {@link FileMetaDataLoader} that reads directly from the filesystem via
79-
* {@code LocalFileMetaDataSources(sourceDir, filename)}.
75+
* Uses the unified {@link MetaDataLoader#fromUris(String, java.util.List)} factory
76+
* reading the fixture directly from the filesystem.
8077
*/
8178
@Override
8279
protected MetaDataLoader createLoader(ClassLoader ignored) {
8380
try {
84-
FileMetaDataLoader xl = new FileMetaDataLoader(
85-
new FileLoaderOptions()
86-
.setShouldRegister(false)
87-
.setAllowAutoAttrs(true)
88-
.setStrict(false)
89-
.setVerbose(false),
90-
"mojo-test-loader");
91-
// LocalFileMetaDataSources(baseDir, filename) → getFileInputStream(baseDir + "/" + filename)
92-
xl.init(new LocalFileMetaDataSources(fixtureDir, fixtureFile));
93-
xl.register();
94-
return xl;
81+
java.net.URI fixtureUri = java.nio.file.Path.of(fixtureDir, fixtureFile).toUri();
82+
return MetaDataLoader.fromUris("mojo-test-loader",
83+
java.util.List.of(fixtureUri));
9584
} catch (Exception e) {
9685
throw new RuntimeException("Could not build test loader: " + e.getMessage(), e);
9786
}

server/java/metadata/src/main/java/com/metaobjects/MetaData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
* <strong>Usage Examples:</strong>
5353
* <pre>{@code
5454
* // Loading Phase - Happens once at startup
55-
* MetaDataLoader loader = MetaDataLoader.createFromResources("myLoader",
55+
* MetaDataLoader loader = MetaDataLoader.fromResources("myLoader",
5656
* Arrays.asList("com/example/metadata.json"));
5757
* // OR: loader = new MetaDataLoader(...); loader.setSourceURIs(...); loader.init();
5858
*

server/java/metadata/src/main/java/com/metaobjects/loader/LoaderOptions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55

66
/**
7-
* FileMetaDataLoader Configuration Settings
7+
* MetaDataLoader configuration settings — toggle behavior flags that apply
8+
* across all loader sources (file, URI, directory, in-memory).
89
*/
910
public class LoaderOptions {
1011

server/java/metadata/src/main/java/com/metaobjects/loader/MetaDataLoader.java

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -185,37 +185,6 @@ public static MetaDataLoader createManual( boolean shouldRegister, String name )
185185
SUBTYPE_MANUAL, name );
186186
}
187187

188-
/**
189-
* Construct a MetaDataLoader, set the given URI list, then init + load — all in one call.
190-
* Equivalent to the old {@code SimpleLoader.createManualURIs(name, uris)}.
191-
*
192-
* @param name the loader name
193-
* @param uris model URIs to load (e.g. {@code model:resource:…}, {@code model:file:…})
194-
* @return a fully-initialized loader with all URIs loaded
195-
*/
196-
public static MetaDataLoader createFromURIs(String name, List<URI> uris) {
197-
MetaDataLoader loader = new MetaDataLoader(
198-
LoaderOptions.create(false, false, true), SUBTYPE_MANUAL, name);
199-
loader.setSourceURIs(uris);
200-
loader.init();
201-
return loader;
202-
}
203-
204-
/**
205-
* Construct a MetaDataLoader from classpath resource paths, then init + load.
206-
* Each resource path is wrapped as {@code model:resource:<path>}.
207-
* Equivalent to the old {@code SimpleLoader.createManual(name, List&lt;String&gt;)}.
208-
*
209-
* @param name the loader name
210-
* @param resources classpath resource paths (no {@code model:} prefix needed)
211-
* @return a fully-initialized loader with all resources loaded
212-
*/
213-
public static MetaDataLoader createFromResources(String name, List<String> resources) {
214-
List<URI> uris = new ArrayList<>();
215-
for (String r : resources) uris.add(URIHelper.toURI("model:resource:" + r));
216-
return createFromURIs(name, uris);
217-
}
218-
219188
///////////////////////////////////////////////////////////////////////
220189
// Unified static factories (cross-language consistent — see TS / C# / Python)
221190

@@ -258,8 +227,8 @@ public static MetaDataLoader fromDirectory(String name, Path directory, Director
258227
}
259228

260229
/**
261-
* Build {@link UriSource}s and load them. Replaces the deprecated
262-
* {@link #createFromURIs(String, List)} alias.
230+
* Build {@link UriSource}s and load them. The cross-language URI-based
231+
* factory — every port (TS/Java/C#/Python) exposes the same shape.
263232
*
264233
* @param name the loader name
265234
* @param uris model URIs to load

0 commit comments

Comments
 (0)