1+ package main
2+
3+ import (
4+ "fmt"
5+ "log"
6+
7+ "github.com/sivaosorg/fj"
8+ "github.com/sivaosorg/fj/pkg/config"
9+ "github.com/sivaosorg/fj/pkg/core"
10+ "github.com/sivaosorg/fj/pkg/transform"
11+ )
12+
13+ func main () {
14+ // Test the original API (backward compatibility)
15+ fmt .Println ("=== Testing Original API (Backward Compatibility) ===" )
16+
17+ json := `{
18+ "users": [
19+ {"name": "Alice", "age": 25, "active": true},
20+ {"name": "Bob", "age": 30, "active": false}
21+ ],
22+ "metadata": {
23+ "version": "1.0",
24+ "created": "2023-01-01"
25+ }
26+ }`
27+
28+ // Original API still works
29+ result := fj .Get (json , "users.0.name" )
30+ fmt .Printf ("User name: %s\n " , result .String ())
31+
32+ result = fj .Get (json , "metadata.version" )
33+ fmt .Printf ("Version: %s\n " , result .String ())
34+
35+ // Test array operations
36+ result = fj .Get (json , "users.#.name" )
37+ fmt .Printf ("All user names: %s\n " , result .String ())
38+
39+ fmt .Println ("\n === Testing New OOP Architecture ===" )
40+
41+ // 1. Test Configuration Manager (Singleton Pattern)
42+ configManager := config .GetInstance ()
43+ cfg := configManager .GetConfig ()
44+ cfg .EnableTransformers = true
45+ cfg .EnableValidation = true
46+ cfg .LogLevel = 3
47+ err := configManager .SetConfig (cfg )
48+ if err != nil {
49+ log .Fatal (err )
50+ }
51+
52+ fmt .Printf ("Configuration - Transformers enabled: %t\n " , cfg .EnableTransformers )
53+ fmt .Printf ("Configuration - Log level: %d\n " , cfg .LogLevel )
54+
55+ // 2. Test JSON Parser (Factory Pattern)
56+ parser := core .NewParser ()
57+ ctx := parser .Parse (json )
58+ if ctx .HasError () {
59+ log .Fatal (ctx .Error ())
60+ }
61+
62+ fmt .Printf ("Parsed JSON successfully - Type: %v\n " , ctx .Type ())
63+ fmt .Printf ("Is Object: %t\n " , ctx .IsObject ())
64+
65+ // 3. Test enhanced Context interface
66+ userPath := ctx .Get ("users.0" )
67+ fmt .Printf ("First user: %s\n " , userPath .String ())
68+ fmt .Printf ("User exists: %t\n " , userPath .Exists ())
69+
70+ // Test multiple paths
71+ paths := []string {"users.0.name" , "users.0.age" , "metadata.version" }
72+ results := ctx .GetMultiple (paths ... )
73+ for i , path := range paths {
74+ fmt .Printf ("Path '%s': %s\n " , path , results [i ].String ())
75+ }
76+
77+ // 4. Test Transformation Factory (Factory Pattern)
78+ factory := transform .NewFactory ()
79+
80+ // List available transformers
81+ transformerNames := factory .ListTransformers ()
82+ fmt .Printf ("Available transformers: %v\n " , transformerNames [:5 ]) // Show first 5
83+
84+ // Create and use a transformer
85+ uppercaseTransformer , err := factory .CreateTransformer ("uppercase" )
86+ if err != nil {
87+ log .Printf ("Transformer error: %v" , err )
88+ } else {
89+ fmt .Printf ("Transformer name: %s\n " , uppercaseTransformer .GetName ())
90+ fmt .Printf ("Transformer description: %s\n " , uppercaseTransformer .GetDescription ())
91+
92+ // Apply transformation
93+ transformed := uppercaseTransformer .Transform ("\" hello world\" " , "" )
94+ fmt .Printf ("Transformed result: %s\n " , transformed )
95+ }
96+
97+ // 5. Test Transformation Manager (Strategy Pattern)
98+ manager := transform .NewManager (factory )
99+
100+ // Apply transformation with error handling and events
101+ result2 , err := manager .Transform ("minify" , json , "" )
102+ if err != nil {
103+ log .Printf ("Transform error: %v" , err )
104+ } else {
105+ fmt .Printf ("Minified JSON length: %d (original: %d)\n " , len (result2 ), len (json ))
106+ }
107+
108+ // 6. Test transformation chaining (Decorator Pattern)
109+ steps := []transform.TransformationStep {
110+ {Name : "minify" , Argument : "" },
111+ {Name : "uppercase" , Argument : "" },
112+ }
113+
114+ chained , err := manager .ChainTransformations (json , steps )
115+ if err != nil {
116+ log .Printf ("Chain error: %v" , err )
117+ } else {
118+ fmt .Printf ("Chained transformation completed successfully (length: %d)\n " , len (chained ))
119+ }
120+
121+ fmt .Println ("\n === Testing Error Handling ===" )
122+
123+ // Test custom error types
124+ invalidJSON := `{"invalid": json}`
125+ invalidCtx := parser .Parse (invalidJSON )
126+ if invalidCtx .HasError () {
127+ fmt .Printf ("Parse error detected: %v\n " , invalidCtx .Error ())
128+ }
129+
130+ // Test transformation error
131+ _ , err = manager .Transform ("nonexistent" , json , "" )
132+ if err != nil {
133+ fmt .Printf ("Transformation error: %v\n " , err )
134+ }
135+
136+ fmt .Println ("\n === Architecture Benefits Demonstrated ===" )
137+ fmt .Println ("✓ Backward Compatibility: Original API works unchanged" )
138+ fmt .Println ("✓ Singleton Pattern: Configuration management" )
139+ fmt .Println ("✓ Factory Pattern: Parser and transformer creation" )
140+ fmt .Println ("✓ Strategy Pattern: Different transformation types" )
141+ fmt .Println ("✓ Decorator Pattern: Transformation chaining" )
142+ fmt .Println ("✓ Enhanced Error Handling: Custom error types" )
143+ fmt .Println ("✓ Interface-based Design: Better testability" )
144+ fmt .Println ("✓ Dependency Injection: Flexible component composition" )
145+ }
0 commit comments