Skip to content

Commit 8579409

Browse files
dmealingclaude
andcommitted
MAJOR ARCHITECTURAL REFACTORING: Service Provider Pattern + ValidationContext Elimination
Complete simplification of service provider architecture from overcomplicated Service classes to direct delegation pattern with existing MetaData classes: 🗑️ **DELETED OVERCOMPLICATED ARCHITECTURE:** • Deleted entire database-common module (incorrectly created) • Deleted 7 Service classes (XSDGeneratorService, JsonSchemaGeneratorService, AIDocGeneratorService, DatabaseService, WebService, ObjectCreationService, IOService) • Removed all unnecessary service abstraction layers ✅ **SIMPLIFIED PROVIDER DELEGATION PATTERN:** • CodeGenMetaDataProvider → delegates to MetaDataFileXSDGenerator, MetaDataFileJsonSchemaGenerator, MetaDataAIDocumentationGenerator • CoreMetaDataProvider → delegates to XMLObjectWriter, XMLMetaDataWriter • WebMetaDataProvider → delegates to WebView, TextView, DateView, TextAreaView • CoreDBMetaDataProvider → moved to metadata module, contains common DB attributes for JPA + ObjectManagerDB • CoreObjectsMetaDataProvider → added for DataObject/ValueObject extensions in core module 📋 **STATIC REGISTRATION METHODS ADDED:** • MetaDataFileXSDGenerator.registerXSDAttributes() - XSD generation constants & attributes • MetaDataFileJsonSchemaGenerator.registerJsonSchemaAttributes() - JSON Schema constants & attributes • MetaDataAIDocumentationGenerator.registerAIDocAttributes() - AI documentation constants & attributes • XMLObjectWriter.registerXMLObjectAttributes() - XML serialization constants & attributes • XMLMetaDataWriter.registerXMLMetaDataAttributes() - XML metadata constants & attributes • WebView.registerWebViewAttributes() - Base web view constants & attributes • TextView.registerTextViewAttributes() - Text input constants & attributes • DateView.registerDateViewAttributes() - Date picker constants & attributes • TextAreaView.registerTextAreaViewAttributes() - Text area constants & attributes 🏗️ **CONSTANTS-BASED ARCHITECTURE:** • All attribute constants live in the classes that actually use them • XSD_NAMESPACE, XSD_ELEMENT_NAME, JSON_TITLE, JSON_FORMAT constants • XML_ELEMENT_NAME, XML_NAMESPACE, WEB_LABEL, WEB_PLACEHOLDER constants • DB_TABLE, DB_COLUMN, DB_NULLABLE, DB_PRIMARY_KEY constants • TEXT_MAX_LENGTH, DATE_FORMAT, TEXTAREA_COLS constants ✅ **VERIFICATION:** • Service discovery working: "Loading 2 MetaDataTypeProvider services" • 35 total types registered with extended attributes • StringField now supports: dbColumn, dbNullable, dbPrimaryKey, etc. • Clean compilation across all modules • All Provider classes delegate to existing classes successfully **Architecture is now clean, maintainable, and follows correct service provider delegation patterns.** 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 911dfad commit 8579409

29 files changed

Lines changed: 539 additions & 2499 deletions

codegen-base/src/main/java/com/draagon/meta/generator/CodeGenMetaDataProvider.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
package com.draagon.meta.generator;
22

3-
import com.draagon.meta.generator.service.XSDGeneratorService;
4-
import com.draagon.meta.generator.service.JsonSchemaGeneratorService;
5-
import com.draagon.meta.generator.service.AIDocGeneratorService;
3+
import com.draagon.meta.generator.direct.metadata.file.xsd.MetaDataFileXSDGenerator;
4+
import com.draagon.meta.generator.direct.metadata.file.json.MetaDataFileJsonSchemaGenerator;
5+
import com.draagon.meta.generator.direct.metadata.ai.MetaDataAIDocumentationGenerator;
66
import com.draagon.meta.registry.MetaDataRegistry;
77
import com.draagon.meta.registry.MetaDataTypeProvider;
88

