1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
module Spicey.Scaffolding where
import AbstractCurry.Types
import AbstractCurry.Build
import AbstractCurry.Pretty hiding(showCProg)
import Database.ERD
import FilePath ( (</>) )
import IO
import System(system)
import ERD2Curry ( erd2curryWithDBandERD )
import Database.ERD.Goodies
import Spicey.ControllerGeneration
import Spicey.EntitiesToHtmlGeneration
import Spicey.GenerationHelper
import Spicey.RouteGeneration
import Spicey.Transformation
import Spicey.ViewGeneration
showCProg :: CurryProg -> String
showCProg = prettyCurryProg (setOnDemandQualification [] defaultOptions)
getRelationships :: ERD -> [Relationship]
getRelationships (ERD _ _ relationships) = relationships
getEntities :: ERD -> [Entity]
getEntities (ERD _ entities _) = entities
createViews :: String -> ERD -> String -> String -> IO ()
createViews _ (ERD name entities relationship) path _ =
mapIO_ (saveView name (getEntities erdt) (getRelationships erdt))
(filter (not . Spicey.GenerationHelper.isGenerated) (getEntities erdt))
where
erdt = transform (ERD name entities relationship)
saveView :: String -> [Entity] -> [Relationship] -> Entity -> IO ()
saveView erdname allEntities relationships (Entity ename attrlist) = do
putStrLn ("Saving view operations in 'View."++ename++".curry'...")
writeFile (path </> ename++".curry")
(showCProg (generateViewsForEntity erdname allEntities
(Entity ename attrlist) relationships))
createControllers :: String -> ERD -> String -> String -> IO ()
createControllers _ (ERD name entities relationship) path _ = do
mapIO_ (saveController name (getEntities erdt) (getRelationships erdt))
(filter (not . Spicey.GenerationHelper.isGenerated) (getEntities erdt))
putStrLn "Generating default controller authorization 'AuthorizedControllers.curry'..."
writeFile (path </> "DefaultController.curry")
(showCProg (generateDefaultController name entities))
writeFile (path </> "AuthorizedControllers.curry")
(showCProg (generateAuthorizations name entities))
where
erdt = transform (ERD name entities relationship)
saveController :: String -> [Entity] -> [Relationship] -> Entity -> IO ()
saveController erdname allEntities relationships (Entity ename attrlist) = do
putStrLn ("Saving controllers in 'Controller."++ename++".curry'...")
writeFile (path </> ename++".curry")
(showCProg (generateControllersForEntity erdname allEntities
(Entity ename attrlist) relationships))
createHtmlHelpers :: String -> ERD -> String -> String -> IO ()
createHtmlHelpers _ (ERD name entities relationship) path _ =
saveToHtml name (getEntities erdt) (getRelationships erdt)
where
erdt = transform (ERD name entities relationship)
saveToHtml :: String -> [Entity] -> [Relationship] -> IO ()
saveToHtml erdname allEntities relationships = do
putStrLn $ "Saving 'View."++entitiesToHtmlModule erdname++".curry'..."
fileh <- openFile (path </> erdname++"EntitiesToHtml.curry") WriteMode
hPutStr fileh (showCProg (generateToHtml erdname allEntities relationships))
hClose fileh
createModels :: String -> ERD -> String -> String -> IO ()
createModels term_path erd path db_path = do
let dbfile = if null db_path then erdName erd ++ ".db"
else db_path
erd2curryWithDBandERD dbfile term_path
let orgerdfile = erdName erd ++ "_ERD.term"
transerdfile = erdName erd ++ "_ERDT.term"
curryfile = erdName erd ++ ".curry"
system $ unwords ["mv", transerdfile, curryfile, "ERDGeneric.curry", path]
system $ unwords ["cp", term_path, path </> orgerdfile]
done
createRoutes :: String -> ERD -> String -> String -> IO ()
createRoutes _ erd path _ = do
putStrLn $ "Saving '"++mappingModuleName++".curry'..."
mmfileh <- openFile (path </> "ControllerMapping.curry") WriteMode
hPutStr mmfileh (showCProg (generateRoutesForERD erd))
hClose mmfileh
putStrLn $ "Saving '"++dataModuleName++".curry'..."
dmfileh <- openFile (path </> "RoutesData.curry") WriteMode
hPutStr dmfileh (showCProg (generateStartpointDataForERD erd))
hClose dmfileh
|