|
definition: |
showView :: ViewGenerator
showView erdname (Entity entityName attrlist) relationships allEntities =
let manyToManyEntities = manyToMany allEntities (Entity entityName attrlist)
manyToOneEntities = manyToOne (Entity entityName attrlist) relationships
infovar = (0, "_")
evar = (1, lowerFirst entityName)
mmRelatedVars vart =
map (\ ((ename,erel), i) -> vart (i, lowerFirst $ erel ++ ename ++ "s"))
(zip manyToManyEntities [(length manyToOneEntities + 3) ..])
in viewFunction
("Supplies a view to show the details of a "++entityName++".\n")
entityName "show" 2
-- function type
(userSessionInfoType ~>
foldr CFuncType viewBlockType (
[baseType (model erdname,entityName)] ++
(map ctvar manyToOneEntities) ++ -- defaults for n:1
(map (\ (name,_) -> listType (ctvar name)) manyToManyEntities))
)
[simpleRule
( -- parameters
[CPVar infovar, CPVar evar] ++
(map (\ (name, varId) -> CPVar (varId,"related"++name))
(zip manyToOneEntities [3..])) ++
(mmRelatedVars CPVar)
)
(applyF (pre "++")
[applyF (entitiesToHtmlModule erdname,
lowerFirst entityName++"ToDetailsView")
([CVar evar] ++
map (\ (name, varId) -> CVar (varId,"related"++name))
(zip manyToOneEntities [3..]) ++
mmRelatedVars CVar
),
list2ac [applyF hrefButtonName
[applyF (spiceyModule,"listRoute") [CVar evar],
list2ac [applyF (html "htxt")
[string2ac ("To " ++ entityName ++ " list")]]]]
]
)]
|
|
demand: |
argument 2 |
|
deterministic: |
deterministic operation |
|
documentation: |
generate view for showing entities |
|
failfree: |
<FAILING> |
|
indeterministic: |
referentially transparent operation |
|
infix: |
no fixity defined |
|
iotype: |
{(_,{Entity},_,_) |-> _}
|
|
name: |
showView |
|
precedence: |
no precedence defined |
|
result-values: |
_ |
|
signature: |
String -> Database.ERD.Entity -> [Database.ERD.Relationship] -> [Database.ERD.Entity] -> AbstractCurry.Types.CFuncDecl |
|
solution-complete: |
operation might suspend on free variables |
|
terminating: |
possibly non-terminating |
|
totally-defined: |
possibly non-reducible on same data term |