adl-support.utils
Application Description Language support - utility functions.
*locale*
dynamic
The locale for which files will be generated.
*output-path*
dynamic
The path to which generated files will be written.
*verbosity*
dynamic
The verbosity of output from the generator.
all-properties
macro
(all-properties entity)
Return all properties of this `entity` (including key properties).
attributes
(attributes element)
(attributes element predicate)
Return the attributes of this `element`; if `predicate` is passed, return only those
attributes satisfying the predicate.
base-type
(base-type property application)
capitalise
(capitalise s)
Return a string like `s` but with each token capitalised.
child
(child element predicate)
Return the first child of this `element` satisfying this `predicate`.
child-with-tag
(child-with-tag element tag)
(child-with-tag element tag predicate)
Return the first child of this `element` which has this `tag`;
if `element` is `nil`, return `nil`. If `predicate` is supplied,
return only the first child with the specified `tag` which satisfies
the `predicate`.
children
(children element)
(children element predicate)
Return the children of this `element`; if `predicate` is passed, return only those
children satisfying the predicate.
children-with-tag
(children-with-tag element tag)
(children-with-tag element tag predicate)
Return all children of this `element` which have this `tag`;
if `element` is `nil`, return `nil`. If `predicate` is supplied,
return only those children with the specified `tag` which satisfy
the `predicate`.
column-name
(column-name property)
Return, as a string, the name for the column which represents this `property`.
descendant-with-tag
(descendant-with-tag element tag)
(descendant-with-tag element tag predicate)
Return the first descendant of this `element`, recursively, which has this `tag`.
If `predicate` is specified, return the first also satisfying this `predicate`.
descendants-with-tag
(descendants-with-tag element tag)
(descendants-with-tag element tag predicate)
Return all descendants of this `element`, recursively, which have this `tag`.
If `predicate` is specified, return only those also satisfying this `predicate`.
distinct-properties
(distinct-properties entity)
editor-name
(editor-name entity application)
Return the path-part of the editor form for this `entity`. Note:
assumes the editor form is the first form listed for the entity.
element?
(element? o)
True if `o` is a Clojure representation of an XML element.
entity-for-property
(entity-for-property property application)
If this `property` references an entity, return that entity from this `application`
entity?
(entity? x)
Return true if `x` is an ADL entity.
find-permissions
(find-permissions & elements)
Return appropriate the permissions of the first of these `elements` which
has permissions.
has-non-key-properties?
(has-non-key-properties? entity)
has-primary-key?
(has-primary-key? entity)
insertable-key-properties
macro
(insertable-key-properties entity)
insertable-properties
macro
(insertable-properties entity)
Return all the properties of this `entity` (including key properties) into
which user-supplied data can be inserted
insertable?
(insertable? property)
Return `true` it the value of this `property` may be set from user-supplied data.
is-quotable-type?
(is-quotable-type? property application)
True if the value for this field should be quoted.
key-names
(key-names entity)
(key-names entity as-keywords?)
key-properties
macro
(key-properties entity)
link-table-name
(link-table-name e1 e2)
(link-table-name property e1 e2)
Canonical name of a link table between entity `e1` and entity `e2`. However, there
may be different links between the same two tables with different semantics; if
`property` is specified, and if more than one property in `e1` links to `e2`, generate
a more specific link name.
link-table?
(link-table? entity)
Return true if this `entity` represents a link table.
path-part
(path-part form entity application)
Return the URL path part for this `form` of this `entity` within this `application`.
Note that `form` may be a Clojure XML representation of a `form`, `list` or `page`
ADL element, or may be one of the keywords `:form`, `:list`, `:page` in which case the
first child of the `entity` of the specified type will be used.
permission-groups
(permission-groups permissions predicate)
Return a list of names of groups to which this `predicate` is true of
some permission taken from these `permissions`, else nil.
pretty-name
(pretty-name element)
Return a version of the name of this `element` (entity, field,
form, list, page, property) suitable for use in text visible to the user.
prompt
(prompt field-or-property form entity application)
Return an appropriate prompt for the given `field-or-property` taken from this
`form` of this `entity` of this `application`, in the context of the current
binding of `*locale*`. TODO: something more sophisticated about i18n
properties
macro
(properties entity)
Return all the properties of this `entity`.
property-for-field
(property-for-field field entity)
Return the property within this `entity` which matches this `field`.
property?
(property? o)
True if `o` is a property.
required-properties
(required-properties entity)
Return the properties of this `entity` which are required and are not
system generated.
safe-name
(safe-name o)
(safe-name o convention)
Return a safe name for the object `o`, given the specified `convention`.
`o` is expected to be either a string or an element. Recognised values for
`convention` are: #{:c :c-sharp :java :sql}
singularise
(singularise string)
Attempt to construct an idiomatic English-language singular of this string.
sort-by-name
(sort-by-name elements)
Sort these `elements` by their `:name` attribute.
system-generated?
(system-generated? property)
True if the value of the `property` is system generated, and
should not be set by the user.
type-for-defined
(type-for-defined property application)
typedef
(typedef property application)
If this `property` is of type `defined`, return its type definition from
this `application`, else nil.
unique-link?
(unique-link? e1 e2)
True if there is exactly one link between entities `e1` and `e2`.
user-distinct-properties
(user-distinct-properties entity)
Return the properties of this `entity` which are user distinct
user-distinct-property-names
(user-distinct-property-names entity)
Return, as a set, the names of properties which are user distinct
visible-to
(visible-to permissions)
Return a list of names of groups to which are granted read access,
given these `permissions`, else nil.
volatility
(volatility entity)
Return the cache ttl in seconds for records of this `entity`.
wrap-lines
(wrap-lines width text)
(wrap-lines text)
Wrap lines in this `text` to this `width`; return a list of lines.
writeable-by
(writeable-by permissions)
(writeable-by permissions has-value?)
Return a list of names of groups to which are granted write access,
given these `permissions`, else nil.
TODO: TOTHINKABOUT: properties are also writeable by `insert` and `noedit`, but only if the
current value is nil.