Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .claude/rules/metaschema-authoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ The following packages contain binding classes derived from Metaschema modules:

| Package | Source Metaschema | Bootstrap POM |
|---------|------------------|---------------|
| `databind/src/main/java/gov/nist/secauto/metaschema/databind/config/binding/` | `databind/src/main/metaschema/metaschema-bindings.yaml` | `databind/pom-bootstrap.xml` |
| `metaschema-testing/src/main/java/gov/nist/secauto/metaschema/model/testing/testsuite/` | `metaschema-testing/src/main/metaschema/unit-tests.yaml` | `metaschema-testing/pom-bootstrap.xml` |
| `databind/.../config/binding/` | `databind/src/main/metaschema/metaschema-bindings.yaml` | `databind/pom-bootstrap-config.xml` |
| `databind/.../model/metaschema/binding/` | `core/metaschema/schema/metaschema/metaschema-module-metaschema.xml` | `databind/pom-bootstrap-model.xml` |
| `metaschema-testing/.../testsuite/` | `metaschema-testing/src/main/metaschema/unit-tests.yaml` | `metaschema-testing/pom-bootstrap.xml` |

### CRITICAL: Never Manually Edit Generated Binding Classes

Expand All @@ -93,7 +94,7 @@ When you need to modify a generated binding class:
- The Metaschema module is the authoritative source for the data model

**Red flags that you're about to make a mistake:**
- Opening a file in `.../config/binding/` or `.../testsuite/` for editing
- Opening a file in `.../config/binding/`, `.../model/metaschema/binding/`, or `.../testsuite/` for editing
- Adding fields, methods, or annotations directly to these classes
- Copying code patterns from these files to create new bindings manually

Expand Down
24 changes: 16 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,20 +109,28 @@ Generated sources are placed in `target/generated-sources/` and excluded from st

### Bootstrap Binding Classes

The `metaschema-testing` module contains pre-generated binding classes that cannot be generated during the normal build due to circular dependencies (metaschema-maven-plugin → metaschema-schema-generator → metaschema-testing).
Several modules contain pre-generated binding classes that cannot be generated during the normal build due to circular dependencies. These classes must be regenerated manually when their source Metaschema modules change.

To regenerate these classes when the test suite Metaschema module changes:
| Module | Bootstrap POM | Generated Package | Source Metaschema |
|--------|--------------|-------------------|-------------------|
| metaschema-testing | `metaschema-testing/pom-bootstrap.xml` | `...model.testing.testsuite` | `unit-tests.yaml` |
| databind | `databind/pom-bootstrap-config.xml` | `...databind.config.binding` | `metaschema-bindings.yaml` |
| databind | `databind/pom-bootstrap-model.xml` | `...databind.model.metaschema.binding` | `metaschema-module-metaschema.xml` |

To regenerate binding classes:

```bash
# Generate binding classes using bootstrap POM
mvn -f metaschema-testing/pom-bootstrap.xml generate-sources
# First ensure the project is built
mvn install -DskipTests

# Copy to source directory
cp -r metaschema-testing/target/generated-sources/metaschema/gov/nist/secauto/metaschema/model/testing/testsuite/* \
metaschema-testing/src/main/java/gov/nist/secauto/metaschema/model/testing/testsuite/
# Generate binding classes using bootstrap POM (choose the appropriate module)
# Each bootstrap POM generates classes directly into src/main/java
mvn -f metaschema-testing/pom-bootstrap.xml generate-sources
mvn -f databind/pom-bootstrap-config.xml generate-sources
mvn -f databind/pom-bootstrap-model.xml generate-sources
```

See `metaschema-testing/README.md` for details.
See the README.md files in each module for detailed instructions.

### Metaschema Module Authoring

Expand Down
2 changes: 1 addition & 1 deletion core/metaschema
24 changes: 0 additions & 24 deletions databind-metaschema/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -149,30 +149,6 @@
<artifactId>metaschema-maven-plugin</artifactId>
<version>${project.version}</version>
<executions>
<execution>
<id>metaschema-codegen</id>
<phase>generate-sources</phase>
<goals>
<goal>generate-sources</goal>
</goals>
<configuration>
<metaschemaDir>
${project.build.directory}/generated-resources/metaschema-sources</metaschemaDir>
<outputDirectory>
${project.build.directory}/generated-sources/metaschema</outputDirectory>
<configs>
<config>
${project.basedir}/src/main/metaschema-bindings/metaschema-metaschema-bindings.xml</config>
</configs>
<includes>
<include>metaschema-module-metaschema.xml</include>
</includes>
<constraints>
<constraint>
${project.build.directory}/generated-resources/metaschema-sources/metaschema-module-constraints.xml</constraint>
</constraints>
</configuration>
</execution>
<execution>
<id>metaschema-xml-schema</id>
<phase>generate-sources</phase>
Expand Down

This file was deleted.

This file was deleted.

72 changes: 72 additions & 0 deletions databind/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Metaschema Java Data Binding and Code Generation

This module provides the data binding framework and code generation capabilities for Metaschema.

## Bootstrap Binding Classes

This module contains two sets of pre-generated binding classes that are checked into source control due to circular dependency constraints with the `metaschema-maven-plugin`.

### Config Binding Classes

Package: `gov.nist.secauto.metaschema.databind.config.binding`

These classes are generated from the binding configuration schema (`src/main/metaschema/metaschema-bindings.yaml`) and are used to parse binding configuration files.

**Regeneration:**