99
/**
10-
* Code Generation MetaData provider that registers type extensions for code generation services.
10+
* Code Generation MetaData provider that registers type extensions for code generation.
1111
*
12-
* <p>This provider delegates to service classes that contain the actual extension logic
12+
* <p>This provider delegates to existing generator classes that contain the actual extension logic
1313
* and constants. It supports XSD generation, JSON Schema generation, and AI documentation
1414
* generation by extending existing MetaData types with generation-specific attributes.</p>
1515
*
16-
* <h3>Services Provided:</h3>
16+
* <h3>Generators Supported:</h3>
1717
* <ul>
18-
* <li><strong>XSDGeneratorService:</strong> Attributes for XSD schema generation</li>
19-
* <li><strong>JsonSchemaGeneratorService:</strong> Attributes for JSON Schema generation</li>
20-
* <li><strong>AIDocGeneratorService:</strong> Attributes for AI documentation generation</li>
18+
* <li><strong>MetaDataFileXSDGenerator:</strong> Attributes for XSD schema generation</li>
19+
* <li><strong>MetaDataFileJsonSchemaGenerator:</strong> Attributes for JSON Schema generation</li>
20+
* <li><strong>MetaDataAIDocumentationGenerator:</strong> Attributes for AI documentation generation</li>
2121
* </ul>
2222
*
2323
* <h3>Priority:</h3>
@@ -30,16 +30,16 @@ public class CodeGenMetaDataProvider implements MetaDataTypeProvider {
3030

3131
@Override
3232
public void registerTypes(MetaDataRegistry registry) {
33-
// Delegate to service classes that contain the extension logic and constants
33+
// Delegate to existing generator classes that contain the extension logic and constants
3434

3535
// Register XSD generation type extensions
36-
XSDGeneratorService.registerTypeExtensions(registry);
36+
MetaDataFileXSDGenerator.registerXSDAttributes(registry);
3737

3838
// Register JSON Schema generation type extensions
39-
JsonSchemaGeneratorService.registerTypeExtensions(registry);
39+
MetaDataFileJsonSchemaGenerator.registerJsonSchemaAttributes(registry);
4040

4141
// Register AI Documentation generation type extensions
42-
AIDocGeneratorService.registerTypeExtensions(registry);
42+
MetaDataAIDocumentationGenerator.registerAIDocAttributes(registry);
4343
}
4444

4545
@Override

codegen-base/src/main/java/com/draagon/meta/generator/direct/metadata/ai/MetaDataAIDocumentationGenerator.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,54 @@ public String getConfigurationSummary() {
141141
summary.append(" Cross-Language Info: ").append(includeCrossLanguageInfo ? "Enabled" : "Disabled");
142142
return summary.toString();
143143
}
144+
145+
///////////////////////////////////////////////////
146+
// Service Provider Pattern Registration
147+
148+
// AI Documentation generation attribute constants
149+
public static final String AI_VERSION = "aiVersion";
150+
public static final String AI_DESCRIPTION = "aiDescription";
151+
public static final String AI_BUSINESS_RULE = "aiBusinessRule";
152+
public static final String AI_USAGE_CONTEXT = "aiUsageContext";
153+
public static final String AI_VALIDATION_RULES = "aiValidationRules";
154+
public static final String AI_EXAMPLES = "aiExamples";
155+
public static final String AI_CONSTRAINTS = "aiConstraints";
156+
public static final String AI_EXTENSION_GUIDANCE = "aiExtensionGuidance";
157+
public static final String AI_CROSS_LANGUAGE_INFO = "aiCrossLanguageInfo";
158+
159+
/**
160+
* Registers AI Documentation generation attributes for use by the service provider pattern.
161+
* Called by CodeGenMetaDataProvider to extend existing MetaData types with AI documentation-specific attributes.
162+
*/
163+
public static void registerAIDocAttributes(com.draagon.meta.registry.MetaDataRegistry registry) {
164+
// Object-level AI Documentation attributes
165+
registry.findType("object", "base")
166+
.optionalAttribute(AI_VERSION, "string")
167+
.optionalAttribute(AI_DESCRIPTION, "string")
168+
.optionalAttribute(AI_BUSINESS_RULE, "string")
169+
.optionalAttribute(AI_USAGE_CONTEXT, "string")
170+
.optionalAttribute(AI_EXTENSION_GUIDANCE, "string")
171+
.optionalAttribute(AI_CROSS_LANGUAGE_INFO, "string");
172+
173+
registry.findType("object", "pojo")
174+
.optionalAttribute(AI_DESCRIPTION, "string")
175+
.optionalAttribute(AI_BUSINESS_RULE, "string");
176+
177+
// Field-level AI Documentation attributes
178+
registry.findType("field", "base")
179+
.optionalAttribute(AI_DESCRIPTION, "string")
180+
.optionalAttribute(AI_BUSINESS_RULE, "string")
181+
.optionalAttribute(AI_USAGE_CONTEXT, "string")
182+
.optionalAttribute(AI_VALIDATION_RULES, "string")
183+
.optionalAttribute(AI_EXAMPLES, "string")
184+
.optionalAttribute(AI_CONSTRAINTS, "string");
185+
186+
registry.findType("field", "string")
187+
.optionalAttribute(AI_EXAMPLES, "string")
188+
.optionalAttribute(AI_VALIDATION_RULES, "string");
189+
190+
registry.findType("field", "int")
191+
.optionalAttribute(AI_CONSTRAINTS, "string")
192+
.optionalAttribute(AI_EXAMPLES, "string");
193+
}
144194
}

