packages feed

hydra-0.15.0: src/main/haskell/Hydra/Demos/Genpg/GenerateJava.hs

-- | Java code generation for the GenPG demo.
--
-- This module provides functions to generate all Java modules needed for
-- the GenPG demo, including:
--   - hydra.pg.model, hydra.pg.mapping
--   - hydra.pg.graphson.* (coder, construct, syntax, utils)
--   - hydra.encode.pg.*, hydra.decode.pg.*
--   - hydra.demos.genpg.transform
--   - hydra.demos.genpg.sales (sales database/graph schemas and mapping)
--   - hydra.demos.genpg.health (health database/graph schemas and mapping)
--
-- Usage from GHCI:
--   > import Hydra.Demos.GenPG.GenerateJava
--   > generateJavaModules

module Hydra.Demos.GenPG.GenerateJava where

import Hydra.ExtGeneration
import Hydra.Sources.All (kernelModules)
import Hydra.Sources.Ext (hydraExtModules, genpgModules)
import Hydra.Demos.GenPG.Modules (salesModule, healthModule)
import System.Directory (createDirectoryIfMissing)
import System.IO (hFlush, stdout)


-- | Generate all Java modules for the GenPG demo.
--
-- This generates to demos/src/main/java:
--   - hydra.pg.* modules
--   - hydra.demos.genpg.transform
--   - hydra.demos.genpg.sales
--   - hydra.demos.genpg.health
generateJavaModules :: IO ()
generateJavaModules = do
  let outputDir = "../../demos/src/main/java"
  createDirectoryIfMissing True outputDir

  putStrLn "=== Generate Java GenPG Modules ==="
  putStrLn ""
  putStrLn $ "Output directory: " ++ outputDir
  putStrLn ""
  putStrLn "Generating modules:"
  putStrLn "  - hydra.pg.model"
  putStrLn "  - hydra.pg.mapping"
  putStrLn "  - hydra.pg.graphson.* (coder, construct, syntax, utils)"
  putStrLn "  - hydra.encode.pg.*, hydra.decode.pg.*"
  putStrLn "  - hydra.demos.genpg.transform"
  putStrLn "  - hydra.demos.genpg.sales"
  putStrLn "  - hydra.demos.genpg.health"
  putStrLn ""
  hFlush stdout

  -- Universe includes kernel and hydra-ext modules for dependency resolution
  -- We generate genpgModules plus the sales and health modules
  let universeModules = kernelModules ++ hydraExtModules ++ [salesModule, healthModule]
  let modulesToGenerate = genpgModules ++ [salesModule, healthModule]
  writeJava outputDir universeModules modulesToGenerate

  putStrLn ""
  putStrLn "=== Done! ==="