```bash
# From the project root - first ensure the project is built
mvn install -DskipTests

# Generate binding classes
mvn -f databind/pom-bootstrap-config.xml generate-sources

# Verify the build still passes
mvn install -PCI -Prelease
```

### Model Binding Classes

Package: `gov.nist.secauto.metaschema.databind.model.metaschema.binding`

These classes are generated from the core Metaschema module (`core/metaschema/schema/metaschema/metaschema-module-metaschema.xml`) and are used for parsing Metaschema module definitions.

**Regeneration:**

```bash
# From the project root - first ensure the project is built
mvn install -DskipTests

# Generate binding classes
mvn -f databind/pom-bootstrap-model.xml generate-sources

# Verify the build still passes
mvn install -PCI -Prelease
```

## Binding Configurations

### Config Bindings

**File:** `src/main/metaschema-bindings/metaschema-config-bindings.xml`

Customizes the generated config binding classes.

### Model Bindings

**File:** `src/main/metaschema-bindings/metaschema-model-bindings.xml`

Customizes the generated model binding classes:

- Maps the Metaschema namespace to `gov.nist.secauto.metaschema.databind.model.metaschema.binding`
- Renames `group-as` to `GroupingAs` (avoids Java keyword conflict)
- Adds interface implementations to constraint classes (e.g., `IModelConstraintsBase`)
- Adds interface implementations to inline definitions for typed collections

## Related Bootstrap POMs

| Bootstrap POM | Generated Package | Source Metaschema |
|--------------|-------------------|-------------------|
| `databind/pom-bootstrap-config.xml` | `...databind.config.binding` | `metaschema-bindings.yaml` |
| `databind/pom-bootstrap-model.xml` | `...databind.model.metaschema.binding` | `metaschema-module-metaschema.xml` |
| `metaschema-testing/pom-bootstrap.xml` | `...model.testing.testsuite` | `unit-tests.yaml` |
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
This POM is used to regenerate the metaschema-bindings binding classes.
It is NOT part of the normal build due to circular dependencies.

Usage: mvn -f databind/pom-bootstrap.xml generate-sources
Usage: mvn -f databind/pom-bootstrap-config.xml generate-sources

This will:
1. Delete existing generated classes in the config/binding package
Expand Down Expand Up @@ -76,7 +76,7 @@
<metaschemaDir>${project.basedir}/src/main/metaschema</metaschemaDir>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
<configs>
<config>${project.basedir}/src/main/metaschema-bindings/metaschema-binding-bindings.xml</config>
<config>${project.basedir}/src/main/metaschema-bindings/metaschema-config-bindings.xml</config>
</configs>
<includes>
<include>metaschema-bindings.yaml</include>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
This POM is used to regenerate the Metaschema model binding classes.
It is NOT part of the normal build due to circular dependencies.

Usage: mvn -f databind-metaschema/pom-bootstrap.xml generate-sources
Usage: mvn -f databind/pom-bootstrap-model.xml generate-sources

This will:
1. Delete existing generated classes in databind's model/metaschema/binding package
2. Generate new binding classes directly into databind/src/main/java
1. Delete existing generated classes in the model/metaschema/binding package
2. Generate new binding classes directly into src/main/java

IMPORTANT: Build the project first to ensure the code generator is up to date:
mvn install -DskipTests
Expand All @@ -19,36 +19,39 @@
<artifactId>metaschema-framework</artifactId>
<version>3.0.0-SNAPSHOT</version>
</parent>
<artifactId>metaschema-databind-modules-bootstrap</artifactId>
<artifactId>metaschema-databind-model-bootstrap</artifactId>
<packaging>pom</packaging>
<name>Metaschema Modules - Binding Class Generator</name>
<name>Metaschema Databind - Model Binding Class Generator</name>
<description>Standalone POM for regenerating Metaschema model binding classes.</description>

<properties>
<!-- For testing: generate to target directory first, then compare with existing -->
<output.dir>${project.build.directory}/generated-sources/metaschema</output.dir>
<binding.package.dir>${project.basedir}/../databind/src/main/java/gov/nist/secauto/metaschema/databind/model/metaschema/binding</binding.package.dir>
<binding.package.dir>${project.basedir}/src/main/java/gov/nist/secauto/metaschema/databind/model/metaschema/binding</binding.package.dir>
<stale.file.dir>${project.build.directory}/metaschema</stale.file.dir>
<metaschema.sources.dir>${project.basedir}/../core/metaschema/schema/metaschema</metaschema.sources.dir>
</properties>

<build>
<plugins>
<!-- Step 1: Clean stale file to force regeneration -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<executions>
<execution>
<id>clean-stale-file</id>
<id>clean-generated-sources</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<!-- Clean the stale file to force regeneration -->
<fileset>
<directory>${binding.package.dir}</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileset>
<!-- Also clean the stale file to force regeneration -->
<fileset>
<directory>${stale.file.dir}</directory>
<includes>
Expand All @@ -60,7 +63,6 @@
</execution>
</executions>
</plugin>
<!-- Step 2: Generate binding classes to test directory for comparison -->
<plugin>
<groupId>${project.groupId}</groupId>
<artifactId>metaschema-maven-plugin</artifactId>
Expand All @@ -74,7 +76,7 @@
</goals>
<configuration>
<metaschemaDir>${metaschema.sources.dir}</metaschemaDir>
<outputDirectory>${output.dir}</outputDirectory>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
<configs>
<config>${project.basedir}/src/main/metaschema-bindings/metaschema-model-bindings.xml</config>
</configs>
Expand Down
Loading
Loading