codegen-base/src/main/java/com/draagon/meta/generator/direct/metadata/file/json/MetaDataFileJsonSchemaGenerator.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,55 @@ public String toString() {
7575
sb.append('}');
7676
return sb.toString();
7777
}
78+
79+
///////////////////////////////////////////////////
80+
// Service Provider Pattern Registration
81+
82+
// JSON Schema generation attribute constants
83+
public static final String JSON_SCHEMA_VERSION = "jsonSchemaVersion";
84+
public static final String JSON_SCHEMA_ID = "jsonSchemaId";
85+
public static final String JSON_TITLE = "jsonTitle";
86+
public static final String JSON_DESCRIPTION = "jsonDescription";
87+
public static final String JSON_FORMAT = "jsonFormat";
88+
public static final String JSON_PATTERN = "jsonPattern";
89+
public static final String JSON_ENUM = "jsonEnum";
90+
public static final String JSON_MINIMUM = "jsonMinimum";
91+
public static final String JSON_MAXIMUM = "jsonMaximum";
92+
93+
/**
94+
* Registers JSON Schema generation attributes for use by the service provider pattern.
95+
* Called by CodeGenMetaDataProvider to extend existing MetaData types with JSON Schema-specific attributes.
96+
*/
97+
public static void registerJsonSchemaAttributes(com.draagon.meta.registry.MetaDataRegistry registry) {
98+
// Object-level JSON Schema attributes
99+
registry.findType("object", "base")
100+
.optionalAttribute(JSON_SCHEMA_VERSION, "string")
101+
.optionalAttribute(JSON_SCHEMA_ID, "string")
102+
.optionalAttribute(JSON_TITLE, "string")
103+
.optionalAttribute(JSON_DESCRIPTION, "string");
104+
105+
registry.findType("object", "pojo")
106+
.optionalAttribute(JSON_TITLE, "string")
107+
.optionalAttribute(JSON_DESCRIPTION, "string");
108+
109+
// Field-level JSON Schema attributes
110+
registry.findType("field", "base")
111+
.optionalAttribute(JSON_TITLE, "string")
112+
.optionalAttribute(JSON_DESCRIPTION, "string")
113+
.optionalAttribute(JSON_FORMAT, "string")
114+
.optionalAttribute(JSON_PATTERN, "string")
115+
.optionalAttribute(JSON_ENUM, "string");
116+
117+
registry.findType("field", "string")
118+
.optionalAttribute(JSON_PATTERN, "string")
119+
.optionalAttribute(JSON_FORMAT, "string");
120+
121+
registry.findType("field", "int")
122+
.optionalAttribute(JSON_MINIMUM, "int")
123+
.optionalAttribute(JSON_MAXIMUM, "int");
124+
125+
registry.findType("field", "long")
126+
.optionalAttribute(JSON_MINIMUM, "long")
127+
.optionalAttribute(JSON_MAXIMUM, "long");
128+
}
78129
}

codegen-base/src/main/java/com/draagon/meta/generator/direct/metadata/file/xsd/MetaDataFileXSDGenerator.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,38 @@ public String toString() {
7373
sb.append('}');
7474
return sb.toString();
7575
}
76+
77+
///////////////////////////////////////////////////
78+
// Service Provider Pattern Registration
79+
80+
// XSD generation attribute constants
81+
public static final String XSD_NAMESPACE = "xsdNamespace";
82+
public static final String XSD_TARGET_NAMESPACE = "xsdTargetNamespace";
83+
public static final String XSD_ELEMENT_FORM_DEFAULT = "xsdElementFormDefault";
84+
public static final String XSD_ELEMENT_NAME = "xsdElementName";
85+
public static final String XSD_TYPE_NAME = "xsdTypeName";
86+
87+
/**
88+
* Registers XSD generation attributes for use by the service provider pattern.
89+
* Called by CodeGenMetaDataProvider to extend existing MetaData types with XSD-specific attributes.
90+
*/
91+
public static void registerXSDAttributes(com.draagon.meta.registry.MetaDataRegistry registry) {
92+
// Object-level XSD attributes
93+
registry.findType("object", "base")
94+
.optionalAttribute(XSD_NAMESPACE, "string")
95+
.optionalAttribute(XSD_TARGET_NAMESPACE, "string")
96+
.optionalAttribute(XSD_ELEMENT_FORM_DEFAULT, "string");
97+
98+
registry.findType("object", "pojo")
99+
.optionalAttribute(XSD_ELEMENT_NAME, "string")
100+
.optionalAttribute(XSD_TYPE_NAME, "string");
101+
102+
// Field-level XSD attributes
103+
registry.findType("field", "base")
104+
.optionalAttribute(XSD_ELEMENT_NAME, "string")
105+
.optionalAttribute(XSD_TYPE_NAME, "string");
106+
107+
registry.findType("field", "string")
108+
.optionalAttribute(XSD_ELEMENT_NAME, "string");
109+
}
76110
}

0 commit comments

Comments
 (0)